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


23

I primi 10 linguaggi di programmazione, secondo l' indice TIOBE, sembrano essere fortemente influenzati da C:

1. Java

Il linguaggio deriva gran parte della sua sintassi da C e C ++ ma ha un modello a oggetti più semplice e meno servizi di basso livello. - wikipedia.org

2. C

C è uno dei linguaggi di programmazione più utilizzati di tutti i tempi e ci sono pochissime architetture di computer per le quali non esiste un compilatore C. - wikipedia.org

3. C #

Durante lo sviluppo di .NET Framework, le librerie di classi sono state originariamente scritte utilizzando un sistema di compilazione di codice gestito chiamato Simple Managed C (SMC). Nel gennaio 1999, Anders Hejlsberg formò una squadra per costruire un nuovo linguaggio all'epoca chiamato Cool, che significava "linguaggio orientato agli oggetti di tipo C". - wikipedia.org

4. C ++

È stato sviluppato da Bjarne Stroustrup a partire dal 1979 ai Bell Labs come potenziamento del linguaggio C. - wikipedia.org

5. Obiettivo-C

Objective-C è un linguaggio di programmazione riflettente e orientato agli oggetti che aggiunge la messaggistica in stile Smalltalk al linguaggio di programmazione C. - wikipedia.org

6. PHP

Ha riscritto questi script come binari Common Gateway Interface (CGI) in linguaggio di programmazione C, estendendoli per aggiungere la capacità di lavorare con i moduli Web e per comunicare con i database e ha chiamato questa implementazione "Home page / interprete di moduli personali" o PHP / FI. - wikipedia.org

8. Python

Python è stato concepito alla fine degli anni '80 e la sua implementazione è stata avviata nel dicembre 1989 da Guido van Rossum alla CWI nei Paesi Bassi come successore del linguaggio di programmazione ABC (a sua volta ispirato a SETL) in grado di gestire le eccezioni e interfacciarsi con il sistema operativo Amoeba. - wikipedia.org

ABC (linguaggio di programmazione) I suoi progettisti affermano che i programmi ABC sono in genere circa un quarto delle dimensioni dei programmi equivalenti Pascal o C e più leggibili. - wikipedia.org

9. Perl

Perl prende in prestito funzionalità da altri linguaggi di programmazione tra cui C, shell scripting (sh), AWK e sed. - wikipedia.org

10. JavaScript

JavaScript utilizza la sintassi influenzata da quella di C. - wikipedia.org

Sembra che molti di loro prendano in prestito la loro sintassi da C e / o siano fortemente influenzati in molti altri modi, almeno nei loro inizi. Perché?


15
Avere una sintassi simile a c non è la stessa di essere basata su c.
Oded,

15
Inoltre, TIOBE è un indice spazzatura.
DeadMG

3
Piuttosto, posso chiedere perché i linguaggi di programmazione basati su C sono più popolari?
Manoj R,

3
@YannisRizos Grande recupero della domanda! In realtà è una grande domanda ora.
maple_shaft

16
Perché C è un discendente di ALGOL, e ALGOL è per bloccare imperativi miracoli ciò che Abramo è per cristiani, ebrei e musulmani.
Ingo,

Risposte:


40

Con l'ascesa 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 ', C era praticamente obbligatorio per ogni programmatore. In quanto tale, il fatto che C abbia influenzato quasi tutti i linguaggi di programmazione che lo hanno seguito in un modo o nell'altro non sorprende, per due motivi:

  • Quando si progetta un nuovo linguaggio, ha senso basare la sua sintassi, ove possibile, su un linguaggio esistente popolare che può essere assunto conoscenza comune.
  • È 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 radicalmente differente nonostante le apparenti somiglianze). Quindi le lingue che prendono in prestito la sintassi da C in genere ottengono una trazione più rapidamente di quelle che non lo fanno.

Ma esistevano altre lingue, e lo sono ancora, alcune addirittura precedenti a C - c'è 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 e i suoi parenti (Delphi è il più noto) e molte lingue "strane" che hanno influenzato molte altre lingue e inventato alcune cose stesse; esempi includono Go, Python, Lua, Haskell (e il suo predecessore, Miranda), Prolog ed Erlang. Sebbene nessuna di queste lingue (tranne Python) sia tra le prime 10, molte hanno una base di utenti stabile e una comunità attiva; non stanno certamente andando via.

Inoltre, va notato che la quantità di influenza C in questi linguaggi differisce selvaggiamente, spaziando dai linguaggi C + e Objective-C compatibili quasi al 100%, fino a Python (che abbandona deliberatamente molte delle caratteristiche della sintassi di C). E questa è solo la sintassi: in termini di semantica, la maggior parte delle lingue in quell'elenco non ha molto in comune con C. La stragrande maggioranza ha una gestione della memoria integrata nel linguaggio e, di conseguenza, copia della 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 su C, ma non sulla sua semantica). Altre differenze (ad eccezione di C ++ e Objective-C, che sono per lo più compatibili con le versioni precedenti con C) includono la gestione degli errori, le regole dell'ambito,#include) e il fatto che molti di questi linguaggi siano "virtualizzati", ovvero eseguiti su un interprete, un compilatore JIT o una macchina virtuale.

Python, a proposito, ha una certa influenza in C, ma certamente non è "basato su" C. Sia la sintassi che la semantica differiscono in modo abbastanza radicale da C, e questo è in base alla progettazione. Python prende in prestito solo le caratteristiche di C, dove altre alternative sono ugualmente "buone" (come per lo "Zen di Python" - digita import thisun interprete python).

Per quanto riguarda il futuro della programmazione; le previsioni variano. L'influenza di C non sta scomparendo, ma i recenti sviluppi nell'hardware (macchine multi-core che diventano comuni, GPU potenti, CPU che cessa 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 un'applicazione distribuita multithread in un linguaggio imperativo può dire che è incredibilmente difficile, mentre lingue come Haskell hanno funzionalità che rimuovono la maggior parte dei problemi tipici e offrono un approccio più astratto e strutturato all'elaborazione distribuita, concorrente e parallela (la purezza è un concetto importante in questo contesto). I linguaggi di programmazione più recenti (ad es. C # o D) includono già molte funzionalità per supportare tale linguaggio. In ogni caso,


Bella risposta, ma "la CPU smette di essere il tipico collo di bottiglia delle prestazioni"? Nella mia esperienza, i problemi di prestazioni abbondano: CPU, IO, tu lo chiami. In caso contrario, i profiler non sarebbero necessari, anche se non sono molto efficaci.
Mike Dunlavey,

6
@MikeDunlavey: di solito, i colli di bottiglia che incontro sono causati da I / O, rete, prestazioni della cache della CPU, throughput del bus e comunicazione (inefficiente) tra processi. Ai tempi, la CPU era quasi inevitabilmente il collo di bottiglia; questo non è più vero.
martedì

1

È un po 'come chiedere perché l'inglese è la lingua dominante negli Stati Uniti. Perché non spagnolo o francese? Controllarono più territorio degli Stati Uniti che le colonie inglesi. Perché non olandese? La prima capitale degli Stati Uniti era in una ex colonia olandese. Non sono sicuro che ci possa essere una "risposta" a questo.

Tuttavia, la cronologia "Cronologia linguaggi informatici" ( http://www.levenez.com/lang/ ) fornisce tutte le risposte possibili.


6
Perché la Gran Bretagna dal 1600-1880 fu all'incirca la principale potenza industriale e finanziaria del mondo, seguita dagli Stati Uniti dal 1880 ad oggi (<- discutibile). È diventata la lingua degli affari internazionali ed è parlata fluentemente da oltre 2 miliardi di persone in tutto il mondo. Quello e nessuno vuole parlare spagnolo o olandese :)
maple_shaft

6
@maple_shaft - "nessuno vuole parlare spagnolo" ?! ... sai anche in quanti paesi si parla? en.wikipedia.org/wiki/Spanish_language
Rook

12
@ S.Lott: Intendi la parte in cui l'Impero britannico era il più grande impero mai esistito e occupava il 25% dell'intera superficie del mondo? Quel tipo di "non potente"?
DeadMG,

3
@DeadMG: non sto parlando del mondo. Sto parlando degli Stati Uniti nel 1700, dove i francesi avevano gli inglesi circondati in una piccola area lungo la costa. Sto parlando del fatto che gli inglesi hanno perso impegni militari solo in questo teatro. I francesi controllarono chiaramente gran parte di ciò che divenne lui negli Stati Uniti. Ancora. Gli Stati Uniti hanno finito per parlare inglese. Non francese. La stessa analisi si applica a C. È una storia complessa con molti fattori influenti. Non c'è una risposta banale e banale.
S. Lott,

4
@ S.Lott Il francese non ha vinto ogni singolo incontro. Solo guardando il Nord America hanno vinto la maggioranza; ma la perdita di 4 delle 5 principali battaglie in NA durante il 1559/60 provocò una schiacciante sconfitta in teatro. Le catture di forti Ticonderoga e Niagara, Le pianure di Abramo e la battaglia di Restigouche furono tutte vittorie britanniche. Riducendo l'offerta / rinforzo, quest'ultima rese irrilevante la vittoria francese a Sainte-Foy.
Dan Neely,

0

Se crei un nuovo linguaggio di programmazione, avere una sintassi simile ai più diffusi linguaggi esistenti semplifica l'apprendimento per i tuoi nuovi utenti. Soprattutto se molti concetti sono simili tra le lingue.

Inoltre penso che la sintassi in stile C sia relativamente facile da leggere. Per confrontare con Pascal, l'uso dei simboli "{" e "}" per i blocchi di codice è più leggibile di "inizio" e "fine", che sono otticamente molto simili agli identificatori. Python è ancora più leggibile, ma l'inclusione 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 nella sintassi in stile C, è meno oscura.

Sono sicuro che molte persone non sarebbero d'accordo con il secondo paragrafo, perché ognuno ha la propria lingua preferita, 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 fatto qualche buon decisioni.


-1

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 nell'oscurità e la loro influenza è più difficile da rintracciare a livello di superficie, cioè sintassi.

L'influenza di C proviene da molte fonti: è di basso livello, diffusa, sostenuta sia negli ambienti Unix che Microsoft. È anche la sopravvivenza del problema più adatto: è facile vedere la sintassi concisa simile al C ha avuto più attrattiva della sintassi verbale derivata dall'Algolo di Pascal e altri concorrenti di C negli anni '70 e '80. Quindi è stato ampiamente adottato dalle lingue che lo hanno seguito.

Con l'attuale crescita di importanza della programmazione multithread e dei linguaggi funzionali particolarmente adatti ad esso, direi che vedremo crescere la loro influenza in futuro. Caso in questione: Python, che ha persino creato quell'elenco nel post delle domande.

Una bella visione cronologica della storia della lingua su cui riflettere


Hai sbagliato. Sia PASCAL che C sono discendenti di ALGOL.
Ingo,

È vero, ma Algol stesso è il discendente di Fortran e ha scelto alcuni dei costrutti a cui mi riferivo (programma, fine, subroutine rispetto alle parentesi di c). Tuttavia, quello che avevo in mente era in realtà una sintassi simile all'Algol. Modificato.
scrwtp,

la sintassi concisa simile a C aveva più attrattiva della sintassi verbale dell'Algol di Pascal e di altri concorrenti di C negli anni '70 e '80 +1. iniziano i programmatori sono esseri umani troppo finiscono cominciano chi credeva che è conveniente per mappare i segni di punteggiatura a parole come iniziare-end perso la loro battaglia per parentesi graffe fine della storia
moscerino

Non vedo prove che la sintassi C sia meno oscura, tranne nel senso che la maggior parte degli sviluppatori conosce C o una sorta di linguaggio correlato a C, e quindi sembra più familiare. AFAICT, C ha conquistato Pascal a causa della sua struttura e del fatto che le implementazioni non dovevano rotolare il proprio collegamento, non la sintassi.
David Thornley,

@ David-Da quello che ricordo, uno dei motivi per cui C ha vinto su altre lingue è stato la relativa facilità di accesso alla memoria in C (es. Puntatori). So che sono a portata di mano adesso, ma quando 1 KB di RAM era un sacco di memoria, questa era una funzionalità molto potente del linguaggio. Conosco altre lingue che forniscono puntatore come funzionalità, ma nessuna facilmente come C.
Dunk,

-3

La maggior parte delle lingue che elenchi non hanno praticamente nulla a che fare con C, a parte somiglianze sintattiche irrilevanti. Gli unici due derivati ​​C effettivi sono Objective-C e C ++.


Se non stiamo prendendo in considerazione la sintassi, le uniche differenze tra le lingue sono la disponibilità di costrutti di linguaggio generale (loop, condizionali, variabili, astrazioni di questi come classi e chiusure, ecc ...) e che tutti equivalgono al comportamento della macchina codice. 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.
maple_shaft

2
Non dovresti pensare a una lingua come alla funzionalità che ha, ma a come comunica il comportamento dell'applicazione. Il codice sorgente è il livello più basso di documentazione e uno scrive il codice sorgente per le persone e NON per le macchine . Se scrivessimo il codice rigorosamente per le macchine, codificheremmo tutti in assembly.
maple_shaft

1
@maple_shaft: Esatto! In un'intervista 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".
Treb,

1
@maple_shaft: la sintassi è irrilevante per quanto riguarda la comunicazione con le persone . Se sostituissi una parola inglese con una diversa ortografia, l'inglese sarebbe comunque la stessa lingua. La forma sintattica è irrilevante, ciò che è comunicativo è la semantica della lingua.
DeadMG

3
@DeadMG: Ma la domanda riguarda la sintassi. Puoi considerare le somiglianze sintattiche come irrilevanti, ma la persona che pone la domanda vuole sapere perché esistono queste somiglianze irrilevanti .
Nicol Bolas,
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.