Hva er de beste ' systemene ' programmeringsspråk som på en gunstig måte kombinerer funksjonalisme, samtidighet og ytelse?


Beste svaret

Det kommer an på hva du mener med «systemprogrammering» og «best».

For eksempel kan ATS (http://www.ats-lang.org/) oppfylle alle kriteriene dine og mer – det er et trygt språk med høyverdige samtidighetsfunksjoner, støtte for men ikke mandat til en funksjonell stil og veldig god ytelse. Selv om det er en av de beste på papiret, er det kanskje ikke «best», fordi det ikke er nok folk som bruker det, og det virker «annerledes».

I den andre retningen er C forferdelig av en rekke årsaker. Manuell minnehåndtering er en stor kilde til feil og enda vanskeligere å få rett i en samtidig setting. Ved å holde seg konseptuelt nær metallet, etterlater det deg uten muligheten til å abstrakt på måter som lar deg produsere arbeidskode raskere, og det oppfordrer deg til å skrive ting på et nivå som er vanskelig å parallellisere. På den annen side kan det være det beste programmeringsspråket for systemer hvis du trenger å kjøre på maskinvare der andre kompilatorer er knappe, eller hvis du trenger å ansette kjerneprogrammerere.

Selv om det er vondt å si det, fordi jeg er uenig med flere aspekter ved designen, kan det være lurt å ta en titt på Go. Det virker som om designkriteriene deres stemmer godt overens med dine krav.

Svar

Det ser ut til at det du er ute etter er et «språk» som begge gir deg abstraksjoner for ikke å måtte bekymre deg om komplikasjonene som er involvert (dvs. ikke behov for å bygge opp samtidighet fra bunnen av), men likevel være høy ytelse og ressursøkonomiske. Og fordi det er en systemoppgave, bør den kunne koble direkte til all maskinvaren. Så du vil noe der det meste av tungt løft allerede er sortert (enten i språket eller i tilgjengelige biblioteker, eller kanskje begge deler). Det vil også trenge en innfødt kompilator i stedet for en VM.

Hvis dette er tilfelle jeg absolutt ikke er sikker på «best». Det er mange alternativer, til og med mange av den lille gruppen jeg kjenner til. Hvis du «virkelig» vil komme til det «beste», trenger du å lage en liste over alle språk – uten noen forestillinger. Begynn deretter å raffinere ved utelatelse – dvs. gå gjennom alle kravene og utelate (eller i det minste gå lavere i listen) de der språket (eller dets verktøy) er mindre enn tilstrekkelig til kravet.

Kravene til abstraksjon vil mest sannsynlig fjerne C og det er liknende fra listen, kanskje de nye oppdateringene til C ++ fortsatt holder den i gang skjønt.

Alt VM-basert vil sannsynligvis mislykkes i et eller annet aspekt (merk ikke nødvendigvis, men du trenger noen måte for å lage / konvertere minst deler derav til native). Så de Java / PVM / DotNet / etc. familie av språk kan trolig også utelates.

Maskinvarekoblinger kan fjerne ganske mange, men vær oppmerksom på at det ikke er umulig å bruke mer enn ett språk (eller familie av språk) for å komme seg rundt Dette kravet. F.eks. er det til og med umulig å bruke C for hele stakken med systemoppgaver – i det minste er noen av oppstartsdelene i alle systemer skrevet i montering, og på toppen av det er mange systemer skrevet i mer høyt nivå over «C» porsjoner. I de fleste tilfeller er det en situasjon med å bare bruke det som allerede er laget og / eller legge til det ved å bruke det bedre egnet for de stedene de passer inn. Så du kan sannsynligvis (i samme retning) få litt bibliotek / «plugin» som tillater hvilket som helst språk å påvirke maskinvaren direkte. Hvorvidt dette fjerner ting som ytelse eller ressursøkonomi er en annen sak som trenger testing og alternativ kombinasjonstenking (f.eks. Lager du en atomisk skiveadgangsrutine i C som kalles fra en aktør «tråd» i Lisp og muligens pådrar seg overhead hvert atomkall bruker sine egne ressurser, og muligens går ytelsen tapt på grunn av CFFI-samtalene).

Og så er den hvite elefanten (og den viktigste grunnen til at C er så allestedsnærværende) eksempler: Det er mye vanskeligere å prøve noe på et annet språk der prøver er vanskelige å finne eller til og med ikke eksisterer. Det er alltid ekstremt vanskelig å være den første til å gjøre det i stedet for å bare gjøre det samme, bare «på din måte».

Hvis du går denne ruten, ville du sannsynligvis veldig raskt eliminere store biter av den enorme listen over språk. Den mest tidkrevende handlingen er å undersøke hvert språk for å finne ut hvordan det måler mot andre for hvert av kravene. Dette er grunnen til at de fleste ikke ville bry seg og bare hold deg til noe som C selv om det (i det lange løp) kan bety at de «kunne gjøre noe» bedre «raskere.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *