Wat zijn de beste ' -systemen ' programmeertaal die functionalisme, gelijktijdigheid en prestatie gunstig combineert?


Beste antwoord

Het hangt af van wat je bedoelt met “systeemprogrammering” en “beste”.

ATS (http://www.ats-lang.org/) voldoet bijvoorbeeld mogelijk aan al uw criteria en meer – het is een veilige taal met gelijktijdigheidsfuncties op hoog niveau, ondersteuning voor, maar niet verplicht, een functionele stijl en zeer goede prestaties. Zelfs als het “een van de beste op papier” is, is het misschien niet “het beste”, omdat er “niet genoeg mensen het gebruiken en het” anders “lijkt.

In de andere richting is C om verschillende redenen vreselijk. Handmatig geheugenbeheer is een enorme bron van bugs en nog moeilijker om goed te krijgen in een gelijktijdige setting. Door conceptueel dicht bij het metaal te blijven, heb je niet de mogelijkheid om abstract op manieren waardoor je sneller werkende code kunt produceren, en het moedigt je aan om dingen te schrijven op een niveau dat moeilijk te parallelliseren is. Aan de andere kant is het misschien wel de beste programmeertaal voor systemen als je op hardware moet draaien waar andere compilers schaars zijn, of als je kernelprogrammeurs moet inhuren.

Hoewel het me pijn doet om het te zeggen, omdat ik het fundamenteel oneens ben met verschillende aspecten van het ontwerp, wil je misschien eens kijken naar Go. Het lijkt erop dat hun ontwerpcriteria redelijk goed aansluiten bij uw vereisten.

Antwoord

Het lijkt erop dat uw “taal” een “taal” is die u allebei abstracties geeft, zodat u zich geen zorgen hoeft te maken over de ingewikkelde zaken (dwz het is niet nodig om vanaf het begin gelijktijdigheid op te bouwen), maar ook hoge prestaties en zuinig met resources zijn. En omdat het een systeemtaak is, zou het in staat moeten zijn om rechtstreeks te linken naar alle hardware. Dus je wilt iets waar het meeste zware werk al is uitgezocht (ofwel in de idiomen van de taal of de beschikbare bibliotheken, of misschien beide). Ook zou het een native compiler nodig hebben in plaats van een VM.

Als dit is het geval ik “ben absoluut niet zeker van” beste “. Er zijn veel alternatieven, zelfs veel van de kleine groep die ik ken. Als je “echt” naar de “beste” wilt gaan, moet je een lijst van alle talen genereren – zonder enige vooroordelen. Begin dan te verfijnen door weg te laten – dwz alle vereisten doorlopen en weglaten (of in ieder geval lager in de lijst plaatsen) die waar de taal (of de tools) niet voldoende zijn voor de vereiste.

De abstractievereisten zouden hoogstwaarschijnlijk C en het is soortgelijk uit de lijst, misschien houden de nieuwe updates van C ++ het nog steeds aan de gang.

Alle VM-gebaseerde zouden waarschijnlijk op een of ander aspect falen (merk op, maar je zou op een of andere manier moeten van het maken / omzetten van ten minste delen daarvan in natief). Dus die Java / PVM / DotNet / etc. talenfamilie kan waarschijnlijk ook worden weggelaten.

Hardwarelinks kunnen er nogal wat verwijderen, maar houd er rekening mee dat het niet onmogelijk is om meer dan één taal (of taalfamilie) te gebruiken om rond te komen deze vereiste. Het is bijvoorbeeld zelfs onmogelijk om C te gebruiken voor de hele stapel systeemtaken – tenminste enkele van de opstartgedeelten in alle systemen zijn in assembly geschreven, en bovendien worden veel systemen geschreven op een hoger niveau boven de “C” porties. In de meeste gevallen is het “een situatie waarin je alleen gebruikt wat al gemaakt is en / of er iets aan toevoegt met behulp van de meest geschikte voor die plaatsen waar ze passen. Je kunt dus waarschijnlijk (in dezelfde geest) een bibliotheek /” plug-in “krijgen waardoor elke taal rechtstreeks invloed heeft op de hardware. Of dit vervolgens zaken als prestatie of resource-economie verwijdert, is een andere kwestie die moet worden getest en alternatieve combinatiedenken nodig zijn (bijv. Maak je een atomaire schijftoegangsroutine in C die wordt aangeroepen vanuit een actor-thread in Lisp en mogelijk overhead oplopen als elke atomaire oproep gebruikt zijn eigen bronnen en mogelijk gaat de prestatie verloren als gevolg van de CFFI-oproepen).

En dan is de witte olifant (en de belangrijkste reden waarom C zo alomtegenwoordig is) voorbeelden: het is veel moeilijker om iets in een andere taal te proberen waar samples moeilijk te vinden zijn of zelfs niet bestaan. Het is altijd buitengewoon moeilijk om de eerste te zijn die het doet in plaats van gewoon hetzelfde te doen, alleen op jouw manier.

Als je deze weg bewandelt, zou je waarschijnlijk heel snel grote delen van die enorme lijst met talen elimineren. De meest tijdrovende actie zou echter zijn om elke taal te onderzoeken om erachter te komen hoe deze zich tegen andere taalt voor elk van de vereisten. Dit is waarom de meesten niet de moeite zouden nemen en blijf gewoon bij zoiets als C, ook al betekent dit (op de lange termijn) dat ze “sneller iets” beters “zouden kunnen maken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *