Reacties
- C-achtige syntaxis is niet hetzelfde als gebaseerd zijn op c.
- Bovendien TIOBE is een junk-index.
- Mag ik eerder vragen waarom programmeertalen op basis van C populairder zijn?
- Omdat C een afstammeling is van ALGOL en ALGOL een block-scoped is imperatieve labguages wat Ab raham is voor christenen, joden en moslims.
- Uw citaten over PHP en Python zeggen ' eigenlijk niet dat ze ' worden beïnvloed door C – en hoewel PHP dat is, lijkt Python niet ' t te zijn.
Antwoord
Met de opkomst van UNIX in de jaren 70, werd de standaard systeemprogrammeertaal C al snel de lingua franca van de programmeerwereld. C was lange tijd praktisch verplicht voor elke programmeur. Als zodanig is het feit dat C bijna elke programmeertaal die erachter kwam op de een of andere manier heeft beïnvloed, niet verrassend, en wel om twee redenen:
- Bij het ontwerpen van een nieuwe taal is het logisch om baseer de syntaxis, waar mogelijk, op een populaire bestaande taal waarvan kan worden aangenomen dat deze algemeen bekend is.
- Een nieuwe taal heeft meer kans van slagen als de leercurve oppervlakkig is, en een syntaxis die lijkt op een reeds bekende taal is over het algemeen gemakkelijker te leren (tenzij het zich radicaal anders gedraagt ondanks de schijnbare overeenkomsten). Talen die de syntaxis van C lenen, winnen over het algemeen sneller aan grip dan talen die dat niet doen.
Maar er bestonden nog andere talen, en dat doen ze nog steeds, sommige zelfs van vóór C – er is de LISP-familie (CL, Clojure en Scheme zijn de meest populaire moderne dialecten), de ML-familie (met verschillende moderne dialecten), er is een heel leger BASIC-dialecten (VB.NET en VBA zijn moderne implementaties), er is Pascal en zijn verwanten (Delphi is de bekendste) en vele “excentrieke” talen die invloeden uit vele andere talen gebruikten en zelf een paar dingen bedachten; voorbeelden zijn onder meer Go, Python, Lua, Haskell (en zijn voorganger, Miranda), Prolog en Erlang. Hoewel geen van deze talen (behalve Python) in je top 10 staat, hebben veel van hen een stabiel gebruikersbestand en een actieve gemeenschap; ze gaan zeker niet weg.
Ook moet worden opgemerkt dat de hoeveelheid C-invloed in deze talen enorm verschilt, gaande van de bijna 100% C-compatibele talen C ++ en Objective-C, tot Python (die opzettelijk veel van de syntaxisfuncties van C verlaat). En dat is alleen de syntaxis: in termen van semantiek hebben de meeste talen op die lijst niet veel gemeen met C. De overgrote meerderheid heeft geheugenbeheer ingebouwd in de taal, en dientengevolge kopiëren semantiek, argument passeren, etc., zijn heel verschillend. JavaScript heeft bijvoorbeeld sterke semantische invloeden van Scheme, terwijl de syntaxis ervan is ontworpen om op Java te lijken (dat op zijn beurt zijn bits-en-stukjes-syntaxis baseert op C, maar niet op de semantiek). Andere verschillen (met uitzondering van C ++ en Objective-C, die meestal achterwaarts compatibel zijn met C) zijn onder meer foutafhandeling, bereikregels, standaardbibliotheken, opname van externe code (#include
), en het feit dat veel van deze talen “gevirtualiseerd” zijn, dat wil zeggen dat ze draaien op een interpreter, JIT-compiler of een virtuele machine.
Python heeft trouwens enige C-invloed, maar het is zeker niet “gebaseerd op” C. Zowel de syntaxis als de semantiek verschillen nogal radicaal van C, en dit is zo ontworpen. Python leent alleen features van C waar andere alternatieven even “goed” zijn (volgens de “Zen of Python” – typ import this
in een Python-interpreter).
Wat betreft de toekomst van programmeren; voorspellingen variëren. De invloed van C verdwijnt niet, maar recente ontwikkelingen in hardware (multi-core machines worden alledaags, krachtige GPUs, de CPU is niet langer het typische prestatieknelpunt, snelle betrouwbare netwerkverbindingen, etc.) vragen om radicaal verschillende benaderingen voor programmeren in het algemeen.Iedereen die ooit een gedistribueerde applicatie met meerdere threads in een imperatieve taal heeft geschreven, kan zien dat het ongelooflijk moeilijk is, terwijl talen zoals Haskell functies hebben die de meeste typische problemen wegnemen en een meer abstracte en meer gestructureerde benadering bieden van gedistribueerde, gelijktijdige en parallelle verwerking (zuiverheid is een belangrijk concept in deze context). Nieuwere programmeertalen (bijv. C # of D) bevatten al veel functies om een dergelijk idioom te ondersteunen. In ieder geval heeft noch de grote impact die C op het programmeren heeft gehad, noch het bestaan van niet-C-achtige talen verdwijnen.
Reacties
- Mooi antwoord, maar " CPU niet langer de typische bottleneck in de prestaties "? Naar mijn ervaring zijn er veel prestatieproblemen – CPU, IO, noem maar op. Zo niet, dan zijn profilers niet nodig, ook al zijn ze dat niet zeer effectief.
- @MikeDunlavey: Meestal worden de bottlenecks die ik tegenkom veroorzaakt door I / O, n etworking, CPU-cacheprestaties, busdoorvoer en (inefficiënte) communicatie tussen processen. Vroeger was de CPU bijna onvermijdelijk de bottleneck; dit is gewoon niet ' niet meer waar.
Antwoord
Dit lijkt veel op de vraag waarom Engels de dominante taal is in de VS. Waarom geen Spaans of Frans? Ze controleerden meer van het Amerikaanse grondgebied dan de Engelse koloniën. Waarom niet Nederlands? De eerste Amerikaanse hoofdstad lag in een voormalige Nederlandse kolonie. Ik “weet niet zeker of hier mogelijk een” antwoord “op kan zijn.
De tijdlijn” Computer Languages History “( http://www.levenez.com/lang/ ) biedt alle mogelijke antwoorden.
Reacties
- Omdat Groot-Brittannië uit de jaren 1600 -1880 was ruwweg de belangrijkste industriële en financiële grootmacht van de wereld, gevolgd door de Verenigde Staten van 1880 tot heden (< –debatable). Het werd de taal van het internationale zakendoen en is wordt vloeiend gesproken door meer dan 2 miljard mensen over de hele wereld. Dat en niemand wil Spaans of Nederlands spreken 🙂
- @maple_shaft – " niemand wil Spaans spreken "?! … weet u zelfs in hoeveel landen het wordt gesproken? en.wikipedia.org/wiki/Spanish_language a>
- @ S.Lott: Je bedoelt het deel waar het Britse rijk het grootste rijk was dat ooit heeft bestaan, en 25% van de ent ire wereld ' s oppervlak? Dat soort " niet krachtig "?
- @DeadMG: I ' m niet over de wereld. Ik ' heb het over de VS in de jaren 1700 ' s waar de Fransen de Britten lieten ingesloten in een klein gebied langs de kust. Ik ' m heb het erover dat de Britten alleen militaire opdrachten in dit theater verliezen. De Fransen beheersten duidelijk het grootste deel van wat de VS werd. Nog. De VS spraken uiteindelijk Engels. Geen Frans. Dezelfde analyse is van toepassing op C. Het ' is een complexe geschiedenis met veel beïnvloedende factoren. Daar ' s geen triviaal, klopje antwoord.
- @ S.Lott De Fransen hebben ' niet elke stuiten op. Kijkend naar Noord-Amerika wonnen ze een meerderheid; maar het verliezen van 4 van de 5 grote veldslagen in NA in 1559/60 resulteerde in een verpletterende nederlaag in het theater. De veroveringen van Forts Ticonderoga en Niagara, The Plains of Abraham en de slag bij Restigouche waren allemaal Britse overwinningen. Door de toevoer / versterking af te sluiten, maakte deze laatste de Franse overwinning in Sainte-Foy irrelevant.
Antwoord
Als u maakt een nieuwe programmeertaal, met een syntaxis die vergelijkbaar is met populaire bestaande talen, maakt het leren gemakkelijker voor uw nieuwe gebruikers. Vooral als veel concepten vergelijkbaar zijn tussen talen.
Ook denk ik dat de syntaxis in C-stijl relatief gemakkelijk te lezen is. Ter vergelijking met Pascal is het gebruik van symbolen “{” en “}” voor codeblokken beter leesbaar dan “begin” en “einde”, die optisch erg lijken op identifiers. Python is nog beter leesbaar, maar het opnemen van witruimte in de syntaxis opent een nieuwe reeks problemen met bewerken. Nog een voorbeeld: Lisp en JavaScript delen een paar ideeën, maar wanneer hetzelfde wordt geschreven in syntaxis in C-stijl, is het minder obscuur.
Ik weet zeker dat veel mensen het niet eens zouden zijn met de tweede alinea, omdat iedereen heeft zijn eigen favoriete taal, maar ik denk dat de populariteit van de C-stijl syntaxis gedeeltelijk een historisch toeval is, maar gedeeltelijk laat het ook zien dat de auteurs van C een paar goede beslissingen hebben genomen.
Answer
Programmeertalen evolueren in de loop van de tijd net als natuurlijke talen, waarbij sommige oudere talen die evolutie sterker beïnvloeden dan andere , terwijl andere vervagen en hun invloed moeilijker te traceren is aan de oppervlakte, dat wil zeggen syntaxis.
De invloed van C komt uit veel bronnen – het is laag, wijdverbreid, had steun in zowel Unix- als Microsoft-kringen. Het is ook de survival of the fittest issue – het is gemakkelijk te zien dat de beknopte C-achtige syntaxis aantrekkelijker was dan de uitgebreide, van Algol afgeleide syntaxis van Pascal en andere concurrenten van C in de jaren zeventig en tachtig. Daarom werd het op grote schaal overgenomen door talen die erna kwamen.
Met de huidige groei van het belang van multithreaded programmeren en functionele talen die er bijzonder geschikt voor zijn, zou ik zeggen dat we hun invloed zullen zien groeien in de toekomst. Voorbeeld: Python, die zelfs die lijst in de vraagpost heeft gemaakt.
Een mooie tijdlijnweergave van de taalgeschiedenis om over na te denken
Reacties
- Je hebt het mis. Zowel PASCAL als C zijn ALGOL-afstammelingen.
- Dat is waar, maar Algol zelf is een afstammeling van Fortran en koos een aantal van de constructen waarnaar ik verwees daar (programma, einde, subroutine vergeleken met c ' s haakjes). Maar wat ik in gedachten had, was in feite de Algol-achtige syntaxis. Bewerkt.
- beknopte C-achtige syntaxis had meer aantrekkingskracht dan de uitgebreide Algol-afgeleide syntaxis van Pascal en andere concurrenten van C in de 70 ' s en 80 ' s +1 daarvoor. begin programmeurs zijn ook mensen end begin degenen die geloofden dat het ' s handig om leestekens toe te wijzen aan woorden als begin-end verloren hun strijd tegen accolades einde van verhaal
- ik zie geen bewijs die C-syntaxis is minder obscuur, behalve in de zin dat de meeste ontwikkelaars C of een soort C-gerelateerde taal kennen, en het er dus bekender uitziet. AFAICT, C won van Pascal vanwege zijn structuur en het feit dat implementaties niet ' hun eigen koppeling hoefden te rollen, niet syntaxis.
- @ David- Voor zover ik me herinner, was een van de redenen waarom C het won van andere talen vanwege het relatieve gemak van toegang tot geheugen in C (dwz pointers). Ik weet dat ze nu bang zijn, maar toen 1 KB RAM veel geheugen was, was dat een zeer krachtig kenmerk van de taal. Ik weet dat andere talen pointerachtige functies boden, maar geen enkele zo gemakkelijk als C.
Answer
De meeste van de talen die u opgeeft, hebben vrijwel niets met C te maken, afgezien van irrelevante syntactische overeenkomsten. De enige twee feitelijke C-derivaten zijn Objective-C en C ++.
Opmerkingen
- Als we geen syntaxis overwegen, dan zijn de enige verschillen tussen alle talen zijn de beschikbaarheid van algemene taalconstructies (loops, conditionals, variabelen, abstracties hiervan zoals klassen en sluitingen, enz …) en dat ze allemaal gelijk zijn aan het gedrag van machinecode. Alle talen op laag niveau lijken op elkaar en alle talen op hoog niveau lijken op dat moment extreem op elkaar.
- Je moet ' niet nadenken over een taal als welke functionaliteit het heeft, maar hoe het applicatiegedrag communiceert. Uw broncode is uw laagste documentatieniveau en men schrijft broncode voor mensen en NIET voor machines . Als we code strikt voor machines zouden schrijven, zouden we allemaal coderen tijdens de montage.
- @maple_shaft: Helemaal juist! Ik werd in een interview gevraagd om het verschil tussen machinetaal (assembler) en programmeertaal uit te leggen. Mijn antwoord was: " Machinetaal is voor machines, programmeertaal is voor programmeurs. "
- @maple_shaft: De syntaxis is niet relevant voor de ' s communicatie met mensen . Als ik een Engels woord zou vervangen door een andere spelling, zou Engels nog steeds dezelfde taal zijn. De syntactische vorm is niet relevant, wat ' s communicatief is, is de taalsemantiek.
- @DeadMG: Maar de vraag gaat over syntaxis. U kunt de syntactische overeenkomsten als irrelevant beschouwen, maar de persoon die de vraag stelt wil weten waarom deze irrelevante overeenkomsten bestaan .