Proč je několik populárních programovacích jazyků ovlivněno C? [uzavřeno]

Komentáře

  • Mít syntaxi c like není to samé jako být založeno na c.
  • Kromě toho TIOBE je nevyžádaný index.
  • Spíše se mohu zeptat, proč jsou programovací jazyky založené na C populárnější?
  • Protože C je potomkem ALGOL a ALGOL má blokovat rozsah imperativní labguages, co Ab raham je pro křesťany, židy a muslimy.
  • Vaše citace o PHP a Pythonu ve skutečnosti <

neříkají, že ' ovlivněn C – a zatímco PHP je, Python se ' nejeví.

Odpověď

S nástupem systému UNIX v 70. letech se jeho standardní systémový programovací jazyk C rychle stal lingua franca programovacího světa. C byl na nějakou dobu pro každého programátora prakticky povinný. Skutečnost, že C nějakým způsobem ovlivnila téměř každý programovací jazyk, který po něm přišel, je stěží překvapivá, a to ze dvou důvodů:

  • Při navrhování nového jazyka má smysl založit jeho syntaxi, je-li to možné, na populárním existujícím jazyce, o kterém lze předpokládat, že je všeobecně známý.
  • Nový jazyk je pravděpodobnější, že uspěje, pokud je křivka učení povrchní, a syntaxe, která se podobá již známému jazyku je obecně snazší se naučit (pokud se i přes zjevné podobnosti nechová radikálně odlišně). Takže jazyky, které si vypůjčují syntaxi z C, obecně získají trakci rychleji než ty, které „t.

Ale jiné jazyky existovaly a stále existují, některé dokonce předcházejí C – tam“ rodina LISP (CL, Clojure a Scheme jsou nejoblíbenějšími moderními dialekty), rodina ML (s několika moderními dialekty), existuje celá armáda základních dialektů (VB.NET a VBA jsou moderní implementace), existuje Pascal a jeho příbuzní (Delphi je nejznámější) a mnoho „zvláštních“ jazyků, které získaly vliv mnoha jiných jazyků a samy vynalezly několik věcí; Mezi příklady patří Go, Python, Lua, Haskell (a jeho předchůdce Miranda), Prolog a Erlang. I když žádný z těchto jazyků (kromě Pythonu) není v top 10, mnoho z nich má stabilní uživatelskou základnu a aktivní komunitu; rozhodně nezmizí.

Rovněž je třeba poznamenat, že množství vlivu C v těchto jazycích se divoce liší, od téměř 100% jazyků kompatibilních s C, C ++ a Objective-C, až po Python (který se záměrně vzdává mnoha syntaxových funkcí jazyka C). A to je jen syntax: co se týče sémantiky, většina jazyků na tomto seznamu nemá mnoho společného s C. Převážná většina má správu paměti zabudovanou do jazyka a následně kopíruje sémantiku, předávání argumentů, atd., jsou velmi odlišné. Například JavaScript má silné sémantické vlivy ze schématu, zatímco jeho syntaxe byla navržena tak, aby připomínala Javu (která zase zakládá svou bitovou a kouskovou syntaxi na C, ale ne její sémantiku). Mezi další rozdíly (s výjimkou C ++ a Objective-C, které jsou většinou zpětně kompatibilní s C) patří zpracování chyb, pravidla rozsahu, standardní knihovny, zahrnutí externího kódu (#include), a skutečnost, že mnoho z těchto jazyků je „virtualizováno“, to znamená, že běží na tlumočníkovi, kompilátoru JIT nebo na virtuálním stroji.

Mimochodem, Python má nějaký vliv na C, ale rozhodně to není „založeno na“ C. Syntaxe i sémantika se od C značně liší a je to záměrné. Python si vypůjčuje pouze funkce z C, kde jsou jiné alternativy stejně „dobré“ (podle „Zen of Python“ – zadejte import this v interpretovi pythonu).

Co se týče budoucnosti programování; předpovědi se liší. Vliv C nezmizí, ale nedávný vývoj v oblasti hardwaru (vícejádrové stroje se stávají samozřejmostí, výkonné GPU, CPU přestává být typickým zúžením výkonu, rychlé spolehlivé síťové připojení atd.) Vyžaduje radikálně odlišné přístupy k programování obecně.Každý, kdo někdy napsal vícevláknovou distribuovanou aplikaci v imperativním jazyce, může říct, že je neuvěřitelně tvrdý, zatímco jazyky jako Haskell mají funkce, které odstraňují většinu typických problémů a nabízejí abstraktnější a strukturovanější přístup k distribuovaným, souběžným a paralelní zpracování (čistota je v tomto kontextu důležitým pojmem). Novější programovací jazyky (např. C # nebo D) již obsahují mnoho funkcí podporujících tento idiom. V každém případě ani silný dopad C na programování, ani existence jazyky, které nejsou podobné typu C, budou ukončeny.

Komentáře

  • Pěkná odpověď, ale " CPU přestávám být typickým úzkým místem výkonu "? Podle mých zkušeností jsou problémy s výkonem nepřeberné – CPU, IO, co si jen vzpomenete. Pokud ne, profilery by nebyly potřeba, i když nejsou velmi efektivní.
  • @MikeDunlavey: Problémová místa, se kterými se setkávám, jsou obvykle způsobena I / O, n sítě, výkon mezipaměti CPU, propustnost sběrnice a (neefektivní) meziprocesová komunikace. V dobách byl CPU téměř nevyhnutelně překážkou; to už ' už není pravda.

Odpověď

To je hodně jako ptát se, proč je v USA dominujícím jazykem angličtina. Proč ne španělsky nebo francouzsky? Ovládali více území USA než anglické kolonie. Proč ne holandsky? První hlavní město USA bylo v bývalé nizozemské kolonii. Nejsem si jistý, zda na to možná existuje „odpověď“.

Časová osa „Historie jazyků počítačů“ ( http://www.levenez.com/lang/ ) poskytuje veškerou možnou odpověď.

Komentáře

  • Protože Velká Británie od roku 1600 -1880 zhruba byla hlavní průmyslovou a finanční velmocí na světě, následovanou Spojenými státy od roku 1880 do současnosti (< –debatable). Stala se jazykem mezinárodního obchodu a je mluví plynule více než 2 miliardami lidí po celém světě. To a nikdo nechce mluvit španělsky nebo holandsky 🙂
  • @maple_shaft – " nikdo nechce mluvit španělsky "?! … víte vůbec, v kolika zemích se mluví? en.wikipedia.org/wiki/Spanish_language
  • @ S.Lott: Máte na mysli tu část, kde bylo Britské impérium největší říší, která kdy existovala, a obsadilo 25% entu ire world ' s povrchem? Tento druh " není mocný "?
  • @DeadMG: I ' Nemluvím o světě. Mluvím ' o USA v 1700 ' s, kde Francouzi nechali Brity obklíčit na malou oblast podél pobřeží. Mluvím ' o tom, že Britové ztrácejí vojenské angažmá pouze v tomto divadle. Francouzi jasně ovládali většinu z toho, co se stalo USA. Dosud. USA skončily mluvením anglicky. Ne francouzsky. Stejná analýza platí pro C. Je to ' komplexní historie se spoustou ovlivňujících faktorů. ' není triviální, pat odpověď.
  • @ S.Lott Francouzi nevyhráli ' každý setkání. Při pohledu na Severní Ameriku získali většinu; ale prohra 4 z 5 hlavních bitev v NA během 1559/60 měla za následek drtivou porážku v divadle. Zajetí pevností Ticonderoga a Niagara, roviny Abrahama a bitva u Restigouche byla britská vítězství. Odříznutím nabídky / posílení způsobila francouzská výhra v Sainte-Foy irelevantní.

Odpověď

Pokud vytvoříte nový programovací jazyk a syntaxe podobná populárním stávajícím jazykům usnadní učení nových uživatelů. Zvláště pokud je mnoho konceptů mezi jazyky podobné.

Také si myslím, že syntaxe ve stylu C je relativně snadno čitelná. Pro srovnání s Pascalem je použití symbolů „{“ a „}“ pro bloky kódu čitelnější než „začátek“ a „konec“, které jsou opticky velmi podobné identifikátorům. Python je ještě čitelnější, ale zahrnutí mezer do syntaxe otevírá novou sadu problémů s úpravami. Další příklad: Lisp a JavaScript sdílejí několik nápadů, ale když je stejná věc napsána v syntaxi ve stylu C, je to méně temné.

Jsem si jistý, že mnoho lidí by s druhým odstavcem nesouhlasilo, protože všichni má svůj vlastní oblíbený jazyk, ale myslím si, že popularita syntaxe ve stylu C je částečně historická náhoda, ale částečně také ukazuje, že autoři jazyka C učinili několik dobrých rozhodnutí.

Odpověď

Programovací jazyky se vyvíjejí v průběhu času stejně jako přirozené jazyky, přičemž některé starší jazyky ovlivňují tento vývoj silnějším způsobem než jiné , zatímco ostatní mizí v zapomnění a jejich vliv je těžší dohledat na povrchové úrovni, tj. syntaxi.

Vliv C pochází z mnoha zdrojů – je to nízká úroveň, rozšířená, měla podporu v kruhy Unix i Microsoft. Je to také přežití nejvhodnějšího problému – je snadné vidět, že strohá syntaxe podobná C měla větší přitažlivost než podrobná syntax odvozená od Algolu od Pascala a dalších konkurentů C v 70. a 80. letech. Proto byl široce přijat v jazycích, které následovaly po něm.

Se současným růstem významu vícevláknového programování a funkčních jazyků, které jsou k tomu zvlášť vhodné, řeknu, že jejich vliv naroste v budoucnost. Ukázkový příklad: Python, který tento seznam dokonce vytvořil v příspěvku s otázkami.

Pěkný pohled na časovou osu historie jazyka, o kterém se bude uvažovat

Komentáře

  • Pomýlili jste si to. PASCAL i C jsou potomci ALGOL.
  • Je to pravda, ale samotný Algol je potomkem Fortranu a vybral některé z konstruktů, na které jsem tam odkazoval (program, konec, podprogram ve srovnání s c ' s závorkami). Přesto jsem měl na mysli ve skutečnosti syntaxi podobnou Algolu. Upraveno.
  • stručná syntaxe podobná C měla větší přitažlivost než podrobná syntax odvozená od Algolu od Pascala a dalších konkurentů C v 70 ' sa 80 ' s +1 za to. začátek programátoři jsou také lidé konec začátek ti, kteří věřili , že ' je vhodné mapovat interpunkční znaménka na slova jako začátek-konec prohráli bitvu o složené závorky konec příběhu
  • nevidím žádné důkazy že syntaxe C je méně temná, až na to, že většina vývojářů zná jazyk C nebo nějaký jazyk související s jazykem C, a proto vypadá známější. AFAICT, C zvítězil nad Pascalem díky své struktuře a skutečnosti, že implementace nemusely ' provádět vlastní propojení, nikoli syntaxi.
  • @ David- Z toho, co si pamatuji, byl jedním z důvodů, proč C zvítězil nad jinými jazyky, relativní snadnost přístupu k paměti v C (tj. Ukazatele). Vím, že teď už jsou naštvaní, ale v době, kdy 1 kB paměti RAM byla spousta paměti, to byla velmi silná vlastnost jazyka. Vím, že jiné jazyky poskytují ukazatele jako funkce, ale žádný tak snadno jako C.

Odpověď

Většina z jazyky, které uvedete, nemají s C prakticky nic společného, kromě nepodstatných syntaktických podobností. Jedinými dvěma skutečnými deriváty C jsou Objective-C a C ++.

Komentáře

  • Pokud neuvažujeme o syntaxi, pak jediné rozdíly mezi libovolnými jazyky jsou dostupnost konstruktů obecného jazyka (smyčky, podmíněné výrazy, proměnné, abstrakce těchto tříd, uzávěry atd.) a že všechny odpovídají chování strojového kódu. Všechny jazyky nízké úrovně jsou si navzájem podobné a všechny jazyky vysoké úrovně jsou si v tomto bodě navzájem velmi podobné.
  • Neměli byste ' nemyslet na jazyk jako jakou funkcionalitu má, ale jak komunikuje chování aplikace. Váš zdrojový kód je nejnižší úroveň dokumentace a jeden píše zdrojový kód pro lidi a NE pro stroje . Pokud bychom psali kód striktně pro stroje, pak bychom všichni kódovali v sestavě.
  • @maple_shaft: Docela dobře! V rozhovoru jsem byl požádán, abych vysvětlil rozdíl mezi strojovým jazykem (assembler) a programovacím jazykem. Moje odpověď byla: " Strojový jazyk je pro stroje, programovací jazyk je pro programátory. "
  • @maple_shaft: Syntaxe je irelevantní, pokud jde o ' komunikaci s lidmi . Pokud bych anglické slovo nahradil jiným pravopisem, byla by angličtina stále stejným jazykem. Syntaktická forma je irelevantní, komunikativní ' je jazyková sémantika.
  • @DeadMG: Ale otázka je o syntaxi. Syntaktické podobnosti můžete považovat za irelevantní, ale osoba, která se ptá, chce vědět proč tyto irelevantní podobnosti existují .

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *