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 visualizações78 slides
Visual Studio .NET2010 por
Visual Studio .NET2010Visual Studio .NET2010
Visual Studio .NET2010Satish Verma
1.8K visualizações42 slides
(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 visualizações25 slides
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 visualizações41 slides
2. introduction por
2. introduction2. introduction
2. introductionSaeed Parsa
89 visualizações64 slides
7068458.ppt por
7068458.ppt7068458.ppt
7068458.pptjeronimored
3 visualizações19 slides

Mais conteúdo 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 visualizações18 slides
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 visualizações37 slides
Dart por
DartDart
DartAndrea Chiodoni
3.2K visualizações13 slides
330f15_AnsariJonesWilder_Dart.pptx por
330f15_AnsariJonesWilder_Dart.pptx330f15_AnsariJonesWilder_Dart.pptx
330f15_AnsariJonesWilder_Dart.pptxpraxyvines
7 visualizações10 slides
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 visualizações43 slides
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 visualizações49 slides

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 visualizações
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 visualizações
Dart por Andrea Chiodoni
DartDart
Dart
Andrea Chiodoni3.2K visualizações
330f15_AnsariJonesWilder_Dart.pptx por praxyvines
330f15_AnsariJonesWilder_Dart.pptx330f15_AnsariJonesWilder_Dart.pptx
330f15_AnsariJonesWilder_Dart.pptx
praxyvines7 visualizações
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 visualizações
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 visualizações
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 visualizações
Compiler gate question key por ArthyR3
Compiler gate question keyCompiler gate question key
Compiler gate question key
ArthyR3139 visualizações
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 visualizações
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 visualizações
Unit1 cd por PRIST University
Unit1 cdUnit1 cd
Unit1 cd
PRIST University782 visualizações
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 visualizações
resumePdf por Amit Kumar
resumePdfresumePdf
resumePdf
Amit Kumar85 visualizações
Dot Net Fundamentals por LiquidHub
Dot Net FundamentalsDot Net Fundamentals
Dot Net Fundamentals
LiquidHub1.9K visualizações
Decorating code (Research Paper) por Jenna Pederson
Decorating code (Research Paper)Decorating code (Research Paper)
Decorating code (Research Paper)
Jenna Pederson675 visualizações
Porting VisualWorks code to Pharo por ESUG
Porting VisualWorks code to PharoPorting VisualWorks code to Pharo
Porting VisualWorks code to Pharo
ESUG698 visualizações
Compiler presentaion por Shady A. Alefrangy
Compiler presentaionCompiler presentaion
Compiler presentaion
Shady A. Alefrangy401 visualizações
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 visualizações
amar_resume por Amar Sharma
amar_resumeamar_resume
amar_resume
Amar Sharma269 visualizações

Mais 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 visualizações16 slides
Technical documentation support in Pharo por
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
30 visualizações39 slides
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 visualizações44 slides
Sequence: Pipeline modelling in Pharo por
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
86 visualizações22 slides
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 visualizações35 slides
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 visualizações35 slides

Mais 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 visualizações
Technical documentation support in Pharo por ESUG
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
ESUG30 visualizações
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 visualizações
Sequence: Pipeline modelling in Pharo por ESUG
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
ESUG86 visualizações
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 visualizações
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 visualizações
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 visualizações
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 visualizações
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 visualizações
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 visualizações
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 visualizações
Garbage Collector Tuning por ESUG
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
ESUG20 visualizações
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 visualizações
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 visualizações
thisContext in the Debugger por ESUG
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
ESUG36 visualizações
Websockets for Fencing Score por ESUG
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
ESUG18 visualizações
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 visualizações
Advanced Object- Oriented Design Mooc por ESUG
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
ESUG85 visualizações
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 visualizações
BioSmalltalk por ESUG
BioSmalltalkBioSmalltalk
BioSmalltalk
ESUG415 visualizações

Último

Short_Story_PPT.pdf por
Short_Story_PPT.pdfShort_Story_PPT.pdf
Short_Story_PPT.pdfutkarshsatishkumarsh
5 visualizações16 slides
Programming Field por
Programming FieldProgramming Field
Programming Fieldthehardtechnology
5 visualizações9 slides
SUGCON ANZ Presentation V2.1 Final.pptx por
SUGCON ANZ Presentation V2.1 Final.pptxSUGCON ANZ Presentation V2.1 Final.pptx
SUGCON ANZ Presentation V2.1 Final.pptxJack Spektor
22 visualizações34 slides
Headless JS UG Presentation.pptx por
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptxJack Spektor
7 visualizações24 slides
Navigating container technology for enhanced security by Niklas Saari por
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 visualizações34 slides
WebAssembly por
WebAssemblyWebAssembly
WebAssemblyJens Siebert
48 visualizações18 slides

Último(20)

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 visualizações
Headless JS UG Presentation.pptx por Jack Spektor
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptx
Jack Spektor7 visualizações
Navigating container technology for enhanced security by Niklas Saari por 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 visualizações
WebAssembly por Jens Siebert
WebAssemblyWebAssembly
WebAssembly
Jens Siebert48 visualizações
Agile 101 por John Valentino
Agile 101Agile 101
Agile 101
John Valentino7 visualizações
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko... por Deltares
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
Deltares14 visualizações
HarshithAkkapelli_Presentation.pdf por harshithakkapelli
HarshithAkkapelli_Presentation.pdfHarshithAkkapelli_Presentation.pdf
HarshithAkkapelli_Presentation.pdf
harshithakkapelli11 visualizações
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports por Ra'Fat Al-Msie'deen
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug ReportsBushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
Ra'Fat Al-Msie'deen8 visualizações
Dapr Unleashed: Accelerating Microservice Development por Miroslav Janeski
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice Development
Miroslav Janeski10 visualizações
Advanced API Mocking Techniques por Dimpy Adhikary
Advanced API Mocking TechniquesAdvanced API Mocking Techniques
Advanced API Mocking Techniques
Dimpy Adhikary19 visualizações
nintendo_64.pptx por paiga02016
nintendo_64.pptxnintendo_64.pptx
nintendo_64.pptx
paiga020165 visualizações
Airline Booking Software por SharmiMehta
Airline Booking SoftwareAirline Booking Software
Airline Booking Software
SharmiMehta6 visualizações
SAP FOR CONTRACT MANUFACTURING.pdf por Virendra Rai, PMP
SAP FOR CONTRACT MANUFACTURING.pdfSAP FOR CONTRACT MANUFACTURING.pdf
SAP FOR CONTRACT MANUFACTURING.pdf
Virendra Rai, PMP13 visualizações
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... por Marc Müller
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Marc Müller37 visualizações
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with... por sparkfabrik
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
sparkfabrik5 visualizações
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 visualizações
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 visualizações
AI and Ml presentation .pptx por FayazAli87
AI and Ml presentation .pptxAI and Ml presentation .pptx
AI and Ml presentation .pptx
FayazAli8711 visualizações

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