Domanda

Qual è il valore aggiunto per l'apprendimento di F # quando hai già familiarità con LISP?

È stato utile?

Soluzione

Molti di questi sono sviluppi relativamente recenti nel mondo dei linguaggi di programmazione. Questo è qualcosa che vedrai in F # che non in Lisp, in particolare Common Lisp, perché lo standard F # è ancora in fase di sviluppo. Di conseguenza, scoprirai che c'è molto da imparare. Naturalmente cose come ADT, pattern matching, monadi e curry possono essere costruite come una libreria in Lisp, ma è meglio imparare come usarle in una lingua in cui sono comodamente incorporate.

Il più grande vantaggio dell'apprendimento di F # per l'uso nel mondo reale è la sua integrazione con .NET.

Altri suggerimenti

Confrontare Lisp direttamente con F # non è proprio corretto, perché alla fine della giornata con abbastanza tempo potresti scrivere la stessa app in entrambe le lingue.

Tuttavia, dovresti imparare F # per le stesse ragioni per cui uno sviluppatore C # o Java dovrebbe impararlo, perché consente la programmazione funzionale sulla piattaforma .NET . Non conosco al 100% Lisp, ma suppongo che abbia alcuni degli stessi problemi di OCaml in quanto non esiste un supporto stellare per le librerie. Come si accede al database in Lisp? Che dire della grafica ad alte prestazioni?

Se vuoi saperne di più su "Why .NET", dai un'occhiata a questa domanda SO .

Se conoscessi F # e Lisp, troverai una domanda piuttosto strana da porre.

Come altri hanno sottolineato, Lisp è digitato in modo dinamico . Ancora più importante, la caratteristica unica di Lisp è che è omoiconico: il codice Lisp è un tipo di dati Lisp fondamentale (un elenco). Il sistema macro ne approfitta consentendo di scrivere codice che viene eseguito in fase di compilazione e modifica altro codice .

F # non ha nulla di simile: è un linguaggio tipicamente statico che prende in prestito molte idee da ML e Haskell e lo esegue su .NET

Quello che stai chiedendo è simile a " Perché devo imparare a usare un cucchiaio se so come usare una forchetta? "

Dato che LISP è digitato in modo dinamico e F # è scritto in modo statico, trovo strani questi confronti.

Se passassi da Lisp a F #, sarebbe solo perché avevo un compito tra le mani che beneficiava enormemente di alcune librerie solo .NET.

Ma io no, quindi non lo sono.

Denaro. Il codice F # è già più prezioso del codice Lisp e questo divario si allargherà molto rapidamente quando F # vedrà un'adozione diffusa.

In altre parole, hai molte più possibilità di guadagnare un reddito stabile usando F # che usando Lisp.

Saluti, Jon Harrop.

F # è una lingua molto diversa rispetto alla maggior parte dei dialetti Lisp. Quindi F # ti offre un angolo di programmazione molto diverso, un angolo che non imparerai da Lisp. La maggior parte dei dialetti Lisp sono utilizzati al meglio per lo sviluppo incrementale e interattivo di software simbolico. Allo stesso tempo, la maggior parte dei dialetti Lisp non sono linguaggi di programmazione funzionale, ma più come linguaggi multi-paradigma - con dialetti diversi che attribuiscono un peso diverso alle funzionalità di supporto FPL (privo di effetti collaterali, strutture di dati immutabili, tipi di dati algebrici, ...). Quindi la maggior parte dei dialetti Lisp o mancano di digitazione statica o non danno molta enfasi su di essa.

Quindi, se conosci un dialetto Lisp, l'apprendimento di F # può avere molto senso. Non pensare che gran parte della tua conoscenza di Lisp si applichi a F #, poiché F # è un linguaggio molto diverso. Per quanto una programmazione imperativa utilizzata in C o Java debba disimparare alcune idee durante l'apprendimento di Lisp, bisogna anche disimparare le abitudini di Lisp (nessun tipo, effetti collaterali, macro, ...) quando si usa F #. F # è anche guidato da Microsoft e sfrutta il framework .net.

F # ha il vantaggio che lo sviluppo di .NET (in generale) è ampiamente adottato, facilmente disponibile e più mercato di massa.

Se vuoi codificare F #, puoi ottenere Visual Studio, che molti sviluppatori avranno già ... al contrario di rendere operativo l'ambiente LISP.

Inoltre, gli sviluppatori .NET esistenti hanno molte più probabilità di guardare F # rispetto a LISP, se questo significa qualcosa per te.

(Questo viene da uno sviluppatore .NET che ha codificato e amato LISP, mentre era al college).

Non sono sicuro che lo faresti? Se trovi F # interessante, questo sarebbe un motivo. Se lavori lo richiede, sarebbe un motivo. Se pensi che ti renderebbe più produttivo o che ti darebbe un valore aggiunto rispetto alle tue attuali conoscenze, questo sarebbe un motivo.

Ma se non trovi interessante F #, il tuo lavoro non lo richiede e non pensi che ti renderebbe più produttivo o che ti darebbe valore aggiunto, perché dovresti farlo?

Se la domanda d'altra parte è cosa F # non dà a lisp, allora si dovrebbe considerare l'inferenza di tipo, la corrispondenza dei modelli e l'integrazione con il resto del framework .NET.

So che questa discussione è vecchia, ma da quando mi sono imbattuto in questo volevo solo commentare i miei motivi. Sto imparando F # semplicemente per opportunità professionali poiché .NET ha molto peso in una categoria di aziende che dominano il mio campo. Il paradigma funzionale è diventato sempre più diffuso tra le aziende più quantitativamente e orientate ai dati e mi piacerebbe essere uno dei primi arrivati ??in questa tendenza. Attualmente non esiste un linguaggio funzionale forte che si integri in modo completo e sicuro con la libreria .NET. In realtà ho provato a trasferire un po 'di .NET dal codice Lisp ed è davvero un problema perché FFI supporta solo primitive in C e l'interoperabilità di .NET richiede un costrutto "interfaccia" e anche se so come farlo in C è davvero un enorme dolore. Sarebbe davvero molto bello se Lisp facesse un ulteriore passo avanti nel suo prossimo standard e richiedesse una classe c ++ (comprese le funzioni virtuali w / vtables) e un tipo di interfaccia in stile C # nel suo FFI. Forse potresti anche inserire un tipo di stile di interfaccia Java. Ciò consentirebbe una completa interoperabilità con la libreria .NET e renderebbe Lisp un contendente forte come linguaggio su larga scala. Tuttavia, detto questo, provenire da un background Lisp ha reso l'apprendimento di F # piuttosto semplice. E mi piace il modo in cui F # ha fatto il possibile per fornire tipi che normalmente si vedrebbe funzionare in modo quantitativo. Credo che F # sia stato creato pensando al lavoro matematico e che di per sé abbia valore su Lisp.

Un modo per vedere questo (la domanda originale) è abbinare la lingua (e gli strumenti e le piattaforme associati) al compito immediato. Se l'attività richiede una percentuale schiacciante di codice .NET e richiederebbe meno scarponi in una lingua rispetto a un'altra per soddisfare il compito frontalmente, allora prendi il percorso di minor resistenza (F #). Se non hai bisogno delle funzionalità di .NET e ti senti a tuo agio a lavorare con LISP e non ci sono flessioni per allontanarti da esso, continua a usarlo.

Non molto diverso dal confrontare un martello con una chiave inglese. Scegli lo strumento che si adatta meglio al lavoro. Cercare di scegliere uno strumento che sia oggettivamente "migliore" è una sciocchezza. E in ogni caso, in 20 anni, tutti gli "hot" attualmente disponibili le lingue potrebbero essere obsolete comunque.

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