Perché non può esistere un linguaggio di programmazione "universale" a tutti gli effetti? [chiuso]


57

perché non combinare le migliori caratteristiche di tutti i linguaggi di programmazione esistenti e inserirle in un linguaggio di programmazione universale?


23
Il termine "migliore" è soggettivo, quindi non avresti mai un migliore accettato universalmente. Esistono, ovviamente, parecchie lingue adatte a un'ampia gamma di sviluppo su tutte le piattaforme. C ++ e Java sono i due principali.
GrandmasterB,

5
@GrandmasterB Hai dimenticato C #
Daniel Little

15
C'è, si chiama 'C'
Martin Beckett,

9
noi come specie abbiamo un'innata capacità di dissentire (in virtù della nostra individualità), quindi non saremo mai d'accordo su ciò che è universalmente richiesto, e quindi non ce ne sarà mai uno (almeno non creato dagli umani!)
Nim

9
Un linguaggio di programmazione universale? Intendi, analogo al linguaggio umano universale a cui tutti sono passati così tanti anni fa?
Kyralessa,

Risposte:


116

Per lo stesso motivo non devi usare un coltellino svizzero per intagliare un pollo ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

Il coltellino svizzero ha generalmente una lama, oltre a vari strumenti, come cacciaviti e apriscatole e molti altri. Questi accessori sono riposti all'interno del manico del coltello attraverso un meccanismo a perno ...

Il design del coltello e la sua flessibilità hanno portato entrambi al riconoscimento mondiale ...


26
Per lo stesso motivo non porti un minivan a una gara di trascinamento. Per lo stesso motivo non devi portare a duello una pistola ad acqua.
Chris,

20
@Chris E se fosse un duello con la pistola ad acqua?
Rusty,

44
Per lo stesso motivo non entri mai con un siciliano quando la morte è in pericolo.
Rusty,

6
Se tu avessi un coltellino svizzero che ha fatto tutto il necessario per costruire una casa, sarebbe utile per qualcuno di loro?
Brad Mace,

4
Questa risposta è un'analogia orribile. Forse se tu avessi scritto: poiché la lingua francese consente una fedeltà di espressione diversa rispetto alla lingua inglese, avrei potuto apprezzare meglio l'analogia. Ma i linguaggi informatici non sono "cose", né linguaggi umani. La risposta corretta è: non lo sappiamo. Richiederà maggiori informazioni su come gli umani esprimono la logica e su come arrivano a questo punto. Inoltre, alcune lingue sono "meta-lingue", in grado di esprimere altre DSL. Dovremmo includerli nella tua domanda?
Dibbeke,

80

Perché

  1. nessuno vuole riscrivere tutto il codice legacy.
  2. È difficile concordare tutti gli scopi
  3. Una volta messo insieme un elenco completo di scopi, cambieranno prima che tu possa costruirlo.
  4. Qualcuno avrebbe iniziato una lingua completamente diversa a causa di un nuovo scopo.
  5. Microsoft
  6. Mela
  7. Open Source
  8. Cosa faremmo con tutti i pesci Babel?
  9. Non è nemmeno possibile rendere SQL universale.

Ti sei fermata breve. Mi aspettavo una di quelle liste "Top 10" di ah-ah-solo-serie.
Jeffrey Hantin,

4
+1 per aver impedito, almeno per ora, una campagna "Salva il pesce babele". Dannati hippy.
Rusty

2
per quanto riguarda il Babel Fish, prepara il sushi!
Muad'Dib,

1
Per quanto riguarda il punto 1, tutto il codice legacy dovrà eventualmente essere riscritto in ogni caso utilizzando l'ultima moda in codice / librerie o non sarà in grado di funzionare in modo efficace senza una quantità ridicola di costi di supporto.
Michael,

38

Quello che hai in programmazione è un dominio problematico molto grande. Questo dominio spazia estremamente e in molte direzioni.

Questo è il motivo per cui i controllori di volo integrati sono scritti in C e i siti Web sono scritti in PHP, Java, Rails, .NET e molti altri.

Per il controllore di volo incorporato ho circa 128k di memoria con cui lavorare e per di più se il mio codice riceve un'eccezione non gestita, l'aereo si arresta in modo anomalo, 200 persone muoiono e vengo citato in giudizio per $ 1 miliardi e devo inviare ingegneri a tutti aeroporto nel mondo per riparare aeromobili a terra perdendo i miei clienti $ 10 milioni al giorno. Devo lavorare con un linguaggio molto stretto e con un numero limitato di parti mobili che potrebbero andare storte.

Per la mia applicazione web ho diversi GB di memoria con cui lavorare, ma la velocità della rete è limitata (in misura minore ogni giorno, ma questo è probabilmente il limite più grande del web). Guarderò una lingua che mi offre moltissime funzionalità e produce output che possono essere trasmessi il più velocemente possibile. Non mi interessa davvero se il mio sito si arresta, forse perderò alcune vendite ($ 100) e dovrò riparare il caso d'uso che ha bombardato, un grosso problema.

I siti Web non sono stati scritti in C da oltre 15 anni (qualcuno fa qualche script cgi?) E per quanto ne so i controller di volo stanno iniziando a guardare C ++, ma anche in un modo molto limitato.


3
La maggior parte dei siti che effettivamente fanno soldi perderà più di $ 100 se si verificano tempi di fermo significativi. Non per suggerire che è paragonabile a una situazione di vita o di morte, ma tuttavia, questo sta minimizzando il rischio più di un po '.
Aaronaught il

3
Hai idea di quanto sia instabile Facebook. Di recente hanno pubblicato il loro codice push ogni 37 minuti. Il loro sito è costantemente aggiornato in un modo o nell'altro e hanno un milione di biglietti nel loro portafoglio. Il punto è con il web che nessuno morirà, "potresti" perdere alcune vendite, ma tutto sommato non rischi molto. La maggior parte dei problemi che affronti riguarderanno solo alcuni clienti, non l'intera base
Bill Leeper,

24
  1. Vai nel tuo garage (o nel garage dei tuoi genitori).
  2. Apri la cassetta degli attrezzi.
  3. Se vedi più di uno strumento, pensa a come si applica alla tua domanda.

Se non hai la cassetta degli attrezzi o hai solo uno di quei martelletti con le punte del cacciavite nella maniglia cava, allora ho una grande simpatia per te.

Sul serio. Se vai in un negozio di auto, il tuo meccanico ha un solo strumento fai-da-te nel suo toolchest? Lui (o lei) è un professionista, con strumenti di livello professionale appositamente progettati per eseguire varie attività di riparazione di automobili.

Allo stesso modo, gli sviluppatori di software professionali dovrebbero possedere un set sufficiente di strumenti per svolgere le proprie attività. Se apri la tua cassetta degli attrezzi e vedi solo [l'equivalente del software di] un cacciavite Philips, non puoi considerarti un professionista.

È possibile ruotare un bullone con una chiave a forchetta, una chiave a forchetta, una chiave a cricchetto o una chiave regolabile. Puoi persino trasformare un bullone in un pizzico con pinze a giunto scorrevole, goffamente, con danni da lievi a gravi. Ma è abbastanza difficile girare un bullone con una mazza.


Questo è per includere "garage dei genitori". Questo rende davvero più chiaro, dal momento che non ho un garage.
Dan Rosenstark,

5
Un'analogia migliore sarebbe che una lingua è come una cassetta degli attrezzi piuttosto che un singolo strumento.
Tom Hawtin: affronta il

4
Ci possono essere 20 strumenti diversi nella confezione. Scommetto che hai solo bisogno di una lingua per descriverli.
ThomasX,

2
In questi giorni la cassetta degli attrezzi è più simile alle librerie disponibili per la lingua in questione.
Michael,

18

Un diverso tipo di risposta agli altri: in realtà penso che ci sia il potenziale per una lingua di diventare "universale", consentendo le caratteristiche e i paradigmi di molte altre lingue, anche se forse non un linguaggio strettamente progettato a cui potresti pensare.

Per usare l'analogia di Brettmjohnson sopra, l'idea che ogni linguaggio di programmazione sia lo strumento all'interno di una scatola (o su un coltellino svizzero) è il presupposto che tutti stanno facendo, ma è davvero un presupposto imperfetto.

E se il linguaggio di programmazione fosse la cassetta degli attrezzi?

Voglio dire, cosa succede se puoi aggiungere e rimuovere funzionalità dalla lingua come preferisci e avere la tua cassetta degli attrezzi con gli strumenti di cui hai bisogno, anche se gli strumenti sono per scopi diversi.

Il concetto esiste già in parte. Ad esempio, lingue come Nemerle ti consentono di aggiungere la sintassi alla lingua e, come tale, potresti essere in grado di prendere "la migliore funzionalità dalla lingua X" e aggiungerla a Nemerle (o alla tua). Ciò non significa necessariamente che tu scriva sempre le tue macro: ogni lingua (o paradigma) potrebbe essere definita all'interno di una macro in una libreria standard, in modo tale che tu possa import Haskell; import Prolog;, e iniziare a scrivere le due lingue come se facesse parte di la tua lingua?

La domanda allora è: come si fa a far funzionare le funzionalità di linguaggi / paradigmi diversi? Anche se non posso rispondere, framework come .Net e JVM offrono alcune soluzioni: i linguaggi sono almeno parzialmente compatibili a causa del modo in cui sono compilati. Puoi prendere qualsiasi codice scritto in C # per esempio e usarlo da F # senza lamentele.

Il "problema" con la soluzione come è oggi, è che l'utilizzo di queste lingue insieme richiede di crearle come progetti separati, che non possono fare riferimento a vicenda - è possibile avere solo un riferimento a 1 via. La barriera linguistica è che ogni progetto compila tutti i suoi file separatamente in Common Intermediate Language prima che qualsiasi altro progetto possa accedervi.

Un trampolino di lancio verso la rimozione di quella barriera sarebbe quello di consentire la compilazione di codice di lingue diverse (ad esempio, C # e F #) all'interno dello stesso progetto. In teoria potresti compilare ogni file separatamente (o in gruppi - se hanno tipi parziali o riferimenti circolari), e quindi compilare file di una lingua diversa che possono accedere a quegli oggetti già compilati (CIL). Dovresti definire rigorosamente l'ordine di compilazione per farlo funzionare, ma l'ordine di compilazione è già richiesto nel caso di F #.

Ad ogni modo, non sto dicendo "sicuramente può esserci un linguaggio universale". Sto suggerendo che esiste il potenziale per una migliore interoperabilità tra le lingue rispetto a ciò che esiste attualmente. In realtà, è probabile che non migliorerà molto molto presto, solo a causa dell'enorme quantità di lavoro che serve per implementare un linguaggio e le librerie, gli strumenti ecc. Necessari per usarlo.


4
Tutto il mondo non è un PC. La maggior parte dei processori su questo pianeta ha meno di 64K byte di spazio di memoria totale. Un linguaggio che può essere utilizzato su questi processori deve essere così ridotto rispetto a quello che la maggior parte di questo forum sembra utilizzare per rendere il tuo linguaggio universale un linguaggio di assemblaggio avanzato. Penso che si chiamerebbe "C".
uɐɪ

10

Le migliori funzionalità di alcune lingue sono in conflitto con le migliori funzionalità di altre.

Ad esempio: i riflessi consapevoli del tipo sono una caratteristica davvero interessante, ma non varrebbero molto in un linguaggio tipicamente impreciso, ma a volte la digitazione libera può essere un vero vantaggio.

Anche all'interno di una lingua non è sempre possibile utilizzare tutte le migliori funzionalità contemporaneamente perché sono in conflitto tra loro.


ma se questa funzionalità fosse abilitata / disabilitata in base alle necessità, ad esempio: potresti abilitare riflessioni consapevoli del tipo e disabilitare la capacità di linguaggio tipicamente vagamente e così via ...
killown,

2
e se dovessi provare a combinare un sacco di funzionalità di lingue in una lingua che potrebbe fare qualsiasi cosa, otterrai molta ridondanza, confusione, bug da tutti i diversi modi di utilizzare diverse combinazioni di funzionalità e un sacco di sforzo sprecato che specifica quale paradigma stai usando su questa linea.

killown hai ragione, ma risolvere il problema rendendo il linguaggio ultra-configurabile rende il linguaggio difficile da usare come descrive il finocchio. Mi piace un linguaggio flessibile che permetta le cose anche se in alcuni casi sono pericolose, ma il livello di configurazione necessario per combinare alcuni concetti lo renderebbe più complesso che semplicemente abbandonare e scrivere la soluzione in C di basso livello o qualcosa del genere .
Bill,

1
+1 per caratteristiche contrastanti
Frank Shearar,

Penso che il problema non sia solo il conflitto di funzionalità linguistiche, ma piuttosto che molte lingue assumono un framework di base che include funzionalità che impongono un certo livello di sovraccarico, ma che consentono di semplificare determinate operazioni. Le lingue in genere hanno anche determinati "modelli di utilizzo tipici" associati ad esse. La selezione di quali funzionalità dovrebbero essere incluse in un framework e quali schemi di codifica debbano essere impiegati, implica dei compromessi; e diverse combinazioni di caratteristiche e modelli sono migliori per diverse applicazioni.
supercat

7

"Tuttofare, maestro di nessuno." viene in mente.

Alcuni programmi richiedono velocità, altri grandi quantità di memoria o un rapido accesso al disco. Alcune lingue sono buone in una, ma cattive in un'altra - non credo che avresti una lingua che fosse affatto buona.

Quindi, mentre puoi scrivere praticamente qualsiasi programma in qualsiasi lingua, quello che ottieni non è garantito per essere il "migliore" programma che potresti scrivere per risolvere quel problema.


4

C'è. Nessuno strumento è il migliore a tutto, ma alcuni strumenti come molti linguaggi di programmazione servono a tutti gli effetti, non migliore a tutti.

Puoi scegliere lo strumento migliore per il lavoro ma ci sono linguaggi di programmazione che possono essere utilizzati a tutti gli scopi e puoi sceglierli. Non lo consiglio ma è possibile.


4

A causa di qualcosa che chiamo "paradosso di generalizzazione / specializzazione", che probabilmente ha un altro nome e in realtà non è un paradosso

Più un linguaggio di programmazione è generalizzato, più codice ci vuole per realizzare qualcosa. Più la lingua è specializzata, meno puoi farcela.


2
Concordo con te, tranne per il fatto che è possibile avere biblioteche specializzate in un linguaggio generalizzato.
dan_waterworth,

@dan: concordato, ma solo se la lingua si concentra sulla fornitura di funzionalità agli scrittori di biblioteche. Le mie due lingue preferite sono D e Python. Entrambi sono linguaggi abbastanza generalisti (specialmente D) ma entrambi hanno molte funzionalità per gli scrittori di biblioteche, quindi puoi costruire le tue librerie per gestire le cose specializzate. Io disprezzo Super lingue dominio specifici come Matlab e R.
dsimcha

4

Le lingue modellano il modo in cui le persone pensano. Questo è vero per le lingue naturali. Se un bambino conosce solo una lingua con i numeri "uno, due, molti", insegnare che la matematica dei bambini è ... difficile. (Mi dispiace, non ho il link) In inglese parliamo di tempi diversi come se fossero luoghi - quindi è possibile immaginare il concetto di viaggio nel tempo. In alcune altre lingue, l'idea del viaggio nel tempo non verrebbe mai in mente ai suoi parlanti.

Questo vale anche per i linguaggi di programmazione.

Quindi se abbiamo un solo linguaggio di programmazione, tutti penseranno esattamente a tutti i compiti di calcolo. Quindi non esploreremo le alternative e il modo migliore per fare qualcosa rimarrà da scoprire.

La cosa più vicina a un linguaggio universale è C. C è molto vicino ai concetti hardware sottostanti (come le cose vengono effettivamente eseguite nell'hardware) e i programmi in ogni linguaggio * sono convertibili in C. (Vedi come CFront ha usato i compilatori C per assemblatore compiti) Il problema con C è fondamentalmente che le conversioni di cui sopra non avrebbero senso dal punto di vista dei programmatori C.

"Lambdas" sono sempre stati possibili in C. La sintassi è disattivata, incluso il codice distribuito su tutto il progetto / file, quindi non è stata una soluzione preferita. Con una versione no-capture / upvalue / etc, definire una funzione altrove e passare un puntatore alla funzione. (vedi qsort () ) Per usare lambdas con valori acquisiti, la quantità e la complessità del codice che devi scrivere aumenta molto - per quanto ne so nessuno ha mai effettivamente scritto il codice per usare questo metodo di programmazione in C. A differenza delle lingue in cui i lambda fanno parte della lingua e sostanzialmente utilizzati ovunque.

La differenza principale tra C e C ++ è il modo in cui puoi chiedere a C ++ di occuparti delle cose per te; ma poi non puoi più vedere, da una sola riga di codice, quanto ti stai chiedendo davvero. La risposta diventa: dipende (da tutto questo altro codice).

Alcuni linguaggi di programmazione sono eccellenti per compiti specifici, ma dove la maggior parte degli attuali programmi in uso nel mondo semplicemente non avrebbe senso se programmati in quel linguaggio. Cioè, se la lingua potesse essere utilizzata per implementare quel programma all'inizio, il che non è un dato di fatto.


2
"In alcune altre lingue, l'idea del viaggio nel tempo non verrebbe mai in mente ai suoi parlanti." Citazione necessaria. L'ipotesi Sapir-Whorf non è affatto ampiamente accettata specialmente nella sua forma forte.
Muhammad Alkarouri,

4

L'impossibilità per motivi tecnici di avere un linguaggio universale? Questa è una totale assurdità. si potrebbehanno un linguaggio universale che copre tutte le basi. Il problema è per lo più storico: sono state inventate lingue diverse per fare cose diverse ed essere utilizzate in comunità diverse. Molti di loro sono bloccati. Aggiungi a quelle preferenze (vi! Emacs! Aspetta, volevo dire Java! C #, aspetta intendevo Microsoft, Open Source, ecc. Ecc. Ecc.) E l'incorporamento generale di incidenti storici ... Guarda le lingue naturali in una terra minuscola massa come alcuni paesi europei per vedere quanto può diventare folle questo argomento. Alcune città hanno il loro orgoglio e gioia, un piccolo dialetto di cui solo loro parlano. Le nazioni e le comunità di programmazione non sono così diverse, né le comunità di programmazione sono più razionali. Se lo fossero, parleremmo tutti esperanto e programmeremo in Universal qualcosa "qualcosa" ...


1
Il problema è più profondo di così. Più opzioni rendi disponibili, più deve essere specificato esplicitamente invece di essere l'unico modo implicito in cui le cose funzionano in quella lingua. I problemi diventano più evidenti se, invece di confrontare Java con C #, si confronta Java con Prolog. Avere le caratteristiche di entrambi in una lingua complicherebbe la sintassi del linguaggio composto. Una scelta più ragionevole potrebbe essere quella di ridurre al minimo la sintassi e consentire l'implementazione di qualsiasi funzione come libreria di metaprogrammazione. Questo è fondamentalmente ciò che fa Lisp, anche se il suo core non è abbastanza basso livello per alcuni lavori.
Steve314,

4

È un errore pensare che "combinare tutte le funzionalità" renderà un linguaggio migliore.

È più probabile che finisca con un casino gonfio, complesso, illeggibile.

Una buona progettazione del linguaggio richiede scelte e compromessi. Probabilmente le lingue migliori / più rivoluzionarie / di maggior successo sono quelle che tirano fuori qualcosa e forniscono un'alternativa migliore piuttosto che aggiungere nuove cose.

  • Linguaggi di programmazione strutturati (C, Pascal) - elimina "goto", sostituisce con procedure e cicli strutturati ecc.
  • Java: elimina la "gestione manuale della memoria", sostituisce con GC / memoria gestita
  • Haskell / Clojure - elimina "stato mutabile incontrollato"
  • Lisp: elimina la maggior parte della "sintassi del linguaggio", sostituisce con un albero omoiconico flessibile di s-espressioni

Su questo piano si parla molto bene di zio Bob Martin - L'ultimo linguaggio di programmazione


"Linguaggi di programmazione strutturati (C, Pascal) - elimina" goto ", sostituisce con procedure e cicli strutturati ecc." - Mi dispiace, ti sbagli lì: C ha goto. Ma mi piace il resto della risposta. La cosa principale che fa C è non farti preoccupare esattamente di dove si trovi tutto in memoria e cosa c'è in quale registro in che momento, e nasconde il contatore del programma (in termini di indirizzo preciso in cui si trova, di nuovo. Puoi spostarlo a quasi un livello di assemblaggio di precisione con un goto).
Wyatt8740,

0

Non esiste uno strumento che abbia tutte le migliori caratteristiche. Ad esempio, una bella funzionalità di Javascript e Scheme è che sono piccole, quindi se inizi a imballare funzionalità, hai già perso questa.

Ancora Cobra sembra promettente nella direzione di avere tutte le belle funzionalità di altre lingue. :-)


0

Perché se crei una tale lingua, sarà ancora un'altra nuova lingua. Potresti ottenere una vasta base di fan, ma tutte le altre lingue continueranno a esistere.

C esiste ancora anche se molte nuove lingue sono state inventate da allora.

Si potrebbe dire che python è un linguaggio così universale, ma poi c'è anche ruby.

La ragione per cui ci sono molte lingue è semplicemente perché ci sono molti programmatori e alcuni di loro amano creare nuove lingue.

La ragione per cui non esiste un unico linguaggio universale su cui tutti concordano è che la programmazione come arte non è dettata da qualche istituzione che prende tutte le decisioni. Tutti sono liberi di fare ciò che vogliono.

È una buona cosa.


Direi anche che non è né buono né cattivo, ma piuttosto un artefatto del fatto che l'ingegneria del software non ha nemmeno cento anni ed è molto immatura rispetto a qualsiasi altro tipo di ingegneria esistente.
Michael,

0

Con tutto ciò che è scritto finora, è difficile aggiungere molte nuove motivazioni, ma ne aggiungerò alcune.

  • Evoluzione: non sono solo i sistemi biologici che vengono introdotti, mutati e sottoposti a una competizione di sopravvivenza delle risorse più adatta e una nicchia da chiamare propria. La competizione è buona e fa avanzare le cose.

  • Maturità: creiamo linguaggi informatici probabilmente da meno di un secolo. Non possiamo ancora avere la risposta perché non conosciamo ancora tutte le domande.

  • Genesi separata: non sono sicuro della parola giusta per questo, ma nel mondo ci sono molti sistemi di scrittura che sono iniziati in molte regioni geografiche. Pensa a Cuneiforme dettato in parte dalle esigenze di intagliare le tavolette d'argilla. Pensa agli alfabeti sanscrito, greco, ebraico, romano e arabo. Geroglifici, il metodo cinese di bella scrittura con oltre 6000 simboli che è condiviso in molti paesi dell'Asia orientale. Pensa a alfabeti misti più moderni con basi fonetiche come cirillico, Katakana e Hirigana. Non sono un linguista, quindi non infiammare le imprecisioni troppo duramente, ma quando le culture di tutto il mondo hanno bisogno di qualcosa, lo creeranno e lo faranno per necessità. I linguaggi informatici arrivarono quando c'erano molte comunicazioni in tutto il mondo e come i sistemi imperiale e metrico, proveniva da luoghi con una potente leadership di idee. Ma i linguaggi di programmazione servono molte culture diverse (alcune delle quali culture aziendali), quindi riflettono le persone che le hanno create. I linguaggi informatici sono dotati di eredità culturali che ne hanno modellato il design e l'uso. Nella cultura del kernel del sistema operativo, è improbabile che C e C ++ vengano presto deprecati per Java (o viceversa) perché consentono la generazione di codice nativo, l'accoppiamento stretto / efficiente con l'hardware per la creazione di livelli di astrazione hardware e hanno una base installata considerevole.

  • Design del design: i linguaggi di programmazione nascono utilizzando paradigmi organizzativi diversi. COBOL e Ada provenivano da comitati che facevano parte del DOD e che avevano molta gerarchia. Se ricordo bene C, C ++, Java, e probabilmente molti altri, provenivano da uno o un numero limitato di designer. Fred Brooks confronta i risultati del comitato con gli approcci basati sul visionario nel suo documento, il Design of Design (http://www.youtube.com/watch?v=pC-DlX-PaF4). Se oggi ci sedessimo per selezionare un Da Vinci o un comitato per definire il linguaggio di programmazione universale, sapremmo chi o cosa con quale metodo dovrebbe essere progettato?


0

Forse un po 'diverso su tutto questo:

Che cos'è una lingua? Per essere ridicolmente semplice, è vocabolario, sintassi e semantica.

Qual è la prima cosa che fai con un linguaggio di programmazione?
Definisci cose - classi, variabili, metodi - estendi il vocabolario e la semantica.

Perché? Quindi ora puoi dire cose che non potresti dire prima.
Piaccia o no, hai creato un nuovo linguaggio per scopi speciali.

IMHO, la cosa da cercare in una lingua per scopi generici è se è facile creare lingue per scopi speciali.


0

A parte l'argomento coltellino svizzero (che ha un punto - è più difficile progettare un buon linguaggio ad ampio spettro rispetto a un linguaggio specifico del dominio - ma ciò non significa che un tale linguaggio non sia entrambi possibile e una buona idea), ci sono problemi con la "combinazione delle migliori caratteristiche":

  • Per le caratteristiche del linguaggio, "migliore" è soggettivo, o almeno (interminabile) discutibile.
  • Alcune funzionalità non sono compatibili; una buona caratteristica di una lingua può esplodere se combinata con una buona caratteristica di un'altra.
  • Non abbiamo ancora finito con nuove funzionalità.

In breve, il design del linguaggio è più difficile e più complicato di così. Tuttavia, potresti voler dare un'occhiata a Scala .



-2

Esiste un linguaggio di programmazione universale. Si chiama "linguaggio macchina" e tutto in qualsiasi altro linguaggio informatico viene infine eseguito come linguaggio macchina.

Che cosa sembra? Una stringa di 0-9 e AF.

Ma è una cagna da usare. Quindi Alan inventa una lingua che può essere tradotta in linguaggio macchina ed è più adatta a ciò che Alan vuole fare. Bill inventa una lingua diversa per ciò che Bill vuole fare. In poco tempo hai Cobol e Fortran e Lisp e Java. Tutti sono vesioni semplificate del linguaggio macchina, più facili da scrivere su determinati tipi di programmi ma più difficili o impossibili da scrivere su altri tipi di programmi. Uno è buono per la contabilità, un altro è buono per controllare la navetta spaziale.


6
Il linguaggio macchina non è universale; neanche vicino. Ogni macchina ha la sua lingua.
hasen

3
Inoltre, non è una stringa di 0-9 e AF. Sono 1 e 0.
David Conrad,

@hasen @David non è ragionevole suggerire come @Andy abbia che ogni lingua è, da un punto di vista, una lingua specifica del dominio, costruita su altre lingue?
Armand,

Ho detto 0-9 e AF perché è quello che dovevi sapere per usare i codici multi-punch su una macchina keypunch. Sembra 0-1 o 0-15 o 0-255 se lo prendi come numeri, a seconda di quanto sia grande un pezzo alla volta. E hansen ha ragione; ogni tipo di macchina ha la sua lingua. Quasi tutti i PC oggi accettano codici 80386; anche il mio telefono lo farà! Ma l'iPad non lo farà.
Andy Canfield,

@hasenj e con caratteristiche ampiamente diverse. La mentalità richiesta per la programmazione di un 6502 è diversa dalla programmazione di un x86 e, a sua volta, diversa da un chip RISC. Molto lontano dall'universale.

-2

Solo perché,

non esiste un computer UNIVERSALE.

non una piastra UNIVERSALE.

non un programmatore UNIVERSALE.

e nemmeno un cliente UNIVERSALE.

: P

Quindi semplicemente ne abbiamo bisogno di uno diverso per uno diverso. ;)


-2

La maggior parte delle risposte qui si concentra sull'uso dello strumento migliore per ogni problema. Non credo che questo sia un motivo abbastanza buono.

Se guardi alle grandi aziende, di solito l'azienda tenderà a usare un singolo (o un piccolo numero) di lingue e tecnologie, anche se per un progetto specifico c'è un linguaggio migliore.

Questo perché i vantaggi derivanti da una migliore standardizzazione, un supporto più semplice, la condivisione del codice, ecc. Sono (la maggior parte delle volte) maggiori del valore aggiunto di una lingua specifica.


1
Non ho mai visto un progetto aziendale decente usando meno di 4 lingue diverse. E non credo in nessuno di quei "benefici" derivanti dalla selezione di strumenti inadatti. Non funziona mai
SK-logic

-3

Penso che tutte le risposte "perché non scolpisci statue con una matita" non abbiano ragione.

Chi qui, VERAMENTE seleziona una lingua prima di ogni nuovo progetto?

La verità è che abbiamo solo bisogno di un paio di linguaggi di programmazione, e il mondo della programmazione sarebbe meglio in questo modo: la gente avrebbe concentrarsi sul rendere il linguaggio di scripting meglio, invece di essere sparsi in python / ruby / perl / younameit per esempio.

C # è programmato su / per Windows (va bene, c'è Mono, qualcuno qui esegue un C # sotto l'app Mono ogni giorno?) E questo fa sì che gli utenti acquistino Windows7 / 8, e questo fa soldi per Microsoft.
Altre aziende fanno lo stesso, quindi l'open source lo sa meglio, quindi anche il signor genio ... e abbiamo un sacco di linguaggi simili, è solo la natura egocentrica dell'umanità.


D'accordo - per lo più abbiamo davvero solo bisogno di un linguaggio "sicuro" di alto livello, un linguaggio di programmazione di sistema "non sicuro" di basso livello, tutti i linguaggi di assemblaggio (uno per CPU, sono inevitabili ma nascosti), oltre a qualche scopo speciale (specifico del dominio) lingue (ad es. SQL). Il vero problema è che è impossibile per chiunque dichiarare un linguaggio "deprecato" (anche quando il progettista del linguaggio prova a farlo - ad esempio Python 2 vs. Python 3). Più nuove lingue ogni anno e nessuna vecchia lingua scartata significa che alla fine ci saranno più lingue in uso rispetto ai programmatori per usarle. ;-)
Brendan,

-5

Dobbiamo guardare all'economia per rispondere a questa domanda. Se risparmiasse denaro per avere solo una lingua, l'avremmo. Lo standardizzerebbero e richiederebbero a tutti di usarlo. Le altre lingue languirebbero in polverosi edifici accademici e nei sotterranei di appassionati con gli occhi selvaggi. Ciò non è accaduto, quindi il loro non deve essere un incentivo al profitto in un linguaggio di programmazione universale o uno si sarebbe naturalmente evoluto ormai.


1
Il "risparmio di denaro" è (nonostante i migliori sforzi dei contabili) un concetto vago e nebuloso nel corso del ciclo di vita. Proprio come i meccanici non sono riusciti a standardizzare nemmeno su una singola dimensione di chiave, non importa un intero kit di strumenti, l'ingegneria del software non è riuscita a standardizzare perché ci sono così tanti criteri per selezionare uno strumento (lingua) o persino il processore / sistema operativo / ambiente
Andrew
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.