Digitale eiendeler
Topp 10 blokkjedekodingsspråk du bør kjenne til

Etter introduksjonen av Bitcoin har verktøyene for blokkjedeutvikling blitt flere. Noen språk er laget for smarte kontrakter, mens generelle språk brukes til noder, applikasjoner og støttetjenester. Riktig valg avhenger av nettverket og oppgaven.
Bitcoin Script er et tidlig språk for å angi vilkår for bruk av bitcoin i transaksjoner, ikke verdens første programmeringsspråk. Både ideen om smarte kontrakter og programmerbare transaksjonsvilkår fantes før Ethereum. Ethereum muliggjorde en langt mer generelt programmerbar applikasjonsplattform.
Her presenteres ti språk som brukes i blokkjedeprosjekter, uten rangering. Kode som kjøres direkte av blokkjeden, må skilles fra kode for brukergrensesnitt, servere og infrastruktur. Ikke alle nettverk støtter alle språk for kontrakter.
1. Solidity
Solidity brukes mye til smarte kontrakter på Ethereum og andre nettverk som støtter Ethereum Virtual Machine (EVM). Gavin Wood foreslo språket i 2014, og Christian Reitwiessner og andre utviklere videreutviklet det. Det er et statisk typet høynivåspråk.
Solidity omtales vanligvis som Turing-fullstendig. Det betyr ikke at enhver tenkelig funksjon kan kjøres, eller at språket automatisk er effektivt. EVM-kjøring begrenses blant annet av gas, så en kontrakt har ikke ubegrenset beregningskapasitet.
Syntaksen er påvirket av C++, Python og JavaScript. Krøllparenteser, arv, biblioteker og brukerdefinerte typer gir kjente programmeringsmønstre. Utviklere må likevel lære smarte kontrakters særlige kjøre- og sikkerhetsmodell.

Kilde: GitHub
Verktøyene og økosystemet gjør Solidity nyttig for mange EVM-prosjekter. Popularitet og kort kode garanterer ikke sikkerhet; utforming, testing og kodegjennomgang er fortsatt nødvendig.
2. Vyper
Vyper er et kontraktorientert språk for EVM med Python-lignende syntaks. Enkelhet, lesbarhet og mulighet for grundig gjennomgang er sentrale mål, slik at utviklere og granskere lettere kan forstå kontraktenes virkemåte.
Kodegjennomgang hjelper med å finne feil og sårbarheter. Vyper er ikke et lavnivåspråk som direkte beskriver instruksjonssettet til en fysisk datamaskin: kontraktkoden kompileres for kjøring i EVM.
Vyper utelater bevisst eksempelvis klassearv samt overlasting av funksjoner og operatorer. Begrensningene skal redusere skjult kompleksitet. Python er et generelt programmeringsspråk, ikke et spesielt Ethereum-språk, og Vyper er ikke vanlig Python-kjøring.
3. JavaScript
JavaScript brukes til grensesnitt og støttetjenester i desentraliserte applikasjoner. Biblioteker kan sende transaksjoner, kalle kontrakter og lese hendelser. Det betyr ikke at JavaScript kan kjøres direkte som kontraktspråk på alle nettverk.
Brendan Eich utviklet JavaScript i 1995 hos Netscape. Første versjon ble laget raskt, og språket har siden utviklet seg betydelig. Det brukes mye på nettsteder som Facebook og YouTube; en udatert prosentandel bør ikke presenteres som et aktuelt brukstall.
JavaScript kjører i nettlesere og også utenfor dem gjennom miljøer som Node.js. Node.js er et kjøremiljø, ikke en egen versjon av språket. Det kan brukes til servere og tjenester som kommuniserer med blokkjedenoder.
4. Plutus
Plutus omfatter språk og verktøy for smarte kontrakter på Cardano, som bruker proof-of-stake. Arkitekturen skiller seg fra Ethereums, så muligheter og begrensninger må vurderes ut fra Cardanos modell.
Plutus Core er skriptspråket som kjøres i Cardanos register. Plutus Tx kompilerer Haskell-kode til Plutus Core. Haskells statiske typer og funksjonelle tilnærming hjelper med å strukturere programmer, men gjør ikke en applikasjon automatisk feilfri.
En applikasjon kombinerer vanligvis valideringskode på kjeden med kode utenfor kjeden som bygger transaksjoner og kommuniserer med brukere. Delene har ulike roller og trenger ikke kjøres samtidig. GHC er Glasgow Haskell Compiler; Plutus Tx gjør bestemte kodedeler om til Cardanos valideringsspråk.
5. Rholang
Rholang ble utviklet for samtidige, distribuerte beregninger og forbindes med RChain. Det bygger på rho-kalkylen og meldingskommunikasjon, ikke den klassiske objektmodellen med klasser og arv. Modulær kode hjelper med å bygge applikasjoner.
Rholang bruker kanaler til å sende og motta meldinger. Prosjektdokumentasjonen beskriver atferdsbaserte typer, ikke bare en kopi av Haskells typesystem. Modellen beskriver samtidige aktiviteter; faktisk parallell kjøring avhenger av miljøet.
Kommunikasjonsmodellen kan brukes til protokoller og smarte kontrakter. Meldingshåndtering og kontraktsvilkår må utformes nøye. Språket garanterer ikke automatisk riktige forhandlinger eller rettslig håndheving.
6. Rust
Rust er et generelt systemprogrammeringsspråk som kombinerer flere paradigmer med delvis C-lignende syntaks. Det støtter blant annet innkapsling og traits, men ikke klassisk klassearv. Samtidighet betyr at oppgaver kan gjøre fremgang uavhengig; under egnede forhold kan de også kjøre parallelt.
Rust ble offentliggjort i 2010; den stabile versjonen 1.0 fulgte i 2015. Systemet for eierskap og lån hjelper kompilatoren med å forebygge mange minnefeil uten en tradisjonell søppelsamler. Det fjerner ikke alle feil, særlig ikke i usikker kode eller applikasjonslogikk.
Rust brukes til systemprogramvare, spillmotorer og blokkjedeinfrastruktur, blant annet i Polkadots økosystem og Ethereumklienter. En klient skrevet i Rust betyr ikke at alle Ethereumkontrakter kan kjøres direkte som Rust-kode; støtten avhenger av nettverket og kjøremiljøet.
7. PHP
PHP er et etablert skriptspråk for servere. Rasmus Lerdorf laget i 1994 verktøy for å følge besøk på sin nettbaserte CV, ikke nettverkspakker. Navnet var først Personal Home Page Tools, og kildekoden ble offentliggjort i juni 1995. I dag betyr PHP PHP: Hypertext Preprocessor.
PHP kan bygge nettsteder og bakgrunnstjenester som kommuniserer med en blokkjede, for eksempel gjennom API eller JSON-RPC. En applikasjon kan dermed kalle kontrakter eller tilby tokenfunksjoner. PHP er ikke i seg selv et vanlig kontraktspråk for EVM; kontrakten kjøres etter nettverkets regler.
PHP er fritt tilgjengelig og har et stort fellesskap og mange biblioteker. Det kan passe til nettdeler av et blokkjedeprosjekt. Påstander om at det er ideelt til nesten alt eller særlig dominerende i DeFi, går for langt.
8. Go
Go, også uformelt kalt Golang, ble utviklet hos Google og offentliggjort som åpen kildekode 10. november 2009. Gorutiner og kanaler støtter samtidighet. Oppgaver kan kjøre parallelt på flere prosessorkjerner, men lavere kostnader eller kortere kjøretid følger ikke automatisk.
Go tar sikte på klar syntaks, raske byggeprosesser og vedlikeholdbar kode. Pakkemodellen hjelper med å organisere og gjenbruke kode. Enkel syntaks erstatter ikke nøye utforming og feilhåndtering.

Kilde: GitHub — Go — programmeringsspråk for blokkjeder
Søppelsamleren håndterer minne som ikke lenger brukes under kjøringen; den er ingen nettverksprotokoll. Go brukes til blokkjedeklienter og andre nettverkstjenester. Packages betyr kodepakker, ikke nettverkspakker.
9. C++
C++ er et generelt programmeringsspråk som bygger videre på C fra 1970-tallet. Det tilbyr blant annet objektorientert og generisk programmering for applikasjoner, operativsystemer og blokkjedeinfrastruktur. Nettverksspesifikk støtte avgjør om C++ også kan brukes direkte til kontrakter.
Språket gir stor kontroll over systemressurser og passer til programvare med høye ytelseskrav. Biblioteker og verktøy er bredt tilgjengelige. Skalering avhenger likevel av arkitektur og implementering, ikke automatisk av språkvalget.
C++ finnes til mange store operativsystemer. Minne og ressurser krever nøye håndtering, men moderne mønstre som RAII, containere og smarte pekere automatiserer mye frigjøring. Søppelsamling frigjør minne; det er noe annet enn feilsøking. Programmer med søppelsamling må også testes og undersøkes for feil.
10. C#
C# er et høynivåspråk i C-familien og en del av .NET-økosystemet. Det støtter blant annet objektorientering og gjenbrukbare komponenter. Kjent syntaks kan lette læring, men kunnskap om C dekker ikke alle C#-egenskaper.
Microsoft presenterte C# rundt år 2000. Microsoft (MSFT ) utviklet språket sammen med .NET-plattformen. Det brukes til nettjenester, mobilapper, spill, IoT og blokkjedeinfrastruktur. Plattformen og verktøyene har siden blitt utvidet.
C# kan være mer produktivt enn C++ i enkelte applikasjoner, avhengig av krav og teamets erfaring. Det stammer ikke utelukkende fra nettutvikling. Bibliotekene og .NET-miljøet gjør det nyttig for blant annet nett- og skytjenester; kontraktstøtten avhenger fortsatt av nettverket.
Sikker programmering krever mer enn et språkvalg
Feil i desentraliserte applikasjoner kan føre til tap og sårbarheter. Velg språk og verktøy som passer nettverket, og kombiner dem med testing, kodegjennomgang og ved behov uavhengige granskninger. Ingen av disse ti språkene forhindrer alene alle feil eller angrep.
Les mer om blokkjedeprosjekter i denne oversikten.












