
[Musica]
[Applausi]
Ciao, ho tre parti nella mia
parla il primo è perché vorresti
per costruire la tua lingua il secondo
parte sta costruendo un piccolo linguaggio e
la terza parte quindi è un paio di
Le lezioni apprese abbiamo imparato dalla costruzione
le lingue
molte cose non ho abbastanza tempo parlerò
rapidamente e fai domande velocemente a
Alla fine avremo ottenere questo fatto in qualche modo tutto
giusto così motivazione che probabilmente hai visto
gli uomini d’affari dicono qualcosa del genere
sai che ho appena scritto quelle
requisiti e ora devo spiegare
loro per tre mesi quindi il tecnico
ragazzi per implementarlo e lo otterranno
sbagliato comunque e poi ovviamente il
anche le persone tecniche sono frustrate
perché ottengono queste parole imprecise
documenti con cose in esso e loro
non so davvero come implementarlo
ma sono responsabili se ha fallito
è sempre colpa loro o nostra
colpa degli sviluppatori, quindi è brutto
c’è anche l’altra direzione dove
i ragazzi IT decidono che devono farlo
reimplementare qualsiasi applicazione in e
usa qualche nuova tecnologia che conosci mobile
micro servizio qualunque cosa e così il
gli uomini d’affari devono ancora parlare
quei ragazzi e spiegano loro cosa sono
l’applicazione fa ancora così
è fastidioso ma ovviamente il
ragazzi tecnici devono farlo perché
sono hype guidati come tutti noi e
quindi dobbiamo rifare tutto ogni pochi
anni in una nuova tecnologia, quindi come possiamo
rendere quel problema meno noioso noi
dovrebbe essere in grado di disaccoppiare in qualche modo
taglio veloce e avviso Tecnologia velocemente
tagliare se il tuo tedesco non sei probabilmente
sorpreso di questa parola se parli
Inglese nativamente questo è il nostro tentativo di
sai fare un asilo perché lì
non è una parola in inglese che rappresenta
abbastanza rapidamente se traduci
si ottiene la professionalità che è
completamente non si adatta velocemente la carta è
il nucleo non tecnico del tuo sistema
che la cosa che è rilevante per il tuo
dominio ha fatto il business reale
la conoscenza o qualsiasi altra cosa così in primo luogo tagliare
bella parola quindi vuoi rappresentarlo
in modo tale che sia indipendente da a
particolare tecnologia che vuoi
rappresentarlo in un modo che è
abbastanza formale in modo che possa essere
testato direttamente analizzato eseguito
simulata
vuoi rappresentarlo in un modo
con la lingua che è amichevole così
tu conosci questa gente qui
sanno che possono scrivere e lavorare direttamente
con questo tipo di cose e non solo il
ragazzi tecnici, ecco l’ idea giusta
hai costruito un linguaggio specifico per il dominio
questo è formale che è controllabile e
ciò è comprensibile da quelle persone
e quindi possono implementare direttamente
sistemi scrivendo codice in quella lingua
e sto mettendo le virgolette in giro
tutte queste cose perché non lo so
cosa dovremmo usare come parola giusta
Non voglio chiamarlo codice perché
allora quei ragazzi si spaventano che non voglio
chiamarlo programmazione, ma se io lo chiamo
modellando tutti pensano a scatole e
linee quindi è che è una formulazione difficile
problema forse dovrei chiamarlo facoltà
tagliando ma poi è anche peggio di
comunque , come funziona?
concettualmente e diventerò più concreto
in un momento così hai il ragazzo d’ affari
crea le specifiche dei modelli fuzzy
cose diverse per diverso
aspetti di un sistema e lo fanno da
usando lingue su misura per questi
diversi aspetti sono implementati
dal ragazzo del software giusto e poi di
Certo, hai bisogno di strumenti che ti permettano
implementare i linguaggi questi sono quindi meta
banchi di lavoro di lingue o lingue e
quelli sono implementati da persone strane
giusto perché devono lavorare su meta
meta livello conosco alcuni di loro loro
non sembra tutto questo ma è un
approssimazione ragionevolmente vicina, quindi
Il banco di lavoro che mi piace usare è MP
roba open source da JetBrains
Lo mostrerò in un attimo, quindi vado
per mostrarti alcuni esempi che forse
spero di tornare a casa perché vorresti
per fare questo ecco un tedesco scusato
questa è una rappresentazione di un assicuratore
di una parte di un prodotto assicurativo e
questo sembra un documento di Word
e il motivo per cui sembra una parola
il documento è così come nel vecchio
sistema in realtà era un documento di Word
che è stato poi trasferito in a
formato di trasferimento PDF spedito ad alcuni
a buon mercato sai posto di implementazione
e poi le persone hanno implementato tutto il
roba interessante manualmente che puoi vedere
ecco che queste cose pseudocodice
in realtà no non sono nell’originale
sistema erano in realtà tedeschi così tu
chiesti come queste persone per l’altro
la fine del mondo sarebbe in realtà
capire questo ma qualunque modo
ovviamente questo non è molto simile
processo semplificato e così eravamo
incaricato di costruire un dominio specifico
linguaggio che ha cercato di sembrare tanto
possibile come documento Word originale
cosa ma è ancora abbastanza formale da essere
eseguibile e quindi qui puoi vedere
dichiarazioni dei parametri che puoi effettivamente
vedere il codice che esegue l’intera tabella
la cosa è essenzialmente una dichiarazione di un caso
giusto quindi ci sono diversi casi e
allora questo è ciò che viene eseguito e anche questo
mescola conosci le descrizioni testuali e
sembra davvero un documento di parole e
quindi questo è un esempio di un particolare
DSL e ovviamente l’idea di fare
sembra amichevole per incontrarsi con il principale
esperto è stato spinto a una sorta di
estrema destra non devi farlo
che male proprio qui è un altro esempio
calcolo dei benefici pubblici in un tedesco
contesto che ho menzionato perché ho
un altro contesto più tardi e puoi vedere
c’è un mix tra forma quasi simile
stile e linguaggio proprio così questi questi
cose in grassetto sono sempre come sempre
non puoi rimuoverli come in a
sono come sono normali editor di testo
proiettato come un modello in cui tu
metti il tuo codice e poi puoi metterlo
espressioni qui come qualsiasi altra
linguaggio e quindi un problema che noi
trovato con esperti di dominio è che loro
non mi piace l’effetto carta vuota giusto
dai loro un file vuoto in cui
possono mettere il loro codice non è una buona idea
devi guidare le persone e puoi farlo
che sai dare uno stile alla forma
cosa in cui possono poi compilare
inserire codice in vari punti questo è solo un
esempio casuale di una notazione grafica
per un linguaggio di programmazione funzionale
solo per illustrare si puoi anche fare
la grafica è sorprendentemente rara, intendo
le persone utili non vogliono così tanto loro
piuttosto preferisco tavoli simboli matematici roba
così, ma il grafico occasionale
diagramma per esempio per la modellazione dei dati
ovviamente ha senso qui è uno strano
esempio
è usato per specificare le regole che vanno
nei grafici di Tahoe, cazzo di tribali
Tedesco e forse olandese non so così
se guidi un camion ci sono tutti questi
regole quando devi fare delle pause e
queste regole non sono banali e lo sono
diverso in ogni paese europeo
solo al di fuori dell’UE e se sei un
produttore di questi grafici tachigrafo voi
Devo descrivere queste regole in qualche modo e
il nostro cliente ha costruito un linguaggio prototipo
Immagino che tu possa indovinare quale strumento hanno
costruisci un prototipo nel giusto Excel come
tutti fanno tutto in Excel e
quindi abbiamo creato una notazione molto personalizzata
questa è una notazione per il linguaggio che
sembra che nessun altro DSL perché ci proviamo
per replicare Excel ma c’è un tipo
sistema dietro di esso c’è una struttura
dietro a queste bottiglie diverse se tu
avrà un significato semantico che puoi incorporare
Codice C e quindi da quello che generiamo
il firmware che gira effettivamente sul
tachigrafo
e quindi questo è un modo molto efficace per
gestisci tutte queste regole queste sono giuste
due esempi a caso per dimostrare che possiamo
usa le notazioni matematiche e questo è
funzione ricorsiva a funzione corta
per assicurazione matematica clicca clicca questo è
esempio che credo abbia bisogno di alcuni
lucidatura stilistica in termini di
linguaggio ma è usato per descrivere o
implementare in realtà un unblack via satellite
software in modo che il software che
controlla la tua conoscenza della gestione termica
programmazione della gestione energetica di vari
attività su un satellite che fa parte del
implementazione qui e questo è un
esempio dall’assistenza sanitaria in cui i medici
e altri professionisti del settore medico codificano
algoritmi per la diagnosi di vari voi
conoscere l’ effetto non dovrei dire molto io
non dovrei dire diagnosticare malattie come
parte di una terapia che seguono essenzialmente
il progresso e poi sai identificare
se dovresti prendere questo cuscino
pillola o sai misurare il tuo
temperatura a questo o quel tempo o avere
più colazione o una certa dieta e in
il caso peggiore ti dice di chiamare il tuo
dottore, va bene così l’ idea era avere
i medici dirigono il codice di questi algoritmi
in questo linguaggio dipende molto
alberi decisionali e tabelle decisionali e
poi, naturalmente, possono anche scrivere test
quindi se tu
simulare un trattamento completo per un dato
paziente che è stato molto interessante
progetto perché se sai qualcosa
A proposito di sanità si potrebbe sapere che in
Per fare questo, come costruire tale
applicazioni che fanno questo tipo di
cosa di supporto alla terapia devi ottenere
una radice dalla FDA Food and Drug
Amministrazione negli Stati Uniti e non è così
ovvio come ottieni DSL e codice
generazione e tutto questo tipo di
certificato dalla FDA ma c’è un
processo a due fasi, abbiamo il nostro
il cliente è andato a buon fine
la prima fase quindi siamo estremamente
sicuro che questa cosa otterrà il
timbro così è molto interessante quindi
c’è una fonte sulla carta che noi
recentemente ho scritto che puoi o
in qualche modo salvare da dietro il paywall
oppure puoi trovare una bozza mentre succede
il mio sito web comunque questo era il
motivazione perché vorresti farlo
DSL se li fai bene ti permettono di farlo
davvero integrare il dominio degli stakeholder
esperti nello sviluppo del software
processo direttamente al contrario di solo
scrivere documenti e poi sperare
il migliore di tutti questi esempi è gay
per costruito con MP MPs è un linguaggio
banco di lavoro a destra uno strumento per la costruzione
lingue è open source quindi tutto
Ho mostrato bene intendo i linguaggi di
corso propietario clienti giusto ma
la strumentazione per fare tutto questo è tutto
open source ci sono alcuni aspetti di
le lingue per esempio le tabelle e
i diagrammi che non sono direttamente parte
di parlamentari fanno parte di un se lo farai
libreria di estensioni ma è anche aperta
fonte non c’è cattura per quello che sono
parlando di qui penso personalmente
che MP è l’esempio più potente di
un banco di lavoro di lingua ovviamente sono un
un po ‘prevenuto, si potrebbe dire che io
usalo solo perché è la migliore scrittura
ciò significa che è sempre questa causalità in
entrambe le direzioni ma è estremamente
potente ed è stato usato per 10
anni la mia squadra nel team ha trascorso la
ultimi 10 anni facendo nient’altro e
mentre ha ancora le sue stranezze e ruvido
bordi credo che intendo che sono 15 anni di
storia dello sviluppo che conosci incorporata
esso è estremamente potente
e altamente raccomandato da usare qui sono a
un paio di aziende che usano MP in
produzione
potresti riconoscere quei ragazzi se lo sei
Olandese in modo che le tasse e le vostre prestazioni in
caso si ottiene alcuni sono calcolati in base
su un set di regole che è descritto e
implementato e testato Indy parcheggiato con
Parlamentari quindi l’ agenzia fiscale olandese ha un a
team di ingegneria linguistica per anni
in realtà come per 20 anni hanno fatto
questo e alcuni anni fa sono stati portati
tutto dal loro proprietario
soluzione ai parlamentari e così è davvero
interessante quello che sta succedendo lì, intendo
se vuoi vedere questa roba usata
davvero per assolutamente per te
dovrebbe parlare con quei ragazzi così hanno
beh dovrebbero dire agli aneddoti che è
banco di lavoro veramente interessante come
Ho detto ti permette di definire essenzialmente
tutti gli aspetti di una struttura linguistica
sintassi di sintassi tipo codice di sistema
i generatori interpretano tutto ciò
devi fare il linguaggio e di
Ovviamente l’IDE tutto ciò di cui hai bisogno
rendere la lingua utile al reale
persone e ciò che è interessante nei deputati di
particolare è che supporta tutti questi
diverse notazioni che hai visto molti di
loro nei miei esempi e supporta anche
modularità della lingua in modo da poter avere un
linguaggio che ha estensioni modulari noi
trascorso tre anni tra i 22 anni e a
progetto di ricerca e qualche altro anno
dopo quello che costruisce qualcosa ha chiamato e
meglio che è un mucchio di estensioni per
vedere per renderlo più utile per embedded
programmando puoi anche fare embedding
dove hai incorporato un dsl
un altro ma non come fanno in
scala o groovy o ruby usando
programmazione meta-riflessione di ma by
effettivo
come la definizione della lingua con il tipo
sistema e tutto è estremamente
potente in particolare ci permette di
usa questo schema qui dove a
il linguaggio specifico del dominio è spesso
strutturato in questi tre strati al
chiama hai un linguaggio funzionale con
espressioni tipi primitivi valori
cose come l’opzione funzioni ti digita
sappi che le cose che conosci da qualsiasi
linguaggio moderno ma poi tu costruisci
Comportamenti specifici del dominio intorno ad esso e
strutture dati specifiche del dominio in alto
ad esempio come un’assicurazione
contratto potrebbe essere un dominio specifico
struttura ha
regole al suo interno che si eseguono in modo simile
qualsiasi motore di regole ma poi al centro te
abbiamo queste espressioni funzionali che abbiamo
costruito un linguaggio chiamato kernel F come
kernel come nel core e F come funzionale
che è destinato ad essere usato qui e
essenzialmente tutte le lingue che abbiamo
costruito negli ultimi anni, incorpora questo
lingua quindi ora passiamo al
demo e in realtà quello che faremo
stiamo andando a fare un po ‘
estensione al colonnello F perché questo
non ha molto senso per te
fai un’analisi completa del dominio e prova a farlo
spiegare le complicazioni di a
dominio particolare, quindi quello che vedi qui
è un po ‘di codice per il kernel F tu
può definire una funzione che richiede due
argomenti il primo è un numero
tra 0 e 100 effettuiamo il controllo del range
per i numeri nel sistema di tipi qui e
una stringa e poi ha un if
espressione e dice se il numero qui
è più grande di 10 poi tu ritorni
saluti stringa delimitata altro ritorni
una stringa vuota in modo da poter eseguire questo in
l’interprete incorporato giusto e se
tu superi i 20 allora ottieni il saluto se
tu superi 10 e non ottieni niente di giusto e
ora la mia idea è solo per mostrarti come
tutto questo funziona per costruire un sistema modulare
estensione del linguaggio che essenzialmente fa
esattamente uguale al se ma è
piuttosto diverso che viene reimplementato
se come estensione modulare e usiamo
tocca le parole chiave solo perché le parole chiave in
qualsiasi lingua diversa dall’inglese
estremamente strano ma perché non così vogliamo
scrivere qui qualcosa come le palpebre
blah blah blah fatto bla bla sotto
filo che penso che sarebbe
chiamato in olandese
ma se poi l’altro ha fatto bene
okay, Google Translate ha fatto un buon lavoro
quindi ho già preparato un nuovo vuoto
lingua e una nuova soluzione vuota dove
Metterò l’interprete per fare tutto
di questa corsa l’ ho fatto perché è
noioso , basta che ne usi un po ‘
voci di menu per creare nuove lingue e
roba quindi non devo mostrarlo qui
usciremo comunque del tempo quindi creiamo
un nuovo concetto di linguaggio che chiamerò
la terra
è fatto sotto espressione giusta
tutto è un commento di espressione lasciato
perché è principalmente il linguaggio funzionale
così bene posso farlo ora come te
costruire qualcosa che sia modulare ma possibile
ancora usato in un’altra lingua è l’ uso
semplice polimorfismo orientato agli oggetti
giusto così sai che qui il Colonnello F
si aspetta espressioni perché il colonnello F
l’espressione si aspetta espressioni
essenzialmente ovunque così per poter
rendere l’ID stand e quelle cose essere
in grado di collegare qui devi ereditare
dall’espressione semplice oggetto
orientamento giusto quindi ho messo espressione
qui ma espressione espressione catturata
non è visibile il motivo per cui ho appena definito
una nuova lingua che non ha relazioni
a qualsiasi altra lingua, quindi non posso ereditare
dal concetto di espressione che viene
dal linguaggio F del kernel giusto è
non visibile quindi quello che ho intenzione di fare è
Sto per dire che la mia nuova lingua
qui estende il linguaggio dell’espressione
che il linguaggio che definisce
espressioni nel kernel F e quello
il linguaggio è bla bla bla base di base
qui questo è in realtà il pacchetto per
l’ espressione del kernel F vive per
ragioni storiche si chiama IAT è 3
quello era il nome della ricerca
progetto è un nome schifoso che lo farà
cambiato a un certo punto in realtà
qualcosa che i parlamentari non sono molto bravi in
le sue lingue di ridenominazione quindi è per questo che
ha ancora questo nome e io dico di esserlo
andando ad estendere questo linguaggio che
mi permette di esprimere qui come
qualcosa da cui eredito e perché
non funziona quindi questo è attento
è espressione dal linguaggio base giusto
linguaggio basato è JetBrains questa versione
di Java ha anche un’espressione se io
fai in modo che la mia cosa erediti da questa
questa è l’espressione sbagliata, quindi sono
in realtà un po ‘sorpreso perché non lo faccio
vedi oh sì perché è sbagliato
linguaggio
base di espressione di base che è quella
noti che non l’ho esplicitamente
ha spiegato il linguaggio basato su NPS così io
penso che sia una parte posteriore che è visibile qui
JetBrains pensa che sia una nostra caratteristica
non potrei essere d’accordo, forse puoi votare
da qualche parte per qualcosa va bene così ora
abbiamo le pubblicità fatte e quelle
espressione e voglio la sintassi per
quella cosa
per ora mi limiterò a definirlo come è che
è come la parola chiave principale giusto così io
vai nella definizione editor e definisci
un editore che è solo un LS I’m
combinando la compilazione di questa cosa così ora noi
generare un’implementazione linguistica che
è il codice Java che è quindi dinamicamente
caricato da deputati e posso ora entrare nel mio
esempio di programma qui e che cosa dovrei
essere in grado di fare posso usare gli Al
però oh sì, devo già importarlo
Va bene, voglio che tu faccia questo punto
che puoi usare solo una lingua
estensione se si importa quel particolare
nuova lingua nel tuo programma giusto e
sembra che ho dimenticato di eliminarlo
particolare importazione dopo che ho fatto il mio test
corri sì, c’è già la lingua
in modo che non avrebbe dovuto essere lì per
scopi dimostrativi e ora vorrei avere
modificato a destra è già lì okay così
comunque posso mettere qui gli isolotti
non sorprende anche non molto utile ma
funziona come strutturalmente così come
lo fa sotto l’ aspetto del pungiglione
strutturalmente in termini di albero di sintassi
cosa fanno gli altri bambini questa cosa
bene ha una condizione giusta quale è
l’espressione esattamente uno e poi noi
avere l’allora parte che sarebbe il
fatto bene quindi sto andando tutto fuori al tocco
qui a destra non sto solo andando a fare
il tocco sintattico concreto ma anche il
nomi della definizione della lingua
elementi quindi non essere molto sofisticato così
è abbondante un’altra espressione e poi
la destra in basso anche un’espressione okay
quindi, come fa l’editore a guardare bene?
l’editor semplicemente mette queste cose in a
raccolta giusta quindi arti e poi io
incorpora la condizione che non è molto
Ho appena notato l’olandese
poi la parola chiave fatta e ho messo il
espressione che rappresenta la parte allora
e ho messo la parola chiave del sottotitolo e il
rimanendo espressione ok sto compilando
questo torna all’esempio e tu
può vedere che il codice esistente è cambiato
come sembrava
perché è così bene che NPS usa una proiezione
Aletta tur non scrivi cose che sono
poi analizzato in un albero e poi
elaborato piuttosto ogni attività di modifica
cambia direttamente l’albero e poi lì
è un motore di proiezione quasi come un
Cosa mostra il controller Vista modello che mostra
in qualsiasi editor che definisci e se
hai già un’istanza di
qualcosa nel tuo albero e tu cambi
l’editore bene allora cambi il look
dei programmi esistenti , se questo è
bene o male dipende da ciò che si fa con
giusto ma è così che funziona così io
ora posso mettere il codice qui come per esempio a
più 3 quindi penso che possiamo già fare
qualcosa di utile saluto più adulti s
una corda vuota si nota che possiamo
già messo tutte le espressioni che sono
già lì in questa lingua qui
giusto così abbiamo appena detto che la condizione
allora e poi parte della nostra nuova lingua
concetto sono espressioni qualsiasi espressione
quindi posso già usare l’argomento
espressione di riferimento o il più
espressione qui senza altra cosa
notare che questi provengono da un altro
lingua giusta, quindi ho già fatto due
tipi di composizioni di composizione che ho
ho incorporato la mia nuova cosa nel kernel F e
Ho usato cose dal Colonnello F che
Sono stato incorporato nella mia nuova cosa
senza problemi di ambiguità o parser
qualcosa di così strutturalmente sembra
buono ma ovviamente da un sistema di tipo
prospettiva sbagliata perché noi
aspetto che questo sia booleano e non l’abbiamo fatto
Ditelo ovunque, quindi non ne riceviamo uno
errore in questo momento, quindi possiamo mettere il vantaggio
e a nessuno interessa il sistema tipo
non importa quindi sistemiamo così bene
entreremo nella lingua
definizione di nuovo e aggiungere un sistema di tipo
regola una regola di inferenza per il fatto
sotto espressione quando diciamo che il
tipo di aggiunte fatte e quelle
condizione di espressioni
deve essere booleano ora c’è un po ‘
particolarità del colonnello F che è
che ha tipi primitivi sostituibili
puoi collegare i tuoi tipi primitivi
tipi primitivi specifici del dominio in
linguaggio di espressione esistente e questo è
perché non sono solo come scrivere un
istanza del tipo booleano qui ma
In realtà userò la primitiva
Digitare Factory e ho chiesto di creare un
tipo booleano ma quello che è qui è un
equazione giusta dice per il tipo
sistema per correggere il tipo di
condizione deve essere uguale o un sottotipo
del tipo di tipo booleano letterale va bene
quindi vediamo se funziona
tornando indietro , premi F5 per raggiungere il rigore
il sistema di tipi e ora ricevo un errore
giusto e interessante già
capito che il tipo di questa cosa
ecco un numero compreso tra 2 e 102
perché sa che l’a è tra 0
e 100 e se aggiungo 2 sarà
un intervallo diversamente strutturato noi
non fare questo calcolo organizzare statica
per ogni programma perché così sarebbe
richiede un sistema di tipo completamente dipendente
che è leggermente al di là delle mie capacità
ma lo facciamo per abbastanza cose da essere
utile tutto bene quindi cambiamo questo
questo e, naturalmente, per replicare il
esempio da sopra dovremmo mettere un 10
ok ok, quindi abbiamo fatto progressi
cos’altro vediamo qui vediamo che a
stupido messaggio di errore che essenzialmente
dice che non hai calcolato un tipo per
nel complesso non sopporterei l’ espressione
giusto così non ha un tipo così
non posso controllare se il tipo di questo
tutta la cosa in qualche modo si adatta al tipo di
la funzione se ci fosse un difetto
definito giusto posso fare il tipo
esplicito qui e ora sta cercando di
controlla se questo tipo è se questo
type è un sottotipo di stringa ma non l’ho fatto
dire qualcosa su come il tipo di
l’intera espressione deriva da altro
Tipi di destra quindi cerchiamo di cerchiamo di rimediare
torniamo al nostro
scrivi qui e scriverò
il codice poi lo spiegherò così sono
dichiarerò una variabile di sistema di tipo che sono
andando ad esprimere che T è un super tipo
del tipo di espressioni fatte parte
e farò lo stesso per il
capisco allora sto andando a dire tipo di
l’intera cosa è T, quindi cosa fa?
ho detto prima che questo è un vero te
equazioni specificate, questo non è un
assegnazione o un test questa è un’equazione
un insieme di equazioni che vanno in a
risolutore che poi cerca di capire
la correttezza dei sistemi di tipi quindi cosa sono
dirò qui che sto dicendo che sono qui
definire una variabile T e I espressa
che questa variabile T deve essere uguale o uguale a
un super tipo di parte finita e it
deve essere anche solo un secondo
il vincolo deve essere uguale o uguale a
super tipo del pub altrimenti così in
altre parole per soddisfare entrambi questi T
deve essere il tipo super comune del
fatto e le espressioni in basso a destra
e se sono uguali, allora è solo
quello stesso tipo e quindi sono essenzialmente
dicendo che il tipo di tutto
espressione è esattamente quel tipo calcolato
Quindi, calcoliamo compilando una volta f5
e tutto va bene perché questo è
ora digita stringa perché il super comune
tipo di quella cosa e quella cosa è
sorpresa sorpresa stringa ok va bene
quindi vediamo cosa dicono i test okay
potrebbe cercare ciò che effettivamente il test
dice che il test dice che c’è un
flusso di eccezione che sta per essere lanciato
perché non ho ancora implementato un
interprete per questa cosa qui proprio così
non sa come eseguire effettivamente
questo diritto è solo codice e a
controllo di tipo statico ma non c’è
semantica esecuzione definiti finora un
NPS per impostazione predefinita si definisce la semantica
attraverso la generazione , ad esempio tu
potrebbe generare tutta questa roba in Java
e quindi eseguire il programma Java e in effetti noi
fare
avere un generatore java per questo colonnello F
lingua perché a fini di implementazione
quando distribuisci questa cosa per davvero è così
di solito una specie di server Java
cosa di back-end abbiamo anche un tipo
il generatore di script è quasi finito così tu
può distribuirlo nel browser e altro ancora
interessante a mio parere abbiamo questo
quadro interpretativo in cui è possibile eseguire
queste cose direttamente nell’IDE che
consente al tuo esperto di dominio quando lo fa
scrivere il codice in una DSL per giocare direttamente
con esso lo esegue direttamente nello strumento
quindi hai una sorta di inversione di tendenza
tempo senza alcuna implementazione dovrebbe
ulteriore persona di dominio okay, quindi facciamolo
implementare l’interprete che abbiamo un
quadro interpretativo qui che consente
noi per farlo, quindi abbiamo il permesso
espressione qui e quindi questo interprete
funziona essenzialmente mappando un pezzo di
albero di sintassi per un pezzo di codice scritto
in Java così come il modo di
definisci la semantica del tuo DSL in questo
caso è quello di scrivere il codice Java che fa
qualunque cosa la cosa dovrebbe fare così
scriviamo questo codice Java così il primo
cosa dobbiamo fare è che dobbiamo
eseguiamo dobbiamo valutare che il
condizione giusta per cui possiamo farlo
ricordando l’interprete ricorsivamente su
D nessuna condizione di punto, quindi questo hash è a
scorciatoia per chiamare l’interprete
di nuovo con questo nuovo nodo perché lo fai
per tutto il tempo è bello avere un
scorciatoia così da quello che proviene
indietro un oggetto Java e perché lo siamo
non c’è motivo di stare sulla difensiva qui
ovviamente dovresti controllare se lo è
in realtà un booleano ma per ora abbiamo solo
diciamo ok, sappiamo che è booleano perché nostro
tipo di sistema ha già verificato che noi
mi aspetto booleano qui e in realtà penso
Java esegue lo srotolamento automatico e quindi noi
può fare booleana condizione giusta in modo tale
è la condizione valutata e ora noi
posso semplicemente dire se sai se il nostro
se-allora-altra cosa è vera altra cosa fare
qualcos’altro bene cosa facciamo in
nel caso in cui la condizione sia vera
bene restituiamo la valutazione del
fatto parte e altrimenti restituiamo il
valutazione del
gli ambos schioccano bene e questo solo chiama
ricorsivamente l’interprete per qualunque cosa
espressioni già lì e penso
questo dovrebbe funzionare bene, quindi funziona
la foto di den kay per il dieci caso ma
non per l’ altro e questo è solo
perché mi sembra di aver messo una S qui
che non dovrebbe essere lì così ora funziona
okay, abbiamo implementato la struttura
sintassi del sistema di tipo semantica in qualunque cosa
15 minuti inclusi supporto IDE e
includendo o rendendo questo modulare
estensione di un linguaggio esistente noi
non ha toccato il linguaggio esistente in
tutto ciò che abbiamo messo in un modulo separato
potresti anche farlo se sei già esistente
il linguaggio era disponibile solo come binario
giusto un plug-in compilato quindi questo davvero
consente la modularità linguistica in
stesso modo e anche dal modo con il
stessi modelli di quelli orientati agli oggetti
programmazione molto utile è così che noi
costruisci molti dei nostri dsls costruendoli
in aggiunta al kernel per lo più esistente f
astrazioni
Va beh, a sorpresa, sono ancora in orario
torniamo alle diapositive
dai, quindi ci sono altre lingue
banchi di lavoro ovviamente c’è una parodia
il bue di Delft è un furfante
Amsterdam come dietro l’angolo su CWI
entrambi sono per lo più destinati
cose accademiche fanno davvero
cose interessanti ma non ne sono sicuro
suggerirei addirittura di usarlo come in
pratica senza qualche connessione con il
forse gli sviluppatori direbbero che io
non lo so, ma non lo è per lo più
usato per la ricerca poi c’è il testo X.
di cui potresti aver sentito parlare
è un linguaggio testuale basato sull’eclisse
banco di lavoro è dove ho iniziato il mio
carriera di modellazione testuale dopo I kind of
ha sofferto di UML e altre cose è
bello ma NPS è migliore e poi c’è
l’ intera piattaforma che può essere solo
usato in Italia almeno è usato solo
in Italia due liste di italiani e
Non lo so non l’ho mai visto usato
fuori dall’Italia, quindi immagino che non sia un
opzione è uno strumento interessante che c’è
un documento che abbiamo scritto nel 2013 che confronta
vari lavori lingua vendor si potrebbe
voglio controllare questo e ottenere una sorta di
confronto oggettivo naturalmente
vari paragrafi dei diversi
gli strumenti sono stati scritti dagli sviluppatori di
questi strumenti così qualunque sia l’ obiettivo
ma è stato accettato in modo ragionevole
diario stimabile quindi deve essere
alcune lezioni scientifiche tutto bene imparato
prima di tutto la lingua non è abbastanza
giusto è necessario, naturalmente, una lingua ma
allora hai bisogno di un buon IDE senza IDE
le lingue semplicemente non sono utili nel mio
opinione ed esperienza e anche questo è
perché molti se i risultati D interni
non sono veramente utili per i non programmatori
perché l’IDE non sa nulla
su di esso sicuramente puoi scrivere un IDE
plug-in e un plug-in del compilatore e
in qualche modo mischia tutto questo insieme ma
è molto più lavoro che farlo con
un’analisi del banco di lavoro dedicata
buoni messaggi di errore ti sono davvero utili
puoi davvero incazzare i tuoi utenti se tu
basta sapere il simbolo non trovato
i messaggi di errore di stile non sono validi
i refactoring ci sono alcuni come una cosa
come ad esempio il refactoring dei contratti di assicurazione
questo ha senso per tipo di linea di prodotti
se ho un contratto esistente , dovresti
fornire queste cose ma poi anche
testare se sei un ragazzo di assicurazione che
specifica un nuovo prodotto assicurativo che desideri
per testarlo perché non vuoi essere
responsabile se la tua azienda perde
milioni perché hai un’aritmetica
bug nel tuo contratto giusto ed è
in realtà non è una sfida da convincere
esperti di dominio per diventare test driven
lo vogliono davvero e ovviamente tu
desidera funzionalità avanzate come i debugger
qualsiasi cosa fatta o simulata del genere
influenze sul design del linguaggio in
oltre naturalmente al dominio
struttura e la notazione che fa appello
alle persone nel dominio che devi
prendere in considerazione cose come lo strumento
capacità come se davvero non si potesse fare
editor grafici come il testo X non puoi
fallo o devi in qualche modo mettere gmf
nell’intera storia che devi fare
sicuro di non stressare troppo i tuoi utenti
come se volessi avere una lingua con
eredità e contratti e io no
conoscere i modelli di metodo del modello e
paalam o spedizione e tu provi a vendere
che gli esperti di assicurazione che sta andando essere
una vendita dura perché questi più astratti
tipo di ingegneria del software di cose sono
cose non facilmente comunicate in quel modo
giusto e poi c’è anche una questione di
stile come puoi vedere chiaramente da questo
lingue di diapositive ben progettate possono solo
essere brutto come se si mescolasse stile COBOL e
lo stile lisp probabilmente non è una buona idea
giusto quindi c’è un po ‘sì è un
questione di gusti ed esperienze così come
rendere le persone precise come te
fai che i non programmatori facciano questo come scrivere
codice in tutti questi livelli come ho mostrato
e la prima cosa che dovresti fare sei tu
dovrebbe convincerli che l’espressione
te stesso precisamente in termini di
il dominio non sta programmando correttamente
la programmazione riguarda tutte queste entità
l’altra cosa è solo scrivere a
specifica precisa che si utilizza
qualcosa come funzioni o variabili
definizioni ma sai che questo è tuo
prima sfida la propaganda si deve
convincere la gente su che se
non sono convinto già e poi il
l’altra cosa è che devi fare un po ‘
formazione in modo tale che in realtà stiamo scrivendo correttamente
ora un tutorial per insegnare questi veramente
idee fondamentali di programmazione come
espressioni tipi riferimenti funzioni
parametri come quello per insegnare questo
molto lentamente e metodicamente a
i non programmatori iniziamo da Excel
perché tutti sanno eccellere e noi
tipo di costruire su di esso è un
sforzo open source se vuoi unirti
e aiutare i benvenuti e che usiamo per
tipo di porre le basi per il dominio
esperti per poi essere in grado di capire
e usare la particolare DSL in generale
riguardo alle competenze, la mia organizzazione
non sa come costruire le lingue
non abbiamo mai usato NPS e lo è anche
scienza missilistica perché linguaggio
ingegneria è informatica I
già non lo capivo quando ero
all’università vero è quello che senti
quindi la prima risposta è buona, ecco tutto
queste altre cose nuove non ne hai idea
di destra quindi cosa fai bene te?
costruisci le abilità che assumi le persone che ottieni
consulenti voi
comprate conoscenza qualunque non sia diversa
qui a destra e l’altra cosa che dico
che non è sulla diapositiva sono quegli strumenti
come i parlamentari di nuovo mentre loro hanno i loro
stranezze
fanno ingegneria del linguaggio non lo è
non è più l’ informatica
è l’ingegneria del software , è solo
qualcosa che fai è come se costruisci un
quadro giusto è solo un
cosa diversa che costruisci e tutti
chi ha qualche meta in cui sai di pensare
la loro testa può farlo è questo il
il prossimo sistema legacy sono motivato da questo
parla tra l’altro cercando di ottenere
liberarsi da una particolare implementazione
la tecnologia siamo ora solo tu sai
seppellire tutta questa roba in strani
strumenti come MP questa è una domanda valida
Penso di no e di lasciarmi spiegare
perché così ecco lo scenario che abbiamo a
banco di lavoro linguistico in questo caso MP e
la loro versione meravigliosa lingua e noi
generare quello – una sorta di runtime
Dicono che il codice Java va bene ora diciamo
la tua lingua cambia la lingua
la definizione cambia con cosa fai
i tuoi modelli esistenti hai ben MP
supporta il controllo delle versioni linguistiche e
migrazione automatica dei modelli esistenti
così puoi evolvere significativamente il tuo
lingua nel tempo anche se già
avere modelli in natura e non è possibile
toccali per la migrazione manuale esplicita
giusto lo strumento lo fa così ora il prossimo
lo scenario è quello che fai se il tuo
modifiche di runtime se passi da Java a
dattiloscritto perché devi metterlo
nel browser
bene, basta scrivere un nuovo generatore
non è sempre totalmente banale e molto
casi rari non è possibile perché tu
avere qualche costruttore strano che puoi mappare
al tuo obiettivo senza un enorme
impatto sulle prestazioni che accade
a volte ma è molto raro di solito tu
investi solo pochi mesi di scrittura
generatore e questi pochi mesi davvero
non contare se hai un uomo o una persona
anni inseriti nel tuo dominio specifico
i modelli giusti non sono molto grandi
investimento e quindi ovviamente domanda
il numero tre è quello che succede se vai
da parlamentari a qualsiasi nuovo capretto sul
blocca banco di lavoro come fai
migra quello e là la risposta è a
un po ‘più astratto ma sai
la tua lingua devi trovarti
conosci la struttura che conosci
semantica
e tu hai tutto come una specie di
istanza formale di quel modello di dati così
puoi sempre migrarlo allo stesso modo
linguaggio definito nella nuova tecnologia
come hai esportato una specie di XML qui
e tu hai importato qui, lo sai
semantica non c’è nulla di perso
non c’è la sepoltura nel codice Java che è
non è come se non si potesse invertire
ingegnere cosa significa questo è un it’s
forse difficile apprezzarlo da questo
scivolo astratto ma questo è enorme
differenza non si perde nulla bene
e abbiamo fatto questo esempio di testo olandese
agenzia hanno migrato tutti loro
regole di testo dal loro sistema proprietario
in MP hanno anche migrato i test
e hanno eseguito tutti i test esistenti
contro la nuova implementazione fino al
tutto ha funzionato così è possibile
senza sforzi proibitivi e questo è
davvero è davvero una differenza per
codificare questa roba in Java e mettere
in un AGP JB o qualcosa del genere
la risposta non è così come fa tutto questo
riguardare Agile questa è un’altra cosa che ho
senti bene, facciamo cose agili qui
facciamo DDD diamo ai nostri corsi quello
corrisponde al dominio che è buono
abbastanza
Penso che sia una sciocchezza totale così mi permetta
fai notare come questo sembra che ci siano
scenario di due scenari uno ne hai uno
progetto in cui sviluppi una lingua
e qualche altro codice che usa il
linguaggio nello stesso progetto giusto e
allora l’altro scenario sei già tu
hai un progetto che si sviluppa
la lingua e poi ne hai molti
progetti che usano la lingua come te
costruito questo non lo so
lingua assicurativa nella tua azienda e
allora hai diverso sai salute
assicurazione sulla vita e altro
assicurazione che usa quella lingua così
vediamo come funziona oops sorry in
termini di processo ora nel primo caso
questo sviluppo del linguaggio dentro il tuo
il progetto è esattamente come se tu fossi
sviluppare un quadro o una biblioteca o a
piattaforma come alcuni artefatti di base che
altre parti del progetto usano lì
niente di diverso
tranne che tu usi uno strumento diverso così io
non sento di dover dire altro
è la stessa cosa quindi nell’altro caso
dove hai questo progetto da costruire
la lingua e gli altri progetti a
usa bene la lingua qui è solo
come un dipendente
vedere su alcune cose di terze parti, se
usi qualunque pacchetto dal web
questo potrebbe cambiare ad un certo punto e tu
devi importare che devi decidere
faccio a usare la nuova versione del pacchetto e tu
devo migrare la stessa cosa qui se la tua
team linguistico sviluppa una nuova versione di
il linguaggio gli danno una nuova versione
lo pubblicano in una sorta di artefatto
cosa giusta repository e tu decidi se
vuoi usarlo e la cosa buona è
se lo fanno bene la nuova lingua
la versione viene fornita con gli script di migrazione
questo è in realtà qualcosa che è più facile
di cambiare una libreria perché
librerie e framework non vengono spediti
con gli script di migrazione i linguaggi fanno o
almeno puoi scrivere così non lo è
qualcosa che ti rende meno agile e
poi ovviamente il numero tre una volta
hai definito la tua lingua e ora tu
avere un DSL dove possono essere assicurati
definire, testare e sperimentare con nuovi
definizioni del prodotto stesse in tempo reale
tempo senza tanto tempo sai, facciamolo
implementalo manualmente questo è ciò che
effettivamente consente l’agilità del business I
penso che non ci sia altra tecnologia
quello che ti permette di farlo in questo
così così non riesco nemmeno a capire il
domanda e poi la lingua
definizione stessa hai visto come
piccolo codice che dovevo scrivere per implementare
questa cosa, naturalmente, per di più
lingue semanticamente ricche può essere
più lavoro ma ancora ho questa citazione
da uno dei miei clienti come me
aprì mps e guardò il
definizione della lingua mi stavo chiedendo
dove il codice era perché hai visto solo
questi come cinque cose sai che il
struttura l’editor per digitare system e
interpretare si stava chiedendo dov’è il
carne vera e non ce n’è perché
questo è tutto ciò che devi fare una volta
maestro NPS che è certamente abbastanza un
un po ‘di una curva di apprendimento hai molto
potente strumento a portata di mano sul tipo
di meta livello e il modo in cui sviluppo
le lingue letteralmente sono seduto insieme
con il codice esperto del dominio un po ‘
la lingua gira intorno al laptop e lascia
li provano lo faccio per un simile
ora come le iterazioni di un’ora
capire un po ‘ sulla creazione del dominio
un po ‘di linguaggio che provino a farlo
questo tre o quattro volte in un giorno e
poi vado a casa e le cose pulite su voi
sai a volte prendi scorciatoie qui
lo sai e il giorno dopo torno o se
tu
quindi è un processo estremamente agile in
fatto costruendo una lingua secondo me
è il modo migliore per capire un dominio
perché in contrasto con il semplice disegno di UML
diagrammi che rappresentano concetti di dominio
si può effettivamente giocare con questo e
istanziarlo che è molto più utile
di semplici foto, e allora?
integrazione continua bene proprio come
sempre giusto per consentire al tuo dominio
esperto capisce il mondo giusto il
i modelli eseguono i test nella lingua
banco di lavoro direttamente quindi in qualche modo
impegnarsi su una sorta di ho fatto
filiale e sono sul server di build
si eseguono le stesse prove, se non si riesce
torna a qui, allora si genera sul
costruire server per esempio Java
rappresentazione del tuo codice e anche tu
genera i test e quindi esegui il
prova di nuovo sul codice generato così
questo è il modo in cui si allinea la semantica di
l’interprete e il tuo generatore se
hai sufficienti test utili quanto
solito e poi una volta che hai generato il
artefatti lo combini con qualsiasi cosa
codice di framework che hai creato
del pacchetto di distribuzione e andare alla messa in scena
e poi per vivere l’implementazione di tutto questo
non è diverso da qualsiasi altro automatizzato
fase di sviluppo NPS può essere eseguito da
linea di comando non si conosce bene il problema
in realtà un po ‘ un problema perché il
il modo di impostare questo è un po ‘fastidioso
come solo in termini di dettagli
devo configurare ma altrimenti questo
funziona bene, abbiamo tutte le nostre lingue tutte
i nostri progetti dei clienti sono tutti in esecuzione su CI
come ci si aspetterebbe, quindi questo ci porta a
la conclusione ho alcune cose in più io
voglio menzionarne uno ne ho un altro
sessione domani qualcun altro è caduto
fuori così sono il tipo di sostituzione
speaker nella traccia blockchains e io sono
andando a parlare non proprio di orologio
catene ma su come effettivamente
implementare i contratti come nel reale
contratti con o senza catene a blocchi
e ovviamente uso un po ‘ di DSL qui così
se sei interessato a questo, potresti
voglio unirmi a questa stessa ora domani a
stanza diversa anche ce n’è un’altra
carta che voglio che tu voglia segnalare
tu ad aver catturato così come ti ho detto
abbiamo implementato questa cosa e meglio
proprio queste estensioni da vedere per anni
e noi abbiamo
scritto 46 pagine di carta in cui discutiamo
nel minuzioso dettaglio tutto il bene e
brutte esperienze abbiamo fatto questo
come cose come le prestazioni imparano
capacità di mps tutto ciò che puoi pensare
di così questo è un penso relativamente
conto oggettivo di forse uno dei
i più grandi progetti di sviluppo DSL
ci sono sicuramente anche con i parlamentari
conoscere un altro strumento che ha costruito a
ecosistema simile di lingue così questo
penso che sia davvero un buon tipo di realtà
verifica di cosa si può fare con
questi strumenti completano bene la separazione
di preoccupazioni è la chiave giusta separata
carta di facoltà dalla tecnologia altrimenti
entrerai nella trappola dell’eredità cara
il sé può farlo completamente
separa velocemente la scheda dal tecnico
preoccupazioni che possono aiutare a integrare il dominio
esperti nel processo di sviluppo
direttamente se costruisci le lingue in a
modo in cui puoi almeno fare coppia
programmazione tra un ragazzo tecnico in a
esperto di dominio e nel tempo lo faranno
è solo il linguaggio giusto per i banchi di lavoro
cosa consente a TS else di non aprire
qualunque ideologia e inizia a farlo
da zero come costruire il tuo
parser e fare tutto da zero
è solo troppo lavoro
e infine sì , non ci sono
conflitto con l’agile devi solo
sai che pensi a come andrai
avvicinamento, va bene
domande che devi fare domande
perché ho finito cinque minuti prima
il tour è finito ora devi chiedere
domande vi ringrazio molto molto
mi diverto molto a parlare
guarda gli ampere ora che posso
ricordo molto tempo fa ero al ginocchio
in Common Lisp e vicino e indietro poi io
Stavo pensando a qualcosa che tu
chiamavo gli editori delle proiezioni mi stavo chiedendo
la dichiarazione if if else that just just
fatto puoi davvero cambiare l’editor
in questo momento o forse forse ci vuole un po ‘
più tempo
per permetterti di proiettare anche questo
costruzione if-then-else nell’editor
diversamente, ad esempio il mio cursore
i comandi potrebbero cambiare in base a
se sono nell’espressione o no io
non so cosa vuoi dire quel cursore
comandi ma bene per esempio il
espressione matematica dovrebbe
cambia i comandi del cursore se vuoi
andare e saltare giù si può anche avere
palette in cui è possibile trascinare e rilasciare in
simboli matematici sì, posso anche
costruisci più editori per lo stesso
concetto e renderli commutabili così
ogni utente può selezionare il proprio editor
sì, una cosa non l’ho detto ma
una cosa che è cambiata
Intendo dire che gli editori di protezione sono stati
sperimentato negli anni ’70 e ’80
ma la differenza da allora a oggi
è che gli editori che definisci ora sono
effettivamente utilizzabile come puoi la maggior parte dei
cose che puoi semplicemente scrivere linearmente e
non costruendo l’albero esplicitamente quale
no ma come non vuoi entrare più
5 3 destra si desidera digitare 5 più 3 e
questa capacità si basa in realtà su un
estensione dei parlamentari che costruiamo è
le celle del programmatore è anche open source
e questo repository di estensione e questo
ti permette con pochissimo sforzo di
costruire editor che sono molto vicini a
editor di testo per notazioni testuali e
certo se hai un testo non testuale
annotazioni come tabelle o simboli matematici
bene allora hai i bottoni e roba
perché puoi digitare intendo e nessuno
si aspetta di poter digitare perché
non è così che interagisci con questi
cose molto cool che sarà davvero controllare
fuori grazie mille
chiunque altro
ok grazie mille
[Applausi]
[Applausi]
Ciao, ho tre parti nella mia
parla il primo è perché vorresti
per costruire la tua lingua il secondo
parte sta costruendo un piccolo linguaggio e
la terza parte quindi è un paio di
Le lezioni apprese abbiamo imparato dalla costruzione
le lingue
molte cose non ho abbastanza tempo parlerò
rapidamente e fai domande velocemente a
Alla fine avremo ottenere questo fatto in qualche modo tutto
giusto così motivazione che probabilmente hai visto
gli uomini d’affari dicono qualcosa del genere
sai che ho appena scritto quelle
requisiti e ora devo spiegare
loro per tre mesi quindi il tecnico
ragazzi per implementarlo e lo otterranno
sbagliato comunque e poi ovviamente il
anche le persone tecniche sono frustrate
perché ottengono queste parole imprecise
documenti con cose in esso e loro
non so davvero come implementarlo
ma sono responsabili se ha fallito
è sempre colpa loro o nostra
colpa degli sviluppatori, quindi è brutto
c’è anche l’altra direzione dove
i ragazzi IT decidono che devono farlo
reimplementare qualsiasi applicazione in e
usa qualche nuova tecnologia che conosci mobile
micro servizio qualunque cosa e così il
gli uomini d’affari devono ancora parlare
quei ragazzi e spiegano loro cosa sono
l’applicazione fa ancora così
è fastidioso ma ovviamente il
ragazzi tecnici devono farlo perché
sono hype guidati come tutti noi e
quindi dobbiamo rifare tutto ogni pochi
anni in una nuova tecnologia, quindi come possiamo
rendere quel problema meno noioso noi
dovrebbe essere in grado di disaccoppiare in qualche modo
taglio veloce e avviso Tecnologia velocemente
tagliare se il tuo tedesco non sei probabilmente
sorpreso di questa parola se parli
Inglese nativamente questo è il nostro tentativo di
sai fare un asilo perché lì
non è una parola in inglese che rappresenta
abbastanza rapidamente se traduci
si ottiene la professionalità che è
completamente non si adatta velocemente la carta è
il nucleo non tecnico del tuo sistema
che la cosa che è rilevante per il tuo
dominio ha fatto il business reale
la conoscenza o qualsiasi altra cosa così in primo luogo tagliare
bella parola quindi vuoi rappresentarlo
in modo tale che sia indipendente da a
particolare tecnologia che vuoi
rappresentarlo in un modo che è
abbastanza formale in modo che possa essere
testato direttamente analizzato eseguito
simulata
vuoi rappresentarlo in un modo
con la lingua che è amichevole così
tu conosci questa gente qui
sanno che possono scrivere e lavorare direttamente
con questo tipo di cose e non solo il
ragazzi tecnici, ecco l’ idea giusta
hai costruito un linguaggio specifico per il dominio
questo è formale che è controllabile e
ciò è comprensibile da quelle persone
e quindi possono implementare direttamente
sistemi scrivendo codice in quella lingua
e sto mettendo le virgolette in giro
tutte queste cose perché non lo so
cosa dovremmo usare come parola giusta
Non voglio chiamarlo codice perché
allora quei ragazzi si spaventano che non voglio
chiamarlo programmazione, ma se io lo chiamo
modellando tutti pensano a scatole e
linee quindi è che è una formulazione difficile
problema forse dovrei chiamarlo facoltà
tagliando ma poi è anche peggio di
comunque , come funziona?
concettualmente e diventerò più concreto
in un momento così hai il ragazzo d’ affari
crea le specifiche dei modelli fuzzy
cose diverse per diverso
aspetti di un sistema e lo fanno da
usando lingue su misura per questi
diversi aspetti sono implementati
dal ragazzo del software giusto e poi di
Certo, hai bisogno di strumenti che ti permettano
implementare i linguaggi questi sono quindi meta
banchi di lavoro di lingue o lingue e
quelli sono implementati da persone strane
giusto perché devono lavorare su meta
meta livello conosco alcuni di loro loro
non sembra tutto questo ma è un
approssimazione ragionevolmente vicina, quindi
Il banco di lavoro che mi piace usare è MP
roba open source da JetBrains
Lo mostrerò in un attimo, quindi vado
per mostrarti alcuni esempi che forse
spero di tornare a casa perché vorresti
per fare questo ecco un tedesco scusato
questa è una rappresentazione di un assicuratore
di una parte di un prodotto assicurativo e
questo sembra un documento di Word
e il motivo per cui sembra una parola
il documento è così come nel vecchio
sistema in realtà era un documento di Word
che è stato poi trasferito in a
formato di trasferimento PDF spedito ad alcuni
a buon mercato sai posto di implementazione
e poi le persone hanno implementato tutto il
roba interessante manualmente che puoi vedere
ecco che queste cose pseudocodice
in realtà no non sono nell’originale
sistema erano in realtà tedeschi così tu
chiesti come queste persone per l’altro
la fine del mondo sarebbe in realtà
capire questo ma qualunque modo
ovviamente questo non è molto simile
processo semplificato e così eravamo
incaricato di costruire un dominio specifico
linguaggio che ha cercato di sembrare tanto
possibile come documento Word originale
cosa ma è ancora abbastanza formale da essere
eseguibile e quindi qui puoi vedere
dichiarazioni dei parametri che puoi effettivamente
vedere il codice che esegue l’intera tabella
la cosa è essenzialmente una dichiarazione di un caso
giusto quindi ci sono diversi casi e
allora questo è ciò che viene eseguito e anche questo
mescola conosci le descrizioni testuali e
sembra davvero un documento di parole e
quindi questo è un esempio di un particolare
DSL e ovviamente l’idea di fare
sembra amichevole per incontrarsi con il principale
esperto è stato spinto a una sorta di
estrema destra non devi farlo
che male proprio qui è un altro esempio
calcolo dei benefici pubblici in un tedesco
contesto che ho menzionato perché ho
un altro contesto più tardi e puoi vedere
c’è un mix tra forma quasi simile
stile e linguaggio proprio così questi questi
cose in grassetto sono sempre come sempre
non puoi rimuoverli come in a
sono come sono normali editor di testo
proiettato come un modello in cui tu
metti il tuo codice e poi puoi metterlo
espressioni qui come qualsiasi altra
linguaggio e quindi un problema che noi
trovato con esperti di dominio è che loro
non mi piace l’effetto carta vuota giusto
dai loro un file vuoto in cui
possono mettere il loro codice non è una buona idea
devi guidare le persone e puoi farlo
che sai dare uno stile alla forma
cosa in cui possono poi compilare
inserire codice in vari punti questo è solo un
esempio casuale di una notazione grafica
per un linguaggio di programmazione funzionale
solo per illustrare si puoi anche fare
la grafica è sorprendentemente rara, intendo
le persone utili non vogliono così tanto loro
piuttosto preferisco tavoli simboli matematici roba
così, ma il grafico occasionale
diagramma per esempio per la modellazione dei dati
ovviamente ha senso qui è uno strano
esempio
è usato per specificare le regole che vanno
nei grafici di Tahoe, cazzo di tribali
Tedesco e forse olandese non so così
se guidi un camion ci sono tutti questi
regole quando devi fare delle pause e
queste regole non sono banali e lo sono
diverso in ogni paese europeo
solo al di fuori dell’UE e se sei un
produttore di questi grafici tachigrafo voi
Devo descrivere queste regole in qualche modo e
il nostro cliente ha costruito un linguaggio prototipo
Immagino che tu possa indovinare quale strumento hanno
costruisci un prototipo nel giusto Excel come
tutti fanno tutto in Excel e
quindi abbiamo creato una notazione molto personalizzata
questa è una notazione per il linguaggio che
sembra che nessun altro DSL perché ci proviamo
per replicare Excel ma c’è un tipo
sistema dietro di esso c’è una struttura
dietro a queste bottiglie diverse se tu
avrà un significato semantico che puoi incorporare
Codice C e quindi da quello che generiamo
il firmware che gira effettivamente sul
tachigrafo
e quindi questo è un modo molto efficace per
gestisci tutte queste regole queste sono giuste
due esempi a caso per dimostrare che possiamo
usa le notazioni matematiche e questo è
funzione ricorsiva a funzione corta
per assicurazione matematica clicca clicca questo è
esempio che credo abbia bisogno di alcuni
lucidatura stilistica in termini di
linguaggio ma è usato per descrivere o
implementare in realtà un unblack via satellite
software in modo che il software che
controlla la tua conoscenza della gestione termica
programmazione della gestione energetica di vari
attività su un satellite che fa parte del
implementazione qui e questo è un
esempio dall’assistenza sanitaria in cui i medici
e altri professionisti del settore medico codificano
algoritmi per la diagnosi di vari voi
conoscere l’ effetto non dovrei dire molto io
non dovrei dire diagnosticare malattie come
parte di una terapia che seguono essenzialmente
il progresso e poi sai identificare
se dovresti prendere questo cuscino
pillola o sai misurare il tuo
temperatura a questo o quel tempo o avere
più colazione o una certa dieta e in
il caso peggiore ti dice di chiamare il tuo
dottore, va bene così l’ idea era avere
i medici dirigono il codice di questi algoritmi
in questo linguaggio dipende molto
alberi decisionali e tabelle decisionali e
poi, naturalmente, possono anche scrivere test
quindi se tu
simulare un trattamento completo per un dato
paziente che è stato molto interessante
progetto perché se sai qualcosa
A proposito di sanità si potrebbe sapere che in
Per fare questo, come costruire tale
applicazioni che fanno questo tipo di
cosa di supporto alla terapia devi ottenere
una radice dalla FDA Food and Drug
Amministrazione negli Stati Uniti e non è così
ovvio come ottieni DSL e codice
generazione e tutto questo tipo di
certificato dalla FDA ma c’è un
processo a due fasi, abbiamo il nostro
il cliente è andato a buon fine
la prima fase quindi siamo estremamente
sicuro che questa cosa otterrà il
timbro così è molto interessante quindi
c’è una fonte sulla carta che noi
recentemente ho scritto che puoi o
in qualche modo salvare da dietro il paywall
oppure puoi trovare una bozza mentre succede
il mio sito web comunque questo era il
motivazione perché vorresti farlo
DSL se li fai bene ti permettono di farlo
davvero integrare il dominio degli stakeholder
esperti nello sviluppo del software
processo direttamente al contrario di solo
scrivere documenti e poi sperare
il migliore di tutti questi esempi è gay
per costruito con MP MPs è un linguaggio
banco di lavoro a destra uno strumento per la costruzione
lingue è open source quindi tutto
Ho mostrato bene intendo i linguaggi di
corso propietario clienti giusto ma
la strumentazione per fare tutto questo è tutto
open source ci sono alcuni aspetti di
le lingue per esempio le tabelle e
i diagrammi che non sono direttamente parte
di parlamentari fanno parte di un se lo farai
libreria di estensioni ma è anche aperta
fonte non c’è cattura per quello che sono
parlando di qui penso personalmente
che MP è l’esempio più potente di
un banco di lavoro di lingua ovviamente sono un
un po ‘prevenuto, si potrebbe dire che io
usalo solo perché è la migliore scrittura
ciò significa che è sempre questa causalità in
entrambe le direzioni ma è estremamente
potente ed è stato usato per 10
anni la mia squadra nel team ha trascorso la
ultimi 10 anni facendo nient’altro e
mentre ha ancora le sue stranezze e ruvido
bordi credo che intendo che sono 15 anni di
storia dello sviluppo che conosci incorporata
esso è estremamente potente
e altamente raccomandato da usare qui sono a
un paio di aziende che usano MP in
produzione
potresti riconoscere quei ragazzi se lo sei
Olandese in modo che le tasse e le vostre prestazioni in
caso si ottiene alcuni sono calcolati in base
su un set di regole che è descritto e
implementato e testato Indy parcheggiato con
Parlamentari quindi l’ agenzia fiscale olandese ha un a
team di ingegneria linguistica per anni
in realtà come per 20 anni hanno fatto
questo e alcuni anni fa sono stati portati
tutto dal loro proprietario
soluzione ai parlamentari e così è davvero
interessante quello che sta succedendo lì, intendo
se vuoi vedere questa roba usata
davvero per assolutamente per te
dovrebbe parlare con quei ragazzi così hanno
beh dovrebbero dire agli aneddoti che è
banco di lavoro veramente interessante come
Ho detto ti permette di definire essenzialmente
tutti gli aspetti di una struttura linguistica
sintassi di sintassi tipo codice di sistema
i generatori interpretano tutto ciò
devi fare il linguaggio e di
Ovviamente l’IDE tutto ciò di cui hai bisogno
rendere la lingua utile al reale
persone e ciò che è interessante nei deputati di
particolare è che supporta tutti questi
diverse notazioni che hai visto molti di
loro nei miei esempi e supporta anche
modularità della lingua in modo da poter avere un
linguaggio che ha estensioni modulari noi
trascorso tre anni tra i 22 anni e a
progetto di ricerca e qualche altro anno
dopo quello che costruisce qualcosa ha chiamato e
meglio che è un mucchio di estensioni per
vedere per renderlo più utile per embedded
programmando puoi anche fare embedding
dove hai incorporato un dsl
un altro ma non come fanno in
scala o groovy o ruby usando
programmazione meta-riflessione di ma by
effettivo
come la definizione della lingua con il tipo
sistema e tutto è estremamente
potente in particolare ci permette di
usa questo schema qui dove a
il linguaggio specifico del dominio è spesso
strutturato in questi tre strati al
chiama hai un linguaggio funzionale con
espressioni tipi primitivi valori
cose come l’opzione funzioni ti digita
sappi che le cose che conosci da qualsiasi
linguaggio moderno ma poi tu costruisci
Comportamenti specifici del dominio intorno ad esso e
strutture dati specifiche del dominio in alto
ad esempio come un’assicurazione
contratto potrebbe essere un dominio specifico
struttura ha
regole al suo interno che si eseguono in modo simile
qualsiasi motore di regole ma poi al centro te
abbiamo queste espressioni funzionali che abbiamo
costruito un linguaggio chiamato kernel F come
kernel come nel core e F come funzionale
che è destinato ad essere usato qui e
essenzialmente tutte le lingue che abbiamo
costruito negli ultimi anni, incorpora questo
lingua quindi ora passiamo al
demo e in realtà quello che faremo
stiamo andando a fare un po ‘
estensione al colonnello F perché questo
non ha molto senso per te
fai un’analisi completa del dominio e prova a farlo
spiegare le complicazioni di a
dominio particolare, quindi quello che vedi qui
è un po ‘di codice per il kernel F tu
può definire una funzione che richiede due
argomenti il primo è un numero
tra 0 e 100 effettuiamo il controllo del range
per i numeri nel sistema di tipi qui e
una stringa e poi ha un if
espressione e dice se il numero qui
è più grande di 10 poi tu ritorni
saluti stringa delimitata altro ritorni
una stringa vuota in modo da poter eseguire questo in
l’interprete incorporato giusto e se
tu superi i 20 allora ottieni il saluto se
tu superi 10 e non ottieni niente di giusto e
ora la mia idea è solo per mostrarti come
tutto questo funziona per costruire un sistema modulare
estensione del linguaggio che essenzialmente fa
esattamente uguale al se ma è
piuttosto diverso che viene reimplementato
se come estensione modulare e usiamo
tocca le parole chiave solo perché le parole chiave in
qualsiasi lingua diversa dall’inglese
estremamente strano ma perché non così vogliamo
scrivere qui qualcosa come le palpebre
blah blah blah fatto bla bla sotto
filo che penso che sarebbe
chiamato in olandese
ma se poi l’altro ha fatto bene
okay, Google Translate ha fatto un buon lavoro
quindi ho già preparato un nuovo vuoto
lingua e una nuova soluzione vuota dove
Metterò l’interprete per fare tutto
di questa corsa l’ ho fatto perché è
noioso , basta che ne usi un po ‘
voci di menu per creare nuove lingue e
roba quindi non devo mostrarlo qui
usciremo comunque del tempo quindi creiamo
un nuovo concetto di linguaggio che chiamerò
la terra
è fatto sotto espressione giusta
tutto è un commento di espressione lasciato
perché è principalmente il linguaggio funzionale
così bene posso farlo ora come te
costruire qualcosa che sia modulare ma possibile
ancora usato in un’altra lingua è l’ uso
semplice polimorfismo orientato agli oggetti
giusto così sai che qui il Colonnello F
si aspetta espressioni perché il colonnello F
l’espressione si aspetta espressioni
essenzialmente ovunque così per poter
rendere l’ID stand e quelle cose essere
in grado di collegare qui devi ereditare
dall’espressione semplice oggetto
orientamento giusto quindi ho messo espressione
qui ma espressione espressione catturata
non è visibile il motivo per cui ho appena definito
una nuova lingua che non ha relazioni
a qualsiasi altra lingua, quindi non posso ereditare
dal concetto di espressione che viene
dal linguaggio F del kernel giusto è
non visibile quindi quello che ho intenzione di fare è
Sto per dire che la mia nuova lingua
qui estende il linguaggio dell’espressione
che il linguaggio che definisce
espressioni nel kernel F e quello
il linguaggio è bla bla bla base di base
qui questo è in realtà il pacchetto per
l’ espressione del kernel F vive per
ragioni storiche si chiama IAT è 3
quello era il nome della ricerca
progetto è un nome schifoso che lo farà
cambiato a un certo punto in realtà
qualcosa che i parlamentari non sono molto bravi in
le sue lingue di ridenominazione quindi è per questo che
ha ancora questo nome e io dico di esserlo
andando ad estendere questo linguaggio che
mi permette di esprimere qui come
qualcosa da cui eredito e perché
non funziona quindi questo è attento
è espressione dal linguaggio base giusto
linguaggio basato è JetBrains questa versione
di Java ha anche un’espressione se io
fai in modo che la mia cosa erediti da questa
questa è l’espressione sbagliata, quindi sono
in realtà un po ‘sorpreso perché non lo faccio
vedi oh sì perché è sbagliato
linguaggio
base di espressione di base che è quella
noti che non l’ho esplicitamente
ha spiegato il linguaggio basato su NPS così io
penso che sia una parte posteriore che è visibile qui
JetBrains pensa che sia una nostra caratteristica
non potrei essere d’accordo, forse puoi votare
da qualche parte per qualcosa va bene così ora
abbiamo le pubblicità fatte e quelle
espressione e voglio la sintassi per
quella cosa
per ora mi limiterò a definirlo come è che
è come la parola chiave principale giusto così io
vai nella definizione editor e definisci
un editore che è solo un LS I’m
combinando la compilazione di questa cosa così ora noi
generare un’implementazione linguistica che
è il codice Java che è quindi dinamicamente
caricato da deputati e posso ora entrare nel mio
esempio di programma qui e che cosa dovrei
essere in grado di fare posso usare gli Al
però oh sì, devo già importarlo
Va bene, voglio che tu faccia questo punto
che puoi usare solo una lingua
estensione se si importa quel particolare
nuova lingua nel tuo programma giusto e
sembra che ho dimenticato di eliminarlo
particolare importazione dopo che ho fatto il mio test
corri sì, c’è già la lingua
in modo che non avrebbe dovuto essere lì per
scopi dimostrativi e ora vorrei avere
modificato a destra è già lì okay così
comunque posso mettere qui gli isolotti
non sorprende anche non molto utile ma
funziona come strutturalmente così come
lo fa sotto l’ aspetto del pungiglione
strutturalmente in termini di albero di sintassi
cosa fanno gli altri bambini questa cosa
bene ha una condizione giusta quale è
l’espressione esattamente uno e poi noi
avere l’allora parte che sarebbe il
fatto bene quindi sto andando tutto fuori al tocco
qui a destra non sto solo andando a fare
il tocco sintattico concreto ma anche il
nomi della definizione della lingua
elementi quindi non essere molto sofisticato così
è abbondante un’altra espressione e poi
la destra in basso anche un’espressione okay
quindi, come fa l’editore a guardare bene?
l’editor semplicemente mette queste cose in a
raccolta giusta quindi arti e poi io
incorpora la condizione che non è molto
Ho appena notato l’olandese
poi la parola chiave fatta e ho messo il
espressione che rappresenta la parte allora
e ho messo la parola chiave del sottotitolo e il
rimanendo espressione ok sto compilando
questo torna all’esempio e tu
può vedere che il codice esistente è cambiato
come sembrava
perché è così bene che NPS usa una proiezione
Aletta tur non scrivi cose che sono
poi analizzato in un albero e poi
elaborato piuttosto ogni attività di modifica
cambia direttamente l’albero e poi lì
è un motore di proiezione quasi come un
Cosa mostra il controller Vista modello che mostra
in qualsiasi editor che definisci e se
hai già un’istanza di
qualcosa nel tuo albero e tu cambi
l’editore bene allora cambi il look
dei programmi esistenti , se questo è
bene o male dipende da ciò che si fa con
giusto ma è così che funziona così io
ora posso mettere il codice qui come per esempio a
più 3 quindi penso che possiamo già fare
qualcosa di utile saluto più adulti s
una corda vuota si nota che possiamo
già messo tutte le espressioni che sono
già lì in questa lingua qui
giusto così abbiamo appena detto che la condizione
allora e poi parte della nostra nuova lingua
concetto sono espressioni qualsiasi espressione
quindi posso già usare l’argomento
espressione di riferimento o il più
espressione qui senza altra cosa
notare che questi provengono da un altro
lingua giusta, quindi ho già fatto due
tipi di composizioni di composizione che ho
ho incorporato la mia nuova cosa nel kernel F e
Ho usato cose dal Colonnello F che
Sono stato incorporato nella mia nuova cosa
senza problemi di ambiguità o parser
qualcosa di così strutturalmente sembra
buono ma ovviamente da un sistema di tipo
prospettiva sbagliata perché noi
aspetto che questo sia booleano e non l’abbiamo fatto
Ditelo ovunque, quindi non ne riceviamo uno
errore in questo momento, quindi possiamo mettere il vantaggio
e a nessuno interessa il sistema tipo
non importa quindi sistemiamo così bene
entreremo nella lingua
definizione di nuovo e aggiungere un sistema di tipo
regola una regola di inferenza per il fatto
sotto espressione quando diciamo che il
tipo di aggiunte fatte e quelle
condizione di espressioni
deve essere booleano ora c’è un po ‘
particolarità del colonnello F che è
che ha tipi primitivi sostituibili
puoi collegare i tuoi tipi primitivi
tipi primitivi specifici del dominio in
linguaggio di espressione esistente e questo è
perché non sono solo come scrivere un
istanza del tipo booleano qui ma
In realtà userò la primitiva
Digitare Factory e ho chiesto di creare un
tipo booleano ma quello che è qui è un
equazione giusta dice per il tipo
sistema per correggere il tipo di
condizione deve essere uguale o un sottotipo
del tipo di tipo booleano letterale va bene
quindi vediamo se funziona
tornando indietro , premi F5 per raggiungere il rigore
il sistema di tipi e ora ricevo un errore
giusto e interessante già
capito che il tipo di questa cosa
ecco un numero compreso tra 2 e 102
perché sa che l’a è tra 0
e 100 e se aggiungo 2 sarà
un intervallo diversamente strutturato noi
non fare questo calcolo organizzare statica
per ogni programma perché così sarebbe
richiede un sistema di tipo completamente dipendente
che è leggermente al di là delle mie capacità
ma lo facciamo per abbastanza cose da essere
utile tutto bene quindi cambiamo questo
questo e, naturalmente, per replicare il
esempio da sopra dovremmo mettere un 10
ok ok, quindi abbiamo fatto progressi
cos’altro vediamo qui vediamo che a
stupido messaggio di errore che essenzialmente
dice che non hai calcolato un tipo per
nel complesso non sopporterei l’ espressione
giusto così non ha un tipo così
non posso controllare se il tipo di questo
tutta la cosa in qualche modo si adatta al tipo di
la funzione se ci fosse un difetto
definito giusto posso fare il tipo
esplicito qui e ora sta cercando di
controlla se questo tipo è se questo
type è un sottotipo di stringa ma non l’ho fatto
dire qualcosa su come il tipo di
l’intera espressione deriva da altro
Tipi di destra quindi cerchiamo di cerchiamo di rimediare
torniamo al nostro
scrivi qui e scriverò
il codice poi lo spiegherò così sono
dichiarerò una variabile di sistema di tipo che sono
andando ad esprimere che T è un super tipo
del tipo di espressioni fatte parte
e farò lo stesso per il
capisco allora sto andando a dire tipo di
l’intera cosa è T, quindi cosa fa?
ho detto prima che questo è un vero te
equazioni specificate, questo non è un
assegnazione o un test questa è un’equazione
un insieme di equazioni che vanno in a
risolutore che poi cerca di capire
la correttezza dei sistemi di tipi quindi cosa sono
dirò qui che sto dicendo che sono qui
definire una variabile T e I espressa
che questa variabile T deve essere uguale o uguale a
un super tipo di parte finita e it
deve essere anche solo un secondo
il vincolo deve essere uguale o uguale a
super tipo del pub altrimenti così in
altre parole per soddisfare entrambi questi T
deve essere il tipo super comune del
fatto e le espressioni in basso a destra
e se sono uguali, allora è solo
quello stesso tipo e quindi sono essenzialmente
dicendo che il tipo di tutto
espressione è esattamente quel tipo calcolato
Quindi, calcoliamo compilando una volta f5
e tutto va bene perché questo è
ora digita stringa perché il super comune
tipo di quella cosa e quella cosa è
sorpresa sorpresa stringa ok va bene
quindi vediamo cosa dicono i test okay
potrebbe cercare ciò che effettivamente il test
dice che il test dice che c’è un
flusso di eccezione che sta per essere lanciato
perché non ho ancora implementato un
interprete per questa cosa qui proprio così
non sa come eseguire effettivamente
questo diritto è solo codice e a
controllo di tipo statico ma non c’è
semantica esecuzione definiti finora un
NPS per impostazione predefinita si definisce la semantica
attraverso la generazione , ad esempio tu
potrebbe generare tutta questa roba in Java
e quindi eseguire il programma Java e in effetti noi
fare
avere un generatore java per questo colonnello F
lingua perché a fini di implementazione
quando distribuisci questa cosa per davvero è così
di solito una specie di server Java
cosa di back-end abbiamo anche un tipo
il generatore di script è quasi finito così tu
può distribuirlo nel browser e altro ancora
interessante a mio parere abbiamo questo
quadro interpretativo in cui è possibile eseguire
queste cose direttamente nell’IDE che
consente al tuo esperto di dominio quando lo fa
scrivere il codice in una DSL per giocare direttamente
con esso lo esegue direttamente nello strumento
quindi hai una sorta di inversione di tendenza
tempo senza alcuna implementazione dovrebbe
ulteriore persona di dominio okay, quindi facciamolo
implementare l’interprete che abbiamo un
quadro interpretativo qui che consente
noi per farlo, quindi abbiamo il permesso
espressione qui e quindi questo interprete
funziona essenzialmente mappando un pezzo di
albero di sintassi per un pezzo di codice scritto
in Java così come il modo di
definisci la semantica del tuo DSL in questo
caso è quello di scrivere il codice Java che fa
qualunque cosa la cosa dovrebbe fare così
scriviamo questo codice Java così il primo
cosa dobbiamo fare è che dobbiamo
eseguiamo dobbiamo valutare che il
condizione giusta per cui possiamo farlo
ricordando l’interprete ricorsivamente su
D nessuna condizione di punto, quindi questo hash è a
scorciatoia per chiamare l’interprete
di nuovo con questo nuovo nodo perché lo fai
per tutto il tempo è bello avere un
scorciatoia così da quello che proviene
indietro un oggetto Java e perché lo siamo
non c’è motivo di stare sulla difensiva qui
ovviamente dovresti controllare se lo è
in realtà un booleano ma per ora abbiamo solo
diciamo ok, sappiamo che è booleano perché nostro
tipo di sistema ha già verificato che noi
mi aspetto booleano qui e in realtà penso
Java esegue lo srotolamento automatico e quindi noi
può fare booleana condizione giusta in modo tale
è la condizione valutata e ora noi
posso semplicemente dire se sai se il nostro
se-allora-altra cosa è vera altra cosa fare
qualcos’altro bene cosa facciamo in
nel caso in cui la condizione sia vera
bene restituiamo la valutazione del
fatto parte e altrimenti restituiamo il
valutazione del
gli ambos schioccano bene e questo solo chiama
ricorsivamente l’interprete per qualunque cosa
espressioni già lì e penso
questo dovrebbe funzionare bene, quindi funziona
la foto di den kay per il dieci caso ma
non per l’ altro e questo è solo
perché mi sembra di aver messo una S qui
che non dovrebbe essere lì così ora funziona
okay, abbiamo implementato la struttura
sintassi del sistema di tipo semantica in qualunque cosa
15 minuti inclusi supporto IDE e
includendo o rendendo questo modulare
estensione di un linguaggio esistente noi
non ha toccato il linguaggio esistente in
tutto ciò che abbiamo messo in un modulo separato
potresti anche farlo se sei già esistente
il linguaggio era disponibile solo come binario
giusto un plug-in compilato quindi questo davvero
consente la modularità linguistica in
stesso modo e anche dal modo con il
stessi modelli di quelli orientati agli oggetti
programmazione molto utile è così che noi
costruisci molti dei nostri dsls costruendoli
in aggiunta al kernel per lo più esistente f
astrazioni
Va beh, a sorpresa, sono ancora in orario
torniamo alle diapositive
dai, quindi ci sono altre lingue
banchi di lavoro ovviamente c’è una parodia
il bue di Delft è un furfante
Amsterdam come dietro l’angolo su CWI
entrambi sono per lo più destinati
cose accademiche fanno davvero
cose interessanti ma non ne sono sicuro
suggerirei addirittura di usarlo come in
pratica senza qualche connessione con il
forse gli sviluppatori direbbero che io
non lo so, ma non lo è per lo più
usato per la ricerca poi c’è il testo X.
di cui potresti aver sentito parlare
è un linguaggio testuale basato sull’eclisse
banco di lavoro è dove ho iniziato il mio
carriera di modellazione testuale dopo I kind of
ha sofferto di UML e altre cose è
bello ma NPS è migliore e poi c’è
l’ intera piattaforma che può essere solo
usato in Italia almeno è usato solo
in Italia due liste di italiani e
Non lo so non l’ho mai visto usato
fuori dall’Italia, quindi immagino che non sia un
opzione è uno strumento interessante che c’è
un documento che abbiamo scritto nel 2013 che confronta
vari lavori lingua vendor si potrebbe
voglio controllare questo e ottenere una sorta di
confronto oggettivo naturalmente
vari paragrafi dei diversi
gli strumenti sono stati scritti dagli sviluppatori di
questi strumenti così qualunque sia l’ obiettivo
ma è stato accettato in modo ragionevole
diario stimabile quindi deve essere
alcune lezioni scientifiche tutto bene imparato
prima di tutto la lingua non è abbastanza
giusto è necessario, naturalmente, una lingua ma
allora hai bisogno di un buon IDE senza IDE
le lingue semplicemente non sono utili nel mio
opinione ed esperienza e anche questo è
perché molti se i risultati D interni
non sono veramente utili per i non programmatori
perché l’IDE non sa nulla
su di esso sicuramente puoi scrivere un IDE
plug-in e un plug-in del compilatore e
in qualche modo mischia tutto questo insieme ma
è molto più lavoro che farlo con
un’analisi del banco di lavoro dedicata
buoni messaggi di errore ti sono davvero utili
puoi davvero incazzare i tuoi utenti se tu
basta sapere il simbolo non trovato
i messaggi di errore di stile non sono validi
i refactoring ci sono alcuni come una cosa
come ad esempio il refactoring dei contratti di assicurazione
questo ha senso per tipo di linea di prodotti
se ho un contratto esistente , dovresti
fornire queste cose ma poi anche
testare se sei un ragazzo di assicurazione che
specifica un nuovo prodotto assicurativo che desideri
per testarlo perché non vuoi essere
responsabile se la tua azienda perde
milioni perché hai un’aritmetica
bug nel tuo contratto giusto ed è
in realtà non è una sfida da convincere
esperti di dominio per diventare test driven
lo vogliono davvero e ovviamente tu
desidera funzionalità avanzate come i debugger
qualsiasi cosa fatta o simulata del genere
influenze sul design del linguaggio in
oltre naturalmente al dominio
struttura e la notazione che fa appello
alle persone nel dominio che devi
prendere in considerazione cose come lo strumento
capacità come se davvero non si potesse fare
editor grafici come il testo X non puoi
fallo o devi in qualche modo mettere gmf
nell’intera storia che devi fare
sicuro di non stressare troppo i tuoi utenti
come se volessi avere una lingua con
eredità e contratti e io no
conoscere i modelli di metodo del modello e
paalam o spedizione e tu provi a vendere
che gli esperti di assicurazione che sta andando essere
una vendita dura perché questi più astratti
tipo di ingegneria del software di cose sono
cose non facilmente comunicate in quel modo
giusto e poi c’è anche una questione di
stile come puoi vedere chiaramente da questo
lingue di diapositive ben progettate possono solo
essere brutto come se si mescolasse stile COBOL e
lo stile lisp probabilmente non è una buona idea
giusto quindi c’è un po ‘sì è un
questione di gusti ed esperienze così come
rendere le persone precise come te
fai che i non programmatori facciano questo come scrivere
codice in tutti questi livelli come ho mostrato
e la prima cosa che dovresti fare sei tu
dovrebbe convincerli che l’espressione
te stesso precisamente in termini di
il dominio non sta programmando correttamente
la programmazione riguarda tutte queste entità
l’altra cosa è solo scrivere a
specifica precisa che si utilizza
qualcosa come funzioni o variabili
definizioni ma sai che questo è tuo
prima sfida la propaganda si deve
convincere la gente su che se
non sono convinto già e poi il
l’altra cosa è che devi fare un po ‘
formazione in modo tale che in realtà stiamo scrivendo correttamente
ora un tutorial per insegnare questi veramente
idee fondamentali di programmazione come
espressioni tipi riferimenti funzioni
parametri come quello per insegnare questo
molto lentamente e metodicamente a
i non programmatori iniziamo da Excel
perché tutti sanno eccellere e noi
tipo di costruire su di esso è un
sforzo open source se vuoi unirti
e aiutare i benvenuti e che usiamo per
tipo di porre le basi per il dominio
esperti per poi essere in grado di capire
e usare la particolare DSL in generale
riguardo alle competenze, la mia organizzazione
non sa come costruire le lingue
non abbiamo mai usato NPS e lo è anche
scienza missilistica perché linguaggio
ingegneria è informatica I
già non lo capivo quando ero
all’università vero è quello che senti
quindi la prima risposta è buona, ecco tutto
queste altre cose nuove non ne hai idea
di destra quindi cosa fai bene te?
costruisci le abilità che assumi le persone che ottieni
consulenti voi
comprate conoscenza qualunque non sia diversa
qui a destra e l’altra cosa che dico
che non è sulla diapositiva sono quegli strumenti
come i parlamentari di nuovo mentre loro hanno i loro
stranezze
fanno ingegneria del linguaggio non lo è
non è più l’ informatica
è l’ingegneria del software , è solo
qualcosa che fai è come se costruisci un
quadro giusto è solo un
cosa diversa che costruisci e tutti
chi ha qualche meta in cui sai di pensare
la loro testa può farlo è questo il
il prossimo sistema legacy sono motivato da questo
parla tra l’altro cercando di ottenere
liberarsi da una particolare implementazione
la tecnologia siamo ora solo tu sai
seppellire tutta questa roba in strani
strumenti come MP questa è una domanda valida
Penso di no e di lasciarmi spiegare
perché così ecco lo scenario che abbiamo a
banco di lavoro linguistico in questo caso MP e
la loro versione meravigliosa lingua e noi
generare quello – una sorta di runtime
Dicono che il codice Java va bene ora diciamo
la tua lingua cambia la lingua
la definizione cambia con cosa fai
i tuoi modelli esistenti hai ben MP
supporta il controllo delle versioni linguistiche e
migrazione automatica dei modelli esistenti
così puoi evolvere significativamente il tuo
lingua nel tempo anche se già
avere modelli in natura e non è possibile
toccali per la migrazione manuale esplicita
giusto lo strumento lo fa così ora il prossimo
lo scenario è quello che fai se il tuo
modifiche di runtime se passi da Java a
dattiloscritto perché devi metterlo
nel browser
bene, basta scrivere un nuovo generatore
non è sempre totalmente banale e molto
casi rari non è possibile perché tu
avere qualche costruttore strano che puoi mappare
al tuo obiettivo senza un enorme
impatto sulle prestazioni che accade
a volte ma è molto raro di solito tu
investi solo pochi mesi di scrittura
generatore e questi pochi mesi davvero
non contare se hai un uomo o una persona
anni inseriti nel tuo dominio specifico
i modelli giusti non sono molto grandi
investimento e quindi ovviamente domanda
il numero tre è quello che succede se vai
da parlamentari a qualsiasi nuovo capretto sul
blocca banco di lavoro come fai
migra quello e là la risposta è a
un po ‘più astratto ma sai
la tua lingua devi trovarti
conosci la struttura che conosci
semantica
e tu hai tutto come una specie di
istanza formale di quel modello di dati così
puoi sempre migrarlo allo stesso modo
linguaggio definito nella nuova tecnologia
come hai esportato una specie di XML qui
e tu hai importato qui, lo sai
semantica non c’è nulla di perso
non c’è la sepoltura nel codice Java che è
non è come se non si potesse invertire
ingegnere cosa significa questo è un it’s
forse difficile apprezzarlo da questo
scivolo astratto ma questo è enorme
differenza non si perde nulla bene
e abbiamo fatto questo esempio di testo olandese
agenzia hanno migrato tutti loro
regole di testo dal loro sistema proprietario
in MP hanno anche migrato i test
e hanno eseguito tutti i test esistenti
contro la nuova implementazione fino al
tutto ha funzionato così è possibile
senza sforzi proibitivi e questo è
davvero è davvero una differenza per
codificare questa roba in Java e mettere
in un AGP JB o qualcosa del genere
la risposta non è così come fa tutto questo
riguardare Agile questa è un’altra cosa che ho
senti bene, facciamo cose agili qui
facciamo DDD diamo ai nostri corsi quello
corrisponde al dominio che è buono
abbastanza
Penso che sia una sciocchezza totale così mi permetta
fai notare come questo sembra che ci siano
scenario di due scenari uno ne hai uno
progetto in cui sviluppi una lingua
e qualche altro codice che usa il
linguaggio nello stesso progetto giusto e
allora l’altro scenario sei già tu
hai un progetto che si sviluppa
la lingua e poi ne hai molti
progetti che usano la lingua come te
costruito questo non lo so
lingua assicurativa nella tua azienda e
allora hai diverso sai salute
assicurazione sulla vita e altro
assicurazione che usa quella lingua così
vediamo come funziona oops sorry in
termini di processo ora nel primo caso
questo sviluppo del linguaggio dentro il tuo
il progetto è esattamente come se tu fossi
sviluppare un quadro o una biblioteca o a
piattaforma come alcuni artefatti di base che
altre parti del progetto usano lì
niente di diverso
tranne che tu usi uno strumento diverso così io
non sento di dover dire altro
è la stessa cosa quindi nell’altro caso
dove hai questo progetto da costruire
la lingua e gli altri progetti a
usa bene la lingua qui è solo
come un dipendente
vedere su alcune cose di terze parti, se
usi qualunque pacchetto dal web
questo potrebbe cambiare ad un certo punto e tu
devi importare che devi decidere
faccio a usare la nuova versione del pacchetto e tu
devo migrare la stessa cosa qui se la tua
team linguistico sviluppa una nuova versione di
il linguaggio gli danno una nuova versione
lo pubblicano in una sorta di artefatto
cosa giusta repository e tu decidi se
vuoi usarlo e la cosa buona è
se lo fanno bene la nuova lingua
la versione viene fornita con gli script di migrazione
questo è in realtà qualcosa che è più facile
di cambiare una libreria perché
librerie e framework non vengono spediti
con gli script di migrazione i linguaggi fanno o
almeno puoi scrivere così non lo è
qualcosa che ti rende meno agile e
poi ovviamente il numero tre una volta
hai definito la tua lingua e ora tu
avere un DSL dove possono essere assicurati
definire, testare e sperimentare con nuovi
definizioni del prodotto stesse in tempo reale
tempo senza tanto tempo sai, facciamolo
implementalo manualmente questo è ciò che
effettivamente consente l’agilità del business I
penso che non ci sia altra tecnologia
quello che ti permette di farlo in questo
così così non riesco nemmeno a capire il
domanda e poi la lingua
definizione stessa hai visto come
piccolo codice che dovevo scrivere per implementare
questa cosa, naturalmente, per di più
lingue semanticamente ricche può essere
più lavoro ma ancora ho questa citazione
da uno dei miei clienti come me
aprì mps e guardò il
definizione della lingua mi stavo chiedendo
dove il codice era perché hai visto solo
questi come cinque cose sai che il
struttura l’editor per digitare system e
interpretare si stava chiedendo dov’è il
carne vera e non ce n’è perché
questo è tutto ciò che devi fare una volta
maestro NPS che è certamente abbastanza un
un po ‘di una curva di apprendimento hai molto
potente strumento a portata di mano sul tipo
di meta livello e il modo in cui sviluppo
le lingue letteralmente sono seduto insieme
con il codice esperto del dominio un po ‘
la lingua gira intorno al laptop e lascia
li provano lo faccio per un simile
ora come le iterazioni di un’ora
capire un po ‘ sulla creazione del dominio
un po ‘di linguaggio che provino a farlo
questo tre o quattro volte in un giorno e
poi vado a casa e le cose pulite su voi
sai a volte prendi scorciatoie qui
lo sai e il giorno dopo torno o se
tu
quindi è un processo estremamente agile in
fatto costruendo una lingua secondo me
è il modo migliore per capire un dominio
perché in contrasto con il semplice disegno di UML
diagrammi che rappresentano concetti di dominio
si può effettivamente giocare con questo e
istanziarlo che è molto più utile
di semplici foto, e allora?
integrazione continua bene proprio come
sempre giusto per consentire al tuo dominio
esperto capisce il mondo giusto il
i modelli eseguono i test nella lingua
banco di lavoro direttamente quindi in qualche modo
impegnarsi su una sorta di ho fatto
filiale e sono sul server di build
si eseguono le stesse prove, se non si riesce
torna a qui, allora si genera sul
costruire server per esempio Java
rappresentazione del tuo codice e anche tu
genera i test e quindi esegui il
prova di nuovo sul codice generato così
questo è il modo in cui si allinea la semantica di
l’interprete e il tuo generatore se
hai sufficienti test utili quanto
solito e poi una volta che hai generato il
artefatti lo combini con qualsiasi cosa
codice di framework che hai creato
del pacchetto di distribuzione e andare alla messa in scena
e poi per vivere l’implementazione di tutto questo
non è diverso da qualsiasi altro automatizzato
fase di sviluppo NPS può essere eseguito da
linea di comando non si conosce bene il problema
in realtà un po ‘ un problema perché il
il modo di impostare questo è un po ‘fastidioso
come solo in termini di dettagli
devo configurare ma altrimenti questo
funziona bene, abbiamo tutte le nostre lingue tutte
i nostri progetti dei clienti sono tutti in esecuzione su CI
come ci si aspetterebbe, quindi questo ci porta a
la conclusione ho alcune cose in più io
voglio menzionarne uno ne ho un altro
sessione domani qualcun altro è caduto
fuori così sono il tipo di sostituzione
speaker nella traccia blockchains e io sono
andando a parlare non proprio di orologio
catene ma su come effettivamente
implementare i contratti come nel reale
contratti con o senza catene a blocchi
e ovviamente uso un po ‘ di DSL qui così
se sei interessato a questo, potresti
voglio unirmi a questa stessa ora domani a
stanza diversa anche ce n’è un’altra
carta che voglio che tu voglia segnalare
tu ad aver catturato così come ti ho detto
abbiamo implementato questa cosa e meglio
proprio queste estensioni da vedere per anni
e noi abbiamo
scritto 46 pagine di carta in cui discutiamo
nel minuzioso dettaglio tutto il bene e
brutte esperienze abbiamo fatto questo
come cose come le prestazioni imparano
capacità di mps tutto ciò che puoi pensare
di così questo è un penso relativamente
conto oggettivo di forse uno dei
i più grandi progetti di sviluppo DSL
ci sono sicuramente anche con i parlamentari
conoscere un altro strumento che ha costruito a
ecosistema simile di lingue così questo
penso che sia davvero un buon tipo di realtà
verifica di cosa si può fare con
questi strumenti completano bene la separazione
di preoccupazioni è la chiave giusta separata
carta di facoltà dalla tecnologia altrimenti
entrerai nella trappola dell’eredità cara
il sé può farlo completamente
separa velocemente la scheda dal tecnico
preoccupazioni che possono aiutare a integrare il dominio
esperti nel processo di sviluppo
direttamente se costruisci le lingue in a
modo in cui puoi almeno fare coppia
programmazione tra un ragazzo tecnico in a
esperto di dominio e nel tempo lo faranno
è solo il linguaggio giusto per i banchi di lavoro
cosa consente a TS else di non aprire
qualunque ideologia e inizia a farlo
da zero come costruire il tuo
parser e fare tutto da zero
è solo troppo lavoro
e infine sì , non ci sono
conflitto con l’agile devi solo
sai che pensi a come andrai
avvicinamento, va bene
domande che devi fare domande
perché ho finito cinque minuti prima
il tour è finito ora devi chiedere
domande vi ringrazio molto molto
mi diverto molto a parlare
guarda gli ampere ora che posso
ricordo molto tempo fa ero al ginocchio
in Common Lisp e vicino e indietro poi io
Stavo pensando a qualcosa che tu
chiamavo gli editori delle proiezioni mi stavo chiedendo
la dichiarazione if if else that just just
fatto puoi davvero cambiare l’editor
in questo momento o forse forse ci vuole un po ‘
più tempo
per permetterti di proiettare anche questo
costruzione if-then-else nell’editor
diversamente, ad esempio il mio cursore
i comandi potrebbero cambiare in base a
se sono nell’espressione o no io
non so cosa vuoi dire quel cursore
comandi ma bene per esempio il
espressione matematica dovrebbe
cambia i comandi del cursore se vuoi
andare e saltare giù si può anche avere
palette in cui è possibile trascinare e rilasciare in
simboli matematici sì, posso anche
costruisci più editori per lo stesso
concetto e renderli commutabili così
ogni utente può selezionare il proprio editor
sì, una cosa non l’ho detto ma
una cosa che è cambiata
Intendo dire che gli editori di protezione sono stati
sperimentato negli anni ’70 e ’80
ma la differenza da allora a oggi
è che gli editori che definisci ora sono
effettivamente utilizzabile come puoi la maggior parte dei
cose che puoi semplicemente scrivere linearmente e
non costruendo l’albero esplicitamente quale
no ma come non vuoi entrare più
5 3 destra si desidera digitare 5 più 3 e
questa capacità si basa in realtà su un
estensione dei parlamentari che costruiamo è
le celle del programmatore è anche open source
e questo repository di estensione e questo
ti permette con pochissimo sforzo di
costruire editor che sono molto vicini a
editor di testo per notazioni testuali e
certo se hai un testo non testuale
annotazioni come tabelle o simboli matematici
bene allora hai i bottoni e roba
perché puoi digitare intendo e nessuno
si aspetta di poter digitare perché
non è così che interagisci con questi
cose molto cool che sarà davvero controllare
fuori grazie mille
chiunque altro
ok grazie mille
[Applausi]
Please follow and like us: