SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
GLORP
δDELTA
library
Why to keep VisualWorks?
 Solid Smalltalk implementation, long tradition
 Good database support
 Windows support (target platform for PDM)
 Native Windows UI (±), UI Designer
 Business ready, proven solution
 Vendor support
 Existing code
Why to leave VisualWorks?
 Slow progress
 Decreasing return value
 Loss of vendor interest
 Loss of developers interest
 Licensing politics
Alternative?
Alternative?
Pharo as an alternative?
 Solid Smalltalk implementation, long tradition
 Good database support
 Windows support
 Native Windows UI, UI Designer
 Business ready, proven solution
 Vendor support
 Existing code
?
?
?
?
?
X
?
Vendor support
...what is not, we will improve!
 Existing code X
Code conversion challenges
 How to import code?
 Different VCS?
 Language differences?
 Semantics?
 Different UI frameworks?
Code conversion challenges
 Application still under active development
– bi-directional transformations
 Target platform under active development
– Spec2
 Limited timescale, human resources
Code import
 VW: XML based *.pst files
– XML Parser
– cannot be loaded directly
● language differences
● dependencies
● system corruption risk
– not stable order during saving
● not suitable for versioning
Code import
 models using Ring 2
– need of modified scanner & parser
– allows code transformations
– simple export to Tonel format
– code management in Git
– no risk of system corruption
– tools
– export to *.pst format
Language differences
 namespaces
Store.Model
UI.Model
 qualified literals
#{UI.CheckBoxSpec}
 shared variables
 class definitions
 FFI calls
<C:typedef int64_t (*callb_after_send_t)(unsigned char* handlerID, int
PortServerID, unsigned char* inputBuffer, int cbInput)>
Pharo extensions
 dynamic arrays
{1. 2. 1+2}
 traits
 slots
 comments
"Pharo has ""quotes"" inside comments"
Transformations
 hints as comments
login := Login new.
"VW_TRANSLATION:Glorp.Login:Login"
 methods with metadata
visualWorksMetadata
^ #(
'superclassNamespace' 'UI'
)
Differences in semantics
Differences in semantics
 object initialization (new)
– inherit from class that behaves differently
 same methods with different behavior (Pragma>>#selector)
 dependencies mechanism
 no Wipe mechanism

(#Smalltalk = 'Smalltalk') = false

'asdf' readStream upToAll: 'd'; upToEnd
– 'f' in Pharo, 'df' in VisualWorks
Differences in semantics

nil responds to #size

#(nil nil) asSet size (VW: 0, Pharo: 1)
 'ab' endsWith: $c (VW: true)

1.0 == 1.0 (VW: false)

'' asNumber (VW: 0, Pharo: error)

method instVarNamed: 'sourceCode'

Dictionary new keys (VW: Set, Pharo: Array)
Tests!
 many small hidden incompatibilities
 hard to detect with static analysis
 good code coverage, mutation testing, UI tests
 useful for the platform updates too
System design
 layers separation
 minimize redundancy, improve re-usability
 minimize work required for the UI and “glue” layers
 improve testability
 support for the common business application
patterns
 ...
production quality small business application in few days
Clients separation
 describes applications using well-defined first-class
entities (parts, conditions, actions, use-cases...)
partInterface
createAction: #submit
do: [ self submit ]
if: (APCondition on: [self isDirty] ifNot: #NoChange)
helpText: 'Submit the form'.
 predefined parts (for lists, trees…)
 enumerations (combo-boxes, menus...)
 aspects redirection
partInterface createAspectNamed: #statesList
redirectTo: #(state enumerationTextList).
 layouts, UI configurations
aValueConfiguration addConfigElement: (APValueConfigElementList
onPart: aValueConfiguration key: #options
preInit: [:el | el rawList: options; yourself]
postInit: [:el | el labelBefore: 'Options');
expectedLines: 10; yourself])
 generic UI clients
 interactions recording, automatic UI tests generation
self afterDoing: [
self setAspect: #stringField value: 'foo'. ]
expectStates: [
APExpectedStates
expectAllInactive: #(#clearNumber #confirmNumber #saveData)
expectAllActive: #(#clearString #confirmString
#disableInput #intField #stringField) ].
 prompts, modal windows
 Glorp, Trachel...
 VW: Aspect adaptors
– closer relationship between the model and
a widget
 Pharo: Value holders (in Slots)
 Different dependencies management
UI layers adoption
UI layers adoption
 VisualWorks
 Pharo
– “compatible”
ApplicationModel
– UIBuilder replacement
 Delta library
– Bernd Elkemann
– polling as intermediate step
 C#, MS Office connection to Pharo
– Benedikt Ehl
Bindings
δDELTA
library
 Consortium:
– Threaded FFI
– Spec 2
– GTK for Spec 2
– Better Windows VM
– Headless VM
– ...
Acceleration of infrastructure improvements
 will be open-sourced
 user-friendly documentation
 complex examples with Glorp
 Pharo version repackaging to fit VW structure again
 Pharo changes analysis, formatting
 VisualWorks code conversion
 merging
 testing
Glorp
Pharo PDM (VW) latest (VW)
8.0.1 8.2 8.3.1-23
Trachel/Roassal on GTK
SVG support
fixed in PDM
(CSS parsing, arcs)
original
Read-only image mode
 Multiple headless instances of the same image
(specialized workers)
 Seamless connections
 TaskIt futures
Gettext - update
 Pharo library for locale-aware translations of
strings that use standard GNU gettext file formats
Metacello new
baseline: 'Gettext';
repository: 'github://pharo-contributions/Gettext/source';
load.
Do you want to port your application to Pharo?
 improve your tests
 clean your architecture
 tell us about your needs
 participate
 Pharo is not just a free alternative...
is yours
converter := VWToTonelConverter new.
converter
convert: files
into: 'result' asFileReference.
for you business
better

Contenu connexe

Tendances

Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
intelliyole
 
Net serialization
Net serializationNet serialization
Net serialization
Greg Sohl
 
.NET Framework Overview
.NET Framework Overview.NET Framework Overview
.NET Framework Overview
Doncho Minkov
 
Migrating To Visual Studio 2008 & .Net Framework 3.5
Migrating To Visual Studio 2008 & .Net Framework 3.5Migrating To Visual Studio 2008 & .Net Framework 3.5
Migrating To Visual Studio 2008 & .Net Framework 3.5
Jeff Blankenburg
 
Life as an asp.net programmer
Life as an asp.net programmerLife as an asp.net programmer
Life as an asp.net programmer
Arun Prasad
 

Tendances (18)

C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#
 
.Net Framework Introduction
.Net Framework Introduction.Net Framework Introduction
.Net Framework Introduction
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
 
Net serialization
Net serializationNet serialization
Net serialization
 
.Net language support
.Net language support.Net language support
.Net language support
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net
 
dot net technology
dot net technologydot net technology
dot net technology
 
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
 
DOT Net overview
DOT Net overviewDOT Net overview
DOT Net overview
 
Intro dotnet
Intro dotnetIntro dotnet
Intro dotnet
 
Implementing Refactorings in IntelliJ IDEA
Implementing Refactorings in IntelliJ IDEAImplementing Refactorings in IntelliJ IDEA
Implementing Refactorings in IntelliJ IDEA
 
C#
C#C#
C#
 
E sampark with c#.net
E sampark with c#.netE sampark with c#.net
E sampark with c#.net
 
.NET Framework Overview
.NET Framework Overview.NET Framework Overview
.NET Framework Overview
 
Migrating To Visual Studio 2008 & .Net Framework 3.5
Migrating To Visual Studio 2008 & .Net Framework 3.5Migrating To Visual Studio 2008 & .Net Framework 3.5
Migrating To Visual Studio 2008 & .Net Framework 3.5
 
Programming in c#
Programming in c#Programming in c#
Programming in c#
 
Life as an asp.net programmer
Life as an asp.net programmerLife as an asp.net programmer
Life as an asp.net programmer
 
.NET Overview
.NET Overview.NET Overview
.NET Overview
 

Similaire à Porting VisualWorks code to Pharo

Whidbey old
Whidbey old Whidbey old
Whidbey old
grenaud
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02
Wei Sun
 
Ugif 10 2012 lycia2 introduction in 45 minutes
Ugif 10 2012 lycia2 introduction in 45 minutesUgif 10 2012 lycia2 introduction in 45 minutes
Ugif 10 2012 lycia2 introduction in 45 minutes
UGIF
 
.NET 4 Demystified - Sandeep Joshi
.NET 4 Demystified - Sandeep Joshi.NET 4 Demystified - Sandeep Joshi
.NET 4 Demystified - Sandeep Joshi
Spiffy
 
Working Effectively With Legacy Perl Code
Working Effectively With Legacy Perl CodeWorking Effectively With Legacy Perl Code
Working Effectively With Legacy Perl Code
erikmsp
 
Google Dev Day2007
Google Dev Day2007Google Dev Day2007
Google Dev Day2007
lucclaes
 
Elegant and Scalable Code Querying with Code Property Graphs
Elegant and Scalable Code Querying with Code Property GraphsElegant and Scalable Code Querying with Code Property Graphs
Elegant and Scalable Code Querying with Code Property Graphs
Connected Data World
 

Similaire à Porting VisualWorks code to Pharo (20)

NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for DevelopersMSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
MSDN Presents: Visual Studio 2010, .NET 4, SharePoint 2010 for Developers
 
Overview of VS2010 and .NET 4.0
Overview of VS2010 and .NET 4.0Overview of VS2010 and .NET 4.0
Overview of VS2010 and .NET 4.0
 
PIL - A Platform Independent Language
PIL - A Platform Independent LanguagePIL - A Platform Independent Language
PIL - A Platform Independent Language
 
Csharp dot net
Csharp dot netCsharp dot net
Csharp dot net
 
Extension and Evolution
Extension and EvolutionExtension and Evolution
Extension and Evolution
 
Whidbey old
Whidbey old Whidbey old
Whidbey old
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02
 
Robust MLOps with Open-Source: ModelDB, Docker, Jenkins, and Prometheus
Robust MLOps with Open-Source: ModelDB, Docker, Jenkins, and PrometheusRobust MLOps with Open-Source: ModelDB, Docker, Jenkins, and Prometheus
Robust MLOps with Open-Source: ModelDB, Docker, Jenkins, and Prometheus
 
Basta! 2010 - VB6 Migration: Tips, Traps, and Techniques
Basta! 2010 - VB6 Migration: Tips, Traps, and TechniquesBasta! 2010 - VB6 Migration: Tips, Traps, and Techniques
Basta! 2010 - VB6 Migration: Tips, Traps, and Techniques
 
Introducing J2ME Polish
Introducing J2ME PolishIntroducing J2ME Polish
Introducing J2ME Polish
 
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
 
Ugif 10 2012 lycia2 introduction in 45 minutes
Ugif 10 2012 lycia2 introduction in 45 minutesUgif 10 2012 lycia2 introduction in 45 minutes
Ugif 10 2012 lycia2 introduction in 45 minutes
 
.NET 4 Demystified - Sandeep Joshi
.NET 4 Demystified - Sandeep Joshi.NET 4 Demystified - Sandeep Joshi
.NET 4 Demystified - Sandeep Joshi
 
Working Effectively With Legacy Perl Code
Working Effectively With Legacy Perl CodeWorking Effectively With Legacy Perl Code
Working Effectively With Legacy Perl Code
 
Designing Optimized Symbols for InduSoft Web Studio Projects
Designing Optimized Symbols for InduSoft Web Studio ProjectsDesigning Optimized Symbols for InduSoft Web Studio Projects
Designing Optimized Symbols for InduSoft Web Studio Projects
 
Google Dev Day2007
Google Dev Day2007Google Dev Day2007
Google Dev Day2007
 
Pragmatic Model Driven Development using openArchitectureWare
Pragmatic Model Driven Development using openArchitectureWarePragmatic Model Driven Development using openArchitectureWare
Pragmatic Model Driven Development using openArchitectureWare
 
Elegant and Scalable Code Querying with Code Property Graphs
Elegant and Scalable Code Querying with Code Property GraphsElegant and Scalable Code Querying with Code Property Graphs
Elegant and Scalable Code Querying with Code Property Graphs
 

Plus de ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
ESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
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
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...
Migration process from monolithic to micro frontend architecture in mobile ap...
ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
ESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
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
ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
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
ESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
ESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
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
ESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
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
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
ESUG
 

Plus de ESUG (20)

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

Dernier

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Dernier (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Porting VisualWorks code to Pharo

  • 1.
  • 2.
  • 3.
  • 4.
  • 6. Why to keep VisualWorks?  Solid Smalltalk implementation, long tradition  Good database support  Windows support (target platform for PDM)  Native Windows UI (±), UI Designer  Business ready, proven solution  Vendor support  Existing code
  • 7. Why to leave VisualWorks?  Slow progress  Decreasing return value  Loss of vendor interest  Loss of developers interest  Licensing politics
  • 10. Pharo as an alternative?  Solid Smalltalk implementation, long tradition  Good database support  Windows support  Native Windows UI, UI Designer  Business ready, proven solution  Vendor support  Existing code ? ? ? ? ? X ?
  • 12. ...what is not, we will improve!
  • 14. Code conversion challenges  How to import code?  Different VCS?  Language differences?  Semantics?  Different UI frameworks?
  • 15. Code conversion challenges  Application still under active development – bi-directional transformations  Target platform under active development – Spec2  Limited timescale, human resources
  • 16. Code import  VW: XML based *.pst files – XML Parser – cannot be loaded directly ● language differences ● dependencies ● system corruption risk – not stable order during saving ● not suitable for versioning
  • 17. Code import  models using Ring 2 – need of modified scanner & parser – allows code transformations – simple export to Tonel format – code management in Git – no risk of system corruption – tools – export to *.pst format
  • 18. Language differences  namespaces Store.Model UI.Model  qualified literals #{UI.CheckBoxSpec}  shared variables  class definitions  FFI calls <C:typedef int64_t (*callb_after_send_t)(unsigned char* handlerID, int PortServerID, unsigned char* inputBuffer, int cbInput)>
  • 19. Pharo extensions  dynamic arrays {1. 2. 1+2}  traits  slots  comments "Pharo has ""quotes"" inside comments"
  • 20. Transformations  hints as comments login := Login new. "VW_TRANSLATION:Glorp.Login:Login"  methods with metadata visualWorksMetadata ^ #( 'superclassNamespace' 'UI' )
  • 22. Differences in semantics  object initialization (new) – inherit from class that behaves differently  same methods with different behavior (Pragma>>#selector)  dependencies mechanism  no Wipe mechanism  (#Smalltalk = 'Smalltalk') = false  'asdf' readStream upToAll: 'd'; upToEnd – 'f' in Pharo, 'df' in VisualWorks
  • 23. Differences in semantics  nil responds to #size  #(nil nil) asSet size (VW: 0, Pharo: 1)  'ab' endsWith: $c (VW: true)  1.0 == 1.0 (VW: false)  '' asNumber (VW: 0, Pharo: error)  method instVarNamed: 'sourceCode'  Dictionary new keys (VW: Set, Pharo: Array)
  • 24. Tests!  many small hidden incompatibilities  hard to detect with static analysis  good code coverage, mutation testing, UI tests  useful for the platform updates too
  • 26.  layers separation  minimize redundancy, improve re-usability  minimize work required for the UI and “glue” layers  improve testability  support for the common business application patterns  ... production quality small business application in few days
  • 28.  describes applications using well-defined first-class entities (parts, conditions, actions, use-cases...) partInterface createAction: #submit do: [ self submit ] if: (APCondition on: [self isDirty] ifNot: #NoChange) helpText: 'Submit the form'.  predefined parts (for lists, trees…)  enumerations (combo-boxes, menus...)
  • 29.  aspects redirection partInterface createAspectNamed: #statesList redirectTo: #(state enumerationTextList).  layouts, UI configurations aValueConfiguration addConfigElement: (APValueConfigElementList onPart: aValueConfiguration key: #options preInit: [:el | el rawList: options; yourself] postInit: [:el | el labelBefore: 'Options'); expectedLines: 10; yourself])
  • 30.  generic UI clients  interactions recording, automatic UI tests generation self afterDoing: [ self setAspect: #stringField value: 'foo'. ] expectStates: [ APExpectedStates expectAllInactive: #(#clearNumber #confirmNumber #saveData) expectAllActive: #(#clearString #confirmString #disableInput #intField #stringField) ].  prompts, modal windows  Glorp, Trachel...
  • 31.  VW: Aspect adaptors – closer relationship between the model and a widget  Pharo: Value holders (in Slots)  Different dependencies management UI layers adoption
  • 32. UI layers adoption  VisualWorks  Pharo – “compatible” ApplicationModel – UIBuilder replacement
  • 33.  Delta library – Bernd Elkemann – polling as intermediate step  C#, MS Office connection to Pharo – Benedikt Ehl Bindings δDELTA library
  • 34.  Consortium: – Threaded FFI – Spec 2 – GTK for Spec 2 – Better Windows VM – Headless VM – ... Acceleration of infrastructure improvements
  • 35.  will be open-sourced  user-friendly documentation  complex examples with Glorp
  • 36.  Pharo version repackaging to fit VW structure again  Pharo changes analysis, formatting  VisualWorks code conversion  merging  testing Glorp Pharo PDM (VW) latest (VW) 8.0.1 8.2 8.3.1-23
  • 38. SVG support fixed in PDM (CSS parsing, arcs) original
  • 39. Read-only image mode  Multiple headless instances of the same image (specialized workers)  Seamless connections  TaskIt futures
  • 40. Gettext - update  Pharo library for locale-aware translations of strings that use standard GNU gettext file formats Metacello new baseline: 'Gettext'; repository: 'github://pharo-contributions/Gettext/source'; load.
  • 41. Do you want to port your application to Pharo?  improve your tests  clean your architecture  tell us about your needs  participate  Pharo is not just a free alternative... is yours converter := VWToTonelConverter new. converter convert: files into: 'result' asFileReference.