Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Domain-Specific Program Checking
Search
Lukas Renggli
October 04, 2011
Technology
1
33
Domain-Specific Program Checking
Lukas Renggli
October 04, 2011
Tweet
Share
More Decks by Lukas Renggli
See All by Lukas Renggli
Dynamic Grammars
renggli
1
51
Natural Language Checking with Program Checking Tools
renggli
1
49
The Dynamic Language is not Enough
renggli
1
50
Dynamic Language Embedding With Homogeneous Tool Support
renggli
1
110
Other Decks in Technology
See All in Technology
Azure AI Foundryでマルチエージェントワークフロー
seosoft
0
180
How Community Opened Global Doors
hiroramos4
PRO
1
110
MySQL5.6から8.4へ 戦いの記録
kyoshidaxx
1
200
Кто отправит outbox? Валентин Удальцов, автор канала Пых
lamodatech
0
330
ハノーバーメッセ2025座談会.pdf
iotcomjpadmin
0
160
Wasm元年
askua
0
140
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1k
Observability в PHP без боли. Олег Мифле, тимлид Altenar
lamodatech
0
340
~宇宙最速~2025年AWS Summit レポート
satodesu
1
1.8k
Node-REDのFunctionノードでMCPサーバーの実装を試してみた / Node-RED × MCP 勉強会 vol.1
you
PRO
0
110
AIエージェント最前線! Amazon Bedrock、Amazon Q、そしてMCPを使いこなそう
minorun365
PRO
13
4.9k
AIのAIによるAIのための出力評価と改善
chocoyama
2
540
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Cult of Friendly URLs
andyhume
79
6.5k
Raft: Consensus for Rubyists
vanstee
140
7k
Building Adaptive Systems
keathley
43
2.6k
Docker and Python
trallard
44
3.4k
Building an army of robots
kneath
306
45k
A designer walks into a library…
pauljervisheath
206
24k
Gamification - CAS2011
davidbonilla
81
5.3k
Building Applications with DynamoDB
mza
95
6.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
210
Practical Orchestrator
shlominoach
188
11k
Transcript
Domain-Specific Program Checking Lukas Renggli, Stéphane Ducasse, Tudor Gîrba, Oscar
Nierstrasz
Web Application Framework
14000 16000 18000 Seaside 2.6 Seaside 2.7 Seaside 2.8 Seaside
2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
1 2 3 4 Lint 14000 16000 18000 Seaside 2.6
Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
1 2 3 4 Lint ??? 14000 16000 18000 Seaside
2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
<a href="...">Remove Task 1</a> <br /> <a href="...">Remove Task 2</a>
<br /> <a href="...">Remove Task 3</a> <br />
renderTasksOn: html tasks do: [ :task | html anchor with:
'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ]
renderTasksOn: html tasks do: [ :task | html anchor with:
'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ] Modifies collection while iterating over it
‣ HTML generation ‣ Javascript generation ‣ Composition definition ‣
Control flow ‣ Application configuration Internal Domain- Specific Languages
1 2 3 4 Lint ??? 14000 16000 18000 Seaside
2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
Generic (Lint) Program Checker
Generic (Lint) Program Checker Architecture Checker
Generic (Lint) Program Checker Domain-Specific Program Checker Architecture Checker
30 Domain-Specific Rules ‣ Possible Bugs ‣ Bad Style ‣
Suboptimal Code ‣ Non-Portable Code
renderTasksOn: html tasks do: [ :task | html anchor with:
'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ] #with: has to be last message in cascade
renderTasksOn: html tasks do: [ :task | html anchor callback:
[ tasks remove: task ]; with: 'Remove Task ' , task number. html break ]
1 2 3 4 Lint 14000 16000 18000 Seaside 2.6
Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
1 2 3 4 Lint Slime 14000 16000 18000 Seaside
2.6 Seaside 2.7 Seaside 2.8 Seaside 2.8.1 Seaside 2.8.2 Seaside 2.8.3 Seaside 2.9a1 Seaside 2.9a2 Seaside 2.9a3 LOC
Designed for Framework Development
Now used for Application Development
69% developers state “Slime produces more relevant results than Lint”
81% developers state “Slime helped me to detect critical bugs”
None
Generic (Lint) Program Checker Domain-Specific Program Checker Architecture Checker
Magritte Metamodel
Person username birthday Description accessor label required priority * description
* description
Person username birthday Description accessor label required priority * description
* description model
Person username birthday Description accessor label required priority * description
* description model metamodel
Person username birthday Description accessor label required priority * description
* description model metamodel <<described by>>
Person username birthday Description accessor label required priority * description
* description model metamodel <<described by>> meta-metamodel
Person username birthday Description accessor label required priority * description
* description model metamodel <<described by>> meta-metamodel <<described by>>
Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil;
yourself Person username birthday Description accessor label required priority * description * description
Description class>>descriptionLabel ^ StringDescription new accessor: #label; label: ‘Label’; beRequired;
yourself Person username birthday Description accessor label required priority * description * description
Generic (Lint) Program Checker Domain-Specific Program Checker Architecture Checker
Generic (Lint) Program Checker Domain-Specific Program Checker Architecture Checker Domain-Specific
Model Checker
Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil;
yourself Person username birthday Description accessor label required priority * description * description
Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired;
default: nil; yourself Person username birthday Description accessor label required priority * description * description
Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired;
default: nil; yourself Person username birthday Description accessor label required priority * description * description #label is a required value
Invalid default value Person class>>descriptionUsername ^ StringDescription new accessor: #username;
label: ‘Username’; beRequired; default: nil; yourself Person username birthday Description accessor label required priority * description * description
70000 Lines of Code 1100 Classes 300 Described Classes 12000
Methods
70000 Lines of Code 1100 Classes 300 Described Classes 12000
Methods 500 Magritte Issues
None
Implementation
Extends existing Program-Checker
Parse Tree Matching
scg.unibe.ch/research/helvetia
Declarative Rule System
Generic (Lint) Program Checker Domain-Specific Program Checker Architecture Checker Domain-Specific
Model Checker Domain-Specific Program Checking