Domanda

Sto sviluppando una variante Smalltalk solo per divertirmi e mi chiedo quale sarebbe la scelta di un altro stackoverflowers quando si tratta di prendere di mira un back-end. Queste erano le mie attuali considerazioni:

.NET, JVM: queste due macchine virtuali sono principalmente per linguaggi tipicamente statici e presumo che sarebbe piuttosto difficile scegliere come target un linguaggio così dinamico come smalltalk.

Python (come codice sorgente): sembra essere il modo più semplice. Inoltre sarebbe meglio se potessi emettere il bytecode di Python ma non è ben documentato come AFAIK di altre VM (è necessario scavare il codice sorgente di Python per i dettagli!).

Interprete fatto da sé: fuori discussione in quanto non è divertente :-)

LLVM, NekoVM, Parrot sono altre opzioni che sto verificando. Cosa ne pensi di questo?

È stato utile?

Soluzione

Non scontare .NET o JVM così rapidamente. Linguaggi dinamici sono in fase di sviluppo per entrambi (ad esempio Groovy, JRuby, Jython su JVM; IronRuby, IronPython su .NET) e .NET sta guadagnando il "DLR" - Dynamic Language Runtime. (Vedi blog di Jim Hugunin per maggiori dettagli.)

Altri suggerimenti

Il pappagallo è davvero bello, anche se non ha spedito alcun "reale" codice ancora. Ma dal momento che il progetto è solo per divertimento, questo non dovrebbe fermarti: D.

Vorrei scegliere la JVM, ma principalmente perché ne ho familiarità.

Ragioni oggettive per JVM sono: piattaforme principali supportate, molte librerie e buone prestazioni (all'interno delle scelte hai dato che potrebbe avere le migliori prestazioni).

.Net funziona meglio su Windows. Se lo scegli, dovresti provare su Mono per essere più neutrale rispetto alla piattaforma.

Python sembra anche una buona scelta. Ma penso che per la JVM siano disponibili più librerie.

Parrot è secondo me troppo fresco, ha bisogno di un po 'di tempo per maturare. Ma un'alternativa interessante per il futuro.

Le altre scelte sono nuove per me, le darò un'occhiata.

Dato che stai cercando di implementare Smalltalk, perché non prendere in considerazione una delle macchine virtuali ispirate a smalltalk per Ruby come YARV o anche rubinius . Entrambi sono di ispirazione smalltalk e mirano ad essere ad alte prestazioni. YARV sarà il nuovo standard Ruby VM.

Un vantaggio di usare Parrot è che viene fornito con tonnellate di lingue di esempio, inclusa una variante Smalltalk chiamata ChitChat. Quindi puoi usarlo come riferimento per vedere come qualcun altro ha implementato un linguaggio simile su Parrot.

Potresti dare un'occhiata a PyPy - mentre questo progetto esiste per implementare il linguaggio Python in (un sottoinsieme di) Python, l'approccio che stanno adottando consente più front-end e più back-end (tra cui CLR, JVM, LLVM, C e persino Smalltalk e JavaScript, penso ). Ad esempio, lavora su JIT è stato fatto usando Prolog come linguaggio front-end e CLR come back-end. Quindi potresti unirti alla festa per implementare Smalltalk e in seguito scoprire che hai anche aiutato qualcun altro a implementare Prolog senza saperlo ... :-)

Factor ( http://factorcode.org/ ) può offrire alcune utili funzionalità a questo scopo.

Se questo è per divertimento, perché non iniziare con la base di codice per Squeak, che è open source, e modificarlo. Smalltalk dovrebbe avere un piccolo tempo di esecuzione e la tua piccola variante divertente potrebbe iniziare con l'ambiente bootstrap di squeak, che è quasi microscopico, e costruito da lì.

La mia grande cosa contro .NET e JVM è la vastissima dimensione. Guarda quanto è piccolo il sistema operativo "runtime" a Smalltalk " il livello di corrispondenza dell'impedenza è in Squeak.

I progetti divertenti non dovrebbero essere, beh ...... DIVERTENTI? Squeak è molte cose, il businesslike non è uno di questi, ma FUN ... sicuramente.

JVM come prima scelta. Consentirebbe un ampio supporto di libreria fin dal primo giorno. Guarda come ciò ha giovato a Clojure.

Inoltre, LLVM potrebbe essere una scelta interessante, ma non sono sicuro di come "dimostrato". lo è, dal momento che non posso implementare un linguaggio maturo con il back-end LLVM.

Eviterei .NET. Renderebbe più difficile riunire comunità e supporto attorno alla tua nuova lingua e ne avrai bisogno presto. Inoltre, non è multipiattaforma.

Qualunque cosa tu scelga, imparerai molto facendo così.

JVM è più stabile, ben documentato e in generale meno probabile che sia un bersaglio mobile rispetto a .Net Inoltre è più probabile trovare persone che possano aiutarti se vai all'open source. Con .Net il talento è davvero scarso e la maggior parte funziona per Microsoft, quindi probabilmente non avranno il tempo di dare una mano.

.NET come DLR ora che si trova in cima al CLR per il linguaggio dinamico.

Fallo su .Net, dopotutto vuoi farlo per divertimento. Quindi rendilo un po 'stimolante. E qualsiasi risultato può quindi essere segnalato a Microsoft, per migliorare il DLR e le lingue che supporta.

Se hai intenzione di usare .Net, dai un'occhiata a Beautiful Code - c'è un saggio su come fare un codice dinamico gen sul CLR .Net.

Sicuramente .Net usando Dynamic Language Runtime. I tuoi oggetti saranno utilizzabili direttamente dagli utenti C # e V.Net quando avrai finito ( hai intenzione di spedire qualcosa? :-)

In particolare, target in esecuzione sotto .Net ridotto in SilverLight in modo da ottenere l'ultimo buy-in dell'interfaccia utente ricca di Web.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top