Hvad er de bedste ' systemer ' programmeringssprog, der fordelagtigt kombinerer funktionalisme, samtidighed og ydeevne?


Bedste svar

Det afhænger af, hvad du mener med “systemprogrammering” og “bedst.”

For eksempel kan ATS (http://www.ats-lang.org/) muligvis opfylde alle dine kriterier og mere – det er et sikkert sprog med højt niveau samtidige funktioner, understøttelse af men ikke mandat til en funktionel stil og meget god ydeevne. Selvom det er en af ​​de bedste på papiret, er det måske ikke “bedst”, fordi der ikke er nok mennesker, der bruger det, og det virker “anderledes.”

I den anden retning er C forfærdeligt af forskellige årsager.Manuel hukommelsesadministration er en enorm kilde til bugs og endnu sværere at få ret i en samtidig indstilling. Ved at holde konceptuelt tæt på metallet efterlader det dig uden evnen til at abstrakt på måder, der giver dig mulighed for at producere arbejdskode hurtigere, og det tilskynder dig til at skrive ting på et niveau, der er svært at parallelisere. På den anden side kan det være det bedste systemprogrammeringssprog, hvis du har brug for at køre på hardware, hvor andre compilere er knappe, eller hvis du har brug for at ansætte kerneprogrammerere.

Selvom det gør mig ondt at sige det, fordi jeg grundlæggende er uenig i flere aspekter af dens design, kan du tage et kig på Go. Det ser ud til, at deres designkriterier stemmer godt overens med dine krav.

Svar

Det ser ud til, at det du leder efter er et “sprog”, som begge giver dig abstraktioner for ikke at skulle bekymre dig om de involverede forviklinger (dvs. intet behov for at opbygge samtidighed fra bunden), men alligevel også være højtydende og ressourceøkonomisk. Og fordi det “er et system”, skal det være i stand til at linke direkte til al hardware. Så du vil noget, hvor det meste af det tunge løft allerede er ordnet (enten i sprogets sprog eller bibliotekerne til rådighed eller måske begge dele). Det ville også have brug for en native compiler i stedet for en VM.

Hvis dette er tilfældet, jeg er bestemt ikke sikker på “bedste”. Der er mange alternativer, endda mange af den lille gruppe, jeg kender til. Hvis du “virkelig” vil komme til det “bedste”, skal du oprette en liste over alle sprog – uden nogen forudgående forestillinger. Begynd derefter at raffinere ved udeladelse – dvs. gennemgå alle kravene og udelad (eller i det mindste gå lavere på listen) dem, hvor sproget (eller dets værktøjer) er mindre end tilstrækkelige til kravet.

Kravene til abstraktion ville sandsynligvis fjerne C og det er lige fra listen, måske holder de nye opdateringer til C ++ det stadig i gang.

Alt VM-baseret ville sandsynligvis mislykkes i et eller andet aspekt (bemærk ikke nødvendigvis, men du har brug for en eller anden måde at fremstille / konvertere mindst dele deraf til native). Så disse Java / PVM / DotNet / osv. sprogfamilie kan sandsynligvis også udelades.

Hardware-links kan fjerne en hel del, dog bemærk at det ikke er umuligt at bruge mere end et sprog (eller en familie af sprog) for at komme rundt dette krav. F.eks. er det endda umuligt at bruge C til hele stakken af ​​systemopgaver – i det mindste nogle af opstartsdelene i alle systemer er skrevet i samling, og derudover er mange systemer skrevet i mere højt niveau over “C” dele. I de fleste tilfælde er det en situation med bare at bruge det, der allerede er lavet og / eller tilføje til det ved hjælp af det bedre egnet til de steder, hvor de passer ind. Så du kan sandsynligvis (i samme retning) få noget bibliotek / “plugin” hvilket gør det muligt for ethvert sprog at påvirke hardwaren direkte. Hvorvidt dette derefter fjerner ting som ydeevne eller ressourceøkonomi er en anden sag, der har brug for test og alternativ kombinationstænkning (f.eks. Laver du en atomisk diskadgangsrutine i C, der kaldes fra en skuespiller “tråd” i Lisp og muligvis pådrager sig overhead som hvert atomkald bruger sine egne ressourcer, og muligvis går ydelsen tabt på grund af CFFI-opkaldene.

Og så er den hvide elefant (og hovedårsagen til, at C er så allestedsnærværende) eksempler: Det er meget sværere at prøve noget på et andet sprog, hvor prøver er svære at finde eller endog ikke-eksisterende. Det er altid ekstremt vanskeligt at være den første til at gøre det i stedet for bare at gøre det samme, kun “på din måde”.

Hvis du går denne rute, ville du sandsynligvis meget hurtigt fjerne store klumper af den enorme liste over sprog. Den mest tidskrævende handling er dog at undersøge hvert sprog for at finde ud af, hvordan det måler andre for hvert af kravene. Dette er grunden til, at de fleste ikke gider og hold dig bare til noget som C, selvom det (i det lange løb) kan betyde, at de “kunne gøre noget” bedre “hurtigere.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *