Hvorfor er flere populære programmeringsspråk påvirket av C? [lukket]

Kommentarer

  • Å ha c som syntaks er ikke det samme som å være basert på c.
  • I tillegg TIOBE er en søppelindeks.
  • Snarere, kan jeg spørre hvorfor programmeringsspråk basert på C er mer populære?
  • Fordi C er en etterkommer av ALGOL, og ALGOL er å blokkere tvingende labguages hva Ab raham er for kristne, jøder og muslimer.
  • Sitatene dine om PHP og Python sier ikke ' de ' er påvirket av C – og mens PHP er, ser Python ikke ut '.

Svar

Med fremveksten av UNIX på 1970-tallet ble dets standard systemprogrammeringsspråk C raskt lingua franca i programmeringsverdenen. I en god stund var C praktisk talt obligatorisk for alle programmerere. Det faktum at C har påvirket nesten alle programmeringsspråk som fulgte etter på en eller annen måte, er nesten ikke overraskende av to grunner:

  • Når du designer et nytt språk, er det fornuftig å baser syntaksen, der det er mulig, på et populært eksisterende språk som kan antas allmennkunnskap.
  • Et nytt språk er mer sannsynlig å lykkes hvis læringskurven er grunne, og en syntaks som ligner et allerede kjent språk er generelt lettere å lære (med mindre det oppfører seg radikalt annerledes til tross for tilsynelatende likheter). Så språk som låner syntaks fra C, får vanligvis trekkraft raskere enn de som ikke har det.

Men andre språk eksisterte, og de gjør det fortsatt, noen av dem til og med forut for C – det er LISP-familien (CL, Clojure og Scheme er de mest populære moderne dialektene), ML-familien (med flere moderne dialekter), det er en hel hær av BASIC-dialekter (VB.NET og VBA er moderne implementeringer), der er Pascal og dets slektninger (Delphi er den mest kjente) og mange «oddball» -språk som tok innflytelse fra mange andre språk og oppfant et par ting selv; eksempler inkluderer Go, Python, Lua, Haskell (og dens forgjenger, Miranda), Prolog og Erlang. Selv om ingen av disse språkene (unntatt Python) er i topp 10, har mange av dem en stabil brukerbase og et aktivt fellesskap. De vil absolutt ikke forsvinne.

Det bør også bemerkes at mengden C-innflytelse i disse språkene er veldig forskjellig, alt fra de nesten 100% C-kompatible språkene C ++ og Objective-C, opp til Python (som bevisst forlater mange av Cs syntaksfunksjoner). Og det er bare syntaksen: når det gjelder semantikk, har de fleste språkene på den listen ikke mye til felles med C. Det overveldende flertallet har minnehåndtering innebygd i språket, og følgelig kopier semantikk, argumentoverføring, osv., er veldig forskjellige. JavaScript har for eksempel sterke semantiske påvirkninger fra Scheme, mens syntaksen ble designet for å ligne Java (som igjen baserer sin bit-and-pieces syntaks på C, men ikke dens semantikk). Andre forskjeller (med unntak av C ++ og Objective-C, som stort sett er bakoverkompatible med C) inkluderer feilhåndtering, omfangsregler, standardbiblioteker, inkludering av ekstern kode (#include), og det faktum at mange av disse språkene er «virtualiserte», det vil si at de kjører på en tolk, JIT-kompilator eller en virtuell maskin.

Python har forresten noen C-innflytelse, men det er absolutt ikke «basert på» C. Både syntaks og semantikk skiller seg ganske radikalt fra C, og dette er etter design. Python låner bare funksjoner fra C der andre alternativer er like «gode» (i henhold til «Zen of Python» – skriv import this i en pythontolker).

Når det gjelder fremtiden for programmering; spådommer varierer. Innflytelsen fra C forsvinner ikke, men den siste utviklingen innen maskinvare (flerkjernemaskiner blir vanlig, kraftige GPUer, CPU slutter å være den typiske ytelsesflaskehalsen, raske pålitelige nettverkstilkoblinger osv.) Krever radikalt forskjellige tilnærminger til programmering generelt.Alle som noen gang har skrevet et distribuert applikasjon med flere tråder på et tvingende språk, kan fortelle at det er utrolig vanskelig, mens språk som Haskell har funksjoner som fjerner de fleste typiske problemer og gir en mer abstrakt og mer strukturert tilnærming til distribuert, samtidig og parallell prosessering (renhet er et viktig konsept i denne sammenhengen). Nyere programmeringsspråk (f.eks. C # eller D) inneholder allerede mange funksjoner som støtter et slikt idiom. Uansett har verken den sterke innvirkningen C har gjort på programmering, eller eksistensen av ikke-C-lignende språk forsvinner.

Kommentarer

  • Fint svar, men " CPU slutter å være den typiske ytelsesflaskehalsen "? Etter min erfaring er det mange ytelsesproblemer – CPU, IO, du heter det. Hvis ikke, ville det ikke være behov for profilere, selv om de ikke er det veldig effektiv.
  • @MikeDunlavey: Vanligvis er flaskehalsene jeg møter forårsaket av I / O, n etworking, CPU cache ytelse, buss gjennomstrømning og (ineffektiv) interprosess kommunikasjon. Tilbake i dagene var CPU nesten uunngåelig flaskehalsen; dette er ikke lenger '.

Svar

Dette er mye som å spørre hvorfor engelsk er det dominerende språket i USA. Hvorfor ikke spansk eller fransk? De kontrollerte mer av USAs territorium enn de engelske koloniene. Hvorfor ikke nederlandsk? Den første amerikanske hovedstaden var i en tidligere nederlandsk koloni. Jeg er ikke sikker på at det muligens kan være et «svar» på dette.

Tidslinjen «Computer Languages History» ( http://www.levenez.com/lang/ ) gir alt svaret det kan være mulig.

Kommentarer

  • Fordi Storbritannia fra 1600 -1880 var omtrent verdens viktigste industrielle og økonomiske kraftkraft, etterfulgt av USA fra 1880-nåtid (< –debatable). Det ble språket i internasjonal virksomhet og er snakket flytende av godt over 2 milliarder mennesker over hele verden. Det og ingen vil snakke spansk eller nederlandsk 🙂
  • @maple_shaft – " ingen vil snakke spansk "?! … vet du til og med i hvor mange land det blir talt? no.wikipedia.org/wiki/Spanish_language
  • @ S.Lott: Du mener den delen der det britiske imperiet var det største imperiet noensinne, og okkuperte 25% av entet ire world ' s overflate? Den slags " ikke kraftig "?
  • @DeadMG: I ' jeg snakker ikke om verden. Jeg ' snakker om USA i 1700 ' s der franskmennene hadde britene hemmed i et lite område langs kysten. Jeg ' snakker om at britene bare mister militære engasjementer i dette teatret. Franskmennene styrte tydeligvis det meste av det som ble USA. Ennå. USA avviklet å snakke engelsk. Ikke fransk. Den samme analysen gjelder C. Det ' er en kompleks historie med mange påvirkningsfaktorer. Det ' er ikke noe trivielt, pat svar.
  • @ S.Lott Franskmennene vant ikke ' t hver eneste støte på. Bare så på Nord-Amerika vant de flertall; men å tape 4 av de 5 store slagene i NA i løpet av 1559/60 resulterte i et knusende nederlag i teatret. Fangstene av Forts Ticonderoga og Niagara, Abrahams sletter og slaget ved Restigouche var alle britiske seire. Ved å avskjære tilbudet / forsterkningen gjorde sistnevnte den franske seieren på Sainte-Foy irrelevant.

Svar

Hvis du lager et nytt programmeringsspråk. Å ha en syntaks som ligner på populære eksisterende språk gjør det lettere å lære for dine nye brukere. Spesielt hvis mange konsepter er like mellom språk.

Jeg tror også at syntaks i C-stil er relativt lett å lese. For å sammenligne med Pascal er bruk av symbolene «{» og «}» for kodeblokker mer leselig enn «begynn» og «slutt», som optisk ligner veldig på identifikatorer. Python er enda mer leselig, men å inkludere mellomrom i syntaksen åpner et nytt sett med problemer med redigering. Et annet eksempel: Lisp og JavaScript deler noen få ideer, men når det samme er skrevet i C-stil syntaks, er det mindre uklart.

Jeg er sikker på at mange mennesker er uenige i andre ledd, fordi alle har sitt eget favorittspråk, men jeg tror at populariteten til C-stil syntaks delvis er et historisk tilfeldighet, men delvis viser det også at forfattere av C tok noen få gode beslutninger.

Svar

Programmeringsspråk utvikler seg over tid akkurat som naturlige språk, med noen eldre språk som påvirker utviklingen på en sterkere måte enn andre , mens andre forsvinner i uklarhet og deres innflytelse er vanskeligere å spore på overflatenivå, det vil si syntaksen.

Cs innflytelse kommer fra mange kilder – den er lavt, utbredt, hadde støtte i både Unix og Microsoft sirkler. Det er også overlevelse av det sterkeste problemet – det er lett å se kortfattet C-lignende syntaks hadde mer appell enn den verbose Algol-avledede syntaksen til Pascal og andre konkurrenter fra C på 1970- og 1980-tallet. Derfor ble det adoptert av språk som kom etter det.

Med den nåværende veksten av viktigheten av flertrådet programmering og funksjonelle språk som er spesielt godt egnet for det, vil jeg si at vi vil se deres innflytelse vokse i fremtiden. Eksempel: Python, som til og med kom opp på listen i spørsmålsinnlegget.

En fin tidslinjevisning av språkhistorien å tenke på

Kommentarer

  • Du har feil. Både PASCAL og C er ALGOL-etterkommere.
  • Sant, men Algol i seg selv er etterkommer av Fortran og valgte noen av konstruksjonene jeg refererte til der (program, slutt, underrutine sammenlignet med c ' s parenteser). Likevel, det jeg hadde i tankene var faktisk Algol-lignende syntaks. Redigert.
  • kortfattet C-lignende syntaks hadde mer appell enn verbol Algol-avledet syntaks av Pascal og andre konkurrenter av C i 70 ' s og 80 ' s +1 for det. begynn programmerere er også mennesker slutt begynn de som trodde at det ' er praktisk å kartlegge tegnsettingstegn til ord som begynnelse mistet kampen mot krøllete bukseseler slutten av historien
  • Jeg ser ingen bevis at C-syntaksen er mindre uklar, bortsett fra i den forstand at de fleste utviklere kan C eller noe slags C-relatert språk, og så ser det mer kjent ut. AFAICT, C vant Pascal på grunn av strukturen, og det faktum at implementeringer ikke ' ikke måtte rulle sin egen linking, ikke syntaks.
  • @ David- Etter det jeg husker, var en av grunnene til at C vant ut andre språk på grunn av den relativt enkle tilgangen til minne i C (dvs. pekere). Jeg vet at de er nede på nå, men da 1 KB RAM var mye minne, var det en veldig kraftig funksjon i språket. Jeg vet at andre språk ga pekere som funksjoner, men ingen så lett som C.

Svar

Det meste av språk du lister opp har praktisk talt ingenting å gjøre med C bortsett fra irrelevante syntaktiske likheter. De eneste to faktiske C-derivatene er Objective-C og C ++.

Kommentarer

  • Hvis vi ikke vurderer syntaks, er de eneste forskjellene mellom alle språk er tilgjengeligheten av generelle språkkonstruksjoner (sløyfer, betingelser, variabler, abstraksjoner av disse som klasser og nedleggelser, osv …), og at de alle tilsvarer oppførselen til maskinkoden. Alle språk på lavt nivå ligner på hverandre, og alle språk på høyt nivå er veldig like hverandre på det tidspunktet.
  • Du bør ikke ' ikke tenke på en språk som hvilken funksjonalitet det har, men hvordan det kommuniserer applikasjonsatferd. Kildekoden er det laveste dokumentasjonsnivået, og man skriver kildekoden for personer og IKKE for maskiner . Hvis vi skrev kode strengt for maskiner, ville vi alle kodet i montering.
  • @maple_shaft: Ganske riktig! Jeg ble bedt om i et intervju å forklare forskjellen mellom maskinspråk (assembler) og programmeringsspråk. Svaret mitt var: " Maskinspråk er for maskiner, programmeringsspråk er for programmerere. "
  • @maple_shaft: Syntaksen er irrelevant for den ' kommunikasjon til mennesker . Hvis jeg erstattet et engelsk ord med en annen stavemåte, ville engelsk fortsatt være det samme språket. Den syntaktiske formen er irrelevant, det ' s kommunikative er språksemantikken.
  • @DeadMG: Men spørsmålet er om syntaksen. Du kan betrakte de syntaktiske likhetene som irrelevante, men den som stiller spørsmålet, vil vite hvorfor disse irrelevante likhetene eksisterer .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *