Perché diversi linguaggi di programmazione popolari sono influenzati dal C? [chiuso]

Commenti

  • La sintassi simile a c non è la stessa che si basa su c.
  • Inoltre, TIOBE è un indice spazzatura.
  • Piuttosto, posso chiederti perché i linguaggi di programmazione basati su C sono più popolari?
  • Perché C è un discendente di ALGOL e ALGOL ha lambito di blocco labguages imperativo che cosa Ab raham è per cristiani, ebrei e musulmani.
  • Le tue citazioni su PHP e Python non ' in realtà dicono che ' è influenzato da C – e, mentre PHP lo è, Python ' non sembra esserlo.

Risposta

Con lavvento di UNIX negli anni 70, il suo linguaggio di programmazione di sistemi standard C divenne rapidamente la lingua franca del mondo della programmazione. Per un bel po di tempo, C è stato praticamente obbligatorio per ogni programmatore. In quanto tale, il fatto che il C abbia influenzato in un modo o nellaltro quasi tutti i linguaggi di programmazione che lo seguirono non sorprende, per due ragioni:

  • Quando si progetta un nuovo linguaggio, ha senso basare la sua sintassi, ove possibile, su un linguaggio popolare esistente che può essere considerato di comune conoscenza.
  • È più probabile che una nuova lingua abbia successo se la curva di apprendimento è superficiale e una sintassi che assomiglia a una lingua già conosciuta è generalmente più facile da imparare (a meno che non si comporti in modo radicalmente diverso nonostante le apparenti somiglianze). Quindi i linguaggi che prendono in prestito la sintassi dal C generalmente guadagnano trazione più rapidamente di quelli che non lo fanno.

Ma altri linguaggi esistevano, e lo fanno ancora, alcuni di loro addirittura precedenti al C – ci sono la famiglia LISP (CL, Clojure e Scheme sono i dialetti moderni più popolari), la famiglia ML (con diversi dialetti moderni), cè un intero esercito di dialetti BASIC (VB.NET e VBA sono implementazioni moderne), cè Pascal ei suoi parenti (Delphi è il più conosciuto) e molte lingue “stravaganti” che hanno preso influenze da molte altre lingue e hanno inventato alcune cose da sole; esempi includono Go, Python, Lua, Haskell (e il suo predecessore, Miranda), Prolog e Erlang. Sebbene nessuno di questi linguaggi (eccetto Python) sia tra i primi 10, molti di loro hanno una base di utenti stabile e una comunità attiva; non stanno certo andando via.

Inoltre, va notato che la quantità di influenza del C in questi linguaggi differisce enormemente, dai linguaggi compatibili quasi al 100% C C ++ e Objective-C, fino a Python (che abbandona deliberatamente molte delle caratteristiche della sintassi del C). E questa è solo la sintassi: in termini di semantica, la maggior parte dei linguaggi in quella lista non hanno molto in comune con C. La stragrande maggioranza ha la gestione della memoria incorporata nel linguaggio e, di conseguenza, copia semantica, passaggio di argomenti, ecc. sono molto diversi. JavaScript, ad esempio, ha forti influenze semantiche da Scheme, mentre la sua sintassi è stata progettata per assomigliare a Java (che, a sua volta, basa la sua sintassi bit-and-pieces su C, ma non la sua semantica). Altre differenze (ad eccezione di C ++ e Objective-C, che sono per lo più compatibili allindietro con C) includono la gestione degli errori, le regole di ambito, le librerie standard, linclusione di codice esterno (#include), e il fatto che molti di questi linguaggi siano “virtualizzati”, cioè girano su un interprete, un compilatore JIT o una macchina virtuale.

Python, a proposito, ha una certa influenza C, ma certamente non è “basato su” C. Sia la sintassi che la semantica differiscono in modo piuttosto radicale da C, e questo è di progettazione. Python prende in prestito solo le funzionalità da C dove altre alternative sono ugualmente “buone” (come per lo “Zen of Python” – digita import this in un interprete Python).

Per quanto riguarda il futuro della programmazione; le previsioni variano. Linfluenza di C non sta scomparendo, ma i recenti sviluppi nellhardware (macchine multi-core che diventano comuni, GPU potenti, CPU che smettono di essere il tipico collo di bottiglia delle prestazioni, connessioni di rete veloci e affidabili, ecc.) Richiedono approcci radicalmente diversi alla programmazione in generale.Chiunque abbia mai scritto unapplicazione distribuita multithread in un linguaggio imperativo può dire che è incredibilmente difficile, mentre linguaggi come Haskell hanno caratteristiche che rimuovono la maggior parte dei problemi tipici e offrono un approccio più astratto e più strutturato a distribuito, concorrente e elaborazione parallela (la purezza è un concetto importante in questo contesto). I linguaggi di programmazione più recenti (ad esempio C # o D) includono già molte funzionalità per supportare tale idioma. In ogni caso, né il forte impatto che C ha avuto sulla programmazione, né lesistenza di le lingue diverse dal C stanno per scomparire.

Commenti

  • Bella risposta, ma " CPU cessa di essere il tipico collo di bottiglia delle prestazioni "? Nella mia esperienza, i problemi di prestazioni abbondano: CPU, IO, lo chiami. In caso contrario, i profiler non sarebbero necessari, anche se non lo sono molto efficace.
  • @MikeDunlavey: di solito, i colli di bottiglia che incontro sono causati da I / O, n rete, prestazioni della cache della CPU, throughput del bus e comunicazione tra processi (inefficiente). Ai tempi, la CPU era quasi inevitabilmente il collo di bottiglia; questo non è ' vero più.

Risposta

È un po come chiedere perché linglese è la lingua dominante negli Stati Uniti. Perché non spagnolo o francese? Controllavano più territorio degli Stati Uniti rispetto alle colonie inglesi. Perché non olandese? La prima capitale degli Stati Uniti era in unex colonia olandese. Non sono sicuro che possa esserci una “risposta” a questa domanda.

Tuttavia, la sequenza temporale “Cronologia lingue del computer” ( http://www.levenez.com/lang/ ) fornisce tutte le risposte possibili.

Commenti

  • Perché la Gran Bretagna del 1600 -1880 era allincirca la principale potenza industriale e finanziaria del mondo, seguita dagli Stati Uniti dal 1880 a oggi (< –discutabile). Divenne la lingua degli affari internazionali ed è parlato correntemente da oltre 2 miliardi di persone in tutto il mondo. Nessuno vuole parlare spagnolo o olandese 🙂
  • @maple_shaft – " nessuno vuole parlare spagnolo "?! … sai anche in quanti paesi si parla? en.wikipedia.org/wiki/Spanish_language
  • @ S.Lott: Intendi la parte in cui lImpero britannico era il più grande impero mai esistito e occupava il 25% ire world ' s superficie? Quel tipo di " non potente "?
  • @DeadMG: I ' non sto parlando del mondo. ' sto parlando degli Stati Uniti nel 1700 ', dove i francesi avevano circondato gli inglesi in una piccola area lungo la costa. ' sto parlando degli inglesi che perdono impegni militari solo in questo teatro. I francesi controllavano chiaramente la maggior parte di quelli che diventarono gli Stati Uniti. Ancora. Gli Stati Uniti finirono per parlare inglese. Non francese. La stessa analisi si applica a C. È ' una storia complessa con molti fattori di influenza. ' non è una banale risposta.
  • @ S.Lott Il francese ' non ha vinto ogni singolo incontrare. Solo guardando il Nord America hanno vinto la maggioranza; ma perdere 4 delle 5 battaglie principali in NA durante il 1559/60 ha provocato una sconfitta schiacciante nel teatro. Le catture di Forts Ticonderoga e Niagara, The Plains of Abraham e la battaglia di Restigouche furono tutte vittorie britanniche. Interrompendo rifornimento / rinforzo, questultimo ha reso irrilevante la vittoria francese a Sainte-Foy.

Risposta

Se crei un nuovo linguaggio di programmazione, avere una sintassi simile ai linguaggi esistenti più diffusi rende più facile lapprendimento per i tuoi nuovi utenti. Soprattutto se molti concetti sono simili tra i linguaggi.

Inoltre penso che la sintassi in stile C sia relativamente facile da leggere. Per fare un confronto con Pascal, luso dei simboli “{” e “}” per blocchi di codice è più leggibile di “inizio” e “fine”, che sono otticamente molto simili agli identificatori. Python è ancora più leggibile, ma linclusione di spazi bianchi nella sintassi apre una nuova serie di problemi con la modifica. Un altro esempio: Lisp e JavaScript condividono alcune idee, ma quando la stessa cosa è scritta con la sintassi in stile C, è meno oscura.

Sono sicuro che molte persone non sarebbero daccordo con il secondo paragrafo, perché tutti ha il proprio linguaggio preferito, ma penso che la popolarità della sintassi in stile C sia in parte una coincidenza storica, ma in parte mostra anche che gli autori di C hanno preso alcune buone decisioni.

Risposta

I linguaggi di programmazione si evolvono nel tempo proprio come i linguaggi naturali, con alcuni linguaggi più vecchi che influenzano tale evoluzione in modo più forte di altri , mentre altri svaniscono nelloscurità e la loro influenza è più difficile da tracciare a livello superficiale, cioè la sintassi.

Linfluenza di C proviene da molte fonti – è di basso livello, diffusa, ha avuto il sostegno sia Unix che Microsoft. È anche la sopravvivenza della questione più adatta – è facile vedere che la sintassi tersa simile al C aveva più fascino della sintassi verbosa derivata da Algol di Pascal e altri concorrenti del C negli anni 70 e 80. Quindi è stato ampiamente adottato dai linguaggi successivi.

Con lattuale crescita dellimportanza della programmazione multithread e dei linguaggi funzionali che sono particolarmente adatti ad essa, direi che vedremo crescere la loro influenza in il futuro. Caso in questione: Python, che ha persino creato quellelenco nel post della domanda.

Una bella visualizzazione della cronologia della storia del linguaggio su cui riflettere

Commenti

  • Hai sbagliato. Sia PASCAL che C sono discendenti di ALGOL.
  • Vero, ma Algol stesso è un discendente di Fortran e ha scelto alcuni dei costrutti a cui mi riferivo (programma, fine, subroutine rispetto a c ' s parentesi). Tuttavia, quello che avevo in mente era in realtà una sintassi simile ad Algol. Modificato.
  • sintassi sintetica simile al C aveva più fascino della sintassi prolissa derivata da Algol di Pascal e altri concorrenti di C negli anni 70 ' e 80 ' +1 per quello. inizio anche i programmatori sono esseri umani fine inizio coloro che lo credevano ' è comodo associare i segni di punteggiatura a parole come inizio-fine ha perso la battaglia contro le parentesi graffe fine della storia
  • Non vedo prove che la sintassi del C è meno oscura, tranne nel senso che la maggior parte degli sviluppatori conosce C o una sorta di linguaggio correlato al C, e quindi sembra più familiare. AFAICT, il C ha conquistato Pascal per la sua struttura e per il fatto che le implementazioni ' non dovevano eseguire il proprio collegamento, non la sintassi.
  • @ David- Da quello che ricordo, una delle ragioni per cui C ha vinto su altri linguaggi è stata la relativa facilità di accesso alla memoria in C (cioè i puntatori). So che ora sono scoperti, ma quando 1 KB di RAM era molta memoria, quella era una caratteristica molto potente del linguaggio. So che altre lingue fornivano funzionalità simili a puntatori, ma nessuna così facilmente come C.

Answer

La maggior parte delle le lingue che elenchi non hanno praticamente nulla a che fare con il C a parte somiglianze sintattiche irrilevanti. Le uniche due derivate C effettive sono Objective-C e C ++.

Commenti

  • Se non stiamo considerando la sintassi, allora le uniche differenze tra i linguaggi sono la disponibilità di costrutti linguistici generali (cicli, condizionali, variabili, astrazioni di questi come classi e chiusure, ecc …) e che tutti equivalgono al comportamento del codice macchina. Tutte le lingue di basso livello sono simili tra loro e tutte le lingue di alto livello sono estremamente simili tra loro a quel punto.
  • Non dovresti ' pensare a un linguaggio come le funzionalità di cui dispone, ma come comunica il comportamento dellapplicazione. Il codice sorgente è il livello più basso di documentazione e si scrive codice sorgente per persone e NON per macchine . Se scrivessimo codice rigorosamente per macchine, allora codificheremmo tutti in assembly.
  • @maple_shaft: Giusto! In unintervista mi è stato chiesto di spiegare la differenza tra linguaggio macchina (assemblatore) e linguaggio di programmazione. La mia risposta è stata: " Il linguaggio macchina è per le macchine, il linguaggio di programmazione è per i programmatori. "
  • @maple_shaft: La sintassi è irrilevante per quanto riguarda la comunicazione ' alle persone . Se sostituissi una parola inglese con unortografia diversa, linglese sarebbe ancora la stessa lingua. La forma sintattica è irrilevante, ciò che ' è comunicativo è la semantica del linguaggio.
  • @DeadMG: Ma la domanda è sulla sintassi. Puoi considerare le somiglianze sintattiche irrilevanti, ma la persona che pone la domanda vuole sapere perché queste somiglianze irrilevanti esistono .

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *