SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
KernelF
Turku Centre for Computer Science
Mikhail Barash
Åbo Akademi Finland
a functional core
@mikhail_barash
for DSLs
Domain-Specific
Languages
1997
John, CEO publishing company
left right
top bottom
1
page enumeration
margins
single page
range
open interval
20..30
40-
measurement units
mm cm inches
1999
Hi,
We've just got new order, diary No: 1999/3456/32-A.
It's books, covers 250g/m2.
Left: 30 mm
Top: 15 mm
Right: 20 mm
Bottom: 1 in
Thanks,
secretary typesetter
some structure
2000
Jane, developer
typesetter developer
2001
start marker
end marker
row: start.row + 1
col: start.col + 6
row: start.row + 4
col: start.col + 8
error messages
typesetter
2002
1,2,20-30,40-
implemented “manually”error messages
2003
error messages
typesetter
developer
2007
typesetter
developer
cryptic error messages
DSL
without tailored IDE
will not
be used
2010s
Language workbenches
requires parsingtextual DSL
automates definition of languageslanguage workbench
implementing IDE is tedious
vital for adoption and success of languageIDE
automates creation of IDEs for languages
IDEA-level custom IDE
rich notation
custom auto complete
intentions (quick fixes)
domain-specific error messages
key representation of program abstract syntax tree (AST)
can be projected into different representations
text diagrams tables forms
textual form of code only meant for the programmer
but it is unambiguous
can look ambiguous
no parsing needed
http://mbeddr.com
Projectional editing How does MPS work?
“variable declaration”
expression
Embedding Expressions Language
into Page Margins Language
Pages Margins DSL with embedded expressions language
”variable declaration”
expression
enabling expressions into already defined Page Margins DSL
Embedding languages
embedding not in the sense “embedded DSL”
“internal DSL”
Scala
XML
Lang A
Lang B
neither A nor B change
should work even with conflicting syntaxes
non-invasive embedding
KernelF “expressions language”
Markus Voelter
Overview of KernelF
primitive types
arithmetical and comparison operations
higher-order functions
number
option types
attempt types
null values
exception handling
static types
user-defined types tuples
functional type inference
Boolean string
enum record
+ - * / == != > < >= <=
no generics
no algebraic types
built-in collections are generic
not designed for building abstractions abstractions – in host DSL
keyword-rich
many first-class constructs
enum with data all immutable
natural notation for mathematical expressions
Excel-style spreadsheet
within code
Number types
int float
too much focused on need of programmers
business domain doesn’t find them useful
no usual types
numbers with range and precision
number[10|20]{2}
number[0|inf]
number[-inf|inf]{0}
positive integer
integer, unlimited range
decimal with 2 decimal places, value between 10 and 20
number{2}
number[2.2|3.8] range as specified, precision derived
decimal with 2 decimal places, unlimited range
Type tags
additional information attached to a typetag checked by type system
display(airportCode : string)
require only capitalized strings
display(airportCode : string<capitalized>)
<!tag>unary tags doesn’t have the taghas the tag unspecified
n-ary tags set of ordered values easy normal hard
val simpleText : string<easy> = “I go to school.”
val normalText : string<normal> = “This is an abstract painting.”
val complexText : string<hard> = “We semi-classically quantize circular strings.”
<tag>
fun sendToProfessor(text: string<hard->)
fun publishInTwitter(text: string<easy+>)
fun printOnTShirt(text: string<normal>)
hard, normal, easy
easy, normal, hard
toAllUpper(s : string) : string<capitalized>
Option types
handle null values in a typesafe way
val x : option<number> =
if something
then 1
else none
a term in an expression evaluates to none the whole expression is none⇒	
test whether an option does contain a value isSome(x)
Attempt types error handling
type system support for error handling
base type
attempt type
error literals
attempt< baseType | err1, err2, ..., errN >
fun getWeather(city: string): attempt<number[-40|40] | timeout, notFound> =
if ... then getTemp
else if ... then error(timeout)
else error(notFound)
val displayDegrees : string =
try getWeather(“Helsinki”) => val + “ degrees”
error<timeout> => “Timeout”
error<notFound> => “Not found”
“payload”
to be handled by calling code
via metaprogramming
“Flexible” language
adding new first-class constructs
removing constructs
exchangeable primitive types
overriding syntax
new syntax for existing language constructs
replace primitive types with types from the domain
LISP extensibleRacket parser-based
extend the language, but not the IDE
syntactic style difficult for non-programmers only textual languages
language workbench
Natural language function calls
@syntax{ accelerate to @[to] with @[at] }
car.accelerate to 10 with 2
car.accelerate(10, 2)
ext fun accelerate (this: Car, to: int, at: int) = ...
also appears in autocomplete menu
positional arguments less easily perceived by business users
Stateful language effect tracking
expressions don’t have side effects
results of function calls can be cached
KernelF can be extended to support expressions with side effects
which functions can be cached?
effects read write idempotence
Stateful language boxes
immutable data can’t change a value after it’s been created
invent new name for new value
boxes do not require mutable version of all immutable data structures
immutable
its contents can change
box
val counter: box<int> = box(0)
fun increase() {
counter.update(counter.val + 1)
}
read effectmodify effect
counter.update(it + 1)
current content of the box
val a = list(1, 2, 3)
val b = a.plus(4)

Contenu connexe

Tendances

C++ PROGRAMMING BASICS
C++ PROGRAMMING BASICSC++ PROGRAMMING BASICS
C++ PROGRAMMING BASICS
Aami Kakakhel
 

Tendances (10)

C++ programming program design including data structures
C++ programming program design including data structures C++ programming program design including data structures
C++ programming program design including data structures
 
C++ PROGRAMMING BASICS
C++ PROGRAMMING BASICSC++ PROGRAMMING BASICS
C++ PROGRAMMING BASICS
 
21csharp
21csharp21csharp
21csharp
 
Basics of c++
Basics of c++Basics of c++
Basics of c++
 
Chap 01[1]
Chap 01[1]Chap 01[1]
Chap 01[1]
 
C Programming Training In Ambala ! BATRA COMPUTER CENTRE
C Programming Training In Ambala ! BATRA COMPUTER CENTREC Programming Training In Ambala ! BATRA COMPUTER CENTRE
C Programming Training In Ambala ! BATRA COMPUTER CENTRE
 
Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.
 
Computer Organization - Programming the basic computer : Machine Language, As...
Computer Organization - Programming the basic computer : Machine Language, As...Computer Organization - Programming the basic computer : Machine Language, As...
Computer Organization - Programming the basic computer : Machine Language, As...
 
Basics of c++ Programming Language
Basics of c++ Programming LanguageBasics of c++ Programming Language
Basics of c++ Programming Language
 
C language industrial training report
C language industrial training reportC language industrial training report
C language industrial training report
 

Similaire à KernelF: a functional core for domain-specific languages in JetBrains MPS

Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)
Vitaly Baum
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
Sang Don Kim
 
Computer architecture is made up of two main components the Instruct.docx
Computer architecture is made up of two main components the Instruct.docxComputer architecture is made up of two main components the Instruct.docx
Computer architecture is made up of two main components the Instruct.docx
brownliecarmella
 

Similaire à KernelF: a functional core for domain-specific languages in JetBrains MPS (20)

Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
 
gayathri.p.pptx
gayathri.p.pptxgayathri.p.pptx
gayathri.p.pptx
 
Scripting in InduSoft Web Studio
Scripting in InduSoft Web StudioScripting in InduSoft Web Studio
Scripting in InduSoft Web Studio
 
Unit 1 c - all topics
Unit 1   c - all topicsUnit 1   c - all topics
Unit 1 c - all topics
 
Software Language Design & Engineering: Mobl & Spoofax
Software Language Design & Engineering: Mobl & SpoofaxSoftware Language Design & Engineering: Mobl & Spoofax
Software Language Design & Engineering: Mobl & Spoofax
 
Lecture 01 introduction to compiler
Lecture 01 introduction to compilerLecture 01 introduction to compiler
Lecture 01 introduction to compiler
 
Unit1 C
Unit1 CUnit1 C
Unit1 C
 
Unit1 C
Unit1 CUnit1 C
Unit1 C
 
C programming part2
C programming part2C programming part2
C programming part2
 
C programming part2
C programming part2C programming part2
C programming part2
 
C programming part2
C programming part2C programming part2
C programming part2
 
Practical basics on c++
Practical basics on c++Practical basics on c++
Practical basics on c++
 
Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)
 
The Ring programming language version 1.10 book - Part 7 of 212
The Ring programming language version 1.10 book - Part 7 of 212The Ring programming language version 1.10 book - Part 7 of 212
The Ring programming language version 1.10 book - Part 7 of 212
 
Architecting Domain-Specific Languages
Architecting Domain-Specific LanguagesArchitecting Domain-Specific Languages
Architecting Domain-Specific Languages
 
Compilers Design
Compilers DesignCompilers Design
Compilers Design
 
Unit 1 cd
Unit 1 cdUnit 1 cd
Unit 1 cd
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
 
Lecture 01 2017
Lecture 01 2017Lecture 01 2017
Lecture 01 2017
 
Computer architecture is made up of two main components the Instruct.docx
Computer architecture is made up of two main components the Instruct.docxComputer architecture is made up of two main components the Instruct.docx
Computer architecture is made up of two main components the Instruct.docx
 

Plus de Mikhail Barash

Plus de Mikhail Barash (20)

MODELS 2020 Tutorial on MPS - Supplementary Material 8 - TextGen
MODELS 2020 Tutorial on MPS - Supplementary Material 8 - TextGen MODELS 2020 Tutorial on MPS - Supplementary Material 8 - TextGen
MODELS 2020 Tutorial on MPS - Supplementary Material 8 - TextGen
 
MODELS 2020 Tutorial on MPS - Supplementary Material 5 - Creating concept Ent...
MODELS 2020 Tutorial on MPS - Supplementary Material 5 - Creating concept Ent...MODELS 2020 Tutorial on MPS - Supplementary Material 5 - Creating concept Ent...
MODELS 2020 Tutorial on MPS - Supplementary Material 5 - Creating concept Ent...
 
MODELS 2020 Tutorial on MPS - Supplementary Material 3 - Creating editors for...
MODELS 2020 Tutorial on MPS - Supplementary Material 3 - Creating editors for...MODELS 2020 Tutorial on MPS - Supplementary Material 3 - Creating editors for...
MODELS 2020 Tutorial on MPS - Supplementary Material 3 - Creating editors for...
 
MODELS 2020 Tutorial on MPS - Supplementary Material 1 - Creating concept Entity
MODELS 2020 Tutorial on MPS - Supplementary Material 1 - Creating concept EntityMODELS 2020 Tutorial on MPS - Supplementary Material 1 - Creating concept Entity
MODELS 2020 Tutorial on MPS - Supplementary Material 1 - Creating concept Entity
 
Towards a mnemonic classification of software languages
Towards a mnemonic classification of software languagesTowards a mnemonic classification of software languages
Towards a mnemonic classification of software languages
 
Worst practices for domain-specific modelling
Worst practices for domain-specific modellingWorst practices for domain-specific modelling
Worst practices for domain-specific modelling
 
An ABC of JetBrains MPS
An ABC of JetBrains MPSAn ABC of JetBrains MPS
An ABC of JetBrains MPS
 
Reflections on teaching JetBrains MPS within a university course
Reflections on teaching JetBrains MPS within a university courseReflections on teaching JetBrains MPS within a university course
Reflections on teaching JetBrains MPS within a university course
 
Language Workbench Language Wheel
Language Workbench Language WheelLanguage Workbench Language Wheel
Language Workbench Language Wheel
 
DSL development
DSL developmentDSL development
DSL development
 
Design concerns for concrete syntax
Design concerns for concrete syntaxDesign concerns for concrete syntax
Design concerns for concrete syntax
 
Design dimensions of DSLs
Design dimensions of DSLsDesign dimensions of DSLs
Design dimensions of DSLs
 
JetBrains MPS: Typesystem Aspect
JetBrains MPS: Typesystem AspectJetBrains MPS: Typesystem Aspect
JetBrains MPS: Typesystem Aspect
 
JetBrains MPS: Editor Aspect
JetBrains MPS: Editor AspectJetBrains MPS: Editor Aspect
JetBrains MPS: Editor Aspect
 
JetBrains MPS: Structure Aspect
JetBrains MPS: Structure AspectJetBrains MPS: Structure Aspect
JetBrains MPS: Structure Aspect
 
Projectional editing
Projectional editingProjectional editing
Projectional editing
 
Xtext: type checking and scoping
Xtext: type checking and scopingXtext: type checking and scoping
Xtext: type checking and scoping
 
Xtext: code generation
Xtext: code generationXtext: code generation
Xtext: code generation
 
Xtext: validation, quickfixes, custom formatting
Xtext: validation, quickfixes, custom formattingXtext: validation, quickfixes, custom formatting
Xtext: validation, quickfixes, custom formatting
 
Xtend Programming Language
Xtend Programming LanguageXtend Programming Language
Xtend Programming Language
 

Dernier

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Dernier (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 

KernelF: a functional core for domain-specific languages in JetBrains MPS

  • 1. KernelF Turku Centre for Computer Science Mikhail Barash Åbo Akademi Finland a functional core @mikhail_barash for DSLs
  • 3.
  • 4.
  • 5.
  • 7. John, CEO publishing company left right top bottom 1 page enumeration margins single page range open interval 20..30 40- measurement units mm cm inches
  • 8.
  • 9.
  • 10. 1999
  • 11.
  • 12. Hi, We've just got new order, diary No: 1999/3456/32-A. It's books, covers 250g/m2. Left: 30 mm Top: 15 mm Right: 20 mm Bottom: 1 in Thanks, secretary typesetter some structure
  • 13. 2000
  • 14.
  • 17. 2001
  • 18.
  • 19. start marker end marker row: start.row + 1 col: start.col + 6 row: start.row + 4 col: start.col + 8 error messages typesetter
  • 20. 2002
  • 22. 2003
  • 24.
  • 25. 2007
  • 26.
  • 29. 2010s
  • 30. Language workbenches requires parsingtextual DSL automates definition of languageslanguage workbench implementing IDE is tedious vital for adoption and success of languageIDE automates creation of IDEs for languages
  • 31. IDEA-level custom IDE rich notation custom auto complete intentions (quick fixes) domain-specific error messages
  • 32. key representation of program abstract syntax tree (AST) can be projected into different representations text diagrams tables forms textual form of code only meant for the programmer but it is unambiguous can look ambiguous no parsing needed http://mbeddr.com Projectional editing How does MPS work?
  • 34. Embedding Expressions Language into Page Margins Language
  • 35. Pages Margins DSL with embedded expressions language ”variable declaration” expression enabling expressions into already defined Page Margins DSL
  • 36. Embedding languages embedding not in the sense “embedded DSL” “internal DSL” Scala XML Lang A Lang B neither A nor B change should work even with conflicting syntaxes non-invasive embedding
  • 38. Overview of KernelF primitive types arithmetical and comparison operations higher-order functions number option types attempt types null values exception handling static types user-defined types tuples functional type inference Boolean string enum record + - * / == != > < >= <= no generics no algebraic types built-in collections are generic not designed for building abstractions abstractions – in host DSL keyword-rich many first-class constructs enum with data all immutable
  • 39. natural notation for mathematical expressions Excel-style spreadsheet within code
  • 40. Number types int float too much focused on need of programmers business domain doesn’t find them useful no usual types numbers with range and precision number[10|20]{2} number[0|inf] number[-inf|inf]{0} positive integer integer, unlimited range decimal with 2 decimal places, value between 10 and 20 number{2} number[2.2|3.8] range as specified, precision derived decimal with 2 decimal places, unlimited range
  • 41. Type tags additional information attached to a typetag checked by type system display(airportCode : string) require only capitalized strings display(airportCode : string<capitalized>) <!tag>unary tags doesn’t have the taghas the tag unspecified n-ary tags set of ordered values easy normal hard val simpleText : string<easy> = “I go to school.” val normalText : string<normal> = “This is an abstract painting.” val complexText : string<hard> = “We semi-classically quantize circular strings.” <tag> fun sendToProfessor(text: string<hard->) fun publishInTwitter(text: string<easy+>) fun printOnTShirt(text: string<normal>) hard, normal, easy easy, normal, hard toAllUpper(s : string) : string<capitalized>
  • 42. Option types handle null values in a typesafe way val x : option<number> = if something then 1 else none a term in an expression evaluates to none the whole expression is none⇒ test whether an option does contain a value isSome(x)
  • 43. Attempt types error handling type system support for error handling base type attempt type error literals attempt< baseType | err1, err2, ..., errN > fun getWeather(city: string): attempt<number[-40|40] | timeout, notFound> = if ... then getTemp else if ... then error(timeout) else error(notFound) val displayDegrees : string = try getWeather(“Helsinki”) => val + “ degrees” error<timeout> => “Timeout” error<notFound> => “Not found” “payload” to be handled by calling code
  • 44. via metaprogramming “Flexible” language adding new first-class constructs removing constructs exchangeable primitive types overriding syntax new syntax for existing language constructs replace primitive types with types from the domain LISP extensibleRacket parser-based extend the language, but not the IDE syntactic style difficult for non-programmers only textual languages language workbench
  • 45. Natural language function calls @syntax{ accelerate to @[to] with @[at] } car.accelerate to 10 with 2 car.accelerate(10, 2) ext fun accelerate (this: Car, to: int, at: int) = ... also appears in autocomplete menu positional arguments less easily perceived by business users
  • 46. Stateful language effect tracking expressions don’t have side effects results of function calls can be cached KernelF can be extended to support expressions with side effects which functions can be cached? effects read write idempotence
  • 47. Stateful language boxes immutable data can’t change a value after it’s been created invent new name for new value boxes do not require mutable version of all immutable data structures immutable its contents can change box val counter: box<int> = box(0) fun increase() { counter.update(counter.val + 1) } read effectmodify effect counter.update(it + 1) current content of the box val a = list(1, 2, 3) val b = a.plus(4)