
buongiorno di cui parlerò
sintassi sul perché amiamo la sintassi e il nostro
programmazione dei linguaggi perché probabilmente
non dovrebbe e come puoi ottenerlo comunque
e trarne vantaggio della motivazione
per questo discorso è il nuovo ruolo che
JavaScript è improvvisamente inaspettatamente
trovato in JavaScript è ora il
le lingue della macchina virtuale universale lo sono
in corso di traduzione in JavaScript in
per consentire loro di correre ovunque
beh, le prime lingue a farlo erano
Java Google traduce Java in
JavaScript in modo che possa essere eseguito ovunque
persone straordinarie stanno ora traducendo C
in JavaScript e in esecuzione vicino
velocità native mai pensate
JavaScript sarebbe stato utilizzato in questo modo siamo
anche dicendo che le nuove lingue sono
sviluppato specificamente per tradurre in
JavaScript quindi è diventato un universale
macchina virtuale vorrei contendere il
primo linguaggio progettato per funzionare come uno di
queste lingue JavaScript erano jslint
jslint potrebbe essere pensato come un compilatore
per una lingua chiamata le parti buone e
quindi è stato il primo in cui è stato rilasciato
circa 2000 e come sapete, arriva jslint
con un avvertimento
jaelyn avrebbe ferito i tuoi sentimenti perché
si lamenta della sintassi e delle persone
le persone hanno una profonda connessione emotiva
alla loro sintassi così quando lo dici a loro
come possono migliorare il loro loro
programmi per renderli meno
probabile che sia bacato e più mantenibile
più leggibile e tutto ciò che iniziano
piangere che è sorprendente perché lo è
solo sintassi perché dovrebbe interessare a qualcuno
a tale proposito, sostengo che la sintassi è
l’ aspetto meno importante di a
programmazione del linguaggio di programmazione e intendo
nello stesso senso in cui la moda è il
aspetto meno importante dell’abbigliamento
design che sembra un radicale
dichiarazione ma sai se guardi
cosa è l’ abbigliamento e cosa dovrebbe fare
dovrebbe proteggerci dal sole e
dal freddo e dall’infortunio
proteggi la nostra nostra modestia ma ma quello è
non quello che consideriamo quando compriamo i vestiti
in particolare in cose come le scarpe
la gente compra le scarpe senza chiedere il possibile
Cammino in loro posso correre in loro volontà
dimostrano di salvare il mio piede dall’infortunio
la gente compra le scarpe che sono probabili
causare ferite in nome della moda così
dimentichiamo ciò che è veramente importante e come
programmatori pensiamo di essere più intelligenti di
quello che non vorremmo sapere che guardi
alle scarpe completamente fuori moda
che siamo tutti di indossare non avremmo fare
questo errore, ma quando si tratta di
la sintassi dei linguaggi di programmazione che facciamo
esattamente gli stessi errori per lo stesso
ragioni per cui siamo totalmente irrazionali e
emotivo nel nostro amore per la sintassi così lo farò
offrire come prova un libro fantastico di
Samuel caiman
è uscito nel 1990 quindi è un po ‘datato ma
è ancora un libro davvero buono
linguaggi di programmazione un interprete
approccio basato in questo libro che scrive
interpreti per sette programmi
lingue e poi scrive programmi
per ciascuna di quelle lingue per mostrare come
lavorano e per queste sette lingue
non implementa per intero
linguaggio perché sarebbe troppo
lavoro da fare in un libro così solo lui
implementa le parti buone di ciascuno di
queste lingue e per la maggior parte del
lingue che non includono il loro
sintassi quindi è davvero sorprendente quando
guardi una lingua come un OLP che
è famoso per il suo aspetto sembra
radicalmente diverso da qualsiasi altro linguaggio lui
lo scrive con la stessa notazione come il
altre sei lingue per ottenere un
il confronto tra mele e mele è così
sorprendente che tu possa scrivere in a
lingua senza usare la sintassi ma
di solito quando stiamo esaminando le lingue
la sintassi è tutto ciò che guardiamo guardiamo al
aspetto più superficiale di esso e spesso
potrebbero passare anni prima che scopriamo
cosa c’è negli strati più profondi spogliandosi
via tutto ciò che il camme della sintassi ci mostra
cosa stanno facendo in realtà queste lingue
quindi il linguaggio che usa è minimo
sintassi e c’è un numero di lingue
che hanno sintassi abbastanza minime questi
le lingue sono ben considerate dai designer
ma sono rifiutati dal mainstream più
i programmatori professionisti non possono sopportare
queste lingue quindi Lisp ha un minimo
sintassi ha come espressioni e come
espressione è solo una sequenza di simboli
di solito sono racchiusi tra parentesi
rappresentare le indicazioni di funzione e
espressioni ma potrebbero contenere dati
o qualsiasi altro tipo di struttura ed è
davvero semplice potresti prenderne uno qualsiasi
quegli argomenti lo sostituiscono con un altro
s espressione e nido profondo come te
voglio che questo sia forse il più minimale
sintassi la comunità e lo schema Lisp
la comunità ama questa roba il resto di noi
odiamo questa roba se la troviamo
offensivo anche solo a guardarlo
chiacchiere potrebbe essere considerato un minimo
sintassi anche se è molto di più
complicato di s espressioni
l’invocazione di metodo in chiacchiere è
geniale hai qualcosa
rappresentando un oggetto allora hai il
nome dei parametri che separano il
i valori dei parametri che abbiamo respinto
questo anche se è geniale
invece abbiamo preso l’ approccio del C ++ che è
hai una lista di cose avvolte in
parentesi separate da virgole con
assolutamente nessuna indicazione su quello che loro
sono e quale ordine vanno in cui
rende molto più facile sostituire il
valore sbagliato o per metterli fuori ordine
e ci piace che ci piace che si tratta di
più facile sbagliare così che noi
ha respinto questo che è molto più difficile
sbagliare a favore di quello che è
molto più facile da sbagliare che è il tipo
di emotività che è avvolta nel nostro
apprezzamento della sintassi quindi lasciami prendere
attraverso gli anni e guardare la
evoluzione dell’istruzione if che iniziamo
con Fortran qui abbiamo un Fortran
dichiarazione go-to del computer , quindi se se
la differenza tra a e B è
la volontà negativa o zero salterà a
affermazione 20 che non fa nulla
altrimenti salterà alla dichiarazione 10
le parentesi intorno alla condizione sono
assolutamente necessario nella maggior parte delle lingue
sono solo decorazioni ma in Fortran
gli spazi non erano significativi, quindi poteva
non vedere la differenza tra se un e
se entrambi sembrano uguali a Fortran così
aveva bisogno delle parentesi per separare così
potrebbe dire che cosa era una dichiarazione if
Fortran ottiene un po ‘ meglio con
Fortran per il segno sinistro non era stato
inventato ancora ma potrebbe sostituire a
dot le dot expression puoi vedere cosa
possiamo anche vedere qui il go-to
dichiarazione ha dimostrato il go-to di
Naturalmente è stata l’ispirazione per questo
conferenza e la maggior parte della gente ha scritto il go-to
come due parole anche se è un singolo
parola in Fortran di nuovo a causa di questo
possibilità di inserire spazi in qualsiasi spazio
non sono significativi quindi Fortran in realtà
ho qualcosa di giusto per tutti
ha sbagliato da allora, che è come fare
scrivi un nome di variabile che contiene
uno spazio ora, quindi stiamo discutendo tutti e
stiamo discutendo da anni dovremmo
usa sottobase o caso cammello ed è
difficile ottenere un consenso perché entrambi lo sono
la risposta sbagliata
Fortran in realtà ha ragione, ma noi
non ho capito come farlo
in modo univoco nelle lingue future così
forse un giorno lo scopriremo e
saremo in grado di utilizzare gli spazi
appropriatamente
questo è Algol 60 il forse il migliore
progetto di commissione nella storia di
i linguaggi di programmazione che ci ha dato l’alcool 60
la dichiarazione di blocco così lo vedi
inizio e fine e che introduce a
ambito se stai dichiarando variabili
lì e abbiamo visto quella brillante idea
portato in quasi tutte le lingue
oggi anche l’ alcol ci ha dato il punto e virgola
ci sono lingue precedenti che provano a
usa i periodi per terminare una dichiarazione perché
questo è il modo in cui finiamo le dichiarazioni nel nostro in
la nostra scrittura ma che si è rivelata essere
problematico perché sembra un
punto decimale e a volte non lo era
chiaro che è alla fine di una dichiarazione
o è solo un numero così siamo andati a
virgola, invece, e abbiamo visto che
Convenzione copiata in molti altri
le lingue
questo è BCPL BCPL è la parte buona di a
come un linguaggio molto più ampio chiamato Cpl Cpl
Ada e pl uno era e dieci era destinato
essere uno di quei linguaggi universali
che potrebbe essere usato per tutto ciò
risulta generalmente non essere un buono
idea che le lingue specializzate più piccole
di solito sono migliori e dcpl era molto
linguaggio di successo ed era altamente
influente in almeno due modi il
il primo è che è venuto con un virtuale
macchina che usava i codici byte che erano
scritto in BCPL in modo tale che la macchina virtuale
è stato facilmente portato su altre macchine
e così bc up BCPL è apparso in molti
luoghi e quell’architettura di byte code
ha trovato la sua strada nel sistema pascal p
e poi nella JVM java, ma lo era
anche molto influente nella sua sintassi BCPL
è stato il primo linguaggio di parentesi graffa e
la cosa bretelle ricci è decollato e
lo vediamo praticamente ovunque ora lo è
fondamentalmente la stessa idea che avevamo in
alcool eccetto invece di inizio e
è un tutore arricciato e ci è piaciuto molto
che ci è davvero piaciuto quell’economia
è il linguaggio B questo era Ken
La reinterpretazione di Thompson della BCPL
idea delle parti buone che ha provato a fare
BCL BCPL un po ‘più piccolo e per
rendere la sintassi più adatta a ken
Thompson era una delle cose che faceva
la mia visione di una regressione ha messo il
parentesi torna in questo caso il
le parentesi non sono necessarie che qui
unicamente per decorare
ed è qualcosa che sta riprendendo
a Fortran non sono necessari qui ma
li voleva e così sono andati in B
e sono entrati in C in C ++ e a
Java in c-sharp e praticamente tutti
il linguaggio da allora ha questi
parentesi inutili in esso e noi
pensano che siano nitide e non servono
scopo a tutti e spesso trovo persone
fare cose stupide per evitare
tasti, ma a loro piacciono
tasti e non c’è spiegazione
per il motivo che è questo è uno dei ADA
cose che mi piace ADA è il modo in cui
dice commenti Penso che – – cose
ha introdotto un commento è davvero
bello da vedere di tutto il commento
convenzioni sembra più conforme
strettamente a ciò che facciamo ed è anche
usando l’estremità annotata così invece di
l’alcol che direbbe e basta
e se quale è un po ‘verboso ma
è chiaro da quello che sta succedendo qui
pensa la migliore affermazione che abbia mai fatto
visto è in Algol 68 questo era un altro
tenta di rendere un enorme universale
lingua e ci sono molte cose dentro
Tutto ciò che non mi piace, compreso il suo
convenzione di commento usando un segno inviato
ad entrambi finiscono e iniziano i commenti che iniziano
e terminando i commenti con lo stesso
il personaggio sta chiedendo guai al
commento di riga fino alla fine della riga
la convenzione sembra funzionare molto meglio
ma amo la sua affermazione if che sostituisce
Alla fine se con Phi così molto rapidamente
ho imparato che sai che due personaggi
digraph chiude l’altra cosa che abbiamo
liberarsi dei blocchi è solo così elegante
amo questo penso che sia molto bello e
inoltre sta usando: uguale c’è stato a
combatti a lungo nel design della sintassi
tempo per il suo incarico uguale o è
: uguale in Fortran era uguale ma
uguale sembra l’uguaglianza che non è
e questo è fonte di confusione e in particolare
i matematici hanno problemi con
che alcune lingue come l’ alcol hanno iniziato
: uguale e abbiamo ancora questo argomento
andando avanti e proprio ora il segno di uguale
i ragazzi stanno vincendo e penso che sia così
sfortunato anche quello che ci piace davvero
è uno stile emotivo
potremmo avere una sintassi minima ma noi
non vogliamo la sintassi emotiva
invece e in particolare quello che siamo
cercare è la tolleranza alla moda di
è un’ambiguità sintattica di ambiguità
cattivo nei linguaggi di programmazione perché
l’ambiguità causa confusione
causa errori e vogliamo zero errori in
i nostri programmi ma amiamo la sintassi che
lo rende più probabile e, di fatto, consente
si verificano errori che non potrebbero verificarsi
altrimenti così ti darò un esempio così
qui abbiamo una programmazione truccata
linguaggio con due operatori cloud e
cuore e ho tre variabili a b
e c e così come interpreti il
espressione di una nuvola essere difficile da vedere lì
sono un certo numero di modi si potrebbe fare uno
puoi leggerlo da sinistra a destra
quindi fai una nuvola B e poi lo fai
cuore C o potresti leggerlo da destra
a sinistra e così sarebbe la nuvola B C
e poi tu il nostro cuore DC di te nuvola
che con un ci sono lingue che fanno
rigorosamente da sinistra a destra come chiacchiere
fatto quello e ci sono lingue che vanno
rigorosamente da destra a sinistra
APL ha fatto ciò che è giusto non lo so
ma sai che scegli una direzione e
tu dici che è così che lo facciamo e quello
rende piuttosto facile leggere i programmi
scritto in quelle lingue che hai appena
per conoscere la regola e una volta che lo sai
regola una regola è in quel modo o in quel modo
allora puoi leggere correttamente i programmi ma
non è quello che vogliamo perché è così
non abbastanza complicato e questo no
produrre abbastanza opportunità da fare
errori quindi quello che invece vogliamo è
precedenza dell’operatore dove vogliamo una regola
che è più complicato che
descrive quale fai prima e così
a seconda del parente
la precedenza è tra nuvola e cuore
che finalmente determinare come quella
espressione viene interpretata in modo tale
ci occupiamo di questo
con poteri vincolanti possiamo dare a ciascuno
operatore un numero e operatori che
sono associati a un legame più elevato
il potere si lega più strettamente o si lega prima
e operatori con poteri leganti più liberi
legherà più liberamente e più tardi così
fondamentalmente se lavori in a
lingua devi memorizzare questa lista
devi conoscere le classifiche relative
di tutti questi e può quello può essere un
cosa difficile da ricordare così per
esempio al potere 40
Ho logico e logico o e
in questa lingua che sto andando a
creare qui hanno lo stesso
la precedenza ma in molti altri
lingue che non lo faranno nessuno di loro
legare più strettamente rispetto agli altri così io
ti farà una domanda per ora
il tuo linguaggio di programmazione preferito che
lega più strettamente e o o fa loro
avere la stessa precedenza quindi chi lo sa
con certezza come funziona la loro lingua sono
vedere un numero molto piccolo di mani andare
così che cosa significa è se la tua mano
non salì se mai li vedessi entrambi
questi operatori nella stessa espressione
è probabile che tu stia andando
fraintendere quello che fa e se tu
hai alzato la mano e se li hai messi entrambi
di questi in un’espressione è molto
probabilmente la prossima persona a leggere il tuo codice
non capirà cosa fa il tuo codice
introducendo un errore lo sai e basta
mi stupisce che la maggior parte delle persone
scrivere programmi professionalmente no
conoscere la risposta a questo e ad e
non c’è davvero ragione per aspettarselo
farebbero un altro esempio sulla linea 60 in
la moltiplicazione della notazione matematica è
generalmente più stretto della divisione, quindi noi
puoi scrivere cose come ax su BY in
alcuni linguaggi di programmazione è anche questo
vero ma in alcuni linguaggi di programmazione
hanno la stessa precedenza di me
mostrato qui così ancora chi lo sa
certo nella loro programmazione preferita
lingua se moltiplicazione e
la divisione ha la stessa precedenza può a
poche mani salgono ma la maggior parte delle mani
non perché la maggior parte di noi non lo sa
quindi ci piace quello che ci piace che abbiamo messo
regole nelle nostre lingue che la maggior parte di
noi non sappiamo quali sono le opportunità
per creare bug un’altra fonte di
l’ambiguità che ci piace è la
sovraccarico di parole in modo che possiamo usare a
parola per indicare una variabile una dichiarazione
parola chiave un operatore o un modulo speciale
e a volte è davvero importante cosa
una parola è in alcune lingue ci sarà
essere liste di parole riservate che non possono
essere utilizzato per altri scopi
perché potrebbero entrare in conflitto con alcuni di
questi usi speciali e molte persone
lavorare in quelle lingue non ha un
ricordo pienamente memorizzato di cosa
quella lista è così che sta anche introducendo
altre opportunità per fare errori noi
sovraccarico degli operatori, quindi nella maggior parte
delle nostre lingue useremo parentesi
per eseguire la definizione e l’invocazione della funzione
li useremo anche per fare il raggruppamento
all’interno di espressioni e noi utilizziamo anche
li per la separazione e la decorazione così
usando lo stesso operatore per fare tutto
quelle cose possono spesso anche introdurre
ambiguità che possono causare errori noi
ma a noi piace sovraccaricare in effetti ci piace
così tanto che alcune delle nostre lingue
le lingue specificamente ci permettono di fare
sovraccarico che aumenta la nostra capacità
per creare confusione all’interno dei programmi
che sviluppiamo così il modo in cui affrontiamo
con l’ambiguità del linguaggio sta analizzando
e abbiamo meravigliose teorie formali di
lingue formali che ci permettono di
genera automaticamente l’analisi dei parser
è un argomento molto complicato ci sono
un sacco di libri fantastici e molto
le carte su di esso hanno un sacco di macchinari
è stato costruito intorno ad esso, quindi lo farò
scrivi per te oggi un parser altro
lingua stiamo per vedere il tutto
quindi inizieremo con i token ma tu
può prendere tutti gli elementi di origine di a
programma e dividerli in token e
ognuno di questi sarà rappresentato da un
oggetto
avremo un token prototipo che lo farà
essere il segno che tutto sta per
eredita da e poi avremo un set
di simboli che erediteranno da quelli
prototipi e poi avremo la finale
gettoni che erediteranno da quelli
simboli avremo un metodo avanzato
che andrà a prendere il prossimo token per noi
e mettilo in una variabile chiamata token
e se passiamo un ID allora lo farà
garantire che il token che siamo
saltare su è quel tipo di token così
se stiamo cercando un segno più possiamo
dire anticipo Plus e questo ti garantirà
che il prossimo token è un segno più se
non è che produrrà un errore così dentro
analizzare ciò che vogliamo fare è prendere un
albero o per produrre un albero quindi prendiamo
una lista di token e li tesseremo
in una struttura e una volta che abbiamo il
struttura possiamo quindi passarlo a un
analizzatore o un generatore di codice o un
interprete e farà lavorare
succede così è tutto lo sforzo di analisi
per produrre questa struttura che mostrerò
una tecnica chiamata operatore top-down
la precedenza è stata inventata da von prat
quando era al MIT, insegnava a
Stanford ora lo ha presentato al
La conferenza di Popple in 73 l’ ha progettata
per fornire Lisp o alto livello
sintassi delle lingue in un ambiente Lisp
sosteneva che la tecnica era semplice
per capire banale da implementare facilmente
usare estremamente efficiente molto flessibile
e dirò anche che lo è
bellissimo penso che questo sia uno dei
le cose più belle ed eleganti che abbia mai visto
visto così perché non ne hai mai sentito parlare
se è una buona cosa perché questo
completamente sconosciuto a te Pratt nel suo
la carta ti dice perché sarà
respinto
la prima è la preoccupazione per B & F
grammatiche e sono molto morbidi Springs
Pratt amava la teoria degli automi e tutto il resto
quella roba ma ha trovato un modo per
evita completamente quella roba e molto
più rapidamente risolvi il problema
richiede una programmazione funzionale
lingua e nella sua carta ha usato la Lisp
e il problema con questo è quello più
le lingue almeno in quel momento non lo erano
linguaggi di programmazione funzionale e il
La comunità Lisp non ha avuto alcun uso per la sintassi
erano avevano trovato così tanto valore nel
sintassi minimale delle espressioni s di loro
non volevo nient’altro, anche se fosse così
è venuto a bassissimo costo ma il JavaScript
la comunità è una comunità che ha un
linguaggio funzionale ed è una comunità
a me piace la sintassi emotiva, quindi questo
l’algoritmo è davvero adatto a questo
la comunità quindi la preparazione prende l’analisi che è
una cosa davvero complicata e riduce
a una domanda semplice cosa facciamo
aspetto di vedere a sinistra di un token
ci sono alcune cose che non sembrano
quello che vuole vedere qualcosa al
lasciato per esempio un operatore infisso lo farà
prendere qualcosa che è alla sua sinistra e
poi qualcosa al suo luminoso e poi
ci sono cose come variabili e
costanti e operatori unari che non lo fanno
aspetto di vedere qualcosa a sinistra così
solo quei due casi e così chiama
qualcosa che si aspetta di vedere
qualcosa a sinistra a sinistra e
annotazione o un LED in qualcosa che
non chiama un’annotazione annullata o
un pazzo quindi lascia entrare i termini di Pratt ma
Userò quelli quindi ce ne sono alcuni
simboli che avranno solo noci
così punto esclamativo in JavaScript o
tilde e JavaScript quelli sono unari
solo gli operatori così avranno noci
le variabili avranno dadi quindi più punti
operatori di assegnazione relazionali
operatori
quelli sono LED perché si aspettano
vedere qualcosa sul lato sinistro della
operatore e loro devono fare le cose
massima confusione che ci confonde
alcuni che hanno entrambi in più
JavaScript è sia un operatore infisso che
un operatore di prefisso Perrin è sia quando
il suo raggruppamento è un operatore di prefisso quando
sta invocando è un operatore infisso quindi
questo è il token prototipo questo è
dove i nostri token stanno per avviarlo
avrà il prefisso e il lead predefiniti
funzioni che causeranno solo errori
se arrivi a questo e a questi metodi
non sono stati ignorati con e il
predefinito è quello di produrre un errore Avrete
ha anche un metodo di errore che lo farà
produrre messaggi di errore quindi se troviamo un
errori che stiamo analizzando possiamo chiamare il
metodo di errore del particolare token
ciò causa l’errore e questo lo darà
noi un messaggio appropriato e lo farà anche
avere il potere di associazione sinistro predefinito così
questa è la precedenza di questa cosa così
qualcosa che non ha già un
allora il potere specifico erediterà a zero
produrremo la nostra tabella dei simboli e
è lì che terremo tutte le
simboli della lingua e avremo un
funzione di simbolo che ci aiuterà a
popolare a quel tavolo in modo semplice
la funzione avrà un ID e una rilegatura
potere cercheremo il simbolo attuale
nella tabella dei simboli e se la troviamo
allora lo useremo altrimenti lo faremo
costruirne uno nuovo e incollarlo
il tavolo
avendo questo possiamo ora iniziare a dichiarare
la nostra lingua, quindi ho intenzione di specificare
che tutte queste cose sono simboli ora
e sembrerà addirittura dichiarativo
sebbene questo sia tutto procedurale, questo è
tutto funzionale inizia a somigliare
dichiarazioni quindi dichiaro che queste
cose specifiche sono simboli che sto aggiungendo
due simboli speciali di qui la fine
rappresenta la fine del programma quindi io
voglio qualcosa da indicare quando arriviamo
lì e per le regole dei token
di tokenizzazione questi sono garantiti a
non corrisponde a nulla che effettivamente ottiene
diffondersi e poi avrò anche un
simbolo speciale che rappresenta le parole
che non abbiamo nella tabella dei simboli
questo sarà dove le nostre variabili
mostra così ora iniziamo a definire
gli operatori così è un simbolo che sta andando
avere un potere vincolante di 60 e questo
avrà un vantaggio e il suo comando prenderà
il suo primo membro come tutto ciò che era sulla
a sinistra e quindi chiama l’espressione
funzione per ottenere tutto ciò che è sulla destra
e stabiliremo l’ aritmo di questo del
token to binary e restituirlo che possiamo fare
l’asterisco esattamente nello stesso modo in cui lo facciamo ancora
sai che l’unica differenza è
è un asterisco invece di più a 70
invece di 60 ma per il resto lo sono
esattamente lo stesso ogni volta che abbiamo delle cose
che sono così simili, sappiamo che c’è
una possibilità di fare qualcosa di più intelligente così io sono
andando a creare un operatore infisso o un
funzione infisso che userò per definire
i miei operatori infissi modo da sta andando a prendere
un ID un potere vincolante e un optional
Funzione LED se non viene passato un LED
funzione quindi ci vorrà un creerà
una funzione LED predefinita che è quella
che prende la cosa sulla sinistra chiama
espressione e prende la cosa sul
giusto così avendo questa funzione infissa I
ora posso iniziare a definire il mio infisso
operatori e di nuovo sta guardando
dichiarativo ma è in realtà
funzionale così io questo
dice che il mio operatore Plus è più libero
del mio operatore multiplo ma più stretto
a proposito dei miei operatori di confronto
Tutti i miei operatori di confronto sono i
stesso livello di precedenza nel tuo
linguaggio di programmazione preferito fare loro
tutti hanno la stessa precedenza nessuno
sanno che probabilmente non lo fanno più
le lingue che la disuguaglianza ti guida
conosci meno e più che non
hanno la stessa fermezza dell’uguaglianza
ancora un’altra occasione di errore
l’operatore ternario è un infisso speciale
operatore perché ci vuole un ulteriore
cosa dopo, quindi lo specifichiamo di
passando in una funzione che analizzerà
quelli che assomigliano agli altri
prenderà la cosa sulla sinistra ottenere un
espressione per ottenere la seconda cosa sarà
quindi abbinare i due punti e quindi ottenere il
espressione per la terza cosa e impostare
l’ arità a ternario nella maggior parte dei nostri
lingue avremo alcune cose che
associare da sinistra a destra ma non lo è
abbastanza confuso quindi avremo anche
cose che associano da destra a sinistra così
se hai un numero di operatori con
lo stesso livello di precedenza che ottiene il pareggio
rotto da una direzionalità e un po ‘di volontà
andare in un modo e alcuni andranno l’altro così
un esempio di cose che vanno dall’altra
sempre i nostri compiti assegnati
essere valutato da destra a sinistra così
creeremo una funzione di assegnazione
che ci aiuterà a specificare chi
cose e possiamo anche fare qualcosa di più profondo
controllare qui in modo che possa essere sicuro
quello che è a sinistra del compito è
un valore L che può essere una cosa difficile
determinare sintatticamente perché la l
le regole del valore sono più complicate di
le regole di espressione regolare ma io
l’aggiunta di casi speciali in questo sistema è
davvero facile, quindi posso farlo
controllare qui invece di provare a farlo
cromaticamente e poi una volta che ho quello
Posso quindi andare avanti e creare o
specificare i miei incarichi operatori che faccio
prefisso allo stesso modo
il prefisso usa uno strano perché c’è
niente di interessante a sinistra di a
prefisso in modo da avere che ora posso specificare
più meno e così via i miei operatori di prefissi
l’operatore principale per il raggruppamento è
un po ‘speciale quindi passiamo passando a
funzione in modo che analizzerà un’espressione
cercare la parentesi di chiusura e poi
restituire l’ espressione quando Pratt ha scritto
il suo articolo a cui stava pensando
espressioni linguistiche ed espressione
le lingue sono grandiose ma non ci piacciono
quelli che non sono abbastanza emotivi noi
preferisco avere linguaggi di dichiarazione noi
voglio avere dichiarazioni ed espressioni
e il suo linguaggio non consentiva
dichiarazioni ma è stato facile adattare il
sistema per farlo, così mi sono inventato un
prima notazione del giorno nullo se la
posizione di affermazione si può avere un lì
sono alcuni cenni che hanno senso solo
in quella posizione e così li chiamo
cose Fudd o prima notazione Naldi
e posso avere una funzione di dichiarazione
che mi permetterà di dichiarare l’artista
per creare i simboli che verranno utilizzati
per le affermazioni che prima guarderà per vedere
se il token ha un FUD e se lo fa
chiamerà altrimenti assumerà
è una dichiarazione di espressione e quindi
Cercherò di vedere che tipo di espressione
Sono entrato nella maggior parte delle nostre lingue
l’espressione può essere un’affermazione che è
pazzesco penso che le uniche due espressioni
questo ha senso nella posizione dell’affermazione
sono incarichi e invocazioni e
qualsiasi altra cosa potrebbe essere un errore
ma poiché B almeno lo abbiamo permesso
ma penso che non dovremmo
e infine alla fine corrisponderà al
punto e virgola ed è fatto
molto spesso vorranno avere più di
una dichiarazione in modo tale che le affermazioni ci consentono di
analizzare una lista di dichiarazioni e metterle
in array e possiamo dire se è un token
probabilmente sarà la prossima dichiarazione se lo fosse
ha un cenno del capo o di un tonfo se lo fa che è
probabilmente una dichiarazione se non lo fa allora
probabilmente non è possibile quindi analizzare
blocca un blocco inizia con una parentesi graffa
e quindi conterrà alcune dichiarazioni
e poi una parentesi graffa di chiusura okay e
quindi possiamo abbinare possiamo iniziare a definire
le nostre dichiarazioni
quindi una dichiarazione prenderà un ID e un
funzione fudge e noi e così avremo un
simbolo per quello per quella dichiarazione e
assegnare la dichiarazione del fondo ad esso così
ecco un esempio di una dichiarazione if noi
prima saltare la parentesi graffa decorativa o
abbinamenti decorativi analizziamo la condizione
abbiniamo il rinforzo di chiusura o la chiusura
perón analizziamo un blocco, quindi guardiamo a
vedi se c’è un altro se c’è allora
otteniamo l’altra conseguenza e
quindi impostiamo l’ arity in statement e
allora siamo finiti così nella scatola è un if
affermazione che è la dichiarazione che
questa espressione o questa funzione è
andando a corrispondere ma per mostrarti un po ‘
la flessibilità che abbiamo nello schema
supponiamo che voglio analizzare o avere un
linguaggio che sembra BCPL almeno
nelle sue dichiarazioni if, questo è il codice
per analizzare BCPL come se dichiarazioni e
nella scatola c’è un esempio di tale if
affermazione basicamente prendendo i genitori
questo è talvolta chiamato Paran libero
e in varie occasioni sembra proprio questo
potrebbe trasformarlo in un’aggiunta futura a
script vecna ma finora non ha
soprattutto perché
la risposta del pubblico è stata gente così vocale
amo quel genitore e sembra che siamo noi
non posso rimuoverlo Oh
o se vogliamo farlo sembrare Algol
68 sai nella casella è un algal 68 se
dichiarazione e questo è un codice che lo farà
corrisponde a quello stile di questa istruzione if
fondamentalmente solo dalla corrispondenza sul Phi
allora questa è la chiave di tutta la faccenda
questa è l’espressione che dici
chiamalo con un potere vincolante e quello
il regalo restituisce un albero che rappresenta
quell’espressione e questo è il singolo
la più brillante funzione che abbia mai visto
nella mia intera carriera in questo Pratt
preso tutta la teoria del parsing e
tutta la sua complessità e ridotta a
un ciclo semplice così quando entriamo in questo noi
prima chiama il cenno del token corrente
e poi fino a quando il potere vincolante di
il token successivo è più grande di quello giusto
potere vincolante che abbiamo passato in noi chiamiamo
Leeds e continuiamo a farlo finché non lo siamo
fatto questo è tutto della complessità di
l’analisi è in questa più semplice delle funzioni
quindi, quando stiamo facendo le cose, è giusto
quando abbiamo preso un sacco di
complessità e rimosso tutto e solo
trovare una cosa semplice e ho
mai visto un esempio migliore di sostituzione
complessità con semplicità di questo io
amo questo questo è il mio preferito
funzione in tutto il mondo
e tutto questo funziona così vogliamo prendere
quella dichiarazione e produrre quell’albero
da esso e quello che ti ho mostrato lo farai
e in effetti potremmo considerarlo come
sai che questa è la struttura dei dati
produrrà e potremmo quindi prenderlo
struttura dei dati e dargli un codice
generatore e darlo ad un ottimizzatore
darlo a un interprete che a
l’interprete può eseguire questa roba
direttamente
e questa è la traccia che codifica
andando a fare e così hai visto tutti
una di quelle funzioni e quelle
le funzioni non stavano facendo molto
complesso non c’è molto codice in corso
quindi questa tecnica è veramente veloce perché
esso
non fa quasi niente è solo
andando in giro confrontando numeri e
costruire alberi questo è un altro esempio
di una dichiarazione questo a causa del
differenza di precedenza
quell’albero è bilanciato nell’altro
questa è la struttura dati che
rappresenta quell’albero e questo è il
parse che ha generato quello e di nuovo
è davvero semplice che sia davvero veloce
non c’è quasi nulla in corso
quindi facciamo in modo che l’ operatore top-down lo preceda
è facile da costruire parser con esso è
davvero veloce perché lo fa quasi
niente è abbastanza veloce da usare
come interprete um è dinamico tu
puoi costruire dsls con questo in effetti puoi
crea dsl x ‘all’interno di un altro
applicazione perché è davvero
leggero che potresti anche costruire
lingue estensibili che puoi aggiungere
potrebbe avere funzioni nel tuo sistema
che aggiungono nuove funzionalità al
strutture che stai usando per costruire
la tua lingua mentre stai eseguendo il
linguaggio in modo da poter aggiungere roba così uno
la visione dello sviluppo dell’applicazione sei tu
dovrebbe prima progettare il linguaggio che
è la lingua ideale per scrivere il tuo
applicazione e poi scrivi il tuo
applicazione in quella lingua ciò consente
di fare facilmente che possiamo anche ottenere
sbarazzarsi di parole riservate parole riservate sono
male per i programmatori perché devi
ricorda questa lista e qualche volta quella
si mette di mezzo delle cose che ti
cercando di esprimere ed è male per
designer di lingue perché se tu
scoprire dopo è qualcosa che tu
necessario aggiungere alla lingua molto spesso
non puoi perché le persone sono già
usando la parola migliore così perché questo
la tecnica è così dinamica che non lo sei
congelando tutta questa complessità in
strutture dati statiche è tutto dinamico
puoi avere politiche come qualsiasi parola può
essere usato come un nome variabile ma se tu
usa un nome di variabile e una funzione
il nome non può essere utilizzato per nessun altro
scopo della funzione e avere tale
regola significa che non hai bisogno di parole riservate
più così è buono per i programmatori
perché non hanno bisogno di sapere o preoccuparsi
quale è l’elenco delle parole riservate
non esiste ed è buono per il
progettisti di linguaggi perché possono aggiungere
nuove cose nella lingua in qualsiasi momento e
non devi mai preoccuparti del conflitto
perché chiunque stia già usando il
il nome non userà il nuovo
funzione così chi se ne frega
Alla fine ho qualche consiglio per
designer di linguaggi penso che dovremmo tutti
progettare i linguaggi di programmazione I
penso che sia una cosa grandiosa
è divertente è la prima delle arti e lo è
qualcosa che tutti possiamo divertirci
quindi per prima cosa ti consiglierei di provarci
abbracciare il minimalismo nella tua lingua prova
avere anche il minimalismo concettuale
minimalismo notazionale quanto
possibile ma non cercare di provare criptico
fornire più chiarezza ed errori
resistenza come puoi uno dei tuoi
obiettivi primari dovrebbero essere quelli di provare a fare
confusione libera nella confusione della lingua
è la fonte di tutti gli errori e quindi se noi
possiamo evitare le nostre fonti di confusione
lingue che avremo più facile
il tempo cerca di renderlo leggibile e trovo
c’è un’enorme quantità di
incomprensione su ciò che è leggibile
significa che penso che sia leggibile significa che può
facilmente e correttamente inteso da a
lettore che la maggior parte della gente capisce
leggibilità per significare che mi piace il modo in cui
guarda e che questo è un completamente
cosa diversa innovare che abbiamo già
un sacco di Java come le lingue quindi se tu
ritrovati a scrivere coca bottiglia di coca cola
bottiglia uguale a nuova bottiglia di coca a piedi
dalla macchina
siamo già stati lì per questo
stato davvero ben coperto prova a trovare
qualche altra dimensione su cui a
innovare seleziona molto le tue caratteristiche
attentamente non prendi semplicemente tutte le funzionalità
hai mai visto e prova a metterlo nel tuo
linguaggio anche se sono tutti davvero buoni
fai attenzione o stai attento all’idea che alcuni
qualcosa a volte è utile che tu sappia
questa caratteristica è a volte utile così io
voglio metterlo nella mia lingua, sfido
qualcuno da suggerire qualcosa di reale o
immaginario che a volte non è utile
anche le cose che sono ridicole
pericolose e cattive quelle cose sono
a volte utile quindi se questo è il solo
criteri che hai per le nuove funzionalità di te
non ho un criterio quindi prova a venire
con migliori ragioni per cui sei
comprese le cose evitano l’universalità
ci sono stati molti tentativi a
rendendo l’unico linguaggio universale il
linguaggio che fa bene a tutto ciò
non funziona quello che sembra funzionare meglio
è progettare un linguaggio che fa uno
cosa specifica davvero bene e possibilità
ci sono molte altre cose
faremo anche bene, ma almeno
farai una cosa molto bene e
è meglio di molti altri
le lingue possono chiedere aiuto alle persone
gestire la complessità con cui trattare
la complessità è la cosa più difficile
che facciamo così cercando le strutture per
la leva che ci consente di farlo è
davvero importante e promuovere la qualità come
il più possibile che vogliamo fare
i programmi che sono veramente buoni rendono nuovo
gli errori non commettono i vecchi errori
ancora una volta, inevitabilmente si sta andando ad avere per
commetti alcuni vecchi errori perché non puoi
innovare su ogni dimensione allo stesso
tempo ma sii veramente cauto su cosa
vecchi errori che non puoi propagare per
esempio Ken Thompson penso che sia uno di
i ragazzi più svegli di avere mai ha vissuto
ha spinto la nostra arte così avanti ma io
pensa che abbia avuto un sapore terribile come a
progettista di sintassi ma ha capito come noi
pensa o forse siamo stati così influenzati
da come pensa
che non possiamo vedere i molti errori
che ha messo dentro per vedere e quegli errori
stato propagato virtualmente
tutto quello che è successo da allora
quando non abbiamo a continuare a farlo
più la cosa che mi piace di più
CoffeeScript è uno dei nuovi
Le varianti JavaScript sono fondamentalmente
esattamente la stessa lingua di JavaScript
tranne che non ha il sapore di carne
sintassi ha un diverso tipo di sintassi
invece ed è bello che fosse
ha detto che se una nuova lingua non ha guardato
esattamente come C non aveva possibilità di
prendere piede e questo non sembra essere
vero più
alla fine lo stiamo rompendo
molti anni così sai che fai il
la lingua ti insegna che consiglio alle persone
impara quante più lingue puoi
perché quando ti immergi in una lingua
può insegnare a te e alla tua lingua
ti insegnano ad abbracciare Unicode così tanto
le nostre lingue sono bloccate con l’ ASCII
fai sapere che abbiamo gli operatori ASCII
Unicode è pieno di migliaia di sorprendenti
personaggi speciali che potrebbero essere davvero
buono inefficace per comunicare cosa
noi vogliamo fare nei nostri programmi che non lo siamo
usando quelli perché è possibile che sia
credevo che la maggior parte dei programmatori non lo fosse
abbastanza intelligente da essere in grado di ottenere i codici
sullo schermo a meno che non ci sia un’immagine
Ho lasciato su un pulsante che si può spingere I
non penso sia vero penso che possiamo
in realtà rompicapo così tanto
considera che certamente non vuoi
a impazzire e si può certamente andare
pazzo se inizi a mettere via troppe cose
personaggi idioti ma non ce l’abbiamo
abbastanza caratteri di parentesi sai
siamo andati a usare parentesi angolari che
è stato forse un errore perché non lo facciamo
avere abbastanza altre cose, ma tu sai
ci sono quei meravigliosi giapponesi
parentesi angolari che sono grandi e e
il
le parentesi che assomigliano a quello che c’è
molte opportunità per il nostro
le lingue balzano in avanti, naturalmente no
fare la stessa cosa e loro sono
tesori dimenticati
sai che siamo molto bravi
reinventando lo stesso sequenziale di base
lingua non siamo le nostre nuove lingue
non così diverso da Fortran in termini
di come sono organizzati e cosa loro
ma ci sono cose che abbiamo lasciato
lungo la strada che non stanno bene
rappresentato nelle nostre lingue attuali
che vale la pena rivisitare come stato
macchine e motori a vincoli altro
modi di pensare a come fai le cose
che va oltre una sola cosa dopo
un altro sfruttamento del parallelismo uno dei
le maggiori sfide che abbiamo sono cosa fare
con tutte le capacità di calcolo
questo è di fronte a noi, siamo bloccati
tutta questa programmazione sequenziale
lingue ma come andiamo sempre di più
parallelamente diventano sempre meno
efficace per ciò che dobbiamo fare in
in particolare nella programmazione distribuita
ora abbiamo le nuvole e ne abbiamo un sacco
core e non sappiamo cosa fare con
loro quindi penso che sarà il
prossima cosa interessante per le nostre lingue
affrontare è come possiamo trarre il massimo
vantaggio di grande grande parallelismo e
poi finalmente divertiti è davvero un
bel passatempo e penso che tutti dovrebbero
essere farlo oh e un’ultima cosa facciamo
sbarazzarsi di questi e non farlo nel modo
JavaScript ha fatto il modo in cui JavaScript l’ha fatto
è stato lasciato questi nella grammatica ma
ti ha permesso di lasciarli fuori usando
un meccanismo di recupero interiore quindi se lo è
va analizzando ottiene un errore che prenderà
un feed della linea vicina lo trasforma in a
punto e virgola, quindi eseguire il backup e riprovare
è come se non lo facessi è carino
facile trovare un punto e virgola gratis
la grammatica lo fa invece, infine, se tu
vuoi saperne di più su top-down
la precedenza degli operatori ce ne sono due
progetti su github che sono entrambi liberamente
disponibile la prima
è una semplice precedenza dell’operatore top-down
parser per JavaScript semplificato scritto
in JavaScript semplificato l’altro è
scorte di scacchi che sono complicate
javascript cercando di fare solo il bene
parti che sono più grandi di quelle semplificate
JavaScript e quindi per ulteriori spiegazioni
su come funziona, c’è un capitolo in
bel codice che descrive il suo
operazione quindi è quello che ho per te
questa mattina
grazie e buona notte
discorso entusiasmante a cui ero combattuto
digita una domanda cercando di seguire il
parlavo allo stesso tempo ma noi
tuttavia ho tre domande
voi ragazzi inserite e dato che abbiamo
pochissimo tempo ho lasciato scegliere Douglas
una delle domande forse due o
a seconda delle risposte non lo sono
linguaggio progettato solo un caso speciale di
Progettazione API no Non penso quindi penso
con la progettazione dell’API hai generalmente un
idea più specifica su cosa succederà
capita e come sarà usato
mentre i linguaggi di programmazione sono molto
strumento astratto più generale la sfida
per la programmazione il design è con ciascuno
generazione che vogliamo salire di livello, lo sai
così con la legge di Moore l’hardware diventa
il livello su ogni due anni o giù di lì
Raddoppiano, lo facciamo solo ogni vent’anni
anni o giù di lì quindi siamo molto più lenti
capirlo e la maggior parte di quello
la lentezza è dovuta alla nostra testardaggine
e la dipendenza dallo stile sai che ci è voluto
noi tanto tempo per decidere di sbarazzarci
andare due a due perché un sacco di gente pensava
andare in due sembrava davvero buono e non lo fece
capisci che andiamo in due
programmazione più difficile e siamo a
luogo simile oggi penso con le lezioni
e alcuni altri concetti così sono le classi
grandi hanno spinto il
all’avanguardia
avanti tremendamente ma hanno anche bloccato
noi sul posto e quindi ci stanno impedendo
dall’andare alla prossima cosa che è
andrà ancora meglio così quelli sono
problemi che non hai alle 8:00 di
Il design dell’API è completamente diverso
spazio
tu
sintassi sul perché amiamo la sintassi e il nostro
programmazione dei linguaggi perché probabilmente
non dovrebbe e come puoi ottenerlo comunque
e trarne vantaggio della motivazione
per questo discorso è il nuovo ruolo che
JavaScript è improvvisamente inaspettatamente
trovato in JavaScript è ora il
le lingue della macchina virtuale universale lo sono
in corso di traduzione in JavaScript in
per consentire loro di correre ovunque
beh, le prime lingue a farlo erano
Java Google traduce Java in
JavaScript in modo che possa essere eseguito ovunque
persone straordinarie stanno ora traducendo C
in JavaScript e in esecuzione vicino
velocità native mai pensate
JavaScript sarebbe stato utilizzato in questo modo siamo
anche dicendo che le nuove lingue sono
sviluppato specificamente per tradurre in
JavaScript quindi è diventato un universale
macchina virtuale vorrei contendere il
primo linguaggio progettato per funzionare come uno di
queste lingue JavaScript erano jslint
jslint potrebbe essere pensato come un compilatore
per una lingua chiamata le parti buone e
quindi è stato il primo in cui è stato rilasciato
circa 2000 e come sapete, arriva jslint
con un avvertimento
jaelyn avrebbe ferito i tuoi sentimenti perché
si lamenta della sintassi e delle persone
le persone hanno una profonda connessione emotiva
alla loro sintassi così quando lo dici a loro
come possono migliorare il loro loro
programmi per renderli meno
probabile che sia bacato e più mantenibile
più leggibile e tutto ciò che iniziano
piangere che è sorprendente perché lo è
solo sintassi perché dovrebbe interessare a qualcuno
a tale proposito, sostengo che la sintassi è
l’ aspetto meno importante di a
programmazione del linguaggio di programmazione e intendo
nello stesso senso in cui la moda è il
aspetto meno importante dell’abbigliamento
design che sembra un radicale
dichiarazione ma sai se guardi
cosa è l’ abbigliamento e cosa dovrebbe fare
dovrebbe proteggerci dal sole e
dal freddo e dall’infortunio
proteggi la nostra nostra modestia ma ma quello è
non quello che consideriamo quando compriamo i vestiti
in particolare in cose come le scarpe
la gente compra le scarpe senza chiedere il possibile
Cammino in loro posso correre in loro volontà
dimostrano di salvare il mio piede dall’infortunio
la gente compra le scarpe che sono probabili
causare ferite in nome della moda così
dimentichiamo ciò che è veramente importante e come
programmatori pensiamo di essere più intelligenti di
quello che non vorremmo sapere che guardi
alle scarpe completamente fuori moda
che siamo tutti di indossare non avremmo fare
questo errore, ma quando si tratta di
la sintassi dei linguaggi di programmazione che facciamo
esattamente gli stessi errori per lo stesso
ragioni per cui siamo totalmente irrazionali e
emotivo nel nostro amore per la sintassi così lo farò
offrire come prova un libro fantastico di
Samuel caiman
è uscito nel 1990 quindi è un po ‘datato ma
è ancora un libro davvero buono
linguaggi di programmazione un interprete
approccio basato in questo libro che scrive
interpreti per sette programmi
lingue e poi scrive programmi
per ciascuna di quelle lingue per mostrare come
lavorano e per queste sette lingue
non implementa per intero
linguaggio perché sarebbe troppo
lavoro da fare in un libro così solo lui
implementa le parti buone di ciascuno di
queste lingue e per la maggior parte del
lingue che non includono il loro
sintassi quindi è davvero sorprendente quando
guardi una lingua come un OLP che
è famoso per il suo aspetto sembra
radicalmente diverso da qualsiasi altro linguaggio lui
lo scrive con la stessa notazione come il
altre sei lingue per ottenere un
il confronto tra mele e mele è così
sorprendente che tu possa scrivere in a
lingua senza usare la sintassi ma
di solito quando stiamo esaminando le lingue
la sintassi è tutto ciò che guardiamo guardiamo al
aspetto più superficiale di esso e spesso
potrebbero passare anni prima che scopriamo
cosa c’è negli strati più profondi spogliandosi
via tutto ciò che il camme della sintassi ci mostra
cosa stanno facendo in realtà queste lingue
quindi il linguaggio che usa è minimo
sintassi e c’è un numero di lingue
che hanno sintassi abbastanza minime questi
le lingue sono ben considerate dai designer
ma sono rifiutati dal mainstream più
i programmatori professionisti non possono sopportare
queste lingue quindi Lisp ha un minimo
sintassi ha come espressioni e come
espressione è solo una sequenza di simboli
di solito sono racchiusi tra parentesi
rappresentare le indicazioni di funzione e
espressioni ma potrebbero contenere dati
o qualsiasi altro tipo di struttura ed è
davvero semplice potresti prenderne uno qualsiasi
quegli argomenti lo sostituiscono con un altro
s espressione e nido profondo come te
voglio che questo sia forse il più minimale
sintassi la comunità e lo schema Lisp
la comunità ama questa roba il resto di noi
odiamo questa roba se la troviamo
offensivo anche solo a guardarlo
chiacchiere potrebbe essere considerato un minimo
sintassi anche se è molto di più
complicato di s espressioni
l’invocazione di metodo in chiacchiere è
geniale hai qualcosa
rappresentando un oggetto allora hai il
nome dei parametri che separano il
i valori dei parametri che abbiamo respinto
questo anche se è geniale
invece abbiamo preso l’ approccio del C ++ che è
hai una lista di cose avvolte in
parentesi separate da virgole con
assolutamente nessuna indicazione su quello che loro
sono e quale ordine vanno in cui
rende molto più facile sostituire il
valore sbagliato o per metterli fuori ordine
e ci piace che ci piace che si tratta di
più facile sbagliare così che noi
ha respinto questo che è molto più difficile
sbagliare a favore di quello che è
molto più facile da sbagliare che è il tipo
di emotività che è avvolta nel nostro
apprezzamento della sintassi quindi lasciami prendere
attraverso gli anni e guardare la
evoluzione dell’istruzione if che iniziamo
con Fortran qui abbiamo un Fortran
dichiarazione go-to del computer , quindi se se
la differenza tra a e B è
la volontà negativa o zero salterà a
affermazione 20 che non fa nulla
altrimenti salterà alla dichiarazione 10
le parentesi intorno alla condizione sono
assolutamente necessario nella maggior parte delle lingue
sono solo decorazioni ma in Fortran
gli spazi non erano significativi, quindi poteva
non vedere la differenza tra se un e
se entrambi sembrano uguali a Fortran così
aveva bisogno delle parentesi per separare così
potrebbe dire che cosa era una dichiarazione if
Fortran ottiene un po ‘ meglio con
Fortran per il segno sinistro non era stato
inventato ancora ma potrebbe sostituire a
dot le dot expression puoi vedere cosa
possiamo anche vedere qui il go-to
dichiarazione ha dimostrato il go-to di
Naturalmente è stata l’ispirazione per questo
conferenza e la maggior parte della gente ha scritto il go-to
come due parole anche se è un singolo
parola in Fortran di nuovo a causa di questo
possibilità di inserire spazi in qualsiasi spazio
non sono significativi quindi Fortran in realtà
ho qualcosa di giusto per tutti
ha sbagliato da allora, che è come fare
scrivi un nome di variabile che contiene
uno spazio ora, quindi stiamo discutendo tutti e
stiamo discutendo da anni dovremmo
usa sottobase o caso cammello ed è
difficile ottenere un consenso perché entrambi lo sono
la risposta sbagliata
Fortran in realtà ha ragione, ma noi
non ho capito come farlo
in modo univoco nelle lingue future così
forse un giorno lo scopriremo e
saremo in grado di utilizzare gli spazi
appropriatamente
questo è Algol 60 il forse il migliore
progetto di commissione nella storia di
i linguaggi di programmazione che ci ha dato l’alcool 60
la dichiarazione di blocco così lo vedi
inizio e fine e che introduce a
ambito se stai dichiarando variabili
lì e abbiamo visto quella brillante idea
portato in quasi tutte le lingue
oggi anche l’ alcol ci ha dato il punto e virgola
ci sono lingue precedenti che provano a
usa i periodi per terminare una dichiarazione perché
questo è il modo in cui finiamo le dichiarazioni nel nostro in
la nostra scrittura ma che si è rivelata essere
problematico perché sembra un
punto decimale e a volte non lo era
chiaro che è alla fine di una dichiarazione
o è solo un numero così siamo andati a
virgola, invece, e abbiamo visto che
Convenzione copiata in molti altri
le lingue
questo è BCPL BCPL è la parte buona di a
come un linguaggio molto più ampio chiamato Cpl Cpl
Ada e pl uno era e dieci era destinato
essere uno di quei linguaggi universali
che potrebbe essere usato per tutto ciò
risulta generalmente non essere un buono
idea che le lingue specializzate più piccole
di solito sono migliori e dcpl era molto
linguaggio di successo ed era altamente
influente in almeno due modi il
il primo è che è venuto con un virtuale
macchina che usava i codici byte che erano
scritto in BCPL in modo tale che la macchina virtuale
è stato facilmente portato su altre macchine
e così bc up BCPL è apparso in molti
luoghi e quell’architettura di byte code
ha trovato la sua strada nel sistema pascal p
e poi nella JVM java, ma lo era
anche molto influente nella sua sintassi BCPL
è stato il primo linguaggio di parentesi graffa e
la cosa bretelle ricci è decollato e
lo vediamo praticamente ovunque ora lo è
fondamentalmente la stessa idea che avevamo in
alcool eccetto invece di inizio e
è un tutore arricciato e ci è piaciuto molto
che ci è davvero piaciuto quell’economia
è il linguaggio B questo era Ken
La reinterpretazione di Thompson della BCPL
idea delle parti buone che ha provato a fare
BCL BCPL un po ‘più piccolo e per
rendere la sintassi più adatta a ken
Thompson era una delle cose che faceva
la mia visione di una regressione ha messo il
parentesi torna in questo caso il
le parentesi non sono necessarie che qui
unicamente per decorare
ed è qualcosa che sta riprendendo
a Fortran non sono necessari qui ma
li voleva e così sono andati in B
e sono entrati in C in C ++ e a
Java in c-sharp e praticamente tutti
il linguaggio da allora ha questi
parentesi inutili in esso e noi
pensano che siano nitide e non servono
scopo a tutti e spesso trovo persone
fare cose stupide per evitare
tasti, ma a loro piacciono
tasti e non c’è spiegazione
per il motivo che è questo è uno dei ADA
cose che mi piace ADA è il modo in cui
dice commenti Penso che – – cose
ha introdotto un commento è davvero
bello da vedere di tutto il commento
convenzioni sembra più conforme
strettamente a ciò che facciamo ed è anche
usando l’estremità annotata così invece di
l’alcol che direbbe e basta
e se quale è un po ‘verboso ma
è chiaro da quello che sta succedendo qui
pensa la migliore affermazione che abbia mai fatto
visto è in Algol 68 questo era un altro
tenta di rendere un enorme universale
lingua e ci sono molte cose dentro
Tutto ciò che non mi piace, compreso il suo
convenzione di commento usando un segno inviato
ad entrambi finiscono e iniziano i commenti che iniziano
e terminando i commenti con lo stesso
il personaggio sta chiedendo guai al
commento di riga fino alla fine della riga
la convenzione sembra funzionare molto meglio
ma amo la sua affermazione if che sostituisce
Alla fine se con Phi così molto rapidamente
ho imparato che sai che due personaggi
digraph chiude l’altra cosa che abbiamo
liberarsi dei blocchi è solo così elegante
amo questo penso che sia molto bello e
inoltre sta usando: uguale c’è stato a
combatti a lungo nel design della sintassi
tempo per il suo incarico uguale o è
: uguale in Fortran era uguale ma
uguale sembra l’uguaglianza che non è
e questo è fonte di confusione e in particolare
i matematici hanno problemi con
che alcune lingue come l’ alcol hanno iniziato
: uguale e abbiamo ancora questo argomento
andando avanti e proprio ora il segno di uguale
i ragazzi stanno vincendo e penso che sia così
sfortunato anche quello che ci piace davvero
è uno stile emotivo
potremmo avere una sintassi minima ma noi
non vogliamo la sintassi emotiva
invece e in particolare quello che siamo
cercare è la tolleranza alla moda di
è un’ambiguità sintattica di ambiguità
cattivo nei linguaggi di programmazione perché
l’ambiguità causa confusione
causa errori e vogliamo zero errori in
i nostri programmi ma amiamo la sintassi che
lo rende più probabile e, di fatto, consente
si verificano errori che non potrebbero verificarsi
altrimenti così ti darò un esempio così
qui abbiamo una programmazione truccata
linguaggio con due operatori cloud e
cuore e ho tre variabili a b
e c e così come interpreti il
espressione di una nuvola essere difficile da vedere lì
sono un certo numero di modi si potrebbe fare uno
puoi leggerlo da sinistra a destra
quindi fai una nuvola B e poi lo fai
cuore C o potresti leggerlo da destra
a sinistra e così sarebbe la nuvola B C
e poi tu il nostro cuore DC di te nuvola
che con un ci sono lingue che fanno
rigorosamente da sinistra a destra come chiacchiere
fatto quello e ci sono lingue che vanno
rigorosamente da destra a sinistra
APL ha fatto ciò che è giusto non lo so
ma sai che scegli una direzione e
tu dici che è così che lo facciamo e quello
rende piuttosto facile leggere i programmi
scritto in quelle lingue che hai appena
per conoscere la regola e una volta che lo sai
regola una regola è in quel modo o in quel modo
allora puoi leggere correttamente i programmi ma
non è quello che vogliamo perché è così
non abbastanza complicato e questo no
produrre abbastanza opportunità da fare
errori quindi quello che invece vogliamo è
precedenza dell’operatore dove vogliamo una regola
che è più complicato che
descrive quale fai prima e così
a seconda del parente
la precedenza è tra nuvola e cuore
che finalmente determinare come quella
espressione viene interpretata in modo tale
ci occupiamo di questo
con poteri vincolanti possiamo dare a ciascuno
operatore un numero e operatori che
sono associati a un legame più elevato
il potere si lega più strettamente o si lega prima
e operatori con poteri leganti più liberi
legherà più liberamente e più tardi così
fondamentalmente se lavori in a
lingua devi memorizzare questa lista
devi conoscere le classifiche relative
di tutti questi e può quello può essere un
cosa difficile da ricordare così per
esempio al potere 40
Ho logico e logico o e
in questa lingua che sto andando a
creare qui hanno lo stesso
la precedenza ma in molti altri
lingue che non lo faranno nessuno di loro
legare più strettamente rispetto agli altri così io
ti farà una domanda per ora
il tuo linguaggio di programmazione preferito che
lega più strettamente e o o fa loro
avere la stessa precedenza quindi chi lo sa
con certezza come funziona la loro lingua sono
vedere un numero molto piccolo di mani andare
così che cosa significa è se la tua mano
non salì se mai li vedessi entrambi
questi operatori nella stessa espressione
è probabile che tu stia andando
fraintendere quello che fa e se tu
hai alzato la mano e se li hai messi entrambi
di questi in un’espressione è molto
probabilmente la prossima persona a leggere il tuo codice
non capirà cosa fa il tuo codice
introducendo un errore lo sai e basta
mi stupisce che la maggior parte delle persone
scrivere programmi professionalmente no
conoscere la risposta a questo e ad e
non c’è davvero ragione per aspettarselo
farebbero un altro esempio sulla linea 60 in
la moltiplicazione della notazione matematica è
generalmente più stretto della divisione, quindi noi
puoi scrivere cose come ax su BY in
alcuni linguaggi di programmazione è anche questo
vero ma in alcuni linguaggi di programmazione
hanno la stessa precedenza di me
mostrato qui così ancora chi lo sa
certo nella loro programmazione preferita
lingua se moltiplicazione e
la divisione ha la stessa precedenza può a
poche mani salgono ma la maggior parte delle mani
non perché la maggior parte di noi non lo sa
quindi ci piace quello che ci piace che abbiamo messo
regole nelle nostre lingue che la maggior parte di
noi non sappiamo quali sono le opportunità
per creare bug un’altra fonte di
l’ambiguità che ci piace è la
sovraccarico di parole in modo che possiamo usare a
parola per indicare una variabile una dichiarazione
parola chiave un operatore o un modulo speciale
e a volte è davvero importante cosa
una parola è in alcune lingue ci sarà
essere liste di parole riservate che non possono
essere utilizzato per altri scopi
perché potrebbero entrare in conflitto con alcuni di
questi usi speciali e molte persone
lavorare in quelle lingue non ha un
ricordo pienamente memorizzato di cosa
quella lista è così che sta anche introducendo
altre opportunità per fare errori noi
sovraccarico degli operatori, quindi nella maggior parte
delle nostre lingue useremo parentesi
per eseguire la definizione e l’invocazione della funzione
li useremo anche per fare il raggruppamento
all’interno di espressioni e noi utilizziamo anche
li per la separazione e la decorazione così
usando lo stesso operatore per fare tutto
quelle cose possono spesso anche introdurre
ambiguità che possono causare errori noi
ma a noi piace sovraccaricare in effetti ci piace
così tanto che alcune delle nostre lingue
le lingue specificamente ci permettono di fare
sovraccarico che aumenta la nostra capacità
per creare confusione all’interno dei programmi
che sviluppiamo così il modo in cui affrontiamo
con l’ambiguità del linguaggio sta analizzando
e abbiamo meravigliose teorie formali di
lingue formali che ci permettono di
genera automaticamente l’analisi dei parser
è un argomento molto complicato ci sono
un sacco di libri fantastici e molto
le carte su di esso hanno un sacco di macchinari
è stato costruito intorno ad esso, quindi lo farò
scrivi per te oggi un parser altro
lingua stiamo per vedere il tutto
quindi inizieremo con i token ma tu
può prendere tutti gli elementi di origine di a
programma e dividerli in token e
ognuno di questi sarà rappresentato da un
oggetto
avremo un token prototipo che lo farà
essere il segno che tutto sta per
eredita da e poi avremo un set
di simboli che erediteranno da quelli
prototipi e poi avremo la finale
gettoni che erediteranno da quelli
simboli avremo un metodo avanzato
che andrà a prendere il prossimo token per noi
e mettilo in una variabile chiamata token
e se passiamo un ID allora lo farà
garantire che il token che siamo
saltare su è quel tipo di token così
se stiamo cercando un segno più possiamo
dire anticipo Plus e questo ti garantirà
che il prossimo token è un segno più se
non è che produrrà un errore così dentro
analizzare ciò che vogliamo fare è prendere un
albero o per produrre un albero quindi prendiamo
una lista di token e li tesseremo
in una struttura e una volta che abbiamo il
struttura possiamo quindi passarlo a un
analizzatore o un generatore di codice o un
interprete e farà lavorare
succede così è tutto lo sforzo di analisi
per produrre questa struttura che mostrerò
una tecnica chiamata operatore top-down
la precedenza è stata inventata da von prat
quando era al MIT, insegnava a
Stanford ora lo ha presentato al
La conferenza di Popple in 73 l’ ha progettata
per fornire Lisp o alto livello
sintassi delle lingue in un ambiente Lisp
sosteneva che la tecnica era semplice
per capire banale da implementare facilmente
usare estremamente efficiente molto flessibile
e dirò anche che lo è
bellissimo penso che questo sia uno dei
le cose più belle ed eleganti che abbia mai visto
visto così perché non ne hai mai sentito parlare
se è una buona cosa perché questo
completamente sconosciuto a te Pratt nel suo
la carta ti dice perché sarà
respinto
la prima è la preoccupazione per B & F
grammatiche e sono molto morbidi Springs
Pratt amava la teoria degli automi e tutto il resto
quella roba ma ha trovato un modo per
evita completamente quella roba e molto
più rapidamente risolvi il problema
richiede una programmazione funzionale
lingua e nella sua carta ha usato la Lisp
e il problema con questo è quello più
le lingue almeno in quel momento non lo erano
linguaggi di programmazione funzionale e il
La comunità Lisp non ha avuto alcun uso per la sintassi
erano avevano trovato così tanto valore nel
sintassi minimale delle espressioni s di loro
non volevo nient’altro, anche se fosse così
è venuto a bassissimo costo ma il JavaScript
la comunità è una comunità che ha un
linguaggio funzionale ed è una comunità
a me piace la sintassi emotiva, quindi questo
l’algoritmo è davvero adatto a questo
la comunità quindi la preparazione prende l’analisi che è
una cosa davvero complicata e riduce
a una domanda semplice cosa facciamo
aspetto di vedere a sinistra di un token
ci sono alcune cose che non sembrano
quello che vuole vedere qualcosa al
lasciato per esempio un operatore infisso lo farà
prendere qualcosa che è alla sua sinistra e
poi qualcosa al suo luminoso e poi
ci sono cose come variabili e
costanti e operatori unari che non lo fanno
aspetto di vedere qualcosa a sinistra così
solo quei due casi e così chiama
qualcosa che si aspetta di vedere
qualcosa a sinistra a sinistra e
annotazione o un LED in qualcosa che
non chiama un’annotazione annullata o
un pazzo quindi lascia entrare i termini di Pratt ma
Userò quelli quindi ce ne sono alcuni
simboli che avranno solo noci
così punto esclamativo in JavaScript o
tilde e JavaScript quelli sono unari
solo gli operatori così avranno noci
le variabili avranno dadi quindi più punti
operatori di assegnazione relazionali
operatori
quelli sono LED perché si aspettano
vedere qualcosa sul lato sinistro della
operatore e loro devono fare le cose
massima confusione che ci confonde
alcuni che hanno entrambi in più
JavaScript è sia un operatore infisso che
un operatore di prefisso Perrin è sia quando
il suo raggruppamento è un operatore di prefisso quando
sta invocando è un operatore infisso quindi
questo è il token prototipo questo è
dove i nostri token stanno per avviarlo
avrà il prefisso e il lead predefiniti
funzioni che causeranno solo errori
se arrivi a questo e a questi metodi
non sono stati ignorati con e il
predefinito è quello di produrre un errore Avrete
ha anche un metodo di errore che lo farà
produrre messaggi di errore quindi se troviamo un
errori che stiamo analizzando possiamo chiamare il
metodo di errore del particolare token
ciò causa l’errore e questo lo darà
noi un messaggio appropriato e lo farà anche
avere il potere di associazione sinistro predefinito così
questa è la precedenza di questa cosa così
qualcosa che non ha già un
allora il potere specifico erediterà a zero
produrremo la nostra tabella dei simboli e
è lì che terremo tutte le
simboli della lingua e avremo un
funzione di simbolo che ci aiuterà a
popolare a quel tavolo in modo semplice
la funzione avrà un ID e una rilegatura
potere cercheremo il simbolo attuale
nella tabella dei simboli e se la troviamo
allora lo useremo altrimenti lo faremo
costruirne uno nuovo e incollarlo
il tavolo
avendo questo possiamo ora iniziare a dichiarare
la nostra lingua, quindi ho intenzione di specificare
che tutte queste cose sono simboli ora
e sembrerà addirittura dichiarativo
sebbene questo sia tutto procedurale, questo è
tutto funzionale inizia a somigliare
dichiarazioni quindi dichiaro che queste
cose specifiche sono simboli che sto aggiungendo
due simboli speciali di qui la fine
rappresenta la fine del programma quindi io
voglio qualcosa da indicare quando arriviamo
lì e per le regole dei token
di tokenizzazione questi sono garantiti a
non corrisponde a nulla che effettivamente ottiene
diffondersi e poi avrò anche un
simbolo speciale che rappresenta le parole
che non abbiamo nella tabella dei simboli
questo sarà dove le nostre variabili
mostra così ora iniziamo a definire
gli operatori così è un simbolo che sta andando
avere un potere vincolante di 60 e questo
avrà un vantaggio e il suo comando prenderà
il suo primo membro come tutto ciò che era sulla
a sinistra e quindi chiama l’espressione
funzione per ottenere tutto ciò che è sulla destra
e stabiliremo l’ aritmo di questo del
token to binary e restituirlo che possiamo fare
l’asterisco esattamente nello stesso modo in cui lo facciamo ancora
sai che l’unica differenza è
è un asterisco invece di più a 70
invece di 60 ma per il resto lo sono
esattamente lo stesso ogni volta che abbiamo delle cose
che sono così simili, sappiamo che c’è
una possibilità di fare qualcosa di più intelligente così io sono
andando a creare un operatore infisso o un
funzione infisso che userò per definire
i miei operatori infissi modo da sta andando a prendere
un ID un potere vincolante e un optional
Funzione LED se non viene passato un LED
funzione quindi ci vorrà un creerà
una funzione LED predefinita che è quella
che prende la cosa sulla sinistra chiama
espressione e prende la cosa sul
giusto così avendo questa funzione infissa I
ora posso iniziare a definire il mio infisso
operatori e di nuovo sta guardando
dichiarativo ma è in realtà
funzionale così io questo
dice che il mio operatore Plus è più libero
del mio operatore multiplo ma più stretto
a proposito dei miei operatori di confronto
Tutti i miei operatori di confronto sono i
stesso livello di precedenza nel tuo
linguaggio di programmazione preferito fare loro
tutti hanno la stessa precedenza nessuno
sanno che probabilmente non lo fanno più
le lingue che la disuguaglianza ti guida
conosci meno e più che non
hanno la stessa fermezza dell’uguaglianza
ancora un’altra occasione di errore
l’operatore ternario è un infisso speciale
operatore perché ci vuole un ulteriore
cosa dopo, quindi lo specifichiamo di
passando in una funzione che analizzerà
quelli che assomigliano agli altri
prenderà la cosa sulla sinistra ottenere un
espressione per ottenere la seconda cosa sarà
quindi abbinare i due punti e quindi ottenere il
espressione per la terza cosa e impostare
l’ arità a ternario nella maggior parte dei nostri
lingue avremo alcune cose che
associare da sinistra a destra ma non lo è
abbastanza confuso quindi avremo anche
cose che associano da destra a sinistra così
se hai un numero di operatori con
lo stesso livello di precedenza che ottiene il pareggio
rotto da una direzionalità e un po ‘di volontà
andare in un modo e alcuni andranno l’altro così
un esempio di cose che vanno dall’altra
sempre i nostri compiti assegnati
essere valutato da destra a sinistra così
creeremo una funzione di assegnazione
che ci aiuterà a specificare chi
cose e possiamo anche fare qualcosa di più profondo
controllare qui in modo che possa essere sicuro
quello che è a sinistra del compito è
un valore L che può essere una cosa difficile
determinare sintatticamente perché la l
le regole del valore sono più complicate di
le regole di espressione regolare ma io
l’aggiunta di casi speciali in questo sistema è
davvero facile, quindi posso farlo
controllare qui invece di provare a farlo
cromaticamente e poi una volta che ho quello
Posso quindi andare avanti e creare o
specificare i miei incarichi operatori che faccio
prefisso allo stesso modo
il prefisso usa uno strano perché c’è
niente di interessante a sinistra di a
prefisso in modo da avere che ora posso specificare
più meno e così via i miei operatori di prefissi
l’operatore principale per il raggruppamento è
un po ‘speciale quindi passiamo passando a
funzione in modo che analizzerà un’espressione
cercare la parentesi di chiusura e poi
restituire l’ espressione quando Pratt ha scritto
il suo articolo a cui stava pensando
espressioni linguistiche ed espressione
le lingue sono grandiose ma non ci piacciono
quelli che non sono abbastanza emotivi noi
preferisco avere linguaggi di dichiarazione noi
voglio avere dichiarazioni ed espressioni
e il suo linguaggio non consentiva
dichiarazioni ma è stato facile adattare il
sistema per farlo, così mi sono inventato un
prima notazione del giorno nullo se la
posizione di affermazione si può avere un lì
sono alcuni cenni che hanno senso solo
in quella posizione e così li chiamo
cose Fudd o prima notazione Naldi
e posso avere una funzione di dichiarazione
che mi permetterà di dichiarare l’artista
per creare i simboli che verranno utilizzati
per le affermazioni che prima guarderà per vedere
se il token ha un FUD e se lo fa
chiamerà altrimenti assumerà
è una dichiarazione di espressione e quindi
Cercherò di vedere che tipo di espressione
Sono entrato nella maggior parte delle nostre lingue
l’espressione può essere un’affermazione che è
pazzesco penso che le uniche due espressioni
questo ha senso nella posizione dell’affermazione
sono incarichi e invocazioni e
qualsiasi altra cosa potrebbe essere un errore
ma poiché B almeno lo abbiamo permesso
ma penso che non dovremmo
e infine alla fine corrisponderà al
punto e virgola ed è fatto
molto spesso vorranno avere più di
una dichiarazione in modo tale che le affermazioni ci consentono di
analizzare una lista di dichiarazioni e metterle
in array e possiamo dire se è un token
probabilmente sarà la prossima dichiarazione se lo fosse
ha un cenno del capo o di un tonfo se lo fa che è
probabilmente una dichiarazione se non lo fa allora
probabilmente non è possibile quindi analizzare
blocca un blocco inizia con una parentesi graffa
e quindi conterrà alcune dichiarazioni
e poi una parentesi graffa di chiusura okay e
quindi possiamo abbinare possiamo iniziare a definire
le nostre dichiarazioni
quindi una dichiarazione prenderà un ID e un
funzione fudge e noi e così avremo un
simbolo per quello per quella dichiarazione e
assegnare la dichiarazione del fondo ad esso così
ecco un esempio di una dichiarazione if noi
prima saltare la parentesi graffa decorativa o
abbinamenti decorativi analizziamo la condizione
abbiniamo il rinforzo di chiusura o la chiusura
perón analizziamo un blocco, quindi guardiamo a
vedi se c’è un altro se c’è allora
otteniamo l’altra conseguenza e
quindi impostiamo l’ arity in statement e
allora siamo finiti così nella scatola è un if
affermazione che è la dichiarazione che
questa espressione o questa funzione è
andando a corrispondere ma per mostrarti un po ‘
la flessibilità che abbiamo nello schema
supponiamo che voglio analizzare o avere un
linguaggio che sembra BCPL almeno
nelle sue dichiarazioni if, questo è il codice
per analizzare BCPL come se dichiarazioni e
nella scatola c’è un esempio di tale if
affermazione basicamente prendendo i genitori
questo è talvolta chiamato Paran libero
e in varie occasioni sembra proprio questo
potrebbe trasformarlo in un’aggiunta futura a
script vecna ma finora non ha
soprattutto perché
la risposta del pubblico è stata gente così vocale
amo quel genitore e sembra che siamo noi
non posso rimuoverlo Oh
o se vogliamo farlo sembrare Algol
68 sai nella casella è un algal 68 se
dichiarazione e questo è un codice che lo farà
corrisponde a quello stile di questa istruzione if
fondamentalmente solo dalla corrispondenza sul Phi
allora questa è la chiave di tutta la faccenda
questa è l’espressione che dici
chiamalo con un potere vincolante e quello
il regalo restituisce un albero che rappresenta
quell’espressione e questo è il singolo
la più brillante funzione che abbia mai visto
nella mia intera carriera in questo Pratt
preso tutta la teoria del parsing e
tutta la sua complessità e ridotta a
un ciclo semplice così quando entriamo in questo noi
prima chiama il cenno del token corrente
e poi fino a quando il potere vincolante di
il token successivo è più grande di quello giusto
potere vincolante che abbiamo passato in noi chiamiamo
Leeds e continuiamo a farlo finché non lo siamo
fatto questo è tutto della complessità di
l’analisi è in questa più semplice delle funzioni
quindi, quando stiamo facendo le cose, è giusto
quando abbiamo preso un sacco di
complessità e rimosso tutto e solo
trovare una cosa semplice e ho
mai visto un esempio migliore di sostituzione
complessità con semplicità di questo io
amo questo questo è il mio preferito
funzione in tutto il mondo
e tutto questo funziona così vogliamo prendere
quella dichiarazione e produrre quell’albero
da esso e quello che ti ho mostrato lo farai
e in effetti potremmo considerarlo come
sai che questa è la struttura dei dati
produrrà e potremmo quindi prenderlo
struttura dei dati e dargli un codice
generatore e darlo ad un ottimizzatore
darlo a un interprete che a
l’interprete può eseguire questa roba
direttamente
e questa è la traccia che codifica
andando a fare e così hai visto tutti
una di quelle funzioni e quelle
le funzioni non stavano facendo molto
complesso non c’è molto codice in corso
quindi questa tecnica è veramente veloce perché
esso
non fa quasi niente è solo
andando in giro confrontando numeri e
costruire alberi questo è un altro esempio
di una dichiarazione questo a causa del
differenza di precedenza
quell’albero è bilanciato nell’altro
questa è la struttura dati che
rappresenta quell’albero e questo è il
parse che ha generato quello e di nuovo
è davvero semplice che sia davvero veloce
non c’è quasi nulla in corso
quindi facciamo in modo che l’ operatore top-down lo preceda
è facile da costruire parser con esso è
davvero veloce perché lo fa quasi
niente è abbastanza veloce da usare
come interprete um è dinamico tu
puoi costruire dsls con questo in effetti puoi
crea dsl x ‘all’interno di un altro
applicazione perché è davvero
leggero che potresti anche costruire
lingue estensibili che puoi aggiungere
potrebbe avere funzioni nel tuo sistema
che aggiungono nuove funzionalità al
strutture che stai usando per costruire
la tua lingua mentre stai eseguendo il
linguaggio in modo da poter aggiungere roba così uno
la visione dello sviluppo dell’applicazione sei tu
dovrebbe prima progettare il linguaggio che
è la lingua ideale per scrivere il tuo
applicazione e poi scrivi il tuo
applicazione in quella lingua ciò consente
di fare facilmente che possiamo anche ottenere
sbarazzarsi di parole riservate parole riservate sono
male per i programmatori perché devi
ricorda questa lista e qualche volta quella
si mette di mezzo delle cose che ti
cercando di esprimere ed è male per
designer di lingue perché se tu
scoprire dopo è qualcosa che tu
necessario aggiungere alla lingua molto spesso
non puoi perché le persone sono già
usando la parola migliore così perché questo
la tecnica è così dinamica che non lo sei
congelando tutta questa complessità in
strutture dati statiche è tutto dinamico
puoi avere politiche come qualsiasi parola può
essere usato come un nome variabile ma se tu
usa un nome di variabile e una funzione
il nome non può essere utilizzato per nessun altro
scopo della funzione e avere tale
regola significa che non hai bisogno di parole riservate
più così è buono per i programmatori
perché non hanno bisogno di sapere o preoccuparsi
quale è l’elenco delle parole riservate
non esiste ed è buono per il
progettisti di linguaggi perché possono aggiungere
nuove cose nella lingua in qualsiasi momento e
non devi mai preoccuparti del conflitto
perché chiunque stia già usando il
il nome non userà il nuovo
funzione così chi se ne frega
Alla fine ho qualche consiglio per
designer di linguaggi penso che dovremmo tutti
progettare i linguaggi di programmazione I
penso che sia una cosa grandiosa
è divertente è la prima delle arti e lo è
qualcosa che tutti possiamo divertirci
quindi per prima cosa ti consiglierei di provarci
abbracciare il minimalismo nella tua lingua prova
avere anche il minimalismo concettuale
minimalismo notazionale quanto
possibile ma non cercare di provare criptico
fornire più chiarezza ed errori
resistenza come puoi uno dei tuoi
obiettivi primari dovrebbero essere quelli di provare a fare
confusione libera nella confusione della lingua
è la fonte di tutti gli errori e quindi se noi
possiamo evitare le nostre fonti di confusione
lingue che avremo più facile
il tempo cerca di renderlo leggibile e trovo
c’è un’enorme quantità di
incomprensione su ciò che è leggibile
significa che penso che sia leggibile significa che può
facilmente e correttamente inteso da a
lettore che la maggior parte della gente capisce
leggibilità per significare che mi piace il modo in cui
guarda e che questo è un completamente
cosa diversa innovare che abbiamo già
un sacco di Java come le lingue quindi se tu
ritrovati a scrivere coca bottiglia di coca cola
bottiglia uguale a nuova bottiglia di coca a piedi
dalla macchina
siamo già stati lì per questo
stato davvero ben coperto prova a trovare
qualche altra dimensione su cui a
innovare seleziona molto le tue caratteristiche
attentamente non prendi semplicemente tutte le funzionalità
hai mai visto e prova a metterlo nel tuo
linguaggio anche se sono tutti davvero buoni
fai attenzione o stai attento all’idea che alcuni
qualcosa a volte è utile che tu sappia
questa caratteristica è a volte utile così io
voglio metterlo nella mia lingua, sfido
qualcuno da suggerire qualcosa di reale o
immaginario che a volte non è utile
anche le cose che sono ridicole
pericolose e cattive quelle cose sono
a volte utile quindi se questo è il solo
criteri che hai per le nuove funzionalità di te
non ho un criterio quindi prova a venire
con migliori ragioni per cui sei
comprese le cose evitano l’universalità
ci sono stati molti tentativi a
rendendo l’unico linguaggio universale il
linguaggio che fa bene a tutto ciò
non funziona quello che sembra funzionare meglio
è progettare un linguaggio che fa uno
cosa specifica davvero bene e possibilità
ci sono molte altre cose
faremo anche bene, ma almeno
farai una cosa molto bene e
è meglio di molti altri
le lingue possono chiedere aiuto alle persone
gestire la complessità con cui trattare
la complessità è la cosa più difficile
che facciamo così cercando le strutture per
la leva che ci consente di farlo è
davvero importante e promuovere la qualità come
il più possibile che vogliamo fare
i programmi che sono veramente buoni rendono nuovo
gli errori non commettono i vecchi errori
ancora una volta, inevitabilmente si sta andando ad avere per
commetti alcuni vecchi errori perché non puoi
innovare su ogni dimensione allo stesso
tempo ma sii veramente cauto su cosa
vecchi errori che non puoi propagare per
esempio Ken Thompson penso che sia uno di
i ragazzi più svegli di avere mai ha vissuto
ha spinto la nostra arte così avanti ma io
pensa che abbia avuto un sapore terribile come a
progettista di sintassi ma ha capito come noi
pensa o forse siamo stati così influenzati
da come pensa
che non possiamo vedere i molti errori
che ha messo dentro per vedere e quegli errori
stato propagato virtualmente
tutto quello che è successo da allora
quando non abbiamo a continuare a farlo
più la cosa che mi piace di più
CoffeeScript è uno dei nuovi
Le varianti JavaScript sono fondamentalmente
esattamente la stessa lingua di JavaScript
tranne che non ha il sapore di carne
sintassi ha un diverso tipo di sintassi
invece ed è bello che fosse
ha detto che se una nuova lingua non ha guardato
esattamente come C non aveva possibilità di
prendere piede e questo non sembra essere
vero più
alla fine lo stiamo rompendo
molti anni così sai che fai il
la lingua ti insegna che consiglio alle persone
impara quante più lingue puoi
perché quando ti immergi in una lingua
può insegnare a te e alla tua lingua
ti insegnano ad abbracciare Unicode così tanto
le nostre lingue sono bloccate con l’ ASCII
fai sapere che abbiamo gli operatori ASCII
Unicode è pieno di migliaia di sorprendenti
personaggi speciali che potrebbero essere davvero
buono inefficace per comunicare cosa
noi vogliamo fare nei nostri programmi che non lo siamo
usando quelli perché è possibile che sia
credevo che la maggior parte dei programmatori non lo fosse
abbastanza intelligente da essere in grado di ottenere i codici
sullo schermo a meno che non ci sia un’immagine
Ho lasciato su un pulsante che si può spingere I
non penso sia vero penso che possiamo
in realtà rompicapo così tanto
considera che certamente non vuoi
a impazzire e si può certamente andare
pazzo se inizi a mettere via troppe cose
personaggi idioti ma non ce l’abbiamo
abbastanza caratteri di parentesi sai
siamo andati a usare parentesi angolari che
è stato forse un errore perché non lo facciamo
avere abbastanza altre cose, ma tu sai
ci sono quei meravigliosi giapponesi
parentesi angolari che sono grandi e e
il
le parentesi che assomigliano a quello che c’è
molte opportunità per il nostro
le lingue balzano in avanti, naturalmente no
fare la stessa cosa e loro sono
tesori dimenticati
sai che siamo molto bravi
reinventando lo stesso sequenziale di base
lingua non siamo le nostre nuove lingue
non così diverso da Fortran in termini
di come sono organizzati e cosa loro
ma ci sono cose che abbiamo lasciato
lungo la strada che non stanno bene
rappresentato nelle nostre lingue attuali
che vale la pena rivisitare come stato
macchine e motori a vincoli altro
modi di pensare a come fai le cose
che va oltre una sola cosa dopo
un altro sfruttamento del parallelismo uno dei
le maggiori sfide che abbiamo sono cosa fare
con tutte le capacità di calcolo
questo è di fronte a noi, siamo bloccati
tutta questa programmazione sequenziale
lingue ma come andiamo sempre di più
parallelamente diventano sempre meno
efficace per ciò che dobbiamo fare in
in particolare nella programmazione distribuita
ora abbiamo le nuvole e ne abbiamo un sacco
core e non sappiamo cosa fare con
loro quindi penso che sarà il
prossima cosa interessante per le nostre lingue
affrontare è come possiamo trarre il massimo
vantaggio di grande grande parallelismo e
poi finalmente divertiti è davvero un
bel passatempo e penso che tutti dovrebbero
essere farlo oh e un’ultima cosa facciamo
sbarazzarsi di questi e non farlo nel modo
JavaScript ha fatto il modo in cui JavaScript l’ha fatto
è stato lasciato questi nella grammatica ma
ti ha permesso di lasciarli fuori usando
un meccanismo di recupero interiore quindi se lo è
va analizzando ottiene un errore che prenderà
un feed della linea vicina lo trasforma in a
punto e virgola, quindi eseguire il backup e riprovare
è come se non lo facessi è carino
facile trovare un punto e virgola gratis
la grammatica lo fa invece, infine, se tu
vuoi saperne di più su top-down
la precedenza degli operatori ce ne sono due
progetti su github che sono entrambi liberamente
disponibile la prima
è una semplice precedenza dell’operatore top-down
parser per JavaScript semplificato scritto
in JavaScript semplificato l’altro è
scorte di scacchi che sono complicate
javascript cercando di fare solo il bene
parti che sono più grandi di quelle semplificate
JavaScript e quindi per ulteriori spiegazioni
su come funziona, c’è un capitolo in
bel codice che descrive il suo
operazione quindi è quello che ho per te
questa mattina
grazie e buona notte
discorso entusiasmante a cui ero combattuto
digita una domanda cercando di seguire il
parlavo allo stesso tempo ma noi
tuttavia ho tre domande
voi ragazzi inserite e dato che abbiamo
pochissimo tempo ho lasciato scegliere Douglas
una delle domande forse due o
a seconda delle risposte non lo sono
linguaggio progettato solo un caso speciale di
Progettazione API no Non penso quindi penso
con la progettazione dell’API hai generalmente un
idea più specifica su cosa succederà
capita e come sarà usato
mentre i linguaggi di programmazione sono molto
strumento astratto più generale la sfida
per la programmazione il design è con ciascuno
generazione che vogliamo salire di livello, lo sai
così con la legge di Moore l’hardware diventa
il livello su ogni due anni o giù di lì
Raddoppiano, lo facciamo solo ogni vent’anni
anni o giù di lì quindi siamo molto più lenti
capirlo e la maggior parte di quello
la lentezza è dovuta alla nostra testardaggine
e la dipendenza dallo stile sai che ci è voluto
noi tanto tempo per decidere di sbarazzarci
andare due a due perché un sacco di gente pensava
andare in due sembrava davvero buono e non lo fece
capisci che andiamo in due
programmazione più difficile e siamo a
luogo simile oggi penso con le lezioni
e alcuni altri concetti così sono le classi
grandi hanno spinto il
all’avanguardia
avanti tremendamente ma hanno anche bloccato
noi sul posto e quindi ci stanno impedendo
dall’andare alla prossima cosa che è
andrà ancora meglio così quelli sono
problemi che non hai alle 8:00 di
Il design dell’API è completamente diverso
spazio
tu
Please follow and like us: