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
プロポーザルに込める段取り八分
shoheimitani
1
170
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
使いにくいの壁を突破する
sansantech
PRO
1
120
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.3k
(金融庁共催)第4回金融データ活用チャレンジ勉強会資料
takumimukaiyama
0
130
システムのアラート調査をサポートするAI Agentの紹介/Introduction to an AI Agent for System Alert Investigation
taddy_919
2
1.9k
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
410
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
今日から始めるAmazon Bedrock AgentCore
har1101
4
390
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
190
Featured
See All Featured
The browser strikes back
jonoalderson
0
360
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
Agile that works and the tools we love
rasmusluckow
331
21k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.5k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
930
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Utilizing Notion as your number one productivity tool
mfonobong
2
210
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
How GitHub (no longer) Works
holman
316
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
50
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