Presentation is loading. Please wait.

Presentation is loading. Please wait.

Vagif Abilov Playing functional Conway’s game of life.

Similar presentations


Presentation on theme: "Vagif Abilov Playing functional Conway’s game of life."— Presentation transcript:

1 Vagif Abilov Playing functional Conway’s game of life

2 About myself Mail: vagif.abilov@gmail.com Twitter: @ooobject GitHub: object BitBucket: object Blog: http://bloggingabout.net/blogs/vagif/default.aspx Articles: http://www.codeproject.comhttp://www.codeproject.com The source code for this presentation can be found at https://github.com/object/ConwayGame https://github.com/object/ConwayGame

3 Conway’s game of life Invented in 1970 by the British mathematician John Conway Zero-player game, its evolution is fully determined by its initial state The universe of the Game of Life is an infinite two- dimensional orthogonal grid of square cells, each of which is in one of two possible states, alive or dead Source: Wikipedia

4 Rules of Conway’s game of life 1.Any live cell with fewer than two live neighbours dies, as if caused by under-population. 2.Any live cell with two or three live neighbours lives on to the next generation. 3.Any live cell with more than three live neighbours dies, as if by overcrowding. 4.Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.

5 Impelemening Conway’s game How would you approach the implementation? A small quiz: what names should we introduce? Classes Class properties Class methods Structs Enums

6 What people say on Twitter “How is writing Java like writing classic Russian literature? You have to introduce 100 names before anything can happen.” @jamesiry

7 Speaking about Russian literature Nightingales, a sigh, a whisper In a shady nook And the lullaby in silver Of a lazy brook. … A short poem by Afanasy Fet (1850) 12 lines, not a single verb

8 Checking other implementations Source: http://www.codeproject.com/Articles/185208/Solving- Conway-s-Game-of-Life-using-State-Pattern

9 Implementation code metrics 5 classes (including 2 subclasses) 5 properties 5 methods 316 lines of code 64 effective lines of code (calculated using VS code metrics)

10 Cell state definition Discussion in comments about cell state definition Class (base class with 2 subclasses implementing State pattern) Enum (Dead, Alive) Boolean What would you choose?

11 Cell state choice consequence No matter what type you choose to represent cell state, you will need a cell property to hold it Having cells with different property values (Dead and Alive) encourages design where both types of cells are stored Storing cells with different states has negative impact on the scalability Moreover: it limits the solution to boards of fixed size Adding names add constraints!

12 Imperative languages lessons Extra definitions may better clarify your intentions but may also lead to increased system complexity Names are opinionated, more names – more opinions More names – more constraints Design patterns are often introduced to patch up shortcomings in the language

13 Entering functional programming Conway’s game of life is about transforming cell generations What if we focus just on functional transformations?

14 Implementation plan 1.Classical game of life 2.Multidimensional game of life 3.Concurrent game of life 4.Game of life visualization 5.Something completely different

15 Classical game of life

16 Observation It’s possible to write clean code without class hierarchies

17 Multidimensional game of life

18 Observation You don’t need to revise your code to make it generic: with type inference it just happens to you

19 Asynchronous game of life

20 Asynchronous burden Asynchronous support requires revision of API and its implementation It is common to offer two (significantly different) versions of API: one for synchronous and one for asynchronous execution Mutable nature of imperative languages require major changes if not complete rewrite of components to become thread-safe and support asynchronous or parallel execution

21 Asynchronous programming model Synchronous: –Execute (can be any verb, e.g. Read) Asynchronous: –BeginExecute (receives AsyncCallback, returns IAsyncResult) –EndExecute (receives IAsyncResult object) – method (receives IAsyncResult) File IO example: –Read –BeginRead, EndRead,

22 Benchmark results Pattern size*C# LinqF#F# AsyncF# PSeq 10**0:00.1830:00.3570:00.3200:00.570 250:00.4280:00.3150:00.1570:00.196 500:06.0340:04.0640:01.5120:01.231 1001:25.1621:06.4290:27.4280:31.270 * Pattern size N corresponds to a square N * N used to generate a pattern of N * N / 2 elements ** Pattern size 10 was used to warm up the text fixture

23 Observation Immutable data structures make it trivial to execute parts of your code asynchronously or in parallel

24 Game of life visualization

25 Observation It’s simple to send your data to external components when data are exposed via primitive types

26 Time for surprises Something completely different Living with no sense of monad

27 Song time! Living With No Sense of Monads Originally performed by Smokie with slightly different words

28 Living with no sense of monads I first met Alice in a small bookstore, "What book, - I asked, - are you looking for?" And she said: "About monads." I understood that's a key to her heart, I had no doubts that I was smart. It should be easy reading, an easy start...

29 Living with no sense of monads But I still don't get this wisdom, It's really mystic word I guess it has it's reasons, Someone gets it, but I don't. 'Cos for twenty-four years I've been trying to understand the monads.

30 Living with no sense of monads Twenty-four years Just waiting for a chance, I have to keep on reading, Maybe get a second glance, I will never get used to not understanding sense of monads

31 Living with no sense of monads Grew up together, Went to the same class, And to be honest: I was better in math Than Alice.

32 Living with no sense of monads Too old for rock-n-roll - I'm forty four, Too young for monads - still have a hope. That the day will come When I let Alice know...

33 Living with no sense of monads But I still don't get this wisdom, It's really mystic word I guess it has it's reasons, Someone gets it, but I don't. 'Cos for twenty-four years I've been trying to understand the monads. (all together): Monads! What the f*ck is monads?!

34 Living with no sense of monads Twenty-four years Just waiting for a chance, I have to keep on reading, Maybe get a second glance, I will never get used to not understanding sense of monads

35 Thank you! Mail: vagif.abilov@gmail.com Twitter: @ooobject GitHub: object BitBucket: object Blog: http://bloggingabout.net/blogs/vagif/default.aspx Articles: http://www.codeproject.comhttp://www.codeproject.com The source code for this presentation can be found at https://github.com/object/ConwayGame https://github.com/object/ConwayGame


Download ppt "Vagif Abilov Playing functional Conway’s game of life."

Similar presentations


Ads by Google