-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhistory.pandoc
120 lines (100 loc) · 10.1 KB
/
history.pandoc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<div style="float:left;width:100%;">
<a href='http://lambdacube3d.com'>
<img src='/lambdacube-logo.svg' width="14%" style="float:left;margin: 0 3% 4% 0"/>
</a>
LambdaCube 3D
=============
<a href='http://lambdacube3d.com'>lambdacube3d.com</a>
</div>
A Little History
================
The LambdaCube adventure started in the beginning of 2009, when Csaba decided to create an Ogre3D compatible engine in Haskell.
At this time, Gergely was a postgraduate student at BME (Technical University of Budapest) doing research aimed at applying
functional programming in various areas -- interactive applications and embedded systems --, and he ended up mentoring Csaba over
the years thanks to their overlap in interests.
Originally Csaba intended the engine to act as a drop-in replacement for Ogre3D, including the ability to read and display all the
existing assets without the need for conversion. The first incarnation of LambdaCube was therefore a traditional rendering engine
based on a hierarchical scene graph, offering an essentially C-style imperative API. Around this time we also submitted it to the
Jane Street Summer Project program and it ended up as a finalist.
Afterwards, the project went dormant for nearly two years. We did some work under the hood, but only very sporadically as life
would deliver its distractions during this period. In mid-2011 we finally released a new version of the engine whose main
contribution was defining an actual public API. This required a major clean-up job, but in hindsight the actual improvements were
really minor. We basically wrapped all the operations of the engine in an extra monadic layer called LCM (guess what it stands
for!), which took care of resource management under the hood. This was also the moment where we switched to the raw OpenGL
bindings.
As the [announcement](http://just-bottom.blogspot.fi/2011/06/renewed-lambdacube-bullet-bindings-and.html) for the above release
stated, at this point we realised that the direction we had been pursuing was really a dead-end. Trying to shoehorn an imperative
API into a purely functional language felt like a constrant struggle against the elements. We went back to the drawing board and
came up with a different plan: let's take inspiration from [GPipe](https://wiki.haskell.org/GPipe) and create a purely functional
model of the rendering pipeline. We set the goal of creating an independent DSL, but starting to evolve it as a Haskell EDSL at
first.
Unfortunately, progress had to slow down due to the team becoming physically separate, as Gergely moved to Finland and became a
game developer shortly after the announcement. It took another year before we would reveal the first public version of the new
library in the summer of 2012. We also started the [LambdaCube3D blog](https://lambdacube3d.wordpress.com/).
The LambdaCube language was designed to be feature complete and safe by construction from the beginning. We deviated from GPipe's
design in a number of ways to achieve this, e.g. by introducing explicit contexts for various rendering phases or defining shaders
as explicit functions instead of mapping over streams. We also leverage the type system to encode the constraints of shader
languages. As an important design decision, we clearly separate data (geometry) from logic (pipeline), which goes against the
long-standing tradition of coupling meshes with materials, but it allows us to describe complex effects and their compositions
with surface materials in a modular manner, and makes it easier to implement hot-swapping both for assets and pipelines.
In 2013 we introduced the LambdaCube Intermediate Representation (IR), which was the next logical step on the path to the
independent DSL. The IR allows us to separate the frontend and the backend, and ultimately compile a single pipeline description
to several platforms.
Work on the actual DSL started in 2014. This was the time when Péter joined the team, first working on our beloved Stunts
example, then moving on to the compiler project itself. The last months preceding the big tour in 2015 were spent building the
online editing environment.
LambdaCube 3D Tour 2015
=======================
In 2015 we went on a tour around Europe presenting LambdaCube 3D. Our main motivation was to collect feedback from potential LambdaCube 3D users.
Destinations
------------
City Date Organisation + event link
------------- ------------------------------- ---------------------------------
Budapest Monday, May 20, 7:00 PM [Budapest Haskell User Group](http://www.meetup.com/Bp-HUG/events/222319555/)
Munich Wednesday, May 27, 7:00 PM [Munich-Lambda](http://www.meetup.com/Munich-Lambda/events/221749406/)
Zurich May 29 - May 31 [ZuriHack 2015](https://wiki.haskell.org/ZuriHac2015) -- [Projects](https://wiki.haskell.org/ZuriHac2015/Projects)
Paris Tuesday, June 2, 7:00 PM [Functional Programmers Paris](http://www.meetup.com/Functional-Progammers-Paris/events/221724469/)
London Friday, June 5, 6:30 PM [London Haskell](http://www.meetup.com/London-Haskell/events/222368229/)
Cambridge Wednesday, June 10, 7:00 PM [Cambridge NonDysFunctional Programmers](http://www.meetup.com/Cambridge-NonDysFunctional-Programmers/events/222413312/)
Nottingham Friday, June 12, 7:00 PM [CompSoc Nottingham](https://www.facebook.com/events/735513443226729/)
London (2) Wednesday, June 17, 7:00 PM [Mobile and Games Dev](http://www.meetup.com/mobiledev/events/222379529/)
Amsterdam Saturday, June 20, 7:00 PM [FP AMS](http://www.meetup.com/fp-ams/events/222894644/)
Berlin Tuesday, June 23, 7:30 PM [Berlin Haskell Users Group](http://www.meetup.com/berlinhug/events/223075325/)
Copenhagen Tuesday, June 30, 6:00 PM [Copenhagen Tech Polyglot Meetup](http://www.meetup.com/Copenhagen-Tech-Polyglots/events/223227036/)
Gothenburg Thursday, July 2, 7:00 PM [Got.λ - Göteborg Functional Programming Group](http://www.meetup.com/got-lambda/events/223059286/)
Helsinki Tuesday, July 7, 6:00 PM [Helsinki Haskell Users Group](http://www.meetup.com/Helsinki-Haskell-Users-Group/events/223656510/)
------------- ------------------------------- ---------------------------------
<div align='center'>
<iframe src="https://www.google.com/maps/embed?pb=!1m124!1m12!1m3!1d19918281.37938911!2d-5.6075612418443175!3d52.45322445154186!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!4m109!3e6!4m5!1s0x4741c334d1d4cfc9%3A0x400c4290c1e1160!2sBudapest%2C+Hungary!3m2!1d47.497912!2d19.040235!4m5!1s0x479e75f9a38c5fd9%3A0x10cb84a7db1987d!2sMunich%2C+Germany!3m2!1d48.1351253!2d11.5819806!4m5!1s0x47900b9749bea219%3A0xe66e8df1e71fdc03!2sZurich%2C+Switzerland!3m2!1d47.3686498!2d8.539182499999999!4m5!1s0x47e66e1f06e2b70f%3A0x40b82c3688c9460!2sParis%2C+France!3m2!1d48.856614!2d2.3522219!4m5!1s0x47d8a00baf21de75%3A0x52963a5addd52a99!2sLondon%2C+UK!3m2!1d51.5073509!2d-0.1277583!4m5!1s0x47d8774ed42712a9%3A0x21ca80abf36db5bb!2sUniversity+of+Cambridge%2C+The+Old+Schools%2C+Trinity+Lane%2C+Cambridge+CB2+1TN%2C+United+Kingdom!3m2!1d52.2042666!2d0.1149085!4m5!1s0x487832d2390779cd%3A0x108063201919db15!2sNottingham%2C+UK!3m2!1d52.954783199999994!2d-1.1581086!4m5!1s0x47d8a00baf21de75%3A0x52963a5addd52a99!2sLondon%2C+UK!3m2!1d51.5073509!2d-0.1277583!4m5!1s0x47c63fb5949a7755%3A0x6600fd4cb7c0af8d!2sAmsterdam%2C+Netherlands!3m2!1d52.370215699999996!2d4.8951679!4m5!1s0x47c7ab5ede805457%3A0x5a05400d519f4782!2sWageningen%2C+Netherlands!3m2!1d51.969186799999996!2d5.6653948!4m5!1s0x47a84e373f035901%3A0x42120465b5e3b70!2sBerlin%2C+Germany!3m2!1d52.520006599999995!2d13.404954!4m5!1s0x4652533c5c803d23%3A0x4dd7edde69467b8!2sCopenhagen%2C+Denmark!3m2!1d55.676096799999996!2d12.568337099999999!4m5!1s0x464f8e67966c073f%3A0x4019078290e7c40!2sGothenburg%2C+Sweden!3m2!1d57.70887!2d11.97456!4m5!1s0x465f763119640bcb%3A0xa80d27d3679d7766!2sStockholm%2C+Sweden!3m2!1d59.329323499999994!2d18.0685808!4m5!1s0x46920bc796210691%3A0xcd4ebd843be2f763!2sHelsinki%2C+Finland!3m2!1d60.1733244!2d24.941024799999997!4m5!1s0x46929499df5616bf%3A0x400b36d18fc6270!2sTallinn%2C+Estonia!3m2!1d59.436960799999994!2d24.7535746!4m5!1s0x471644c0354e18d1%3A0xb46bb6b576478abf!2zS3Jha8OzdywgUG9sYW5k!3m2!1d50.064650099999994!2d19.9449799!4m5!1s0x4741c334d1d4cfc9%3A0x400c4290c1e1160!2sBudapest%2C+Hungary!3m2!1d47.497912!2d19.040235!5e0!3m2!1sen!2sus!4v1437128689776" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
Development history
===================
date feature
--------------- ---------------------------------------------------------------
2016.01.18. Improved quake renderer: support for game models and character animations
2016.01.03. LambdaCube 3D Docker image for development and Travis CI
2015.12.30. Roadmap for the next 6 months
2015.12.30. Continuous integration with Travis CI
2015.12.19. Switch to new compiler (lots of improvements; faster & better)
2015.10.22. C++ backend for OpenGL ES 2.0
2015.10.04. Fast reducer prototype
2015.09.19. Data definition language which supports Haskell, PureScript and C++
2015.09.17. Dependent type inference prototype
2015.09.02. Pattern match compilation
2015.06.07. Geometry can be defined in LambdaCube 3D now
2015.06.04. Texture support
2015.05.31. New language features: list comprehension, dot-dot expression
2015.05.29. New language feature: export lists
2015.05.19. Initial editor with error highlight, type popups, auto compilation
2015.05.17. WebGL backend in PureScript
2015.05.16. New language features: operator precedences; swizzling
2015.05.12. New language feature: first version of type classes
2015.04.29. New language feature: type-level literals
2015.04.28. New language features: type arguments; first version of GADTs
2015.04.13. OpenGL 3.3 backend in Haskell
2015.04.10. New language feature: support row polymorphism
2015.04.04. OpenGL constraints modelled with type families work in the DSL
2015.02.25. Use System-F as core language
2015.02.14. First working example in DSL: rotating cube
2015.02.12. First implementation of compositional typing
--------------- ---------------------------------------------------------------