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

swift generators
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

SWIFT GENERATORS

PORTING THE WHOLE LWB TO SWIFT/IOS

Riccardo Solmi, Whole Factory, Italy LangDev Meeting 2018, Amsterdam

slide-2
SLIDE 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

slide-3
SLIDE 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

slide-4
SLIDE 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)

slide-5
SLIDE 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

slide-6
SLIDE 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

slide-7
SLIDE 7

OVERVIEW OF THE PORTING PROCESS: FIRST ITERATIONS

MODELING PRESENTATION PERSISTENCE

BEHAVIOR STRUCTURE

Marker interface JSON-LD Swift Factory Events UI framework / Generic and specific entities Specific notations Generic notations Domain types Metamodels

1 2 3

Swift Event sourcing Interactions

1

Learning Experimenting Prototyping UX Generating model structure

2

Domain typing using existing metamodels

3

Supporting translational semantics for Swift Structural bootstrap Behavioral bootstrap

WE ARE HERE

slide-8
SLIDE 8

FIRST ITERATION PROTOTYPES: SIMPLE GAMES

ITERATION 0

slide-9
SLIDE 9

1 PAGE OF CODE (POC) = 70 LINES OF CODE (LOC) 🙃

GENERATING LANGUAGE IMPLEMENTATION (STRUCTURE)

language metamodel Swift code generator Swift Factory serialization Swift implementation (specific APIs) JSON Models SwiftSyntax SwiftAST

122 LOC 662 LOC 6104 LOC 4550 LOC 78 LOC 316 LOC 3465 LOC 2510 LOC 2 S 3.5 S 100 S 60 S

Generation time

9 POC 12 S

(Swift*)

1762 LOC 967 LOC

* Metamodel hand written starting from the official grammar

ITERATION 1

slide-10
SLIDE 10

MODELS ON IOS

▸ specific notation

ITERATION 1

slide-11
SLIDE 11

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

ITERATION 1

slide-12
SLIDE 12

SWIFT FACTORY
 PERSISTENCE

▸ No parser needed ▸ Suitable for


embedding
 domain templates
 in Swift code

ITERATION 1

slide-13
SLIDE 13

GENERIC NOTATIONS

▸ “Table” variant ▸ Dark theme

ITERATION 2

slide-14
SLIDE 14

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

ITERATION 3

slide-15
SLIDE 15

SWIFTSYNTAX PERSISTENCE

JSON to SwiftSyntax SwiftSyntax Parse Tree SwiftSyntax to JSON-LD code SwiftSyntaxSerializer Main

VISITOR FACTORY

JSON-LD PersistenceKit Swift Syntax SwiftSyntax PersistenceKit Swift library

ITERATION 3

slide-16
SLIDE 16

SWIFTSYNTAX PERSISTENCE

JSON to SwiftSyntax SwiftSyntax Parse Tree SwiftSyntax to JSON-LD code SwiftSyntaxSerializer Main

VISITOR FACTORY

JSON-LD PersistenceKit Swift Syntax SwiftSyntax PersistenceKit Swift SwiftSyntax Reveng Grammar Github repo shell script Swift Syntax reveng SwiftSyntax Generator Swift Syntax metamodel

ABSTRACT FACTORY

instance of library

ITERATION 3

slide-17
SLIDE 17

1 PAGE OF CODE (POC) = 70 LINES OF CODE (LOC)

SWIFTSYNTAX PERSISTENCE

JSON to SwiftSyntax SwiftSyntax Parse Tree SwiftSyntax to JSON-LD code SwiftSyntaxSerializer Main

VISITOR FACTORY

JSON-LD PersistenceKit Swift Syntax SwiftSyntax PersistenceKit Swift SwiftSyntax Reveng Grammar Github repo shell script Swift Syntax reveng SwiftSyntax Generator Swift Syntax metamodel

ABSTRACT FACTORY

instance of

2240 LOC 2040 LOC 30 LOC 1100 LOC 42 LOC 375 ENTITIES 1 POC 13 POC (400 LOC TEMPLATES)

library

ITERATION 3

slide-18
SLIDE 18

SWIFT SYNTAX EXAMPLE

ITERATION 3

slide-19
SLIDE 19

SWIFTAST PERSISTENCE

SwiftSyntax PersistenceKit code Swift AST SwiftAST PersistenceKit Swift Swift Syntax SwiftSyntax to SwiftAST migration PrettyPrint SwiftAST notation SwiftAST metamodel instance of derived

ITERATION 3

slide-20
SLIDE 20

SWIFT AST EXAMPLE

ITERATION 3

slide-21
SLIDE 21

SWIFT AST EXAMPLE (2)

ITERATION 3