porting the whole lwb to swift/ios swift generatorslangdevcon.org/slides/sol18_langdev_swift.pdf ·...

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

Upload: others

Post on 08-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

SWIFT GENERATORSPORTING THE WHOLE LWB TO SWIFT/IOS

Riccardo Solmi, Whole Factory, Italy

LangDev Meeting 2018, Amsterdam

Page 2: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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

Page 3: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

… 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

Page 4: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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)

Page 5: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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

Page 6: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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

Page 7: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

OVERVIEW OF THE PORTING PROCESS: FIRST ITERATIONSMODELING

PRESENTATION PERSISTENCE

BEHAVIORSTRUCTURE

Marker interface

JSON-LD Swift Factory

Events

UI framework

/

Generic and specific entities

Specific notations

Generic notations

Domain types

Metamodels

01

2

3 Swift

Event sourcing

Interactions

0

1

Learning Experimenting Prototyping UX

Generating model structure

2 Domain typing using existing metamodels

3Supporting translational semantics for Swift

Structural bootstrap Behavioral bootstrap

WE ARE HERE

Page 8: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

FIRST ITERATION PROTOTYPES: SIMPLE GAMES

ITERATION 0

Page 9: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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 SGeneration time

9 POC

12 S

(Swift*)

1762 LOC

967 LOC

* Metamodel hand written starting from the official grammar

ITERATION 1

Page 10: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

MODELS ON IOS

▸ specific notation

ITERATION 1

Page 11: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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

Page 12: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

SWIFT FACTORYPERSISTENCE▸ No parser needed

▸ Suitable forembeddingdomain templatesin Swift code

ITERATION 1

Page 13: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

GENERIC NOTATIONS

▸ “Table” variant

▸ Dark theme

ITERATION 2

Page 14: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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

Page 15: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

SWIFTSYNTAX PERSISTENCE

JSON to SwiftSyntax

SwiftSyntaxParse Tree

SwiftSyntax to JSON-LD

code

SwiftSyntaxSerializer

Main

VISITOR

FACTORY

JSON-LD PersistenceKit Swift

Syntax

SwiftSyntax PersistenceKit

Swift

library

ITERATION 3

Page 16: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

SWIFTSYNTAX PERSISTENCE

JSON to SwiftSyntax

SwiftSyntaxParse 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

metamodelABSTRACT FACTORY

instance of

library

ITERATION 3

Page 17: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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

SWIFTSYNTAX PERSISTENCE

JSON to SwiftSyntax

SwiftSyntaxParse 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

metamodelABSTRACT FACTORY

instance of

2240 LOC

2040 LOC

30 LOC

1100 LOC

42 LOC

375 ENTITIES1 POC

13 POC(400 LOC TEMPLATES)

library

ITERATION 3

Page 18: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

SWIFT SYNTAX EXAMPLE

ITERATION 3

Page 19: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

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

Page 20: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

SWIFT AST EXAMPLE

ITERATION 3

Page 21: PORTING THE WHOLE LWB TO SWIFT/IOS SWIFT GENERATORSlangdevcon.org/slides/Sol18_LangDev_Swift.pdf · Sol18_LangDev_Swift ios porting Created Date: 3/13/2018 4:56:22 PM

SWIFT AST EXAMPLE (2)

ITERATION 3