Varför påverkas flera populära programmeringsspråk av C? [stängd]

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Kommentarer

  • Att ha c som syntax är inte detsamma som att vara baserat på c.
  • Dessutom TIOBE är ett skräpindex.
  • Snarare kan jag fråga varför programmeringsspråk baserat på C är mer populära?
  • Eftersom C är en ättling till ALGOL, och ALGOL är att block-scope tvingande labguages vad Ab raham är för kristna, judar och muslimer.
  • Dina citat om PHP och Python säger ' t säger faktiskt att de ' påverkas av C – och medan PHP är så verkar Python inte vara '.

Svar

Med ökningen av UNIX på 1970-talet blev dess standardsystemprogrammeringsspråk C snabbt lingua franca i programmeringsvärlden. Under ett tag var C praktiskt taget obligatoriskt för varje programmerare. Det faktum att C har påverkat nästan alla programmeringsspråk som kom efter det på ett eller annat sätt är knappast förvånande av två skäl:

  • När man utformar ett nytt språk är det vettigt att basera sin syntax, där det är möjligt, på ett populärt befintligt språk som kan antas allmänt känt.
  • Ett nytt språk är mer sannolikt att lyckas om inlärningskurvan är låg, och en syntax som liknar ett redan känt språk är i allmänhet lättare att lära sig (såvida det inte fungerar radikalt annorlunda trots de uppenbara likheterna). Så språk som lånar syntax från C får i allmänhet dragkraft snabbare än de som inte gör det.

Men andra språk fanns, och det gör de fortfarande, några av dem till och med före C – det finns LISP-familjen (CL, Clojure och Scheme är de mest populära moderna dialekterna), ML-familjen (med flera moderna dialekter), det finns en hel armé av BASIC-dialekter (VB.NET och VBA är moderna implementeringar), där finns Pascal och dess släktingar (Delphi är den mest kända) och många ”oddball” -språk som tog influenser från många andra språk och uppfann några saker själva; exempel inkluderar Go, Python, Lua, Haskell (och dess föregångare, Miranda), Prolog och Erlang. Även om inget av dessa språk (förutom Python) är i topp 10, har många av dem en stabil användarbas och en aktiv grupp; de försvinner verkligen inte.

Det bör också noteras att mängden C-inflytande på dessa språk skiljer sig väldigt mycket, allt från de nästan 100% C-kompatibla språken C ++ och Objective-C, Python (som avsiktligt överger många av C: s syntaxfunktioner). Och det är bara syntaxen: när det gäller semantik har de flesta språken på listan inte mycket gemensamt med C. Den överväldigande majoriteten har minneshantering inbyggd i språket, och följaktligen kopierar semantik, argument passerar, etc. är mycket olika. JavaScript har till exempel starka semantiska influenser från Scheme, medan dess syntax var utformad för att likna Java (som i sin tur baserar sin bit-och-bit-syntax på C, men inte dess semantik). Andra skillnader (med undantag för C ++ och Objective-C, som oftast är bakåtkompatibla med C) inkluderar felhantering, omfattningsregler, standardbibliotek, inkludering av extern kod (#include), och det faktum att många av dessa språk är ”virtualiserade”, det vill säga de körs på en tolk, JIT-kompilator eller en virtuell maskin.

Python har förresten viss C-inflytande, men den är förvisso inte ”baserad på” C. Både syntax och semantik skiljer sig ganska radikalt från C, och detta är designat. Python lånar bara funktioner från C där andra alternativ är lika ”bra” (enligt ”Zen of Python” – typ import this i en pythontolk).

När det gäller framtidens programmering; förutsägelser varierar. C: s inflytande försvinner inte, men den senaste utvecklingen av hårdvara (maskiner med flera kärnor blir vanliga, kraftfulla GPU: er, processorn upphör att vara den typiska prestandaflaskhalsen, snabba tillförlitliga nätverksanslutningar etc.) kräver radikalt olika tillvägagångssätt till programmering i allmänhet.Alla som någonsin har skrivit en multitrådad distribuerad applikation på ett tvingande språk kan berätta att det är otroligt svårt, medan språk som Haskell har funktioner som tar bort de flesta typiska problem och erbjuder en mer abstrakt och mer strukturerad inställning till distribuerad, samtidig och parallell bearbetning (renhet är ett viktigt begrepp i detta sammanhang). Nyare programmeringsspråk (t.ex. C # eller D) innehåller redan många funktioner för att stödja ett sådant uttryck. I vilket fall som helst har varken den starka inverkan C har haft på programmering icke-C-liknande språk försvinner.

Kommentarer

  • Trevligt svar, men " CPU upphör att vara den typiska flaskhalsen för prestanda "? Enligt min upplevelse finns prestationsproblem i överflöd – CPU, IO, du heter det. Om inte, skulle det inte behövas profiler, även om de inte är mycket effektiv.
  • @MikeDunlavey: Vanligtvis orsakas de flaskhalsar jag stöter på av I / O, n etworking, CPU-cache-prestanda, bussgenomströmning och (ineffektiv) interprocess-kommunikation. Förr i tiden var CPU nästan oundvikligen flaskhalsen; det här är inte längre '.

Svar

Det här är ungefär som att fråga varför engelska är det dominerande språket i USA. Varför inte spanska eller franska? De kontrollerade mer av USA: s territorium än de engelska kolonierna. Varför inte holländska? Den första amerikanska huvudstaden var i en tidigare holländsk koloni. Jag är inte säker på att det kan finnas ett ”svar” på detta.

Men tidslinjen ”Datorspråkhistoria” ( http://www.levenez.com/lang/ ) ger allt svar som kan finnas.

Kommentarer

  • Eftersom Storbritannien från 1600 -1880 var ungefär världens främsta industriella och finansiella kraftpaket, följt av USA från 1880-nutid (< –debatable). Det blev språket för internationella affärer och är talas flytande av över 2 miljarder människor över hela världen. Det och ingen vill prata spanska eller holländska 🙂
  • @maple_shaft – " ingen vill prata spanska "?! … vet du ens i hur många länder det talas? sv.wikipedia.org/wiki/Spanish_language
  • @ S.Lott: Du menar den del där det brittiska imperiet var det största imperiet någonsin och ockuperade 25% av entet ire world ' yta? Den typen av " inte kraftfull "?
  • @DeadMG: I ' jag pratar inte om världen. Jag ' jag talar om USA 1700 ' där fransmännen lät britterna fångas in i ett litet område längs kusten. Jag ' jag talar om att britterna bara tappar militärengagemang i denna teater. Fransmännen kontrollerade tydligt det mesta av vad som blev USA. Än. USA avvecklade att prata engelska. Inte franska. Samma analys gäller för C. Det ' är en komplex historia med många påverkande faktorer. Det finns ' inget trivialt, pat-svar.
  • @ S.Lott Franskarna vann inte ' t varje råka ut för. Bara när man tittade på Nordamerika vann de en majoritet; men att förlora 4 av de 5 stora striderna i NA under 1559/60 resulterade i ett krossande nederlag i teatern. Fångsterna av Forts Ticonderoga och Niagara, Abrahams slätter och slaget vid Restigouche var alla brittiska segrar. Genom att avbryta utbudet / förstärkningen gjorde den senare den franska segern vid Sainte-Foy irrelevant.

Svar

Om du skapar ett nytt programmeringsspråk. Att ha en syntax som liknar populära befintliga språk gör det lättare för dina nya användare att lära sig. Speciellt om många begrepp liknar språk.

Jag tycker också att syntax i C-stil är relativt lättläst. För att jämföra med Pascal är användning av symbolerna ”{” och ”}” för kodblock mer läsbar än ”börja” och ”slut”, som optiskt sett liknar identifierare. Python är ännu mer läsbar, men att inkludera mellanslag i syntax öppnar en ny uppsättning problem med redigering. Ett annat exempel: Lisp och JavaScript delar några idéer, men när samma sak skrivs i C-stil-syntax är den mindre obskyr.

Jag är säker på att många människor inte håller med andra stycket, eftersom alla har sitt eget favoritspråk, men jag tror att populariteten för C-stil-syntax delvis är en historisk slump, men delvis visar det också att författare till C tog några bra beslut.

Svar

Programmeringsspråk utvecklas över tiden precis som naturliga språk, med vissa äldre språk som påverkar utvecklingen på ett starkare sätt än andra , medan andra bleknar in i dunkelhet och deras inflytande är svårare att spåra på ytnivån, det vill säga syntax.

C: s inflytande kommer från många källor – det är lågt, utbrett, hade stöd i både Unix- och Microsoft-cirklar. Det är också överlevnaden för den starkaste frågan – det är lätt att se kortare C-liknande syntax hade mer tilltalande än den detaljerade Algol-härledda syntaxen för Pascal och andra konkurrenter i C på 1970- och 1980-talet. Därför antogs det allmänt av språk som kom efter det.

Med den nuvarande ökningen av betydelsen av flertrådad programmering och funktionella språk som är särskilt väl lämpade för det, skulle jag säga att vi kommer att se deras inflytande växa i framtiden. Exempel: Python, som till och med tog listan i frågan.

En fin tidslinjevy över språkhistorik att fundera över

Kommentarer

  • Du har fel. Både PASCAL och C är ALGOL-ättlingar.
  • Sant, men Algol själv är Fortran-ättling och valde några av de konstruktioner som jag hänvisade till där (program, slut, underrutin jämfört med c ' s parenteser). Ändå var det jag tänkte på i själva verket Algol-liknande syntax. Redigerad.
  • kortare C-liknande syntax hade mer överklagande än verbol-genererad syntax för Pascal och andra konkurrenter av C i 70 ' och 80 ' s +1 för det. börja programmerare är också människor slut börja de som trodde att det ' är bekvämt att kartlägga skiljetecken till ord som start-end förlorade sin kamp mot lockiga hängslen slutet på berättelsen
  • Jag ser inga bevis att C-syntax är mindre dunkel, förutom i den meningen att de flesta utvecklare känner till C eller något slags C-relaterat språk, och så det ser mer bekant ut. AFAICT, C vann Pascal på grund av dess struktur och det faktum att implementeringar inte ' inte behövde rulla sin egen länk, inte syntax.
  • @ David- Enligt vad jag minns var en av anledningarna till att C vann andra språk på grund av den relativa lättheten att komma åt minne i C (dvs. pekare). Jag vet att de är på väg nu, men tillbaka när 1 kB RAM var mycket minne, var det ett mycket kraftfullt inslag i språket. Jag vet att andra språk gav pekare som funktioner, men inga lika lätt som C.

Svar

De flesta av språk du listar har praktiskt taget inget att göra med C förutom irrelevanta syntaktiska likheter. De enda två faktiska C-derivaten är Objective-C och C ++.

Kommentarer

  • Om vi inte överväger syntax är de enda skillnaderna mellan alla språk är tillgängligheten av allmänna språkkonstruktioner (loopar, villkor, variabler, abstraktioner av dessa som klasser och stängningar, etc …) och att de alla motsvarar maskinkodens beteende. Alla språk på låg nivå liknar varandra och alla språk på hög nivå liknar varandra vid den punkten.
  • Du bör inte ' tänka på en språk som vilken funktionalitet det har, men hur det kommunicerar applikationsbeteende. Din källkod är din lägsta dokumentationsnivå och man skriver källkod för personer och INTE för maskiner . Om vi skrev kod strikt för maskiner skulle vi alla koda i montering.
  • @maple_shaft: Helt rätt! Jag ombads i en intervju att förklara skillnaden mellan maskinspråk (assembler) och programmeringsspråk. Mitt svar var: " Maskinspråk är för maskiner, programmeringsspråk är för programmerare. "
  • @maple_shaft: Syntaxen är irrelevant när det gäller ' s kommunikation till människor . Om jag ersatte ett engelskt ord med en annan stavning skulle engelska fortfarande vara samma språk. Den syntaktiska formen är irrelevant, vad ' s kommunikativa är språksemantiken.
  • @DeadMG: Men frågan handlar om om syntax. Du kan betrakta de syntaktiska likheterna som irrelevanta, men den som ställer frågan vill veta varför dessa irrelevanta likheter finns .

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *