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 de 30

Recomendados

Declare Your Language: What is a Compiler? por
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 vistas78 diapositivas
Visual Studio .NET2010 por
Visual Studio .NET2010Visual Studio .NET2010
Visual Studio .NET2010Satish Verma
1.8K vistas42 diapositivas
(1) c sharp introduction_basics_dot_net por
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_netNico Ludwig
243 vistas25 diapositivas
carrow - Go bindings to Apache Arrow via C++-API por
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 vistas41 diapositivas
2. introduction por
2. introduction2. introduction
2. introductionSaeed Parsa
89 vistas64 diapositivas
7068458.ppt por
7068458.ppt7068458.ppt
7068458.pptjeronimored
3 vistas19 diapositivas

Más contenido relacionado

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

r,rstats,r language,r packages por
r,rstats,r language,r packagesr,rstats,r language,r packages
r,rstats,r language,r packagesAjay Ohri
573 vistas18 diapositivas
Introduction to Flutter - truly crossplatform, amazingly fast por
Introduction to Flutter - truly crossplatform, amazingly fastIntroduction to Flutter - truly crossplatform, amazingly fast
Introduction to Flutter - truly crossplatform, amazingly fastBartosz Kosarzycki
50.8K vistas37 diapositivas
Dart por
DartDart
DartAndrea Chiodoni
3.2K vistas13 diapositivas
330f15_AnsariJonesWilder_Dart.pptx por
330f15_AnsariJonesWilder_Dart.pptx330f15_AnsariJonesWilder_Dart.pptx
330f15_AnsariJonesWilder_Dart.pptxpraxyvines
7 vistas10 diapositivas
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce... por
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 vistas43 diapositivas
Language-agnostic data analysis workflows and reproducible research por
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 vistas49 diapositivas

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

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

Más de ESUG

Workshop: Identifying concept inventories in agile programming por
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
12 vistas16 diapositivas
Technical documentation support in Pharo por
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
28 vistas39 diapositivas
The Pharo Debugger and Debugging tools: Advances and Roadmap por
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 vistas44 diapositivas
Sequence: Pipeline modelling in Pharo por
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
86 vistas22 diapositivas
Migration process from monolithic to micro frontend architecture in mobile ap... por
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
20 vistas35 diapositivas
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6 por
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
37 vistas35 diapositivas

Más de ESUG(20)

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

Último

Copilot Prompting Toolkit_All Resources.pdf por
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdfRiccardo Zamana
8 vistas4 diapositivas
Programming Field por
Programming FieldProgramming Field
Programming Fieldthehardtechnology
5 vistas9 diapositivas
The Era of Large Language Models.pptx por
The Era of Large Language Models.pptxThe Era of Large Language Models.pptx
The Era of Large Language Models.pptxAbdulVahedShaik
5 vistas9 diapositivas
Myths and Facts About Hospice Care: Busting Common Misconceptions por
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common MisconceptionsCare Coordinations
5 vistas1 diapositiva
Quality Engineer: A Day in the Life por
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the LifeJohn Valentino
5 vistas18 diapositivas
Dapr Unleashed: Accelerating Microservice Development por
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice DevelopmentMiroslav Janeski
10 vistas29 diapositivas

Último(20)

Copilot Prompting Toolkit_All Resources.pdf por Riccardo Zamana
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdf
Riccardo Zamana8 vistas
The Era of Large Language Models.pptx por AbdulVahedShaik
The Era of Large Language Models.pptxThe Era of Large Language Models.pptx
The Era of Large Language Models.pptx
AbdulVahedShaik5 vistas
Myths and Facts About Hospice Care: Busting Common Misconceptions por Care Coordinations
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common Misconceptions
Quality Engineer: A Day in the Life por John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino5 vistas
Dapr Unleashed: Accelerating Microservice Development por Miroslav Janeski
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice Development
Miroslav Janeski10 vistas
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx por animuscrm
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
animuscrm14 vistas
DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs por Deltares
DSD-INT 2023 The Danube Hazardous Substances Model - KovacsDSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
Deltares8 vistas
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the... por Deltares
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
Deltares6 vistas
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft... por Deltares
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
Deltares7 vistas
360 graden fabriek por info33492
360 graden fabriek360 graden fabriek
360 graden fabriek
info3349237 vistas
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -... por Deltares
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...
Deltares6 vistas
Sprint 226 por ManageIQ
Sprint 226Sprint 226
Sprint 226
ManageIQ5 vistas
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema por Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - GeertsemaDSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
Deltares17 vistas
Advanced API Mocking Techniques por Dimpy Adhikary
Advanced API Mocking TechniquesAdvanced API Mocking Techniques
Advanced API Mocking Techniques
Dimpy Adhikary19 vistas
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... por TomHalpin9
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
TomHalpin95 vistas
SUGCON ANZ Presentation V2.1 Final.pptx por Jack Spektor
SUGCON ANZ Presentation V2.1 Final.pptxSUGCON ANZ Presentation V2.1 Final.pptx
SUGCON ANZ Presentation V2.1 Final.pptx
Jack Spektor22 vistas

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