What if we could change programming languages?
by
Kolja Dummann
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
What if we could change programming languages?
Slide 2
Slide 2 text
Kolja Dummann itemis AG ! @dumdidum http://logv.ws
Slide 3
Slide 3 text
Rocket Science? Image: mentalwanderings / CC-by-sa
Slide 4
Slide 4 text
Rocket Science! Image: mentalwanderings / CC-by-sa
Slide 5
Slide 5 text
Build your own rocket software Image: Wikipedia Commons
Slide 6
Slide 6 text
Image: Wikipedia Commons
Slide 7
Slide 7 text
Image: Wikipedia Commons sensor
Slide 8
Slide 8 text
Image: Wikipedia Commons sensor self destruction
Slide 9
Slide 9 text
Image: Wikipedia Commons sensor self destruction autopilot
Slide 10
Slide 10 text
Image: Wikipedia Commons sensor self destruction autopilot sensors
Slide 11
Slide 11 text
Image: Wikipedia Commons sensor self destruction autopilot pumps sensors
Slide 12
Slide 12 text
Image: Wikipedia Commons sensor self destruction vanes autopilot pumps sensors
Slide 13
Slide 13 text
Image: Wikipedia Commons Physical Units int16 distance = …; int16 time = …; int16 speed = time / distance; sensor self destruction vanes autopilot pumps sensor
Slide 14
Slide 14 text
Image: Wikipedia Commons Physical Units int16 distance = …; int16 time = …; int16 speed = time / distance; sensor self destruction vanes autopilot pumps sensor
Slide 15
Slide 15 text
Image: Wikipedia Commons Physical Units int16/m/ distance = …; int16/s/ time = …; int16/mps/ speed = distance / time; sensor self destruction vanes autopilot pumps sensor
Slide 16
Slide 16 text
Image: Wikipedia Commons sensor self destruction vanes autopilot pumps sensor Statemachines statemachine selfdestruction initial = starting { in event update(int8 speed, int8 hight) state starting { on update [speed > 10 && hight > 0] -> flying } state flying { do { record_flightdata(); } on update [speed > 100 && hight < 42] -> kill } state kill { entry { blow_rocket(); } } }
Slide 17
Slide 17 text
Image: Wikipedia Commons Components cs interface FlightRecorder { Trackpoint* process(Trackpoint* p) pre(0) p != null pre(1) p->id != 0 pre(2) p->time != 0 s post(3) result->id != 0 } sensor self destruction vanes autopilot pumps sensor
Slide 18
Slide 18 text
Image: Wikipedia Commons Components II component AutoPilot extends nothing { requires FlightRecorder flightRecorder provides CourseProvider cp int16 cp_getCourse() <= op cp.getCourse { return 0; } } sensor self destruction vanes autopilot pumps sensor
Slide 19
Slide 19 text
Image: Wikipedia Commons Undefined Behavior sensor self destruction vanes autopilot pumps sensor
Slide 20
Slide 20 text
Image: Wikipedia Commons Undefined Behavior i *= 2 + 2 + i--; sensor self destruction vanes autopilot pumps sensor You write:
Slide 21
Slide 21 text
Image: Wikipedia Commons Undefined Behavior i *= 2 + 2 + i--; sensor self destruction vanes autopilot pumps sensor (i *= 2 + 2 + i)——; You write: GCC reads:
Slide 22
Slide 22 text
Image: Wikipedia Commons Testing testcase main { assert-equals(0) 10 == add(5, 5); assert-less(1) 20 < add(5, 10); assert(2) 30 == add(20, 10); } sensor self destruction vanes autopilot pumps sensor
Slide 23
Slide 23 text
Image: Wikipedia Commons Verification sensor self destruction vanes autopilot pumps sensor
Slide 24
Slide 24 text
How?
Slide 25
Slide 25 text
Projectional Editor
Slide 26
Slide 26 text
int i = 42 + 23;
Slide 27
Slide 27 text
int i = 42 + 23;
Slide 28
Slide 28 text
LocalVarDecl Name = i int i = 42 + 23;
Slide 29
Slide 29 text
LocalVarDecl Name = i IntType Type int i = 42 + 23;
Slide 30
Slide 30 text
LocalVarDecl Name = i IntType Type Plus Init int i = 42 + 23;
Slide 31
Slide 31 text
LocalVarDecl Name = i IntType Type Plus Init NumberLiteral Name = 42 Left int i = 42 + 23;
Slide 32
Slide 32 text
LocalVarDecl Name = i IntType Type Plus Init NumberLiteral Name = 42 Left NumberLiteral Value = 23 Right int i = 42 + 23;
Slide 33
Slide 33 text
Abstract Syntax Tree Concrete Syntax
Slide 34
Slide 34 text
Abstract Syntax Tree Concrete Syntax
Slide 35
Slide 35 text
Abstract Syntax Tree Concrete Syntax
Slide 36
Slide 36 text
Abstract Syntax Tree Concrete Syntax
Slide 37
Slide 37 text
Abstract Syntax Tree Concrete Syntax
Slide 38
Slide 38 text
Abstract Syntax Tree Concrete Syntax
Slide 39
Slide 39 text
Abstract Syntax Tree Concrete Syntax
Slide 40
Slide 40 text
Abstract Syntax Tree Concrete Syntax
Slide 41
Slide 41 text
http://mbeddr.com
Slide 42
Slide 42 text
A Open Source Collection of integrated languages for embedded software engineering
Slide 43
Slide 43 text
No content
Slide 44
Slide 44 text
Core Plain C
Slide 45
Slide 45 text
Core Plain C Ext Components Statemachines Units
Slide 46
Slide 46 text
Core Plain C Ext Components Statemachines Units CC Requirements Documentation
Slide 47
Slide 47 text
Core Plain C Ext Components Statemachines Units CC Requirements Documentation Debugger
Slide 48
Slide 48 text
Core Plain C Ext Components Statemachines Units CC Requirements Documentation Analyses Debugger
Slide 49
Slide 49 text
Code Generator Text (C) Compiler
Slide 50
Slide 50 text
Build on JetBrains MPS Open Source Language Workbench Apache 2.0 http://jetbrains.com/mps
Slide 51
Slide 51 text
Questions?