swift generators
play

SWIFT GENERATORS Riccardo Solmi, Whole Factory, Italy THE WHOLE - PowerPoint PPT Presentation

LangDev Meeting 2018, Amsterdam PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORS Riccardo Solmi, Whole Factory, Italy THE WHOLE PLATFORM IS AT THE STATE OF THE ART DLSs covering almost every aspect of language definition Visual


  1. LangDev Meeting 2018, Amsterdam PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORS Riccardo Solmi, Whole Factory, Italy

  2. THE WHOLE PLATFORM IS AT THE STATE OF THE ART ▸ DLSs covering almost every aspect of language definition ▸ Visual notations designed for gesture based interactions ▸ DSLs for evolution, testing and deployment ▸ multiple versions, instance migration, software product lines

  3. … BUT WE ARE UNDERGOING A SLOW EVOLUTION ▸ The Whole Platform is not where we want it to be ▸ Implementation is far behind our vision ▸ New features are struggling to become pervasive

  4. TOO MUCH INNOVATION BRAKES: UNDERLYING TECHNOLOGIES ▸ Java is no longer Write once and Run Everywhere ▸ (iOS, Windows 10 UWP) ▸ GEF 3 is no longer developed and is outdated ▸ (Draw 2D, poor Multitouch, non composable UI, Java) ▸ Eclipse is too much big and complex for too little ▸ (Classic IDE, Java)

  5. TOO MUCH INNOVATION BRAKES: WHOLE FRAMEWORK ▸ Duality: framework level <-> domain level ▸ Duplication, encoding, constrained domain innovation ▸ Framework APIs in well-established but wrong places ▸ Modeling, events, reflection, and typing ▸ Framework evolution is inherently slower than domain level evolution

  6. SO WE NEED TO START OVER AGAIN? ▸ No, domain level code and generated code account for 98% of the code base ▸ We decided to reuse the domain level and to redesign and rewrite the framework level ▸ Swift + iOS are the technologies chosen for the porting ▸ Existing Eclipse based workbench has been used to accelerate the bootstrapping process

  7. OVERVIEW OF THE PORTING PROCESS: FIRST ITERATIONS MODELING Learning STRUCTURE BEHAVIOR 0 Experimenting WE ARE HERE 3 Swift Prototyping UX Metamodels Domain Generating 2 1 types model structure Generic and Event specific entities 1 Domain typing sourcing 2 Marker using existing Events 0 interface metamodels Structural bootstrap UI / Behavioral bootstrap framework JSON-LD Specific Supporting Swift Factory 3 notations translational semantics for Generic Swift notations Interactions PRESENTATION PERSISTENCE

  8. ITERATION 0 FIRST ITERATION PROTOTYPES: SIMPLE GAMES

  9. 1 PAGE OF CODE (POC) = 70 LINES OF CODE (LOC) 🙃 ITERATION 1 GENERATING LANGUAGE IMPLEMENTATION (STRUCTURE) JSON Models SwiftSyntax SwiftAST (Swift*) 9 POC Swift implementation 122 LOC 662 LOC 6104 LOC 4550 LOC Swift code language (specific APIs) generator metamodel 1762 LOC Swift Factory 78 LOC 316 LOC 3465 LOC 2510 LOC serialization 967 LOC Generation time 2 S 3.5 S 100 S 60 S 12 S * Metamodel hand written starting from the official grammar

  10. ITERATION 1 MODELS ON IOS ▸ specific notation

  11. ITERATION 1 PERSISTENCE ▸ To bootstrap the platform by loading the metamodels ▸ XML Builder (too much complex for the bootstrap) ▸ JSON-LD (unordered -> cannot bootstrap metamodels) ▸ Swift Factory

  12. ITERATION 1 SWIFT FACTORY 
 PERSISTENCE ▸ No parser needed ▸ Suitable for 
 embedding 
 domain templates 
 in Swift code

  13. ITERATION 2 GENERIC NOTATIONS ▸ “Table” variant ▸ Dark theme

  14. ITERATION 3 SWIFT INTEGRATION THROUGH REVERSE ENGINEERING ▸ Add concrete syntax level Swift persistence to Eclipse backed by official Swift parser ▸ Using a fully automated generative process ▸ Suitable for source editing scenarios ▸ Add AST level Swift persistence to Eclipse ▸ Chained to, and initially derived by the syntax level ▸ Refined to better support generative scenarios

  15. ITERATION 3 SWIFTSYNTAX PERSISTENCE SwiftSyntaxSerializer SwiftSyntax PersistenceKit VISITOR Swift SwiftSyntax to JSON-LD SwiftSyntax JSON-LD Main Parse Swift PersistenceKit library Tree Syntax JSON to SwiftSyntax code FACTORY

  16. ITERATION 3 SWIFTSYNTAX PERSISTENCE SwiftSyntaxSerializer SwiftSyntax PersistenceKit VISITOR Swift SwiftSyntax to JSON-LD SwiftSyntax JSON-LD Main Parse Swift PersistenceKit library Tree Syntax JSON to SwiftSyntax code FACTORY instance of Github SwiftSyntax repo Generator Swift shell script SwiftSyntax Swift Syntax Reveng Grammar Syntax reveng metamodel ABSTRACT FACTORY

  17. ITERATION 3 1 PAGE OF CODE (POC) = 70 LINES OF CODE (LOC) SWIFTSYNTAX PERSISTENCE SwiftSyntaxSerializer SwiftSyntax PersistenceKit 2240 LOC VISITOR Swift SwiftSyntax to JSON-LD SwiftSyntax Main JSON-LD Parse Swift PersistenceKit 30 LOC library Tree Syntax JSON to SwiftSyntax code 2040 LOC FACTORY instance of Github 1100 LOC SwiftSyntax repo Generator Swift shell script SwiftSyntax Swift Syntax Reveng Grammar Syntax 42 LOC 13 POC reveng metamodel 1 POC ABSTRACT (400 LOC TEMPLATES) FACTORY 375 ENTITIES

  18. ITERATION 3 SWIFT SYNTAX EXAMPLE

  19. ITERATION 3 SWIFTAST PERSISTENCE SwiftAST PersistenceKit Swift SwiftSyntax SwiftSyntax to SwiftAST Swift SwiftAST Swift PersistenceKit migration AST notation Syntax code instance of PrettyPrint derived SwiftAST metamodel

  20. ITERATION 3 SWIFT AST EXAMPLE

  21. ITERATION 3 SWIFT AST EXAMPLE (2)

Recommend


More recommend