Sono piuttosto incuriosito da Gambit Scheme, in particolare dalla sua vasta gamma di piattaforme supportate e dalla sua capacità di inserire il codice C nella propria origine Scheme quando necessario. Detto questo, è uno Schema, che ha meno "batterie incluse" rispetto a Common Lisp. Ad alcune persone piace codificare molte cose da zero, (ad esempio una vigorosa rasatura degli yak) ma non io!Confronto di Common Lisp con Gambit w.r.t loro accesso alle librerie e ai sistemi degli oggetti
Questo mi porta alle mie due domande, orientata a persone che hanno utilizzato sia Gambit e un certo sapore di Common Lisp:
1) che ha effettivamente un migliore accesso alle biblioteche? Scheme ha meno librerie di Common Lisp. Tuttavia, Gambit Scheme ha un accesso più agevole alle librerie C/C++ del codice &, che superano di gran lunga le librerie del Common Lisp. Secondo te, la scorrevolezza della FFI di Gambit supera la sua mancanza di librerie native?
2) Come si confrontano i sistemi oggetto di Scheme (ad esempio TinyCLOS, Meroon) con il CLOS del Common Lisp? Se li hai trovati carenti, quali caratteristiche ti sono mancate di più? Infine, quanto è importante un sistema di oggetti in Lisp/Scheme in primo luogo? Ho sentito parlare di intere aziende basate su Lisp (ad es. ITA Software) che rinunciano completamente a CLOS. Gli oggetti sono davvero così facoltativi in Lisp/Scheme? Temo che se Gambit non ha un buon sistema di oggetti, potrei mancarli (il mio background di programmazione è puramente orientato agli oggetti).
Grazie per aiutare un aspirante convertire da C++/Python,
- Matt
PS: Qualcuno con più di 1500 rep, la prego di creare un tag "gambit"? :)
Grazie Jonas!
Il problema con il semplice fatto di avere una FFI è che ti obbliga a avvolgere ogni funzione che tocchi da Lisp. Anche con l'aiuto di SWIG, questo può rapidamente diventare un lavoro ingrato. Gambit ha il vantaggio di permetterti di inserire un blocco di codice C (e C++!) Direttamente nella tua origine Scheme. In altre parole, devi solo scrivere il codice dell'interfaccia per qualunque dato tu debba passare dentro e fuori da quel blocco, non per ogni funzione in quel blocco. Questo è ottimo perché spesso hai bisogno di usare un po 'di funzioni C/C++ per produrre il risultato che ti interessa, e preoccuparti solo di avvolgere il risultato. – SuperElectric
@SuperElectric: Ma è sempre possibile inserire quel blocco di codice C (o C++) in una funzione C, quindi accedere a questa funzione tramite FFI. –
@ MiklósHomolya Vero, ma è una questione di convenienza. Dalla mia esperienza con Lush, posso dire che essere in grado di mettere un po 'di codice C nel mezzo di un corpo di fucile leggero e di essere in grado di accedere a qualsiasi variabile lisp in ambito è una grande vittoria di produttività. – SuperElectric