Perché ci sono così tanti linguaggi di programmazione? Perché vengono ancora create nuove lingue? [chiuso]


51

Perché ci sono così tanti linguaggi di programmazione?

E cosa spinge qualcuno a creare un linguaggio di programmazione nonostante esistano già altri linguaggi?


un video divertente su questo argomento è "L'ultimo linguaggio di programmazione" di zio Bob Martin ( skillsmatter.com/podcast/agile-testing/bobs-last-language )
mikera

Perché ai programmatori piacciono gli strumenti.
haylem,



È difficile giustificarlo, suppongo che ogni lingua abbia una storia. La maggior parte delle lingue non ha giovato molto al produttore per quanto ne so. La maggior parte delle lingue ruota attorno agli stessi concetti e raramente risolve problemi reali o fornisce buoni ambienti. Penso che quando lo creano, si sentono a bordo e stanchi di tutto e forse vedono come hanno sprecato la loro vita .... Pensa a ksh o JavaScript ..... Strumenti semplicemente orribili e dannosi.
NoChance,

Risposte:


36

I linguaggi di programmazione si evolvono

I nuovi linguaggi di programmazione spesso imparano dai linguaggi esistenti e aggiungono, rimuovono e combinano le funzionalità in un modo nuovo. Esistono alcuni paradigmi diversi come orientati agli oggetti e funzionali e molti linguaggi moderni cercano di mescolare le caratteristiche di entrambi.

Vi sono anche nuovi problemi che devono essere risolti, ad esempio l'aumento delle CPU multi-core. La soluzione più comune è stata quella dei thread, ma alcuni linguaggi di programmazione cercano di risolvere il problema della concorrenza in un modo diverso, ad esempio il modello dell'attore. Vedi Erlang - Software per un mondo concorrente


10
La cosa interessante di Erlang è che si tratta di una "reinvenzione della clean room" del modello Actor. Quando Armstrong e i suoi amici hanno sviluppato Erlang, non sapevano del lavoro di Hewitt et al sul modello degli attori!
Frank Shearar,

@Frank: è interessante. Non lo sapevo, grazie.
Jonas,

2
+1 per l'evoluzione. Una domanda analoga potrebbe essere "Perché ci sono così tante specie di animali e piante? Perché ne appaiono ancora di nuove?"
Gyan aka Gary Buyn,

1
@GaryBuyn è solo un "+1 per l'evoluzione" se ti iscrivi a quel punto di vista. Per molti, l'analogia con gli animali è un po 'troppo lontana.
Darknight,

@GaryBuyn, Uhm ... è abbastanza analogo come "frazione" è "criceto".
Pacerier

22

È un ciclo. Inizi una nuova lingua e sei libero di sfuggire a tutte le sintassi sbagliate e alle scelte sbagliate dei tuoi predecessori. Nella versione 1, la lingua sembra eccezionale perché non ha quel bagaglio e fa il lavoro. Quindi, nelle versioni più recenti, si inizia a sperimentare funzionalità che potrebbero non funzionare o si introducono funzionalità da altri linguaggi più recenti che rendono la sintassi un po 'complicata. Ecco, dopo alcune altre versioni, ti rendi conto che la tua lingua è ora complicata come quella che hai sostituito, con problemi di sintassi sciocchi e bagaglio legacy. E improvvisamente, ti rendi conto che se hai creato una nuova lingua, potresti sistemare tutto ciò ...


2
Questo è sicuramente vero per le biblioteche, i framework e il software, ma personalmente non conosco un linguaggio a cui si applichi. Hai degli esempi?
back2dos,

16
Bene, penso che sia C # sia Java siano stati introdotti almeno in parte per affrontare le complessità con C ++. E ora, se guardi entrambe le lingue diverse versioni più tardi, la loro sintassi e set di funzionalità stanno diventando abbastanza complessi in cui le persone stanno iniziando a parlare del fatto che sono "oltre la collina". Solo la mia opinione, anche se non posso provare nulla. :-)
RationalGeek,

2
Un buon punto, ma penso che un altro fatto sia in gioco con C #: è un prodotto commerciale che non esiste per motivi di beneficenza e per l'accettazione del mercato / mantenere i prodotti dei tuoi clienti devono essere "migliorati" per le nuove versioni ecc.
gf

1
Questo è vero. L'unità per aggiungere nuove funzionalità al fine di ottenere più soldi dal mercato non può certo essere ignorata. Tuttavia, è un'arma a doppio taglio. Per questo motivo, puoi aspettarti nuove funzionalità da un prodotto supportato commercialmente. Ma da un prodotto open source, ottieni nuove funzionalità solo finché l'esercito volontario rimane interessato e c'è una persona abilitata al timone per mandare i gatti.
RationalGeek,

C # ha molte funzionalità, ma è ancora un linguaggio più pulito di C ++. Aggiunte più recenti come LINQ ti consentono di fare cose in modo pulito che non puoi facilmente fare in C ++. Penso che sia più probabile che ci siano due tipi di conservazione della complessità - uno in cui una certa complessità è inerente a un problema, e uno in cui quando si elimina un tipo di complessità ridondante dai programmi, i requisiti diventano più complessi - complessità, come i dati, si espande per riempire lo "spazio" disponibile.
Steve314,

11

Per lo stesso motivo ci sono martelli, cacciaviti, seghe a mano, seghe a nastro, martelli pneumatici, piedi di porco e una miriade di altri strumenti: non tutte le lingue sono perfette per ogni compito. Alcune lingue sono mirate a specifici settori problematici: R è particolarmente utile per l'analisi statistica, C è particolarmente indicato per la scrittura di kernel del sistema operativo, Haskell è particolarmente indicato per calcoli matematici o finanziari, Erlang è particolarmente bravo nella programmazione concorrente, ecc.

Inoltre, per lo stesso motivo per cui le camicie hanno colori diversi: ad alcune persone piace solo lo "stile" di una lingua rispetto a un'altra.

E, naturalmente, molti programmatori trovano divertente inventare una nuova lingua, solo per vedere cosa succede, o forse perché hanno qualche conoscenza delle lingue e vogliono grattarsi un prurito o provare alcune idee.


Non solo ci sono tutti quegli strumenti di costruzione, ma ci sono anche molti diversi tipi di martelli e martelli che sembrano simili ma hanno specifici fattori di progettazione che li rendono migliori per diversi lavori o utenti.
Barry Brown,

+1 Per idoneità per domini problematici. Gli accademici che studiano gli strumenti in generale affermano che uno strumento molto generale è meno potente di uno strumento specifico per un compito specifico. Pensa a una chiave regolabile rispetto a una chiave fissa
MarkJ,

8

Perché tutti fanno schifo (in un modo o nell'altro).

In questo momento, abbiamo creato circa 5000 lingue per descrivere i problemi naturali e nessuno di essi è disponibile per scrivere programmi (un esempio potrebbe essere "inglese").

Fino a quando qualcuno non troverà un modo per creare un linguaggio di programmazione in grado di esprimere ciò che puoi esprimere in una frase in un linguaggio naturale, continuerà ad arrivare.


15
Anche allora, continueranno ad arrivare. Solo le lingue morte sono scritte in pietra, scusate il gioco di parole. C'è una ragione per cui le lingue viventi cambiano costantemente.
R. Martinho Fernandes,

1
Alcuni affermerebbero che il linguaggio naturale per esprimere i problemi è la matematica. Questo solleva la questione del perché le persone continuino ad aggiungere zucchero sintattico ai linguaggi funzionali piuttosto che usare il puro calcolo lambda. Penso che i problemi che dobbiamo risolvere di routine spesso non siano facilmente espressi né in inglese né in matematica.
Steve314,

5
Concordato. È così difficile esprimere "Ho fame" usando la matematica pura.
Aaron Digulla,

1
@AaronDigulla: hungry = sum (pancia / cibo) sicuramente :)
gbjbaanb

@AaronDigulla è un buon esempio, spesso vuoi esprimere il calcolo. Quindi prendiamo uno scenario come: ho fame, ora mangio -> bene, ora non mangio -> muori di fame. Costruire sistemi in grado di negoziare o espandere il contesto penso che sia l'obiettivo dell'IA. I normali linguaggi di programmazione esprimono solo ciò che le persone dicono loro cosa dovrebbero fare e di solito è piuttosto specifico del generale. Ma poiché la maggior parte dei problemi sono essi stessi specifici, è possibile che tu li veda qui.
AndreasScheinert,

6

Ovviamente una motivazione importante per la creazione di una nuova lingua è quella di ottenere qualcosa di meglio rispetto alle lingue già esistenti. E poiché c'è sempre spazio per migliorare, ci saranno sempre nuove lingue.

Gli interessi commerciali sono un'altra grande ragione. Ritengo sia importante, ad esempio, che Microsoft possa offrire un linguaggio per ogni esigenza, in modo che le aziende e gli sviluppatori preferiscano le loro piattaforme.


6

Codice legacy. Se inizi una nuova lingua non devi ascoltare / considerare tutti i reclami quando cambi una lingua precedente. Anche se tutti concordano sul fatto che la nuova implementazione sia migliore, non può rompere il vecchio codice. E c'è un sacco di vecchio codice là fuori.


3
Esiste un caso documentato di progettazione di una lingua per evitare il codice legacy? Questa affermazione sembra altamente improbabile. Vedo il caso in cui vuoi ricominciare da capo (mi viene in mente .net) ma non è tanto per evitare il codice legacy ma per abilitare meglio il codice futuro.
Bryan Oakley,

Non credo che sia corretto. È (di solito) possibile biforcare un'implementazione open source di un linguaggio esistente.
alternativa il

@BryanOakley - originariamente .NET doveva mantenere la retrocompatibilità con VB6, ma decisero che era un problema troppo difficile. .NET aveva ancora un sacco di legacy WRT Java / J ++ su cui era basato. Penso che D sia un esempio di un linguaggio progettato contro il codice legacy.
gbjbaanb,

4

perché è divertente creare nuove lingue anche se non hanno un reale utilizzo

Un linguaggio di programmazione esoterico (a volte abbreviato in esolang) è un linguaggio di programmazione progettato per testare i confini della progettazione del linguaggio di programmazione per computer, come una prova del concetto o come uno scherzo.


1
Per coloro che non sono arrivati ​​alle note a piè di pagina nell'articolo di Wikipedia, il wiki delle lingue esoteriche è molto divertente: esoteric.voxelperfect.net/wiki/Main_Page
David Winslow,

ti dispiacerebbe spiegare di più su ciò che fa e perché lo consigli come rispondere alla domanda posta? Le "risposte solo al collegamento" non sono del tutto benvenute allo Stack Exchange
moscerino

1
@gnat Penso sinceramente che il testo originale non sia solo una risposta di link, sarebbe una risposta breve ma perfettamente valida senza il link. Ma dato che il link aggiunge sapore, ho incluso una breve citazione da esso.
jk.

3

La creazione di un linguaggio di programmazione è piuttosto divertente. È vicino al puro lavoro creativo, poiché non sei limitato ai requisiti precedenti. Non è più così difficile implementarlo, dal momento che puoi sempre compilare in C e compilare il codice C per prestazioni adeguate se stai scrivendo un compilatore in primo luogo.

Naturalmente, molti di noi hanno meno buone idee di quanto pensiamo di avere, quindi spesso finiscono per essere deludenti o non essere amati da nessuno che non sia il designer originale.

Pensa a qualsiasi linguaggio di programmazione che conosci. Puoi facilmente inventarti diverse cose che non ti piacciono, vero? Presumibilmente hai idee su come risolverli. Con solo un po 'più di slancio, supponendo che tu sappia molto sulla costruzione del compilatore (e molte persone lo fanno), potresti iniziare a progettare e persino implementare il tuo.


2

Risposta breve veloce

Reinventare la ruota ... Qual è la tendenza attuale ...

Risposta lunga noiosa

Molte persone dimenticano che "un'altra lingua simile per i vecchi programmatori" è "una nuova lingua per i nuovi programmatori".

Cosa intendo per quello?

Bene, per programmatori "diversi anni", Java o C # possono essere linguaggi di programmazione aggiuntivi rispetto a Cobol esistente, (OO / procedurale) di base, C / C ++, mentre per "nuovi" programmatori, Java o C # sono nuovi linguaggi, mentre Cobol, (OO / Procedurale) Di base, C / C ++ non esiste per loro, quindi reinventare la ruota diventa una cosa comune ...

E, se c'è una nuova tendenza sulla tecnologia, le persone potrebbero creare un nuovo linguaggio di programmazione basato su quella tendenza, come ecmascript / javascript per il web e la programmazione funzionale ...

Saluti.


+1 per sottolineare l'aspetto reinventare la ruota. Spesso viene fatto per ragioni di marketing: qualsiasi azienda o organizzazione abbastanza grande deve avere il proprio linguaggio di programmazione.
Giorgio,

1

i nuovi linguaggi di programmazione sono costruiti per molte ragioni diverse, principalmente perché ci sono nuovi paradigmi di programmazione o perché i progressi dell'hardware creano nuovi linguaggi per trarre vantaggio dalle nuove funzionalità hardware come il multitasking, ecc.

nel mio caso, di solito costruisco piccoli compilatori (con un nuovo linguaggio di programmazione), per motivi speciali. se faccio assegnazione di giochi e credo che un linguaggio di programmazione creato appositamente per lo sviluppo dei giochi si tradurrà in un codice sempre più piccolo e in uno sviluppo più veloce, allora lo costruisco. e alla fine si scopre che può essere utilizzato anche per altre programmazioni di uso generale.

Penso che la maggior parte delle persone che creano linguaggi di programmazione abbiano in mente uno scopo specifico, ci sono quelli che li creano per scopi generali sin dall'inizio. ma la maggior parte non lo è.

A proposito, penso che ci siano troppi linguaggi di programmazione, ma ne usciranno sempre centinaia. alcuni per divertimento, altri per scopi di nicchia, come progetto scolastico o per centinaia di altri motivi. e prima o poi uno nuovo diventerà popolare. Non finirà mai.


0

Per lo stesso motivo ci sono così tanti <whatever> e continuiamo a creare nuovi <whatever>

Esistono una dozzina di framework PHP MVC, ad esempio, ma le persone ne creeranno sempre di nuovi per soddisfare esigenze specifiche, per evitare di diventare dipendenti da qualche altro team o semplicemente per provare a creare qualcosa di meglio. Lo stesso vale per praticamente ogni tipo di strumento o applicazione.

È una cosa molto positiva, praticamente una vittoria per tutti secondo me.


Sindrome NIH = generalmente non utile per l'industria IT.
gbjbaanb,

0

Le università offrono molti linguaggi di programmazione, così come società di grandi dimensioni come Ericsson (Erlang = lingua Ericsson), Bell Labs (lingue B e C), Google (lingua Go fino a pochi mesi prima). Molti di quelli scritti nell'ambito della ricerca universitaria non sono molto utilizzati. Vi sono tuttavia alcune notevoli eccezioni. Suppongo che scrivere la tua lingua / compilatore sia un buon argomento per tesi di dottorato di persone che studiano Teoria del CS o discipline affini. Mi sembra che Python sia una delle prime lingue a nascere dallo sforzo collaborativo online di vari programmatori attorno a un'unica idea.


python-history.blogspot.com/2009/01/… descrive in dettaglio la nascita di Python
Andy Dent,

0

Ci sono alcuni motivi, la maggior parte perché la gente pensa che ciò che esiste non semplifichi la risoluzione di alcuni problemi. Alcuni sono solo per divertimento o per interesse accademico.

Penso che ci sia una solida argomentazione secondo cui il problema di come si progetta il linguaggio perfetto non è ancora risolto (e potrebbe non esserlo mai). Quindi, finché le persone avranno nuove idee su ciò che renderebbe una lingua fantastica, le persone continueranno a provare. Alcuni di questi tentativi mapperanno nuovi fantastici spazi come Erlang e altri flopperanno, ma finchè qualcosa verrà appreso dal flop andrà anche bene.


-1

Come affermato in precedenza, le lingue cercano di indirizzare determinate attività specifiche e le nuove lingue potrebbero indirizzare una nuova area. Queste lingue possono utilizzare funzionalità di altre lingue che sono attualmente in circolazione.

Un altro motivo per nuove lingue sta cercando di incorporare molti compiti diversi e di essere la lingua preferita per molte esigenze diverse. Alcune di queste lingue stanno cercando di includere tutte le lingue che useresti sempre, indipendentemente dalle necessità che hai.


-1

Nella mia lezione sui linguaggi di programmazione ho imparato che la maggior parte dei linguaggi sono stati inventati per grattare un prurito. La maggior parte delle lingue sono state inventate per essere in grado di esprimere meglio una serie di algoritmi. Ad esempio, sono stati inventati linguaggi funzionali per dare agli algoritmi ricorsivi uno spazio molto più espressivo.

Chiedere perché ci sono così tante lingue è come chiedere perché C ++ 0x? :)

Inoltre, più lingue conosci, più espressivo puoi diventare - questo è vero sia nella programmazione che nei linguaggi naturali!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.