Jaké jsou nejlepší ' systémy ' programovací jazyk, který příznivě kombinuje funkcionalismus, souběžnost a výkon?


Nejlepší odpověď

Záleží na tom, co myslíte pod pojmem „systémové programování“ a „nejlepší“.

Například ATS (http://www.ats-lang.org/) může splňovat všechna vaše kritéria a ještě více – je to bezpečný jazyk s funkcemi souběžnosti na vysoké úrovni, podporou, ale nikoli mandátem funkčního styl a velmi dobrý výkon. I když je to jeden z nejlepších na papíře, nemusí to být „nejlepší“, protože jej dosud nepoužívá dost lidí a vypadá „jinak“.

V opačném směru je C hrozné z různých důvodů. Manuální správa paměti je obrovským zdrojem chyb a ještě obtížnější je dostat se do souběžného prostředí. Tím, že zůstanete koncepčně blízko kovu, vás nechá bez schopnosti abstraktní způsoby, které vám umožní rychleji vytvářet pracovní kód, a povzbudí vás k psaní věcí na úrovni, kterou je obtížné paralelizovat. Na druhou stranu to může být nejlepší programovací jazyk systémů, pokud potřebujete běžet na hardwaru, kde jsou jiné kompilátory vzácné, nebo pokud potřebujete najmout programátory jádra.

I když mě to bolí, protože zásadně nesouhlasím s několika aspekty jeho designu, možná se budete chtít podívat na Go. Vypadá to, že jejich návrhová kritéria se docela dobře shodují s vašimi požadavky.

Odpověď

Zdá se, že to, po čem jste, je „jazyk“, který vám dává abstrakce, abyste se nemuseli bát o složitostech (tj. není třeba budovat souběžnost od nuly), ale zároveň musí být vysoce výkonný a úsporný z hlediska zdrojů. A protože je to úkol systému, měl by být schopen přímo odkazovat na veškerý hardware. Takže chcete něco, kde je většina těžkého zvedání již vyřešena (buď v idiomu jazyka nebo dostupných knihovnách, nebo možná v obou). Také by potřeboval nativní překladač místo VM.

Pokud toto v tomto případě si rozhodně nejsem jistý „nejlepším“. Existuje mnoho alternativ, dokonce i mnoho z malé skupiny, kterou znám. Pokud se „opravdu“ chcete dostat k „nejlepším“, musíte vygenerovat seznam všech jazyků – bez jakýchkoli předsudků. Poté začněte upřesňovat vynecháním – tj. projít všemi požadavky a vynechat (nebo alespoň přesunout níže v seznamu) ty, kde jazyk (nebo jeho nástroje) jsou méně než adekvátní požadavku.

Požadavky na abstrakci by s největší pravděpodobností odstranily C a je to podobné ze seznamu, možná nové aktualizace pro C ++ ji stále udržují v chodu.

Všechny systémy založené na VM by pravděpodobně z nějakého hlediska selhaly (ne nutně, ale nějak byste potřebovali) výroby / převodu alespoň jeho části na nativní). Takže ty Java / PVM / DotNet / atd. rodinu jazyků lze pravděpodobně také vynechat.

Hardwarové odkazy mohou odstranit docela dost, i když si všimněte, že není možné použít více než jeden jazyk (nebo skupinu jazyků), abyste se dostali kolem tento požadavek. Např. je dokonce nemožné použít C pro celý zásobník systémových úkolů – alespoň některé spouštěcí části ve všech systémech jsou napsány v sestavě a poté je mnoho systémů napsáno na vyšší úrovni nad „C“ porce. Ve většině případů je to situace, kdy stačí použít to, co již bylo vytvořeno, a / nebo přidat to pomocí vhodnějšího pro ta místa, kam se vejdou. Takže pravděpodobně (ve stejném duchu) můžete získat nějakou knihovnu / „plugin“ což umožňuje jakémukoli jazyku přímo ovlivnit hardware. Zda to potom odstraní věci jako výkon nebo ekonomika zdrojů, je jiná věc, která by potřebovala testování a alternativní kombinované myšlení (např. Děláte rutinu přístupu k atomovému disku v C, která se volá z „vlákna“ aktéra v Lispu a možná vám vznikne režie jako každé atomové volání používá své vlastní zdroje a možná dojde ke ztrátě výkonu kvůli volání CFFI).

A pak je to bílý slon (a hlavní důvod, proč je C tak všudypřítomný): Je to mnohem obtížnější vyzkoušet něco v jiném jazyce, kde je těžké najít vzorky nebo dokonce vůbec neexistují. Je vždy nesmírně obtížné být prvním, kdo to udělá, než jen dělat to samé, jen „po svém“.

Pokud se vydáte touto cestou, pravděpodobně byste velmi rychle odstranili velké bloky tohoto obrovského seznamu jazyků. Nejnáročnější akcí by však bylo prozkoumat každý jazyk a zjistit, jak se měří vůči ostatním pro každý z požadavků. Proto by se většina neobtěžovala a prostě se držet něčeho jako C, i když (z dlouhodobého hlediska) to může znamenat, že „budou moci něco„ vylepšit “rychleji.

Napsat komentář

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