SlideShare a Scribd company logo
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
14000
                        16000
                                 18000
                                         1
                                             2
                                                 3
                                                            4


  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
                                                     Lint




                           LOC
14000
                        16000
                                 18000
                                               1
                                                   2
                                                       3
                                                                  4


  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
                                         ???
                                                           Lint




                           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
Internal Domain-
     Specific Languages

‣ HTML generation
‣ Javascript generation
‣ Composition definition
‣ Control flow
‣ Application configuration
14000
                        16000
                                 18000
                                               1
                                                   2
                                                       3
                                                                  4


  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
                                         ???
                                                           Lint




                           LOC
Generic (Lint)
Program Checker
Architecture
    Checker




  Generic (Lint)
Program Checker
Architecture
    Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program 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 ]
14000
                        16000
                                 18000
                                         1
                                             2
                                                 3
                                                            4


  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
                                                     Lint




                           LOC
14000
                        16000
                                 18000
                                                 1
                                                     2
                                                         3
                                                                    4


  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
                                                             Lint




                           LOC
                                         Slime
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”
Architecture
    Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program Checker
Magritte Metamodel
* description
                               Description
      Person               accessor
username                 * label
birthday       description required
                           priority
model
                                    * description
                               Description
      Person               accessor
username                 * label
birthday       description required
                           priority
model
                                    * description
                               Description
      Person               accessor
username                 * label
birthday       description required
                           priority




                              metamodel
model
                                            * description
                                       Description
      Person                       accessor
username                         * label
birthday               description required
                                   priority


               <<described by>>

                                      metamodel
meta-metamodel

    model
                                            * description
                                       Description
      Person                       accessor
username                         * label
birthday               description required
                                   priority


               <<described by>>

                                      metamodel
meta-metamodel
                                                   <<described by>>

    model
                                            * description
                                       Description
      Person                       accessor
username                         * label
birthday               description required
                                   priority


               <<described by>>

                                      metamodel
Person class>>descriptionUsername

   
   ^ StringDescription new

   
   
 
 accessor: #username;
	   	   	 	 beRequired;
	   	   	 	 default: nil;
	   	   	 	 yourself
                                                        * description
                                                   Description
                          Person               accessor
                    username                 * label
                    birthday       description required
                                               priority
Description class>>descriptionLabel

   
   ^ StringDescription new

   
   
 
 accessor: #label;

   
   
 
 label: ‘Label’;
	   	   	 	 beRequired;
	   	   	 	 yourself
                                                         * description
                                                    Description
                           Person               accessor
                     username                 * label
                     birthday       description required
                                                priority
Architecture
    Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program Checker
Architecture     Domain-Specific
    Checker        Model Checker




  Generic (Lint)   Domain-Specific
Program Checker    Program Checker
Person class>>descriptionUsername

   
   ^ StringDescription new

   
   
 
 accessor: #username;
	   	   	 	 beRequired;
	   	   	 	 default: nil;
	   	   	 	 yourself
                                                        * description
                                                   Description
                          Person               accessor
                    username                 * label
                    birthday       description required
                                               priority
Person class>>descriptionUsername

   
   ^ StringDescription new

   
   
 
 accessor: #username;

   
   
 
 label: ‘Username’;
	   	   	 	 beRequired;
	   	   	 	 default: nil;
	   	   	 	 yourself
                                                        * description
                                                   Description
                          Person               accessor
                    username                 * label
                    birthday       description required
                                               priority
Person class>>descriptionUsername
   
   
   ^ StringDescription new
   
   
   
 
 accessor: #username;
   
   
   
 
 label: ‘Username’;
   	   	   	 	 beRequired;
   	   	   	 	 default: nil;
   	   	   	 	 yourself
                                                             * description

#label is a required value
                                                        Description
                               Person               accessor
                         username                 * label
                         birthday       description required
                                                    priority
Person class>>descriptionUsername
  
   
   ^ StringDescription new
  
   
   
 
 accessor: #username;
  
   
   
 
 label: ‘Username’;
  	   	   	 	 beRequired;
  	   	   	 	 default: nil;
  	   	   	 	 yourself
                                                            * description
                                                       Description
                              Person
Invalid default value
                                                   accessor
                        username                 * label
                        birthday       description required
                                                   priority
70000 Lines of Code

   12000 Methods

    1100 Classes

300 Described Classes
70000 Lines of Code

   12000 Methods

    1100 Classes

300 Described Classes

 500 Magritte Issues
Implementation
Extends existing
Program-Checker
Parse Tree
Matching
scg.unibe.ch/research/helvetia
Declarative
Rule System
Domain-Specific
Program Checking

   Architecture     Domain-Specific
     Checker        Model Checker




   Generic (Lint)   Domain-Specific
 Program Checker    Program Checker

More Related Content

Similar to Domain-Specific Program Checking

Cloud Native SDN
Cloud Native SDNCloud Native SDN
Cloud Native SDN
Romana Project
 
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsXebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
Publicis Sapient Engineering
 
RKT
RKTRKT
.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011
Fabio Akita
 
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
DNAD
 
NPW2009 - my.opera.com scalability v2.0
NPW2009 - my.opera.com scalability v2.0NPW2009 - my.opera.com scalability v2.0
NPW2009 - my.opera.com scalability v2.0
Cosimo Streppone
 
State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012
Alexandre Morgaut
 
State of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljsState of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljs
Alexandre Morgaut
 
The Developer Conference - CloudKit, entendendo a Cloud da Apple
The Developer Conference - CloudKit, entendendo a Cloud da AppleThe Developer Conference - CloudKit, entendendo a Cloud da Apple
The Developer Conference - CloudKit, entendendo a Cloud da Apple
Rodrigo Leite
 
Cldc Hotspot Architecture
Cldc Hotspot ArchitectureCldc Hotspot Architecture
Cldc Hotspot Architecture
zdmilan
 
State of GeoServer 2012
State of GeoServer 2012State of GeoServer 2012
State of GeoServer 2012
Jody Garnett
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
John Lee
 
Rec2String
Rec2StringRec2String
Rec2String
Arnold Reuser
 
Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)
Robert Lemke
 
When Docker Engine 1.12 features unleashes software architecture
When Docker Engine 1.12 features unleashes software architectureWhen Docker Engine 1.12 features unleashes software architecture
When Docker Engine 1.12 features unleashes software architecture
Adrien Blind
 
State of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJSState of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJS
Alexandre Morgaut
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
Ariya Hidayat
 
20110709 - CM_Cocoa
20110709 - CM_Cocoa20110709 - CM_Cocoa
20110709 - CM_Cocoa
Jamie (Taka) Wang
 
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
CODE BLUE
 
Seaside - Past, Present and Future
Seaside - Past, Present and FutureSeaside - Past, Present and Future
Seaside - Past, Present and Future
Lukas Renggli
 

Similar to Domain-Specific Program Checking (20)

Cloud Native SDN
Cloud Native SDNCloud Native SDN
Cloud Native SDN
 
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-StreamsXebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
XebiCon'18 - Passage à l'échelle de mes applications Kafka-Streams
 
RKT
RKTRKT
RKT
 
.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011.NET Architects Day - DNAD 2011
.NET Architects Day - DNAD 2011
 
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
 
NPW2009 - my.opera.com scalability v2.0
NPW2009 - my.opera.com scalability v2.0NPW2009 - my.opera.com scalability v2.0
NPW2009 - my.opera.com scalability v2.0
 
State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012State of the art - server side JavaScript - web-5 2012
State of the art - server side JavaScript - web-5 2012
 
State of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljsState of the art: Server-Side JavaScript - dejeuner fulljs
State of the art: Server-Side JavaScript - dejeuner fulljs
 
The Developer Conference - CloudKit, entendendo a Cloud da Apple
The Developer Conference - CloudKit, entendendo a Cloud da AppleThe Developer Conference - CloudKit, entendendo a Cloud da Apple
The Developer Conference - CloudKit, entendendo a Cloud da Apple
 
Cldc Hotspot Architecture
Cldc Hotspot ArchitectureCldc Hotspot Architecture
Cldc Hotspot Architecture
 
State of GeoServer 2012
State of GeoServer 2012State of GeoServer 2012
State of GeoServer 2012
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
 
Rec2String
Rec2StringRec2String
Rec2String
 
Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)Getting Into FLOW3 (TYPO312CA)
Getting Into FLOW3 (TYPO312CA)
 
When Docker Engine 1.12 features unleashes software architecture
When Docker Engine 1.12 features unleashes software architectureWhen Docker Engine 1.12 features unleashes software architecture
When Docker Engine 1.12 features unleashes software architecture
 
State of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJSState of the art: server-side javaScript - NantesJS
State of the art: server-side javaScript - NantesJS
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
 
20110709 - CM_Cocoa
20110709 - CM_Cocoa20110709 - CM_Cocoa
20110709 - CM_Cocoa
 
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
[CB20] DeClang: Anti-hacking compiler by Mengyuan Wan
 
Seaside - Past, Present and Future
Seaside - Past, Present and FutureSeaside - Past, Present and Future
Seaside - Past, Present and Future
 

More from Lukas Renggli

Mastering Grammars with PetitParser
Mastering Grammars with PetitParserMastering Grammars with PetitParser
Mastering Grammars with PetitParser
Lukas Renggli
 
Natural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking ToolsNatural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking Tools
Lukas Renggli
 
The Dynamic Language is not Enough
The Dynamic Language is not EnoughThe Dynamic Language is not Enough
The Dynamic Language is not Enough
Lukas Renggli
 
Dynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool SupportDynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool Support
Lukas Renggli
 
Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software Development
Lukas Renggli
 
Dynamic grammars
Dynamic grammarsDynamic grammars
Dynamic grammars
Lukas Renggli
 
jQuery for Seaside
jQuery for SeasidejQuery for Seaside
jQuery for Seaside
Lukas Renggli
 
Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status Message
Lukas Renggli
 
Magritte Blitz
Magritte BlitzMagritte Blitz
Magritte Blitz
Lukas Renggli
 
Seaside - On not getting bogged down
Seaside - On not getting bogged downSeaside - On not getting bogged down
Seaside - On not getting bogged down
Lukas Renggli
 
Magritte
MagritteMagritte
Magritte
Lukas Renggli
 
Magritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End UsersMagritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End Users
Lukas Renggli
 
Transactional Memory for Smalltalk
Transactional Memory for SmalltalkTransactional Memory for Smalltalk
Transactional Memory for Smalltalk
Lukas Renggli
 
Seaside - Web Development As You Like It
Seaside - Web Development As You Like ItSeaside - Web Development As You Like It
Seaside - Web Development As You Like It
Lukas Renggli
 
5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside
Lukas Renggli
 

More from Lukas Renggli (15)

Mastering Grammars with PetitParser
Mastering Grammars with PetitParserMastering Grammars with PetitParser
Mastering Grammars with PetitParser
 
Natural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking ToolsNatural Language Checking with Program Checking Tools
Natural Language Checking with Program Checking Tools
 
The Dynamic Language is not Enough
The Dynamic Language is not EnoughThe Dynamic Language is not Enough
The Dynamic Language is not Enough
 
Dynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool SupportDynamic Language Embedding With Homogeneous Tool Support
Dynamic Language Embedding With Homogeneous Tool Support
 
Seaside — Agile Software Development
Seaside — Agile Software DevelopmentSeaside — Agile Software Development
Seaside — Agile Software Development
 
Dynamic grammars
Dynamic grammarsDynamic grammars
Dynamic grammars
 
jQuery for Seaside
jQuery for SeasidejQuery for Seaside
jQuery for Seaside
 
Seaside Status Message
Seaside Status MessageSeaside Status Message
Seaside Status Message
 
Magritte Blitz
Magritte BlitzMagritte Blitz
Magritte Blitz
 
Seaside - On not getting bogged down
Seaside - On not getting bogged downSeaside - On not getting bogged down
Seaside - On not getting bogged down
 
Magritte
MagritteMagritte
Magritte
 
Magritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End UsersMagritte - A Meta-Driven Approach to Empower Developers and End Users
Magritte - A Meta-Driven Approach to Empower Developers and End Users
 
Transactional Memory for Smalltalk
Transactional Memory for SmalltalkTransactional Memory for Smalltalk
Transactional Memory for Smalltalk
 
Seaside - Web Development As You Like It
Seaside - Web Development As You Like ItSeaside - Web Development As You Like It
Seaside - Web Development As You Like It
 
5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside5 Steps to Mastering the Art of Seaside
5 Steps to Mastering the Art of Seaside
 

Recently uploaded

Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
c5vrf27qcz
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Precisely
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
BibashShahi
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
Edge AI and Vision Alliance
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
saastr
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 

Recently uploaded (20)

Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 

Domain-Specific Program Checking

  • 1. Domain-Specific Program Checking Lukas Renggli, Stéphane Ducasse, Tudor Gîrba, Oscar Nierstrasz
  • 3. 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
  • 4. 14000 16000 18000 1 2 3 4 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 Lint LOC
  • 5. 14000 16000 18000 1 2 3 4 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 ??? Lint LOC
  • 6. <a href="...">Remove Task 1</a> <br /> <a href="...">Remove Task 2</a> <br /> <a href="...">Remove Task 3</a> <br />
  • 7. renderTasksOn: html tasks do: [ :task | html anchor with: 'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ]
  • 8. renderTasksOn: html tasks do: [ :task | html anchor with: 'Remove Task ' , task number; callback: [ tasks remove: task ]. html break ] Modifies collection while iterating over it
  • 9. Internal Domain- Specific Languages ‣ HTML generation ‣ Javascript generation ‣ Composition definition ‣ Control flow ‣ Application configuration
  • 10. 14000 16000 18000 1 2 3 4 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 ??? Lint LOC
  • 12. Architecture Checker Generic (Lint) Program Checker
  • 13. Architecture Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 14. 30 Domain-Specific Rules ‣ Possible Bugs ‣ Bad Style ‣ Suboptimal Code ‣ Non-Portable Code
  • 15. 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
  • 16. renderTasksOn: html tasks do: [ :task | html anchor callback: [ tasks remove: task ]; with: 'Remove Task ' , task number. html break ]
  • 17. 14000 16000 18000 1 2 3 4 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 Lint LOC
  • 18. 14000 16000 18000 1 2 3 4 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 Lint LOC Slime
  • 21. 69% developers state “Slime produces more relevant results than Lint”
  • 22. 81% developers state “Slime helped me to detect critical bugs”
  • 23.
  • 24. Architecture Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 26. * description Description Person accessor username * label birthday description required priority
  • 27. model * description Description Person accessor username * label birthday description required priority
  • 28. model * description Description Person accessor username * label birthday description required priority metamodel
  • 29. model * description Description Person accessor username * label birthday description required priority <<described by>> metamodel
  • 30. meta-metamodel model * description Description Person accessor username * label birthday description required priority <<described by>> metamodel
  • 31. meta-metamodel <<described by>> model * description Description Person accessor username * label birthday description required priority <<described by>> metamodel
  • 32. Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil; yourself * description Description Person accessor username * label birthday description required priority
  • 33. Description class>>descriptionLabel ^ StringDescription new accessor: #label; label: ‘Label’; beRequired; yourself * description Description Person accessor username * label birthday description required priority
  • 34. Architecture Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 35. Architecture Domain-Specific Checker Model Checker Generic (Lint) Domain-Specific Program Checker Program Checker
  • 36. Person class>>descriptionUsername ^ StringDescription new accessor: #username; beRequired; default: nil; yourself * description Description Person accessor username * label birthday description required priority
  • 37. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired; default: nil; yourself * description Description Person accessor username * label birthday description required priority
  • 38. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired; default: nil; yourself * description #label is a required value Description Person accessor username * label birthday description required priority
  • 39. Person class>>descriptionUsername ^ StringDescription new accessor: #username; label: ‘Username’; beRequired; default: nil; yourself * description Description Person Invalid default value accessor username * label birthday description required priority
  • 40. 70000 Lines of Code 12000 Methods 1100 Classes 300 Described Classes
  • 41. 70000 Lines of Code 12000 Methods 1100 Classes 300 Described Classes 500 Magritte Issues
  • 42.
  • 48. Domain-Specific Program Checking Architecture Domain-Specific Checker Model Checker Generic (Lint) Domain-Specific Program Checker Program Checker