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
35
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
54
Natural Language Checking with Program Checking Tools
renggli
1
53
The Dynamic Language is not Enough
renggli
1
51
Dynamic Language Embedding With Homogeneous Tool Support
renggli
1
120
Other Decks in Technology
See All in Technology
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
100
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
320
月間数億レコードのアクセスログ基盤を無停止・低コストでAWS移行せよ!アプリケーションエンジニアのSREチャレンジ💪
miyamu
0
830
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
350
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
170
データの整合性を保ちたいだけなんだ
shoheimitani
8
3k
AI駆動PjMの理想像 と現在地 -実践例を添えて-
masahiro_okamura
1
110
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
130
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
1.7k
GitLab Duo Agent Platform × AGENTS.md で実現するSpec-Driven Development / GitLab Duo Agent Platform × AGENTS.md
n11sh1
0
130
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
110
Thoughts on Productivity
jonyablonski
74
5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
WCS-LA-2024
lcolladotor
0
450
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
160
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
320
The Curious Case for Waylosing
cassininazir
0
230
Chasing Engaging Ingredients in Design
codingconduct
0
110
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