Analyzing Dart Language with Pharo: Report and early results

E
ESUGESUG
1
1
1
Analyzing Dart
Language with Pharo:
Report and early results
Nicolas Hlad, Benoit Verhaeghe, Mustapha
Derras
2
2
2
1. Industrial and Academic contexts
2. What is Dart ?
3. What is our analysis process of Dart ?
4. Conclusion
Presentation Plan
3
3
3
Berger-Levrault
• created 1463 as a printing company
• now an international software editor
• Develop administrative software for cities
administrations, industries, hospitals, etc.
• Since 2022, in collaboration with Evref
• Compagnies with divers technologies :
5
5
5
Flutter and its programming language Dart
since 2014
iOS & Android Web*
since 2011
* On web, the Dart code is compiled to JS Compiler or WebAssembly
Dart code code specific
Virtual Machine
Code specific to the platform : Java, Swift, C#, JS, etc.
PC, MacOS, Linux
8
8
8
Dart Grammar (quick overview)
Parsing Dart
i) Object oriented and function Programming
iii) A “loosely” Typed language
ii) Language features and syntax sugar
9
9
9
Why do we need to analyze Dart ?
With the deprecation of Xamarin, Flutter has
become the main SDK for native multiplatform
development on mobile (and more)
Main language for Flutter
According to spectrum.ieee.org, Dart is the
15th trending language in 2022
Growing popularity
Outside Dart toolkit, we note an absence of
academic or industrial tools to analyze Dart
code. With Platforms like EMF/ECORE focusing on
older language (e.g., Java, C/C++, C#, etc.)
no Software Engineering tool yet
11
11
11
Overview of our analysis of Dart
Figure – Analysis process set up for Dart in Pharo
To exploit and reuse the tools’ suit of Pharo, which has shown to be a reliable static analyzer of
legacy languages like Java, Delphi, and C and which have maturity over industrial use case
Goal
12
12
12
Overview of our analysis of Dart
Parsing Dart
Figure – Analysis process set up for Dart in Pharo
To exploit and reuse the tools’ suit of Pharo, which has shown to be a reliable static analyzer of
legacy languages like Java, Delphi, and C and which have maturity over industrial use case
Goal
13
13
13
Generating a parser with SmaCC
Parsing Dart
EBNF of Dart
for ANTLR
ANTLR
14
14
14
Generating a parser with SmaCC
Parsing Dart
EBNF of Dart
for SmaCC
EBNF of Dart
for ANTLR
'Attribut_of_the_node' {{declared_SmaCC_Node}}
ANTLR
SmaCC
15
15
15
Generating a parser with SmaCC
Parsing Dart
EBNF of Dart
for SmaCC
EBNF of Dart
for ANTLR
SmaCC
16
16
16
Generating a parser with SmaCC
Parsing Dart
EBNF of Dart
for SmaCC
EBNF of Dart
for ANTLR
SmaCC Package Pharo
SmaccDart Parser
AST of Dart
(for a given code)
https://github.com/Evref-BL/SmaccDart
parser + AST visualisation & more…
18
18
18
limitations of SmaCCDart
Parsing Dart
1. Limited to the Dart2 grammar (by ANTLR)
2. No official EBNF grammar by Google a its specification (with ambiguities reported)
3. We use code-refactoring to handle multiline string interpolations and performance issues
19
19
19
limitations of SmaCCDart
Parsing Dart
1. Limited to the Dart2 grammar (by ANTLR)
2. No official EBNF grammar by Google a its specification (with ambiguities reported)
3. We use code-refactoring to handle multiline string interpolations and performance issues
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Addition App’),
),
body: Center(
child:
TextField(labelText: 'Number 1'),
TextField(labelText: 'Number 2’),
),
ElevatedButton(
onPressed: performAddition,
child: Text('Add’),
)
);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Addition App’),
),
body: new Center(
child:
new TextField(labelText: 'Number 1'),
new TextField(labelText: 'Number 2’),
),
new ElevatedButton(
onPressed: performAddition,
child: new Text('Add’),
)
);
}
~5 times faster on a class 50 lines
20
20
20
Plan
Visualization tools
21
21
21
Figure – AST visualization made with Roassal3
22
22
22
AnimSearch:
Testing SmaCCDart on a Flutter App
Experimenting visualisations
14 dart files & 2178 LoC
for each file
Extract its corresponding an AST
Using the parser to extract the file dependencies of an opensource flutter app
Use case
23
23
23
Figure – a mermaid visualization of the file dependencies of AnimSearch
24
24
24
Figure – a mermaid visualization of the file dependencies of AnimSearch
With an increasing number of entities to display, visualization becomes hard to understand.
Thus, we rely on model driven engineering to continue the analysis.
limitations
25
25
25
Plan
Model analysis
26
26
26
Defining a Famix Meta Model for Dart
Model Driven Engineering
Package Pharo
SmaccDart Parser
134 SmaCCDart nodes
27
27
27
Defining a Famix Meta Model for Dart
Model Driven Engineering
Package Pharo
SmaccDart Parser
Famix Traits
28
28
28
Defining a Famix Meta Model for Dart
Model Driven Engineering
Package Pharo
SmaccDart Parser
Meta-model Generator
Famix Traits
29
29
29
Defining a Famix Meta Model for Dart
Model Driven Engineering
Package Pharo
SmaccDart Parser
Meta-model Generator FamixDart meta-model
Chartreuse-D
Famix Traits
https://github.com/Evref-BL/Chartreuse-D
Meta-model Generator + model importer
31
31
31
FamixDart Importer in an example
Model Driven Engineering
class
A
class
B
method
mA
method
mB
var
b
class
A
class
B
method
mA
method
mB
var
b
methods ▼
methods ▶
References ▶
Variables ▶
Type ▼
1. Create instances
(from its AST)
2. Symbolic
Resolver from
the AST
FamixDart model’s entities
Entities with associations
32
32
32
Challenge to import FamixDart model
Model Driven Engineering
§ dynamic introduces ambiguity
for symbolic resolution.
§ For A,B two classes, with each a method m()
§ In A, m() as two optional parameters (a,b)
§ In B, m() as one option parameter (a)
At line 17,
how to resolve which method is called between
A::m() and B::m() ?
33
33
33
Conclusion
35
35
35
Take away points
Conclusion
§ We explore how a new language like Dart can be analyzed by existing tools in
Pharo, such as:
1. SmaCC for parser
2. Roassal3 for visualizations
3. And Famix for model driven engineering.
§ We extend those tools to develop :
1. A parser, SmaCCDart
2. And a Famix Meta-model for Dart, FamixDart
3. An famixDart import, Chartreuse-D
§ Our tools are open sources with repository already available.
36
36
36
Future works (late 2023)
Conclusion
§ On SmaCCDart
§ adding no regression tests
§ removing the source code refactoring 🤕
§ On FamixDart
§ continuing the metamodel
§ handling dynamic types when importing associations
§ … and in some years
§ having a Flutter app metamodel (i.e. handling platform specific code in Flutter)
38
38
38
§ Example of AnimeDetailsGenres widget
§ Here we need to capture that :
§ A Container has a Decoration and a child
§ This child is Center widget
§ Center has a Text as child
§ Etc…
§ None of these widgets are attributes of the class
§ Yet, they define how AnimeDetailsGenres is
composed.
§ How to capture this information is our model ?
From dart modeling to Flutter modeling
1 of 30

Recommended

Declare Your Language: What is a Compiler? by
Declare Your Language: What is a Compiler?Declare Your Language: What is a Compiler?
Declare Your Language: What is a Compiler?Eelco Visser
1.2K views78 slides
Visual Studio .NET2010 by
Visual Studio .NET2010Visual Studio .NET2010
Visual Studio .NET2010Satish Verma
1.8K views42 slides
(1) c sharp introduction_basics_dot_net by
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_netNico Ludwig
243 views25 slides
carrow - Go bindings to Apache Arrow via C++-API by
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIYoni Davidson
452 views41 slides
2. introduction by
2. introduction2. introduction
2. introductionSaeed Parsa
89 views64 slides
7068458.ppt by
7068458.ppt7068458.ppt
7068458.pptjeronimored
3 views19 slides

More Related Content

Similar to Analyzing Dart Language with Pharo: Report and early results

r,rstats,r language,r packages by
r,rstats,r language,r packagesr,rstats,r language,r packages
r,rstats,r language,r packagesAjay Ohri
573 views18 slides
Introduction to Flutter - truly crossplatform, amazingly fast by
Introduction to Flutter - truly crossplatform, amazingly fastIntroduction to Flutter - truly crossplatform, amazingly fast
Introduction to Flutter - truly crossplatform, amazingly fastBartosz Kosarzycki
50.8K views37 slides
Dart by
DartDart
DartAndrea Chiodoni
3.2K views13 slides
330f15_AnsariJonesWilder_Dart.pptx by
330f15_AnsariJonesWilder_Dart.pptx330f15_AnsariJonesWilder_Dart.pptx
330f15_AnsariJonesWilder_Dart.pptxpraxyvines
7 views10 slides
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce... by
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...Flink Forward
1.1K views43 slides
Language-agnostic data analysis workflows and reproducible research by
Language-agnostic data analysis workflows and reproducible researchLanguage-agnostic data analysis workflows and reproducible research
Language-agnostic data analysis workflows and reproducible researchAndrew Lowe
197 views49 slides

Similar to Analyzing Dart Language with Pharo: Report and early results(20)

r,rstats,r language,r packages by Ajay Ohri
r,rstats,r language,r packagesr,rstats,r language,r packages
r,rstats,r language,r packages
Ajay Ohri573 views
Introduction to Flutter - truly crossplatform, amazingly fast by Bartosz Kosarzycki
Introduction to Flutter - truly crossplatform, amazingly fastIntroduction to Flutter - truly crossplatform, amazingly fast
Introduction to Flutter - truly crossplatform, amazingly fast
Bartosz Kosarzycki50.8K views
330f15_AnsariJonesWilder_Dart.pptx by praxyvines
330f15_AnsariJonesWilder_Dart.pptx330f15_AnsariJonesWilder_Dart.pptx
330f15_AnsariJonesWilder_Dart.pptx
praxyvines7 views
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce... by Flink Forward
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...
Flink Forward1.1K views
Language-agnostic data analysis workflows and reproducible research by Andrew Lowe
Language-agnostic data analysis workflows and reproducible researchLanguage-agnostic data analysis workflows and reproducible research
Language-agnostic data analysis workflows and reproducible research
Andrew Lowe197 views
Apache Spark 2.3 boosts advanced analytics and deep learning with Python by DataWorks Summit
Apache Spark 2.3 boosts advanced analytics and deep learning with PythonApache Spark 2.3 boosts advanced analytics and deep learning with Python
Apache Spark 2.3 boosts advanced analytics and deep learning with Python
DataWorks Summit836 views
Compiler gate question key by ArthyR3
Compiler gate question keyCompiler gate question key
Compiler gate question key
ArthyR3139 views
Is fortran still relevant comparing fortran with java and c++ by ijseajournal
Is fortran still relevant comparing fortran with java and c++Is fortran still relevant comparing fortran with java and c++
Is fortran still relevant comparing fortran with java and c++
ijseajournal619 views
BERT QnA System for Airplane Flight Manual by ArkaGhosh65
BERT QnA System for Airplane Flight ManualBERT QnA System for Airplane Flight Manual
BERT QnA System for Airplane Flight Manual
ArkaGhosh6538 views
Introducing Arc: A Common Intermediate Language for Unified Batch and Stream... by Flink Forward
Introducing Arc:  A Common Intermediate Language for Unified Batch and Stream...Introducing Arc:  A Common Intermediate Language for Unified Batch and Stream...
Introducing Arc: A Common Intermediate Language for Unified Batch and Stream...
Flink Forward121 views
Dot Net Fundamentals by LiquidHub
Dot Net FundamentalsDot Net Fundamentals
Dot Net Fundamentals
LiquidHub1.9K views
Decorating code (Research Paper) by Jenna Pederson
Decorating code (Research Paper)Decorating code (Research Paper)
Decorating code (Research Paper)
Jenna Pederson675 views
Porting VisualWorks code to Pharo by ESUG
Porting VisualWorks code to PharoPorting VisualWorks code to Pharo
Porting VisualWorks code to Pharo
ESUG698 views
SCALABLE MONITORING USING PROMETHEUS WITH APACHE SPARK by zmhassan
SCALABLE MONITORING USING PROMETHEUS WITH APACHE SPARKSCALABLE MONITORING USING PROMETHEUS WITH APACHE SPARK
SCALABLE MONITORING USING PROMETHEUS WITH APACHE SPARK
zmhassan41 views

More from ESUG

Workshop: Identifying concept inventories in agile programming by
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
12 views16 slides
Technical documentation support in Pharo by
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
31 views39 slides
The Pharo Debugger and Debugging tools: Advances and Roadmap by
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
56 views44 slides
Sequence: Pipeline modelling in Pharo by
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
87 views22 slides
Migration process from monolithic to micro frontend architecture in mobile ap... by
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
23 views35 slides
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6 by
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
39 views35 slides

More from ESUG(20)

Workshop: Identifying concept inventories in agile programming by ESUG
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
ESUG12 views
Technical documentation support in Pharo by ESUG
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
ESUG31 views
The Pharo Debugger and Debugging tools: Advances and Roadmap by ESUG
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
ESUG56 views
Sequence: Pipeline modelling in Pharo by ESUG
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
ESUG87 views
Migration process from monolithic to micro frontend architecture in mobile ap... by ESUG
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
ESUG23 views
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6 by ESUG
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
ESUG39 views
A Unit Test Metamodel for Test Generation by ESUG
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
ESUG54 views
Creating Unit Tests Using Genetic Programming by ESUG
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG49 views
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes by ESUG
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
ESUG52 views
Exploring GitHub Actions through EGAD: An Experience Report by ESUG
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
ESUG17 views
Pharo: a reflective language A first systematic analysis of reflective APIs by ESUG
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
ESUG58 views
Garbage Collector Tuning by ESUG
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
ESUG20 views
Improving Performance Through Object Lifetime Profiling: the DataFrame Case by ESUG
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
ESUG43 views
Pharo DataFrame: Past, Present, and Future by ESUG
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG43 views
thisContext in the Debugger by ESUG
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
ESUG36 views
Websockets for Fencing Score by ESUG
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
ESUG18 views
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript by ESUG
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ESUG46 views
Advanced Object- Oriented Design Mooc by ESUG
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
ESUG85 views
A New Architecture Reconciling Refactorings and Transformations by ESUG
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
ESUG28 views
BioSmalltalk by ESUG
BioSmalltalkBioSmalltalk
BioSmalltalk
ESUG415 views

Recently uploaded

Gen Apps on Google Cloud PaLM2 and Codey APIs in Action by
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionGen Apps on Google Cloud PaLM2 and Codey APIs in Action
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionMárton Kodok
16 views55 slides
Navigating container technology for enhanced security by Niklas Saari by
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas SaariMetosin Oy
14 views34 slides
How Workforce Management Software Empowers SMEs | TraQSuite by
How Workforce Management Software Empowers SMEs | TraQSuiteHow Workforce Management Software Empowers SMEs | TraQSuite
How Workforce Management Software Empowers SMEs | TraQSuiteTraQSuite
6 views3 slides
Sprint 226 by
Sprint 226Sprint 226
Sprint 226ManageIQ
11 views18 slides
FIMA 2023 Neo4j & FS - Entity Resolution.pptx by
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptxNeo4j
17 views26 slides
Bootstrapping vs Venture Capital.pptx by
Bootstrapping vs Venture Capital.pptxBootstrapping vs Venture Capital.pptx
Bootstrapping vs Venture Capital.pptxZeljko Svedic
15 views17 slides

Recently uploaded(20)

Gen Apps on Google Cloud PaLM2 and Codey APIs in Action by Márton Kodok
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionGen Apps on Google Cloud PaLM2 and Codey APIs in Action
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action
Márton Kodok16 views
Navigating container technology for enhanced security by Niklas Saari by Metosin Oy
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas Saari
Metosin Oy14 views
How Workforce Management Software Empowers SMEs | TraQSuite by TraQSuite
How Workforce Management Software Empowers SMEs | TraQSuiteHow Workforce Management Software Empowers SMEs | TraQSuite
How Workforce Management Software Empowers SMEs | TraQSuite
TraQSuite6 views
Sprint 226 by ManageIQ
Sprint 226Sprint 226
Sprint 226
ManageIQ11 views
FIMA 2023 Neo4j & FS - Entity Resolution.pptx by Neo4j
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptx
Neo4j17 views
Bootstrapping vs Venture Capital.pptx by Zeljko Svedic
Bootstrapping vs Venture Capital.pptxBootstrapping vs Venture Capital.pptx
Bootstrapping vs Venture Capital.pptx
Zeljko Svedic15 views
Electronic AWB - Electronic Air Waybill by Freightoscope
Electronic AWB - Electronic Air Waybill Electronic AWB - Electronic Air Waybill
Electronic AWB - Electronic Air Waybill
Freightoscope 5 views
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P... by NimaTorabi2
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
NimaTorabi216 views
AI and Ml presentation .pptx by FayazAli87
AI and Ml presentation .pptxAI and Ml presentation .pptx
AI and Ml presentation .pptx
FayazAli8714 views
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation by HCLSoftware
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook AutomationDRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
HCLSoftware6 views
Understanding HTML terminology by artembondar5
Understanding HTML terminologyUnderstanding HTML terminology
Understanding HTML terminology
artembondar57 views
Generic or specific? Making sensible software design decisions by Bert Jan Schrijver
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
tecnologia18.docx by nosi6702
tecnologia18.docxtecnologia18.docx
tecnologia18.docx
nosi67025 views
predicting-m3-devopsconMunich-2023-v2.pptx by Tier1 app
predicting-m3-devopsconMunich-2023-v2.pptxpredicting-m3-devopsconMunich-2023-v2.pptx
predicting-m3-devopsconMunich-2023-v2.pptx
Tier1 app11 views
predicting-m3-devopsconMunich-2023.pptx by Tier1 app
predicting-m3-devopsconMunich-2023.pptxpredicting-m3-devopsconMunich-2023.pptx
predicting-m3-devopsconMunich-2023.pptx
Tier1 app8 views

Analyzing Dart Language with Pharo: Report and early results

  • 1. 1 1 1 Analyzing Dart Language with Pharo: Report and early results Nicolas Hlad, Benoit Verhaeghe, Mustapha Derras
  • 2. 2 2 2 1. Industrial and Academic contexts 2. What is Dart ? 3. What is our analysis process of Dart ? 4. Conclusion Presentation Plan
  • 3. 3 3 3 Berger-Levrault • created 1463 as a printing company • now an international software editor • Develop administrative software for cities administrations, industries, hospitals, etc. • Since 2022, in collaboration with Evref • Compagnies with divers technologies :
  • 4. 5 5 5 Flutter and its programming language Dart since 2014 iOS & Android Web* since 2011 * On web, the Dart code is compiled to JS Compiler or WebAssembly Dart code code specific Virtual Machine Code specific to the platform : Java, Swift, C#, JS, etc. PC, MacOS, Linux
  • 5. 8 8 8 Dart Grammar (quick overview) Parsing Dart i) Object oriented and function Programming iii) A “loosely” Typed language ii) Language features and syntax sugar
  • 6. 9 9 9 Why do we need to analyze Dart ? With the deprecation of Xamarin, Flutter has become the main SDK for native multiplatform development on mobile (and more) Main language for Flutter According to spectrum.ieee.org, Dart is the 15th trending language in 2022 Growing popularity Outside Dart toolkit, we note an absence of academic or industrial tools to analyze Dart code. With Platforms like EMF/ECORE focusing on older language (e.g., Java, C/C++, C#, etc.) no Software Engineering tool yet
  • 7. 11 11 11 Overview of our analysis of Dart Figure – Analysis process set up for Dart in Pharo To exploit and reuse the tools’ suit of Pharo, which has shown to be a reliable static analyzer of legacy languages like Java, Delphi, and C and which have maturity over industrial use case Goal
  • 8. 12 12 12 Overview of our analysis of Dart Parsing Dart Figure – Analysis process set up for Dart in Pharo To exploit and reuse the tools’ suit of Pharo, which has shown to be a reliable static analyzer of legacy languages like Java, Delphi, and C and which have maturity over industrial use case Goal
  • 9. 13 13 13 Generating a parser with SmaCC Parsing Dart EBNF of Dart for ANTLR ANTLR
  • 10. 14 14 14 Generating a parser with SmaCC Parsing Dart EBNF of Dart for SmaCC EBNF of Dart for ANTLR 'Attribut_of_the_node' {{declared_SmaCC_Node}} ANTLR SmaCC
  • 11. 15 15 15 Generating a parser with SmaCC Parsing Dart EBNF of Dart for SmaCC EBNF of Dart for ANTLR SmaCC
  • 12. 16 16 16 Generating a parser with SmaCC Parsing Dart EBNF of Dart for SmaCC EBNF of Dart for ANTLR SmaCC Package Pharo SmaccDart Parser AST of Dart (for a given code) https://github.com/Evref-BL/SmaccDart parser + AST visualisation & more…
  • 13. 18 18 18 limitations of SmaCCDart Parsing Dart 1. Limited to the Dart2 grammar (by ANTLR) 2. No official EBNF grammar by Google a its specification (with ambiguities reported) 3. We use code-refactoring to handle multiline string interpolations and performance issues
  • 14. 19 19 19 limitations of SmaCCDart Parsing Dart 1. Limited to the Dart2 grammar (by ANTLR) 2. No official EBNF grammar by Google a its specification (with ambiguities reported) 3. We use code-refactoring to handle multiline string interpolations and performance issues @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Addition App’), ), body: Center( child: TextField(labelText: 'Number 1'), TextField(labelText: 'Number 2’), ), ElevatedButton( onPressed: performAddition, child: Text('Add’), ) ); } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text('Addition App’), ), body: new Center( child: new TextField(labelText: 'Number 1'), new TextField(labelText: 'Number 2’), ), new ElevatedButton( onPressed: performAddition, child: new Text('Add’), ) ); } ~5 times faster on a class 50 lines
  • 16. 21 21 21 Figure – AST visualization made with Roassal3
  • 17. 22 22 22 AnimSearch: Testing SmaCCDart on a Flutter App Experimenting visualisations 14 dart files & 2178 LoC for each file Extract its corresponding an AST Using the parser to extract the file dependencies of an opensource flutter app Use case
  • 18. 23 23 23 Figure – a mermaid visualization of the file dependencies of AnimSearch
  • 19. 24 24 24 Figure – a mermaid visualization of the file dependencies of AnimSearch With an increasing number of entities to display, visualization becomes hard to understand. Thus, we rely on model driven engineering to continue the analysis. limitations
  • 21. 26 26 26 Defining a Famix Meta Model for Dart Model Driven Engineering Package Pharo SmaccDart Parser 134 SmaCCDart nodes
  • 22. 27 27 27 Defining a Famix Meta Model for Dart Model Driven Engineering Package Pharo SmaccDart Parser Famix Traits
  • 23. 28 28 28 Defining a Famix Meta Model for Dart Model Driven Engineering Package Pharo SmaccDart Parser Meta-model Generator Famix Traits
  • 24. 29 29 29 Defining a Famix Meta Model for Dart Model Driven Engineering Package Pharo SmaccDart Parser Meta-model Generator FamixDart meta-model Chartreuse-D Famix Traits https://github.com/Evref-BL/Chartreuse-D Meta-model Generator + model importer
  • 25. 31 31 31 FamixDart Importer in an example Model Driven Engineering class A class B method mA method mB var b class A class B method mA method mB var b methods ▼ methods ▶ References ▶ Variables ▶ Type ▼ 1. Create instances (from its AST) 2. Symbolic Resolver from the AST FamixDart model’s entities Entities with associations
  • 26. 32 32 32 Challenge to import FamixDart model Model Driven Engineering § dynamic introduces ambiguity for symbolic resolution. § For A,B two classes, with each a method m() § In A, m() as two optional parameters (a,b) § In B, m() as one option parameter (a) At line 17, how to resolve which method is called between A::m() and B::m() ?
  • 28. 35 35 35 Take away points Conclusion § We explore how a new language like Dart can be analyzed by existing tools in Pharo, such as: 1. SmaCC for parser 2. Roassal3 for visualizations 3. And Famix for model driven engineering. § We extend those tools to develop : 1. A parser, SmaCCDart 2. And a Famix Meta-model for Dart, FamixDart 3. An famixDart import, Chartreuse-D § Our tools are open sources with repository already available.
  • 29. 36 36 36 Future works (late 2023) Conclusion § On SmaCCDart § adding no regression tests § removing the source code refactoring 🤕 § On FamixDart § continuing the metamodel § handling dynamic types when importing associations § … and in some years § having a Flutter app metamodel (i.e. handling platform specific code in Flutter)
  • 30. 38 38 38 § Example of AnimeDetailsGenres widget § Here we need to capture that : § A Container has a Decoration and a child § This child is Center widget § Center has a Text as child § Etc… § None of these widgets are attributes of the class § Yet, they define how AnimeDetailsGenres is composed. § How to capture this information is our model ? From dart modeling to Flutter modeling