it-swarm-eu.dev

Proč nemůže existovat „univerzální“ programovací jazyk, který slouží všem účelům?

proč nekombinovat nejlepší vlastnosti všech existujících programovacích jazyků a zapadat do univerzálního programovacího jazyka?

60
killown

Ze stejného důvodu nepoužíváte švýcarský armádní nůž k vyřezávání kuře ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

Nůž Švýcarské armády má obecně čepel, stejně jako různé nástroje, jako jsou šroubováky a otvíráky na konzervy a mnoho dalších. Tato příslušenství jsou uložena uvnitř rukojeti nože mechanismem otočného bodu ...

Konstrukce nože a jeho flexibilita vedly k celosvětovému uznání ...

116
David_001

Protože

  1. nikdo nechce přepsat veškerý starší kód.
  2. Je těžké dohodnout se na všech účtech
  3. Jakmile dáte dohromady obsáhlý seznam účelů, změní se, než byste je mohli postavit.
  4. Někdo by kvůli novému účelu začal s úplně jiným jazykem.
  5. Microsoft
  6. Apple
  7. Open Source
  8. Co bychom udělali se všemi Babel Fish?
  9. Nelze ani učinit SQL univerzálním.
80
JeffO

To, co máte v programování, je velmi velká problémová doména. Tato doména se pohybuje extrémně a mnoha směry.

Z tohoto důvodu jsou vestavěné letové regulátory psány v jazyce C a webové stránky jsou psány v PHP, Java, Rails, .NET a v hostiteli dalších.

Pro vestavěný letový ovladač mám k dispozici asi 128 000 paměti a navíc, pokud můj kód získá neošetřenou výjimku, kdy dojde k havárii letadla, zemře 200 lidí a já jsem žalován, abych naladil $ 1B, a musím poslat techniky každému letiště na světě opravit letadla, která jsou uzemněna ztrácí své zákazníky $ 10M/den. Musím pracovat s jazykem, který je velmi napjatý a má malý počet pohyblivých částí, které by se mohly pokazit.

Pro svou webovou aplikaci mám několik GB paměti, se kterou mohu pracovat, ale rychlost sítě je omezená (v menší míře každý den, ale toto je pravděpodobně největší webový limit). Budu se dívat na jazyk, který mi dává spoustu funkcí a produkuje výstup, který lze přenášet co nejrychleji. Je mi opravdu jedno, jestli můj web klesne, možná ztratím pár prodejů (100 $) a musím napravit případ použití, který bombardoval, žádný velký problém.

Webové stránky nebyly psány v C více než 15 let (někdo dělá nějaké skripty cgi?) A pokud vím, letové regulátory se právě začínají dívat na C++, ale i pak velmi omezeným způsobem.

38
Bill Leeper
  1. Jděte do garáže (nebo do garáže vašich rodičů).
  2. Otevřete panel nástrojů.
  3. Pokud vidíte více než jeden nástroj, přemýšlejte o tom, jak to platí pro vaši otázku.

Pokud nemáte sadu nástrojů nebo máte pouze jedno z těch malých kladiv s bity šroubováku v duté rukojeti, mám pro vás velkou soucit.

Vážně. Pokud jdete do autoobchodu, má váš mechanik v jeho nástrojovém nástroji pouze jeden jediný nástroj pro všechny? Je profesionálem a má profesionální nástroje speciálně určené k provádění různých oprav automobilů.

Podobně by profesionální vývojáři softwaru měli mít k dispozici dostatečný soubor nástrojů k výkonu svého obchodu. Pokud otevřete sadu nástrojů a uvidíte pouze [softwarový ekvivalent] šroubováku Philips, nemůžete se považovat za profesionála.

Otočný šroub můžete otáčet otevřeným klíčem, klíčem v krabičce, rohatkovým klíčem nebo nastavitelným klíčem. Můžete dokonce otočit šroub ve štípačce s klipsovými kleštěmi, nemotorně, s lehkým až těžkým poškozením. Je však docela obtížné otočit šroubem s kladivem.

24
brettmjohnson

Jiný druh odpovědi na ostatní - vlastně si myslím, že tam je potenciál , aby se jazyk stal „univerzálním“ jazykem, který umožňuje rysy a paradigmata mnoho dalších jazyků, i když možná nejde o přesně navržený jazyk, na který byste mohli myslet.

Chcete-li použít analogie Brettmjohnsona výše, myšlenka, že každý programovací jazyk je nástrojem uvnitř krabičky (nebo na švýcarském armádním noži), je předpokladem, který každý vytváří, ale je to opravdu chybný předpoklad.

Co kdyby byl programovacím jazykem sada nástrojů?

Chci říct, co když můžete přidat a odebrat funkce z jazyka, jak chcete, a mít svůj vlastní panel nástrojů s nástroji, které v něm potřebujete - i když jsou nástroje pro různé účely.

Koncept již existuje částečně. Například jazyky jako Nemerle vám umožňují přidat syntaxi do jazyka , a proto byste mohli mít možnost převzít „nejlepší funkci z jazyka X“ a přidat to Nemerle (nebo vlastní). To nutně neznamená, že budete neustále psát svá vlastní makra - každý jazyk (nebo paradigma) lze definovat uvnitř makra ve standardní knihovně - takže můžete import Haskell; import Prolog; a začněte psát oba jazyky, jako by to bylo součástí vašeho jazyka?

Otázka tedy zní - jak získáváte funkce různých jazyků/paradigmat, aby spolu pracovaly? I když na to nemůžu odpovědět, rámce jako .Net a JVM nabízejí některé řešení - jazyky jsou alespoň částečně kompatibilní kvůli způsobu, jakým jsou kompilovány. Můžete si například vzít jakýkoli kód napsaný v C # a použít jej z F # bez stížností.

'Problém' s řešením, jaké je dnes, spočívá v tom, že společné používání těchto jazyků vyžaduje, abyste je vytvořili jako samostatné projekty, které se nemohou navzájem odkazovat - můžete mít pouze jednosměrný odkaz. Jazykovou bariérou je, že každý projekt zkompiluje všechny své soubory samostatně do Common Intermediate Language, než k němu může mít přístup jakýkoli jiný projekt.

Krokem k odstranění této bariéry by bylo umožnit kompilaci kódu různých jazyků (např. C # a F #) uvnitř stejného projektu. Teoreticky byste mohli zkompilovat každý soubor zvlášť (nebo ve skupinách - pokud mají částečné typy nebo kruhové odkazy) a pak zkompilovat soubory jiného jazyka, který má přístup k již zkompilovaným (CIL) objektům. Aby to fungovalo, budete muset přesně definovat pořadí kompilace - ale v případě F # je již vyžadováno pořadí kompilace.

Každopádně neříkám „existuje určitě univerzální jazyk“. Navrhuji, že existuje potenciál pro mnohem lepší interoperabilitu mezi jazyky, než to, co v současné době existuje. Ve skutečnosti není pravděpodobné, že se velmi brzy zlepší, jen kvůli obrovskému množství práce je implementace jazyka a knihoven, nástrojů atd. Potřebných k jeho použití.

20
Mark H

Nejlepší vlastnosti některých jazyků jsou v rozporu s nejlepšími funkcemi jiných jazyků.

Například: Reflexe s vědomím typu jsou opravdu pěkné vlastnosti, ale v volně psaném jazyce by to moc nestálo, ale volné psaní může být občas skutečným přínosem.

Ani v jednom jazyce nemůžete vždy používat všechny ty nejlepší funkce současně, protože jsou ve vzájemném konfliktu.

10
Bill

"Jack všech obchodů - mistr žádného." vyvstává na mysli.

Některé programy vyžadují rychlost, jiné velké množství paměti nebo rychlý přístup k disku. Některé jazyky jsou dobré v jednom, ale v jiném špatné - nemyslím si, že byste dostali jazyk, který byl vůbec dobrý.

Takže i když můžete psát prakticky jakýkoli program v jakémkoli jazyce, nezaručuje se, že získáte nejlepší program, který byste mohli napsat, abyste tento problém vyřešili.

7
ChrisF

Jazyky utvářejí způsob, jakým si lidé myslí. To platí pro přirozené jazyky. Pokud dítě zná pouze jeden jazyk s čísly „jeden, dva, mnoho“, je učení, že dětská matematika je ... obtížné. (Promiň, nemám odkaz) V angličtině mluvíme o různých dobách, jako by to byla místa - proto si lze představit pojem cestování v čase. V některých jiných jazycích by myšlenka cestování časem nikdy nenastala svým řečníkům.

To platí také pro programovací jazyky.

Pokud tedy máme jediný programovací jazyk, každý bude myslet na všechny výpočetní úkoly úplně stejně. Nebudeme tedy zkoumat alternativy a nejlepší způsob, jak něco udělat, zůstane neobjevený.

Nejbližší věc, kterou máme k univerzálnímu jazyku, je C. C mapuje velmi těsně k základním hardwarovým konceptům (jak se věci skutečně dělají v hardwaru) a programy v každém * jazyce lze převést na C. (Podívejte se, jak CFront používá kompilátory C pro assembler úkoly) Problém s C je v podstatě v tom, že výše uvedené převody by neměly smysl z pohledu programátorů C.

"Lambdas" byly vždy možné v C. Syntaxe je vypnutá, včetně kódu rozloženého po celém projektu/souboru, proto nebylo upřednostňovaným řešením. U verze no-capture/upvalue/etc definujte funkci někde jinde a předejte funkci ukazatel. (viz qsort ()) Pro použití lambd se zachycenými hodnotami roste množství a složitost kódu, který musíte napsat, hodně - pokud vím, nikdo nikdy nenapsal kód, který by se měl použít tato metoda programování v C. Na rozdíl od jazyků, kde jsou lambda součástí jazyka a v podstatě se používají všude.

Hlavním rozdílem mezi C a C++ je to, jak můžete požádat C++, aby se postarala o věci za vás; ale pak už nemůžete vidět, z jediného řádku kódu, kolik toho opravdu žádáte. Odpověď se stává: záleží (na všech ostatních kódech).

Některé programovací jazyky jsou vynikající pro specifické úkoly, ale tam, kde by většina současných programů používaných po celém světě jednoduše nedala smysl, pokud by byly programovány v tomto jazyce. To znamená, že pokud by jazyk mohl být použit k implementaci tohoto programu, který začíná, což není dané.

5
MaHuJa

Tady je. Žádný nástroj není pro všechno nejlepší, ale některé nástroje jako mnoho programovacích jazyků slouží pro všechny účely, nikoli nejlepší pro všechny.

Můžete si vybrat nejlepší nástroj pro danou úlohu, ale existují programovací jazyky, které lze použít pro všechny účely, a můžete si je vybrat. Nedoporučuji to, ale je to možné.

4
Maniero

Je chybou si myslet, že „kombinací všech funkcí“ se zlepší jazyk.

Pravděpodobně skončíš nafouklý, složitý a nečitelný nepořádek.

Dobrý jazykový design vyžaduje výběr a kompromisy. Pravděpodobně nejlepší/nejvíce revoluční/nejúspěšnější jazyky jsou ty, které něco berou a poskytují lepší alternativu než přidávání nových věcí.

  • Strukturované programovací jazyky (C, Pascal) - odstraní „goto“, nahradí procedurami a strukturovanými smyčkami atd.
  • Java - odstraní „ruční správu paměti“, nahradí GC/spravovanou pamětí
  • Haskell/Clojure - odstraní „nekontrolovaný mutabilní stav“
  • LISP - odstraní většinu „syntaxe jazyka“, nahradí ji flexibilní homoikonický strom s-výrazů

Na tomto vrcholu se skvěle hovoří strýc Bob Martin - Poslední programovací jazyk

4
mikera

Nemožnost technického jazyka mít univerzální jazyk? To je naprostý nesmysl. Máte mohl univerzální jazyk, který pokrývá všechny základy. Problém je většinou historický: různé jazyky byly vynalezeny, aby dělaly různé věci a byly používány v různých komunitách. Mnoho z nich uvízlo. Přidejte k tomu preference (vi! Emacs! Počkejte, myslel jsem Java! C #, počkejte, myslel jsem Microsoft, Open Source atd. Atd. Atd.) A obecné vkládání historických nehod ... Podívejte se na přirozené jazyky v malé zemi jako některé evropské země, aby viděli, jak bláznivé se toto téma může stát. Některá města mají svou vlastní hrdost a radost, malý dialekt, který mluví jen oni. Národy a programovací komunity nejsou tak odlišné, ani programové komunity nejsou racionálnější. Kdyby tomu tak bylo, všichni bychom mluvili esperantem a programovali v Universal něčeho „něčeho“ ...

4
Dan Rosenstark

Kvůli něčemu, co nazývám „generalizační/specializační paradox“, který má pravděpodobně jiné jméno a ve skutečnosti není paradoxem

Čím obecnější je programovací jazyk, tím více kódu potřebuje k dosažení něčeho. Čím je jazyk specializovanější, tím méně ho zvládnete.

4
Homde

Se vším, co je doposud psáno, je těžké přidat mnohem nové zdůvodnění, ale hodím pár.

  • Evoluce: Nejsou to jen biologické systémy, které jsou zavedeny, mutovány a podrobeny konkurenci přežití nejvhodnějších zdrojů a výklenku, který nazývají vlastní. Soutěž je dobrá a posouvá věci kupředu.

  • Splatnost: Počítačové jazyky vyrábíme pravděpodobně méně než jedno století. Zatím nemůžeme mít odpověď, protože dosud neznáme všechny otázky.

  • Samostatná geneze: Nejste si jisti tím pravým Slovem, ale ve světě je jejich mnoho systémů psaní, které začaly v mnoha geografických oblastech. Přemýšlejte o Cuneiformu, který byl zčásti diktován požadavky na řezbu do hliněných tablet. Přemýšlejte o sanskrtu, řecké, hebrejské, římské, arabské abecedě. Hieroglyfy, čínská metoda krásného psaní se 6 000+ symboly, která je sdílena v mnoha východoasijských zemích. Přemýšlejte o modernějších smíšených abecedách s fonetickým základem, jako jsou azbuka, katakana a hirigana. Nejsem lingvista, takže nepřesvědčujte nepřesnosti příliš tvrdě, ale když kultury na celém světě něco potřebují, vytvoří je a z potřeby si z nich udělají vlastní. Počítačové jazyky se objevily, když probíhalo mnoho celosvětové komunikace, a stejně jako imperiální a metrické systémy, přicházely z míst se silným vedením myšlenek. Programovací jazyky však slouží mnoha různým kulturám (některé z nich podnikovým kulturám), takže odrážejí lidi, kteří je vytvořili. Počítačové jazyky přicházejí s kulturními dědictvími, které formovaly jejich design a použití. V kultuře jádra operačního systému C a C++ pravděpodobně nebude brzy zastaralé pro Java (nebo naopak)), protože umožňují generování nativního kódu, úzké/efektivní propojení s hardwarem pro vytváření hardwarové abstrakce vrstvy, a mají značné nainstalované na základě.

  • Návrh designu: Programovací jazyky vznikají pomocí různých organizačních paradigmat. COBOL a Ada pocházeli z výborů, které byly součástí DOD a měly hodně hierarchie. Pokud si dobře pamatuji C, C++, Java a pravděpodobně mnoho dalších přišlo od jednoho nebo malého počtu návrhářů. Fred Brooks porovnává výsledky výboru s přístupy založenými na vizionáři ve svém příspěvku Design of Design (http://www.youtube.com/watch?v=pC-DlX-PaF4). Pokud bychom se dnes posadili, abychom vybrali buď Da Vinci, nebo výbor, který by definoval univerzální programovací jazyk, mohli bychom vědět, kdo nebo jakou metodou by měl být vytvořen?

0
DeveloperDon

Možná trochu jiný sklon:

Co je to jazyk? Abych byl směšně jednoduchý, je to slovní zásoba, syntax a sémantika.

Jaká je první věc, kterou děláte s programovacím jazykem?
Definujete věci - třídy, proměnné, metody - rozšiřujete slovní zásobu a sémantiku.

Proč? Takže nyní můžete v něm říkat věci, které jste předtím nemohli říct.
Líbí se vám nebo ne, vytvořili jste nový jazyk pro zvláštní účely.

IMHO, věc, kterou je třeba hledat v obecném jazyce, je, pokud usnadňuje vytváření speciálních jazyků.

0
Mike Dunlavey

Neexistuje žádný nástroj, který má všechny nejlepší funkce. Například pěkné vlastnosti Javascriptu a schématu spočívají v tom, že jsou malé, takže pokud začnete s balením funkcí, už jste na tomto již ztratili.

Stále Cobra vypadá slibně ve směru, aby měly všechny pěkné funkce z jiných jazyků. :-)

0
Andrea

Kromě argumentu švýcarsko-armádního nože (který má smysl - je obtížnější navrhnout dobrý širokospektrální jazyk než doména- konkrétní - ale to neznamená, že by takový jazyk nebyl možný a dobrý nápad), existují problémy s „kombinací nejlepších funkcí“:

  • U jazykových funkcí je „nejlepší“ subjektivní nebo alespoň (přerušitelně) sporný.
  • Některé funkce nejsou kompatibilní; dobrá funkce z jednoho jazyka může vybuchnout, pokud je kombinována s dobrou funkcí z jiného jazyka.
  • Ještě jsme neskončili přicházet s novými funkcemi.

Stručně řečeno, jazykový design je těžší a komplikovanější. Možná se však budete chtít podívat na Scala .

0
comingstorm

Protože pokud takový jazyk vytvoříte, bude to další nový jazyk. Možná získáte velkou základnu fanoušků, ale všechny ostatní jazyky budou stále existovat.

C stále existuje, i když od té doby bylo vynalezeno mnoho nových jazyků.

Dalo by se říci, že python je takový univerzální jazyk, ale pak je tu také Ruby).

Důvod, proč existuje mnoho jazyků, je jednoduše proto, že existuje mnoho programátorů a někteří z nich rádi vytvářejí nové jazyky.

Důvodem, proč neexistuje žádný univerzální jazyk, na kterém se všichni shodnou, je to, že programování jako řemesla není diktováno nějakou institucí, která činí všechna rozhodnutí. Každý může dělat, co chce.

To je dobrá věc.

0
hasen