Digitale aktiver

Top 10 blockchain-programmeringssprog, du skal kende til

mm
Føj Securities.io til dine foretrukne kilder på Google
Oplysning: Securities.io kan modtage betaling, når du bruger links til produkter, vi anmelder. Det påvirker ikke vores redaktionelle vurderinger. Vi er ikke registreret investeringsrådgiver; dette er ikke investeringsrådgivning. Læs vores affiliateoplysning.
Top 10 Blockchain Programming Languages

Siden Bitcoin blev introduceret, er værktøjerne til blockchainudvikling blevet flere. Nogle sprog er udviklet til smarte kontrakter, mens generelle sprog bruges til noder, applikationer og støttetjenester. Det rette valg afhænger af netværket og opgaven.

Bitcoin Script er et tidligt sprog til at angive betingelser for brug af bitcoin i transaktioner, ikke verdens første programmeringssprog. Både idéen om smarte kontrakter og programmerbare transaktionsbetingelser fandtes før Ethereum. Ethereum muliggjorde en langt mere generelt programmerbar applikationsplatform.

Her præsenteres ti sprog, der bruges i blockchainprojekter, uden rangorden. Kode, som afvikles direkte af blockchainen, skal skelnes fra kode til brugerflader, servere og infrastruktur. Ikke alle netværk understøtter alle sprog til kontrakter.

1. Solidity

Solidity bruges meget til smarte kontrakter på Ethereum og andre netværk, der understøtter Ethereum Virtual Machine (EVM). Gavin Wood foreslog sproget i 2014, og Christian Reitwiessner og andre udviklere videreudviklede det. Det er et statisk typet højniveausprog.

Solidity beskrives normalt som Turing-komplet. Det betyder ikke, at enhver tænkelig funktion kan afvikles, eller at sproget automatisk er effektivt. EVM-afvikling begrænses blandt andet af gas, så en kontrakt kan ikke udføre ubegrænsede beregninger.

Syntaksen er påvirket af C++, Python og JavaScript. Tuborgklammer, arv, biblioteker og brugerdefinerede typer muliggør velkendte programmeringsmønstre. Udviklere skal stadig lære smarte kontrakters særlige afviklings- og sikkerhedsmodel.

Kilde: GitHub — Solidity, sprog til smarte kontrakter

Kilde: GitHub

Værktøjerne og økosystemet gør Solidity anvendeligt til mange EVM-projekter. Popularitet og kort kode garanterer dog ikke sikkerhed; design, test og kodegennemgang er fortsat nødvendige.

2. Vyper

Vyper er et kontraktorienteret sprog til EVM med Python-lignende syntaks. Enkelhed, læsbarhed og mulighed for grundig gennemgang er centrale mål, så udviklere og revisorer lettere kan forstå kontrakters adfærd.

Kodegennemgang hjælper med at finde fejl og sårbarheder. Vyper er ikke et lavniveausprog, der direkte beskriver en fysisk computers instruktionssæt: kontraktkoden kompileres til afvikling i EVM.

Vyper udelader bevidst eksempelvis klassearv samt overloading af funktioner og operatorer. Begrænsningerne skal mindske skjult kompleksitet. Python er et generelt programmeringssprog, ikke et særligt Ethereum-sprog, og Vyper er ikke almindelig Python-afvikling.

3. JavaScript

JavaScript bruges til brugerflader og støttetjenester i decentraliserede applikationer. Biblioteker kan sende transaktioner, kalde kontrakter og læse hændelser. Det betyder ikke, at JavaScript kan afvikles direkte som kontraktsprog på alle netværk.

Brendan Eich udviklede JavaScript i 1995 hos Netscape. Første version blev til hurtigt, hvorefter sproget udviklede sig betydeligt. Det bruges bredt på hjemmesider, blandt andet Facebook og YouTube; en udateret procentdel bør ikke præsenteres som et aktuelt brugstal.

JavaScript afvikles i browsere og også uden for dem gennem miljøer som Node.js. Node.js er et afviklingsmiljø, ikke en særskilt version af sproget. Det kan bruges til servere og tjenester, som kommunikerer med blockchainnoder.

4. Plutus

Plutus omfatter sprog og værktøjer til smarte kontrakter på Cardano, som bruger proof-of-stake. Arkitekturen adskiller sig fra Ethereums, så muligheder og begrænsninger skal vurderes ud fra Cardanos model.

Plutus Core er det scriptsprog, der afvikles i Cardanos register. Plutus Tx kompilerer Haskell-kode til Plutus Core. Haskells statiske typer og funktionelle tilgang hjælper med at strukturere programmer, men gør ikke en applikation automatisk fejlfri.

En applikation kombinerer normalt valideringskode på kæden med kode uden for kæden, som opbygger transaktioner og kommunikerer med brugerne. Delene har forskellige roller og behøver ikke køre samtidigt. GHC er Glasgow Haskell Compiler; Plutus Tx omdanner bestemte kodedele til Cardanos valideringssprog.

5. Rholang

Rholang blev udviklet til samtidige, distribuerede beregninger og forbindes med RChain. Det bygger på rho-kalkulen og kommunikation gennem beskeder, ikke den klassiske objektmodel med klasser og arv. Modulær kode hjælper med at opbygge applikationer.

Rholang bruger kanaler til at sende og modtage beskeder. Projektdokumentationen beskriver adfærdsbaserede typer, ikke blot en kopi af Haskells typesystem. Modellen beskriver samtidige aktiviteter; reel parallel afvikling afhænger af miljøet.

Kommunikationsmodellen kan bruges til at beskrive protokoller og smarte kontrakter. Beskedhåndtering og kontraktbetingelser skal designes omhyggeligt. Sproget garanterer ikke automatisk korrekte forhandlinger eller juridisk håndhævelse.

6. Rust

Rust er et generelt systemprogrammeringssprog, som kombinerer flere paradigmer og delvis C-lignende syntaks. Det understøtter blandt andet indkapsling og traits, men ikke klassisk klassearv. Samtidighed betyder, at opgaver kan gøre fremskridt uafhængigt; under passende forhold kan de også køre parallelt.

Rust blev offentliggjort i 2010; den stabile version 1.0 fulgte i 2015. Systemet for ejerskab og lån hjælper compileren med at forhindre mange hukommelsesfejl uden en traditionel garbagecollector. Det fjerner ikke alle fejl, især ikke i usikker kode eller applikationslogik.

Rust bruges til systemsoftware, spilmotorer og blockchaininfrastruktur, herunder dele af Polkadots økosystem og Ethereumklienter. En klient skrevet i Rust betyder ikke, at alle Ethereumkontrakter kan køres direkte som Rust-kode; støtten afhænger af netværket og afviklingsmiljøet.

7. PHP

PHP er et etableret scriptsprog til servere. Rasmus Lerdorf skabte i 1994 værktøjer til at følge besøg på sit online-cv, ikke netværkspakker. Navnet var oprindeligt Personal Home Page Tools, og kildekoden blev offentliggjort i juni 1995. I dag betyder PHP PHP: Hypertext Preprocessor.

PHP kan bygge hjemmesider og baggrundstjenester, der kommunikerer med en blockchain, eksempelvis gennem API eller JSON-RPC. En applikation kan dermed kalde kontrakter eller tilbyde tokenfunktioner. PHP er ikke i sig selv et almindeligt kontraktsprog til EVM; kontrakten afvikles efter netværkets regler.

PHP er frit tilgængeligt og har et stort fællesskab og mange biblioteker. Det kan passe til et blockchainprojekts webdele. Påstande om, at det er ideelt til næsten alt eller særligt dominerende i DeFi, er for vidtgående.

8. Go

Go, også uformelt kaldet Golang, blev udviklet hos Google og offentliggjort som open source den 10. november 2009. Goroutines og kanaler understøtter samtidighed. Opgaver kan køre parallelt på flere processorkerner, men lavere omkostninger eller kortere køretid følger ikke automatisk.

Go tilstræber klar syntaks, hurtig opbygning af programmer og kode, der er let at vedligeholde. Pakkemodellen hjælper med at organisere og genbruge kode. Enkel syntaks erstatter ikke omhyggeligt design og fejlhåndtering.

Kilde: GitHub — Go, sprog til blockchainudvikling

Kilde: GitHub — Go — programmeringssprog til blockchains

Garbagecollectoren håndterer hukommelse, der ikke længere bruges under afviklingen; den er ikke en netværksprotokol. Go bruges til blockchainklienter og andre netværkstjenester. Packages er kodepakker, ikke netværkspakker.

9. C++

C++ er et generelt programmeringssprog, som bygger videre på C fra 1970’erne. Det tilbyder blandt andet objektorienteret og generisk programmering til applikationer, operativsystemer og blockchaininfrastruktur. Netværksspecifik støtte afgør, om C++ også kan bruges direkte til kontrakter.

Sproget giver stor kontrol over systemressourcer og passer til software med høje ydelseskrav. Biblioteker og værktøjer er bredt tilgængelige. Skalering afhænger dog af arkitektur og implementering, ikke automatisk af sprogvalget.

C++ findes til mange store operativsystemer. Hukommelse og ressourcer kræver omhyggelig håndtering, men moderne mønstre som RAII, containere og smarte pointere automatiserer meget frigørelse. Garbagecollection frigør hukommelse; det er noget andet end fejlfinding. Programmer med garbagecollection skal også testes og undersøges for fejl.

10. C#

C# er et højniveausprog i C-familien og en del af .NET-økosystemet. Det understøtter blandt andet objektorientering og genanvendelige komponenter. Velkendt syntaks kan lette indlæring, men kendskab til C dækker ikke alle C#-egenskaber.

Microsoft præsenterede C# omkring år 2000. Microsoft (MSFT ) udviklede sproget sammen med .NET-platformen. Det bruges til webtjenester, mobilapps, spil, IoT og blockchaininfrastruktur. Platformen og værktøjerne er siden blevet udvidet.

C# kan være mere produktivt end C++ i visse applikationer afhængigt af krav og gruppens erfaring. Det stammer ikke udelukkende fra webudvikling. Bibliotekerne og .NET-miljøet gør det nyttigt til blandt andet web- og cloudtjenester; kontraktstøtten afhænger fortsat af netværket.

Sikker programmering kræver mere end et sprogvalg

Fejl i decentraliserede applikationer kan føre til tab og sårbarheder. Vælg sprog og værktøjer, der passer til netværket, og kombiner dem med test, kodegennemgang og om nødvendigt uafhængige audits. Intet af disse ti sprog forhindrer alene alle fejl eller angreb.

Læs mere om blockchainprojekter i denne oversigt.

David Hamilton er en fuldtidsjournalist og en længerevarende bitcoinist. Han specialiserer sig i at skrive artikler om blockchain. Hans artikler er blevet offentliggjort i flere bitcoin-publikationer, herunder Bitcoinlightning.com