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
55
Natural Language Checking with Program Checking Tools
renggli
1
54
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
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
190
今のWordPress の制作手法ってなにがあんねん?(改) / What’s the Deal with WordPress Development These Days?
tbshiki
0
400
AI実装による「レビューボトルネック」を解消する仕様駆動開発(SDD)/ ai-sdd-review-bottleneck
rakus_dev
0
110
Abuse report だけじゃない。AWS から緊急連絡が来る状況とは?昨今の攻撃や被害の事例の紹介と備えておきたい考え方について
kazzpapa3
1
580
アーキテクチャモダナイゼーションを実現する組織
satohjohn
0
550
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
5
1.2k
親子 or ペアで Mashup for the Future! しゃべって楽しむ 初手AI駆動でものづくり体験
hiroramos4
PRO
0
110
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.6k
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
560
20260311 技術SWG活動報告(デジタルアイデンティティ人材育成推進WG Ph2 活動報告会)
oidfj
0
310
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
2
280
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.8k
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Making Projects Easy
brettharned
120
6.6k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
240
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
100
What does AI have to do with Human Rights?
axbom
PRO
1
2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
The Invisible Side of Design
smashingmag
302
51k
Agile Leadership in an Agile Organization
kimpetersen
PRO
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