È importante che un linguaggio sia coerente con se stesso?

0

Attualmente sto progettando un linguaggio di programmazione e sono al punto di fare tutte le scelte progettuali che guideranno lo sviluppo.

Il mio linguaggio ha una sintassi e un concetto leggermente diversi rispetto a molti altri linguaggi qui, e mi chiedo se è più importante che il linguaggio segua ciecamente il suo concetto, o se è giusto fare affidamento su scorciatoie e hack per renderlo più user- amichevole e riconosciuto.

Ad esempio, se un linguaggio è pensato per essere puramente funzionale, dovrebbe evitare che dichiarazioni imperative e simili siano completamente coerenti con i suoi principi, o è giusto implementarle per rendere la lingua più facile e / o meno noioso da usare?

Specificamente, il mio linguaggio è molto estendibile (una specie di dialoghi di Lisp) e mi chiedo se dovrei includere direttamente i loop e simili o se dovrei includerli come caratteristiche aggiunte attraverso il sistema di estensione per essere più coerente, anche se questo si traduce in sintassi stranamente apparente (qualcosa come il punto e virgola alla fine della parentesi graffa di blocchi di chiusura).

    
posta user6245072 04.07.2016 - 13:14
fonte

2 risposte

7

Siamo onesti - nessuno * userà la tua lingua. Non hai intenzione di farlo, o non funzionerà, o sarà troppo lento, o non sarà utile, o non sarai in grado di commercializzarlo, o le persone stanno andando per guardarlo e andare ... "meh, continuerò a usare X".

Quindi è importante tu che il linguaggio sia auto-coerente? Se stai provando qualcosa, allora vale la pena impegnarsi a provare questa idea senza inquinamento. Se stai solo cercando di imparare, probabilmente non importa. Se pensi che io abbia torto e la tua lingua sia la prossima grande cosa, è importante soddisfare le esigenze dei tuoi clienti.

E francamente, se pensi di poter anticipare tutte le scelte di progettazione e il loro impatto in anticipo, ho un ponte per venderti.

* - con qualche errore statistico.

    
risposta data 04.07.2016 - 18:44
fonte
4

Esistono diversi linguaggi di programmazione che combinano con successo paradigmi funzionali e imperativi, come C # e Scala. Lisp ha anche una macro loop e incorpora la sintassi simile a Lisp (più o meno):

(loop for x in '(a b c d e)
      do (print x) )

(loop for x from 1 to 5
      for y = (* x 2)
      collect y)

Nota che i loop Lisp sono implementati come macro e non fanno parte del linguaggio corretto.

Ci sono diversi dialetti di Lisp. I loop lisp provengono da Common Lisp, ampiamente considerato come il cavallo di battaglia pratico della famiglia di lingue Lisp.

Senza un costrutto di loop, i tuoi utenti sono obbligati a usare ricorsione per implementare i loop, il che può essere difficile da ragionare. I puristi della programmazione funzionale probabilmente direbbero che è una buona cosa. Il loop ricorsivo richiede molto che il tuo linguaggio sia in grado di ricorrere alla ricorsione in coda, se ti aspetti che abbia prestazioni decenti.

Ulteriori letture
Loop in Lisp

    
risposta data 04.07.2016 - 16:45
fonte

Leggi altre domande sui tag