Sto per iniziare un nuovo progetto e non posso decidere se scegliere OCaml o Lisp per il progetto. La mia preoccupazione principale riguarda la differenza di produttività, se esiste.
Programma OCaml dal 1998 e, anche se non ho provato a misurarlo con precisione e nemmeno a definire con precisione quale sia la produttività che vorrei misurare, sono abbastanza fiducioso di essere più produttivo con OCaml di quanto lo sia io con più classico lingue che conosco, come C o Python. Penso di sì, perché il compilatore è così bravo a cogliere i miei errori, che solo i bug intelligenti arrivano al programma finale, ma di solito sono facili da trovare, come se qualche elemento logico fosse semi-evidentemente errato o le risorse di sistema manipolate in modo inappropriato. Non ho mai investito nell'apprendimento del debugger di OCaml - che tra l'altro può andare indietro nel tempo - perché non avevo mai sentito di aver bisogno di usarlo. Il linguaggio ha un sistema di moduli che consente la generalizzazione delle strutture mediante functors e un preprocessore camlp4
che può essere usato per estendere la lingua, come l'implementazione della serializzazione automatica dei valori.
Questo è ovviamente qualcosa che Lisp non ha, ma ho provato Slime in Emacs, e sembra includere un debugger e un esploratore di codice onnipotente. Ma Lisp ha macro.
Sfortunatamente, le mie conoscenze in Lisp sono quasi pari a zero - mi sono divertito un pomeriggio circa - e quindi non sono in grado di confrontare le macro con camlp4
. Per me, sembra che:
- Le macro Lisp sono molto più facili da scrivere rispetto alle estensioni
camlp4
. - Le macro Lisp sono molto più facili da usare come moduli o estensioni
camlp4
. I Functional, quando vengono utilizzati per implementare una funzionalità simile ai tratti sono piuttosto goffi, prolissi e richiedono invocazioni idiosincratiche dall'aspetto strano: dall'altra parte, le macro Lisp assomigliano a qualsiasi altra cosa in Lisp (S-expressions ). - Le macro Lisp non generano un problema di progettazione, appartengono a un pacchetto, punto. I Functional sollevano problemi di progettazione perché i nomi dei tipi ricevono alias, il che è sconcertante.
(Come nota a margine, mi sembra che Lisp sia più facile da avviare rispetto a OCaml, almeno per il gruppo di fisici quantistici che vogliono unirsi al progetto.)
Qualcuno può confrontare l'incidenza sulla produttività di OCaml e Lisp (scegli quello che vuoi)?