Hvorfor er flere populære programmeringssprog påvirket af C? [lukket]

Kommentarer

  • At have c-lignende syntaks er ikke det samme som at være baseret på c.
  • Derudover er TIOBE er et uønsket indeks.
  • Kan jeg snarere spørge, hvorfor programmeringssprog baseret på C er mere populære?
  • Fordi C er en efterkommer af ALGOL, og ALGOL skal blokere tvingende labguages hvad Ab raham er for kristne, jøder og muslimer.
  • Dine citater om PHP og Python siger ikke ' at de ' er påvirket af C – og mens PHP er, synes Python ikke ' det virker ikke.

Svar

Med stigningen af UNIX i 1970erne blev dets standardsystemsprogrammeringssprog C hurtigt lingua franca i programmeringsverdenen. I et stykke tid var C praktisk talt obligatorisk for enhver programmør. Som sådan er det faktum, at C har påvirket næsten ethvert programmeringssprog, der fulgte efter det på en eller anden måde, næppe overraskende af to grunde:

  • Når man designer et nyt sprog, giver det mening at basere sin syntaks, hvor det er muligt, på et populært eksisterende sprog, der kan antages almindelig viden.
  • Et nyt sprog vil sandsynligvis lykkes, hvis læringskurven er lav og en syntaks, der ligner et allerede kendt sprog er generelt lettere at lære (medmindre den opfører sig radikalt anderledes på trods af de tilsyneladende ligheder). Så sprog, der låner syntaks fra C, får generelt trækkraft hurtigere end sprog, der ikke gør det.

Men andre sprog eksisterede, og de gør det stadig, nogle af dem går endda forud for C – der er LISP-familien (CL, Clojure og Scheme er de mest populære moderne dialekter), ML-familien (med flere moderne dialekter), der er en hel hær af BASIC-dialekter (VB.NET og VBA er moderne implementeringer), der er Pascal og dets slægtninge (Delphi er den mest kendte) og mange “oddball” -sprog, der tog indflydelse fra mange andre sprog og opfandt et par ting selv; eksempler inkluderer Go, Python, Lua, Haskell (og dens forgænger, Miranda), Prolog og Erlang. Mens ingen af disse sprog (undtagen Python) er i din top 10, har mange af dem en stabil brugerbase og et aktivt samfund; de forsvinder bestemt ikke.

Det skal også bemærkes, at mængden af C-indflydelse på disse sprog adskiller sig vildt og spænder fra de næsten 100% C-kompatible sprog C ++ og Objective-C, op til Python (som bevidst opgiver mange af Cs syntaksfunktioner). Og det er kun syntaksen: med hensyn til semantik har de fleste sprog på denne liste ikke meget til fælles med C. Det overvældende flertal har hukommelsesadministration indbygget i sproget, og følgelig kopier semantik, argumenter passerer, osv. er meget forskellige. JavaScript har for eksempel stærke semantiske påvirkninger fra Scheme, mens dens syntaks var designet til at ligne Java (som igen baserer sin bit-and-pieces-syntaks på C, men ikke dens semantik). Andre forskelle (med undtagelse af C ++ og Objective-C, som for det meste er bagudkompatible med C) inkluderer fejlhåndtering, omfangsregler, standardbiblioteker, ekstern kodeinddragelse (#include), og det faktum, at mange af disse sprog er “virtualiserede”, dvs. de kører på en tolk, JIT-kompilator eller en virtuel maskine.

Python har forresten en vis C-indflydelse, men det er bestemt ikke “baseret på” C. Både syntaks og semantik adskiller sig ret radikalt fra C, og det er designet. Python låner kun funktioner fra C, hvor andre alternativer er lige så gode (som i “Zen of Python” – skriv import this i en pythontolker).

Med hensyn til fremtiden for programmering; forudsigelser varierer. Indflydelsen fra C forsvinder ikke, men den seneste udvikling inden for hardware (multi-core maskiner bliver almindelige, kraftige GPUer, CPUen ophører med at være den typiske ydeevne flaskehals, hurtige pålidelige netværksforbindelser osv.) Kræver radikalt forskellige tilgange til programmering generelt.Enhver, der nogensinde har skrevet en multitrådet distribueret applikation på et tvingende sprog, kan fortælle, at det er utroligt hårdt, mens sprog som Haskell har funktioner, der fjerner de fleste af de typiske problemer og tilbyder en mere abstrakt og mere struktureret tilgang til distribueret, samtidig og parallel behandling (renhed er et vigtigt begreb i denne sammenhæng). Nyere programmeringssprog (f.eks. C # eller D) indeholder allerede mange funktioner, der understøtter et sådant udtryk. Under alle omstændigheder har hverken den stærke indvirkning C har haft på programmering eller eksistensen af ikke-C-lignende sprog forsvinder.

Kommentarer

  • Dejligt svar, men " CPU ophører med at være den typiske ydeevne flaskehals "? Efter min erfaring er der mange ydeevne problemer – CPU, IO, du hedder det. Hvis ikke, ville det ikke være nødvendigt med profiler, selvom de ikke er meget effektiv.
  • @MikeDunlavey: De flaskehalse, jeg støder på, er normalt forårsaget af I / O, n etworking, CPU-cache-ydeevne, busgennemstrømning og (ineffektiv) interprocess-kommunikation. Tilbage i dagene var CPU næsten uundgåeligt flaskehalsen; dette er bare ikke ' t sandt længere.

Svar

Dette er meget som at spørge, hvorfor engelsk er det dominerende sprog i USA. Hvorfor ikke spansk eller fransk? De kontrollerede mere af det amerikanske territorium end de engelske kolonier. Hvorfor ikke hollandsk? Den første amerikanske hovedstad var i en tidligere hollandsk koloni. Jeg er ikke sikker på, at der muligvis kan være et “svar” på dette.

Tidslinjen “Computersprogshistorie” ( http://www.levenez.com/lang/ ) giver alt det svar, der muligvis kan være.

Kommentarer

  • Fordi Storbritannien fra 1600 -1880 var nogenlunde verdens førende industrielle og finansielle kraftcenter efterfulgt af USA fra 1880-nu (< – debatable). Det blev sprog for international forretning og er talt flydende af godt 2 milliarder mennesker over hele verden. Det og ingen vil tale spansk eller hollandsk 🙂
  • @maple_shaft – " ingen vil tale spansk "?! … ved du endda i hvor mange lande det tales? da.wikipedia.org/wiki/Spanish_language
  • @ S.Lott: Du mener den del, hvor det britiske imperium var det største imperium nogensinde, og besatte 25% af entet ire verdens ' overflade? Den slags " ikke kraftfuld "?
  • @DeadMG: I ' jeg taler ikke om verden. Jeg ' taler om USA i 1700 ' s, hvor franskmændene fik briterne omringet i et lille område langs kysten. Jeg ' taler kun om, at briterne mister militære engagementer i dette teater. Franskmændene styrede klart det meste af det, der blev han USA. Endnu. USA afviklede at tale engelsk. Ikke fransk. Den samme analyse gælder for C. Det ' er en kompleks historie med mange påvirkningsfaktorer. Der er ' intet trivielt, pat svar.
  • @ S.Lott Franskmændene vandt ikke ' t hver eneste komme ud for. Bare ved at se på Nordamerika vandt de et flertal; men at miste 4 af de 5 største slag i NA i løbet af 1559/60 resulterede i et knusende nederlag i teatret. Fangsterne af Forts Ticonderoga og Niagara, Abrahams sletter og slaget ved Restigouche var alle britiske sejre. Ved at afskære levering / forstærkning gjorde sidstnævnte den franske sejr ved Sainte-Foy irrelevant.

Svar

Hvis du laver et nyt programmeringssprog, hvis du har en syntaks svarende til populære eksisterende sprog, bliver det lettere at lære for dine nye brugere. Især hvis mange begreber er ens mellem sprog.

Jeg synes også, at syntaks i C-stil er relativt let at læse. For at sammenligne med Pascal er brugen af symbolerne “{” og “}” til kodeblokke mere læselig end “start” og “slut”, som optisk ligner identifikatorer. Python er endnu mere læselig, men inkludering af mellemrum i syntaks åbner et nyt sæt problemer med redigering. Et andet eksempel: Lisp og JavaScript deler et par ideer, men når den samme ting er skrevet i syntaks i C-stil, er den mindre uklar.

Jeg er sikker på, at mange mennesker er uenige i andet afsnit, fordi alle har deres eget yndlingssprog, men jeg synes, at populariteten af syntaks i C-stil til dels er et historisk tilfælde, men delvis viser det også, at forfattere af C tog nogle få gode beslutninger.

Svar

Programmeringssprog udvikler sig over tid ligesom naturlige sprog, hvor nogle ældre sprog påvirker denne udvikling på en stærkere måde end andre , mens andre falmer ud i uklarhed, og deres indflydelse er sværere at spore på overfladeniveau, det vil sige syntaks.

Cs indflydelse kommer fra mange kilder – det er lavt niveau, udbredt, havde opbakning til både Unix- og Microsoft-cirkler. Det er også overlevelsen af det stærkeste spørgsmål – det er let at se kortere C-lignende syntaks havde mere appel end den detaljerede Algol-afledte syntaks for Pascal og andre konkurrenter fra C i 1970erne og 1980erne. Derfor blev det bredt adopteret af sprog, der fulgte efter det.

Med den nuværende vækst af vigtigheden af multitrådet programmering og funktionelle sprog, der er særligt velegnet til det, vil jeg sige, at vi vil se deres indflydelse vokse i fremtiden. Eksempel: Python, som endda lavede denne liste i spørgsmålsposten.

En flot tidslinjevisning af sproghistorie at tænke over

Kommentarer

  • Du fik det forkert. Både PASCAL og C er ALGOL-efterkommere.
  • Sandt, men Algol selv er Fortran-efterkommer og valgte nogle af de konstruktioner, jeg henviste til der (program, slut, underrutine sammenlignet med c ' s parenteser). Stadig hvad jeg havde i tankerne var faktisk Algol-lignende syntaks. Redigeret.
  • kortfattet C-lignende syntaks havde mere appel end verbose Algol-afledt syntaks for Pascal og andre konkurrenter af C i 70 ' s og 80 ' s +1 til det. start programmører er også mennesker slut start dem, der troede at det ' er praktisk at kortlægge tegnsætningstegn til ord som start-end mistede deres kamp for krøllede seler slutningen af historien
  • Jeg ser ingen beviser at C-syntaks er mindre uklar, bortset fra i den forstand at de fleste udviklere kender C eller en slags C-relateret sprog, og så det ser mere velkendt ud. AFAICT, C vandt Pascal på grund af dets struktur og det faktum, at implementeringer ikke ' ikke skulle rulle deres egen sammenkædning, ikke syntaks.
  • @ David- Fra hvad jeg husker, var en af grundene til, at C vandt ud over andre sprog, på grund af den relative let adgang til hukommelse i C (dvs. pegepinde). Jeg ved, at de er bagud på nu, men da 1 KB RAM var meget hukommelse, var det et meget kraftfuldt træk ved sproget. Jeg kender andre sprog, der leverede markørlignende funktioner, men ingen så let som C.

Svar

Det meste af sprog, du viser, har stort set intet at gøre med C bortset fra irrelevante syntaktiske ligheder. De eneste to egentlige C-derivater er Objective-C og C ++.

Kommentarer

  • Hvis vi ikke overvejer syntaks, er de eneste forskelle mellem sprog er tilgængeligheden af generelle sprogkonstruktioner (sløjfer, betingelser, variabler, abstraktioner af disse som klasser og lukninger osv.), og at de alle svarer til maskinkodens opførsel. Alle sprog på lavt niveau ligner hinanden, og alle sprog på højt niveau ligner hinanden meget på det tidspunkt.
  • Du bør ikke ' ikke tænke på en sprog som hvilken funktionalitet det har, men hvordan det kommunikerer applikationsadfærd. Din kildekode er dit laveste dokumentationsniveau, og man skriver kildekode til personer og IKKE til maskiner . Hvis vi skrev kode strengt til maskiner, ville vi alle kodes i samling.
  • @maple_shaft: Helt rigtigt! Jeg blev bedt om i et interview at forklare forskellen mellem maskinsprog (assembler) og programmeringssprog. Mit svar var: " Maskinsprog er for maskiner, programmeringssprog er for programmører. "
  • @maple_shaft: Syntaksen er irrelevant for den ' s kommunikation til mennesker . Hvis jeg erstattede et engelsk ord med en anden stavemåde, ville engelsk stadig være det samme sprog. Den syntaktiske form er irrelevant, hvad ' s kommunikative er sprogsemantikken.
  • @DeadMG: Men spørgsmålet er om syntaks. Du kan betragte de syntaktiske ligheder som irrelevante, men den person, der stiller spørgsmålet, vil vide hvorfor disse irrelevante ligheder findes .

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *