Quale linguaggio di programmazione pratico non teorico non ha parole chiave riservate?

21

Ho cercato un linguaggio di programmazione pratico che non abbia parole chiave riservate ma non ho avuto fortuna nel trovarne uno.

Sto lavorando su un linguaggio di programmazione per la mia edificazione e intrattenimento personale e non ho ancora bisogno di includere alcuna parola chiave, questo è ciò che mi ha portato alla mia ricerca e alla domanda:

Non vedo la convenienza per lo scrittore del compilatore come importante per l'utente finale della lingua. I computer sono abbastanza potenti ora da poter dedurre i significati dal contesto. Nient'altro che uno scrittore deve etichettare nomi, verbi e simili quando scrive un romanzo, perché un programmatore dovrebbe etichettare funzioni e variabili con function x() {} o set x = 1 o var x = 1 etc; quando posso dedurre dal contesto delle affermazioni che si tratta di una dichiarazione di funzione o di una chiamata o che un'etichetta è un'assegnazione a un valore o un riferimento a quel valore di etichetta?

Ecco un esempio concreto di ciò che sta facendo il mio parser corrente, non c'è bisogno che parole chiave riservate supportino cose comuni che normalmente hanno un gruppo di rumore come func o function o dec o cosa no.

Dichiarazione di funzioni

sum3(a,b,c) -> a + b + c.

Funzione Invocazione

x = sum3(1,2,3).

Funzione anonima con nome x

x = (a,b,c) -> a + b + c.
y = x(1,2,3).

Mi piacerebbe sapere perché le parole chiave sono importanti per un linguaggio di programmazione di successo?

    
posta Jarrod Roberson 08.03.2013 - 05:53
fonte

8 risposte

12

MUMPS ha un grande successo, è ampiamente utilizzato in assicurazioni e sanità e non ha parole riservate. Direi che aiutano in termini di scrittura di codice più chiaro, ma non sono strettamente necessari. APL è un altro esempio. APL vede tra gli altri l'utilizzo di script unici nell'industria nucleare. J , anche un membro della famiglia APL non ha parole chiave.

Le parole chiave aiutano gli scrittori di compilatori a implementare l'analisi più facilmente. APL è notoriamente associativo. Inoltre aiutano a rafforzare le convenzioni e migliorare la leggibilità. APL non è noto per essere estremamente leggibile per la maggior parte.

    
risposta data 08.03.2013 - 06:08
fonte
9

Una lingua ben nota senza parole chiave è Lisp. La cosa più vicina alle parole chiave sono le cosiddette forme speciali - il loro numero può variare tra i dialetti - che ricevono un trattamento speciale dall'interprete. A parte questo, sono indistinguibili da funzioni regolari in termini di modalità di utilizzo, con l'eccezione che non possono essere ridefiniti (almeno in Lisps con cui ho familiarità).

Ciò si traduce in una sintassi semplice (ma paren-pesante), ed è una delle cose che ha permesso a Lisp di avere un sistema macro così potente. D'altra parte, spesso si dice che Lisp sia difficile da leggere. APL e MUMPS, ancora di più, ho visto entrambi descritti a metà strada da Brainf * ck. Le parole chiave aiutano in questo reparto e facilitano la lettura del codice anche per noi umani.

Quindi non direi che le parole chiave siano necessarie per una lingua di successo, ma sicuramente aiutano una lingua ad avere successo.

    
risposta data 08.03.2013 - 09:16
fonte
7

TCL non ha parole chiave, e in effetti solo 12 regole di sintassi. anche se non è così popolare come una volta, ha la sua nicchia con aspettativa e incorporato nell'ECAD e nei router, quindi è sicuramente un aspetto pratico per la mia mente.

Penso anche che possa mostrare perché molte lingue non seguono questa strada. Sì, è perfettamente possibile scrivere un parser TCL (probabilmente più facile di molti altri linguaggi), tuttavia non è possibile scrivere una grammatica BNF molto utile per la lingua e molte persone sembrano avere difficoltà ad apprendere la lingua. Sospetto che ciò sia dovuto almeno in parte alla mancanza di parole chiave.

    
risposta data 08.03.2013 - 11:39
fonte
5

Computers are powerful enough now days to be able to infer meanings from context.

Significa che vuoi una grammatica che non sia libera dal contesto? Buona fortuna.

Non si tratta di essere potenti o meno. Ci sono regole eterne e immutabili sulle lingue, quelle matematiche. Questo, e il fatto che un linguaggio di programmazione dovrebbe essere sintatticamente facile farà sì che i CFG regnino per alcuni decenni a venire.

Btw., nella sintassi di Haskell, basta scrivere qualcosa come

f x y = (x+1)*(y-1)

per definire una funzione. Osserva però che la "parola chiave" in questo caso è il "=". Se ti manca, succederanno cose terribili nel parser.

Ma questo è un punto in cui sono d'accordo con te, trovo questo molto più intuitivo di tutte le parole chiave def, dcl, fun, fn, function o what-not che introducono funzioni in altre lingue.

Tuttavia, questa grammatica può essere scritta in semplice LALR (1), nessun significato è "dedotto dal contesto" qui.

    
risposta data 08.03.2013 - 15:10
fonte
4

Per quanto ne so, Smalltalk è la lingua con meno parole chiave (se non sto contando le lingue come Brainfuck). Le parole chiave smalltalk sono true , false , nil , self , super e thisContext .

Ho progettato un langage, ispirato a smalltalk, che non aveva parole chiave. Ma dopo qualche tempo di utilizzo ho finito per aggiungere alcune parole chiave, soprattutto per lo zucchero sintattico.

Quindi, la mia opinione è che la lingua senza parole chiave è possibile, ma non è molto pratica e questo è il motivo per cui tutte le lingue popolari hanno parole chiave.

    
risposta data 08.03.2013 - 06:05
fonte
3

Sembra che tu stia vivendo un falso presupposto, che le parole chiave siano lì per rendere le cose più facili per il compilatore. Mentre semplificano le cose per il compilatore, hanno un vantaggio molto più importante: rendono le cose più facili per la persona che legge il codice .

Sì, puoi guardare un po 'di contesto e capire che stai guardando una dichiarazione di funzione o una dichiarazione di variabile, ma a seconda del contesto e della complessità del codice in questione, ciò potrebbe richiedere molto tempo per capire. Oppure potresti avere una parola chiave utile come function o var e sai immediatamente cosa stai guardando.

Sì, rendono il codice più complicato per scrivere , ma considerando che i programmi impiegano molto più tempo nella manutenzione rispetto alla produzione e che il loro codice viene letto, sottoposto a debug e mantenuto molto più di è stato creato, cercando di progettare il tuo linguaggio per renderlo facile da scrivere invece che facile da leggere è un caso classico di ottimizzazione prematura dannosa.

Inoltre, non disdegnare i concetti che rendono più facile il lavoro del compilatore. Più facile sarà analizzare, il più veloce verrà compilato il codice, il che significa che i cicli edit-build-debug diventano più veloci, il che significa che la produttività aumenta.

Quando hai una base di codice ampia e complessa, può essere una differenza non banale nella produttività. Ad esempio, dove lavoro, abbiamo un programma al lavoro che conta circa 4 milioni di linee di Delphi. Abbiamo un altro modulo che contiene circa 300.000 righe di C ++. Entrambi richiedono circa lo stesso tempo per la compilazione. (Circa 3 minuti.) Se avessimo 4 milioni di righe di C ++, potrebbe volerci un'ora per costruire!

    
risposta data 09.03.2013 - 00:20
fonte
2

Ci sono alcuni esempi rari.

APL utilizza solo simboli, ma molti di essi! Hai bisogno di una tastiera speciale per usare la lingua.

Vedi questo articolo di Wikipedia

CORAL 66 - aveva parole chiave ma le riconosceva solo se erano citate con virgolette singole.

PL / 1 aveva anche parole chiave - ma puoi anche usarle come nomi di variabili o procedure.

Tutto sommato anche se la tua domanda è un po 'come chiedere "perché le lingue parlate hanno parole?".

    
risposta data 08.03.2013 - 06:21
fonte
0

La ragione principale è che è più facile analizzare sia gli umani che i computer. Disambiguare una lingua complessa senza parole chiave richiederebbe molti simboli come sintassi, e sarebbe massiccia e inutilmente confusa. È molto più facile leggere function rispetto a $!{} . E il contesto non risolve tutte le ambiguità.

    
risposta data 08.03.2013 - 17:03
fonte

Leggi altre domande sui tag