Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
110
Other Decks in Technology
See All in Technology
AI-DLCを現場にインストールしてみた:プロトタイプ開発で分かったこと・やめたこと
recruitengineers
PRO
2
130
Python 3.14 Overview
lycorptech_jp
PRO
1
110
生成AIでテスト設計はどこまでできる? 「テスト粒度」を操るテーラリング術
shota_kusaba
0
770
打 造 A I 驅 動 的 G i t H u b ⾃ 動 化 ⼯ 作 流 程
appleboy
0
340
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
1
770
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
280
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
OCI Oracle Database Services新機能アップデート(2025/09-2025/11)
oracle4engineer
PRO
1
190
「図面」から「法則」へ 〜メタ視点で読み解く現代のソフトウェアアーキテクチャ〜
scova0731
0
160
文字列の並び順 / Unicode Collation
tmtms
3
590
生成AI時代におけるグローバル戦略思考
taka_aki
0
190
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
450
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Docker and Python
trallard
47
3.7k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Optimizing for Happiness
mojombo
379
70k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Typedesign – Prime Four
hannesfritz
42
2.9k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
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