Digitala tillgångar

Topp 10 blockkedjeprogrammeringsspråk du behöver känna till

mm
Lägg till Securities.io bland dina föredragna källor på Google
Information: Securities.io kan få ersättning när du använder länkar till produkter vi granskar. Det påverkar inte våra redaktionella bedömningar. Vi är inte registrerad investeringsrådgivare; detta är inte investeringsråd. Läs vår affiliateinformation.
Top 10 Blockchain Programming Languages

Sedan Bitcoin introducerades har verktygen för blockkedjeutveckling blivit fler. Vissa språk är särskilt utformade för smarta kontrakt, medan allmänna programmeringsspråk används till noder, applikationer och stödtjänster. Vilket språk som passar beror på nätverket och uppgiften.

Bitcoin Script är ett tidigt språk för att ange villkor för att spendera bitcoin, inte världens första programmeringsspråk. Både idén om smarta kontrakt och programmerbara transaktionsvillkor fanns före Ethereum. Ethereum möjliggjorde en betydligt mer allmänt programmerbar applikationsplattform.

Här presenteras tio språk som används i blockkedjeprojekt, utan inbördes rangordning. Kod som körs direkt av blockkedjan måste skiljas från kod för gränssnitt, servrar och infrastruktur. Alla nätverk stöder inte alla språk för kontrakt.

1. Solidity

Solidity används ofta för smarta kontrakt på Ethereum och andra nätverk som stöder Ethereum Virtual Machine (EVM). Gavin Wood föreslog språket 2014, och Christian Reitwiessner och andra utvecklare arbetade vidare med det. Det är ett statiskt typat högnivåspråk.

Solidity brukar beskrivas som Turingkomplett. Det innebär inte att varje tänkbar funktion kan köras eller att språket automatiskt är effektivt. EVM-körning begränsas bland annat av gas, så ett kontrakt kan inte utföra obegränsade beräkningar.

Syntaxen har påverkats av C++, Python och JavaScript. Klammerparenteser, arv, bibliotek och användardefinierade typer möjliggör bekanta programmeringsmönster. Utvecklare behöver ändå förstå smarta kontrakts särskilda körnings- och säkerhetsmodell.

Källa: GitHub — Solidity, språk för smarta kontrakt

Källa: GitHub

Verktygen och ekosystemet gör Solidity användbart för många EVM-projekt. Popularitet och kort kod garanterar dock inte säkerhet; konstruktion, tester och kodgranskning behövs fortfarande.

2. Vyper

Vyper är ett kontraktsorienterat språk för EVM med Pythonliknande syntax. Enkelhet, läsbarhet och granskningsbarhet är centrala mål, så att utvecklare och granskare lättare kan förstå kontraktets beteende.

Granskningar hjälper till att hitta fel och sårbarheter. Vyper är inte ett lågnivåspråk som direkt beskriver en fysisk dators instruktionsuppsättning: kontraktskoden kompileras för körning i EVM.

Vyper utelämnar medvetet exempelvis klassarv samt överlagring av funktioner och operatorer. Begränsningarna ska minska dold komplexitet. Python är ett allmänt programmeringsspråk, inte ett särskilt Ethereum-språk, och Vyper är inte vanlig Pythonkörning.

3. JavaScript

JavaScript används till gränssnitt och stödtjänster för decentraliserade applikationer. Bibliotek kan skicka transaktioner, anropa kontrakt och läsa händelser. Det innebär inte att JavaScript kan köras direkt som kontraktsspråk på alla nätverk.

Brendan Eich utvecklade JavaScript 1995 på Netscape. Den första versionen skapades snabbt, och därefter har språket utvecklats betydligt. Det används brett på webbplatser, däribland Facebook och YouTube; ett odaterat procenttal bör inte presenteras som aktuell användningsstatistik.

JavaScript körs i webbläsare och även utanför dem genom miljöer som Node.js. Node.js är en körmiljö, inte en separat version av språket. Med den kan utvecklare bygga servrar och tjänster som kommunicerar med blockkedjenoder.

4. Plutus

Plutus omfattar språk och verktyg för smarta kontrakt på Cardano, som använder proof-of-stake. Arkitekturen skiljer sig från Ethereums, så möjligheter och begränsningar måste bedömas utifrån Cardanos modell.

Plutus Core är skriptspråket som körs i Cardanos liggare. Plutus Tx kompilerar Haskellkod till Plutus Core. Haskells statiska typning och funktionella arbetssätt hjälper till att strukturera program, men gör inte en applikation automatiskt felfri.

En applikation kombinerar vanligen valideringskod på kedjan med kod utanför kedjan som bygger transaktioner och kommunicerar med användare. Delarna har olika körningsroller och behöver inte köras samtidigt. GHC är Glasgow Haskell Compiler; Plutus Tx omvandlar vissa koddelar till Cardanos valideringsspråk.

5. Rholang

Rholang utvecklades för samtidiga, distribuerade beräkningar och förknippas med RChain. Språket bygger på rho-kalkylen och meddelandekommunikation, inte den klassiska objektmodellen med klasser och arv. Modulär kod hjälper till att bygga applikationer.

Rholang använder kanaler för att skicka och ta emot meddelanden. Projektets dokumentation beskriver beteendebaserad typning; det är inte samma sak som att kopiera Haskells typsystem. Modellen kan beskriva samtidiga aktiviteter, medan faktisk parallell körning beror på miljön.

Kommunikationsmodellen kan användas för protokoll och smarta kontrakt. Meddelandehantering och kontraktsvillkor måste utformas noggrant. Språket garanterar inte automatiskt korrekta förhandlingar eller rättslig verkställbarhet.

6. Rust

Rust är ett allmänt systemprogrammeringsspråk som kombinerar flera paradigm med delvis C-liknande syntax. Det stöder bland annat inkapsling och traits men inte klassiskt klassarv. Samtidighet innebär att uppgifter kan göra framsteg oberoende av varandra; under rätt förhållanden kan de också köras parallellt.

Rust offentliggjordes 2010, och den stabila versionen 1.0 kom 2015. Systemet för ägarskap och lån hjälper kompilatorn att förebygga många minnesfel utan en vanlig skräpsamlare. Det utesluter inte alla fel, särskilt inte i osäker kod eller applikationslogik.

Rust används till systemprogramvara, spelmotorer och blockkedjeinfrastruktur, bland annat i Polkadots ekosystem och Ethereumklienter. Att en klient skrivs i Rust innebär inte att varje Ethereumkontrakt kan köras direkt som Rustkod; stödet beror på nätverket och körmiljön.

7. PHP

PHP är ett etablerat skriptspråk för serversidan. Rasmus Lerdorf skapade 1994 verktyg för att följa besök på sitt cv på nätet, inte nätverkspaket. Namnet var först Personal Home Page Tools, och källkoden offentliggjordes i juni 1995. Numera betyder PHP PHP: Hypertext Preprocessor.

PHP kan användas till webbplatser och bakgrundstjänster som kommunicerar med en blockkedja, exempelvis genom API eller JSON-RPC. En applikation kan därmed anropa kontrakt eller erbjuda tokenfunktioner. PHP är inte i sig ett normalt kontraktsspråk för EVM; kontraktet körs enligt det aktuella nätverkets regler.

PHP är fritt tillgängligt och har en stor gemenskap och många bibliotek. Det kan passa webbdelar av ett blockkedjeprojekt. Påståenden om att det är idealiskt för nästan allt eller särskilt dominerande inom DeFi är alltför långtgående.

8. Go

Go, informellt även kallat Golang, utvecklades på Google och offentliggjordes som ett projekt med öppen källkod den 10 november 2009. Gorutiner och kanaler stöder samtidighet. Uppgifter kan köras parallellt på flera processorkärnor, men lägre kostnader eller kortare körtid följer inte automatiskt.

Go eftersträvar tydlig syntax, snabb programbyggnad och underhållbar kod. Paketmodellen hjälper till att organisera och återanvända kod. Enkel syntax ersätter inte noggrann konstruktion och felhantering.

Källa: GitHub — Go, språk för blockkedjeutveckling

Källa: GitHub — Go — programmeringsspråk för blockkedjor

Skräpsamlaren hanterar minne som inte längre används under körningen; den är inget nätverksprotokoll. Go används till blockkedjeklienter och andra nätverkstjänster. Packages betyder kodpaket, inte nätverkspaket.

9. C++

C++ är ett allmänt programmeringsspråk som bygger vidare på C, vilket utvecklades på 1970-talet. Det erbjuder bland annat objektorienterad och generisk programmering för applikationer, operativsystem och blockkedjeinfrastruktur. Nätverksspecifikt stöd avgör om C++ även kan användas direkt för kontrakt.

Språket ger stor kontroll över systemresurser och passar prestandakrävande programvara. Bibliotek och verktyg finns i stor omfattning. Skalbarhet beror dock på arkitektur och implementation, inte automatiskt på språkvalet.

C++ finns på många större operativsystem. Minnes- och resurshantering kräver omsorg, men moderna mönster som RAII, behållare och smarta pekare automatiserar mycket frigöring. Skräpsamling frigör minne; det är något annat än felsökning. Även program i språk med skräpsamling måste testas och undersökas för fel.

10. C#

C# är ett högnivåspråk i C-familjen och del av .NET-ekosystemet. Det stöder bland annat objektorientering och återanvändbara komponenter. Bekant syntax kan underlätta inlärningen, men kunskaper i C täcker inte alla egenskaper hos C#.

Microsoft presenterade C# omkring år 2000. Microsoft (MSFT ) utvecklade språket tillsammans med .NET-plattformen. Det används till webbtjänster, mobilappar, spel, IoT och blockkedjeinfrastruktur. Plattformen och verktygen har därefter utökats.

C# kan i vissa applikationer ge högre produktivitet än C++, beroende på krav och gruppens erfarenhet. Språket har inte enbart sitt ursprung i webbutveckling. Biblioteken och .NET-miljön gör det användbart för bland annat webb- och molntjänster; kontraktsstödet beror fortfarande på nätverket.

Säker programmering kräver mer än ett språkval

Fel i decentraliserade applikationer kan orsaka förluster och sårbarheter. Välj språk och verktyg som passar nätverket och kombinera dem med tester, kodgranskning och vid behov oberoende revisioner. Inget av dessa tio språk förebygger ensamt alla fel eller angrepp.

Läs mer om blockkedjeprojekt i denna översikt.

David Hamilton är en heltidsjournalist och en långvarig bitcoinist. Han specialiserar sig på att skriva artiklar om blockchain. Hans artiklar har publicerats i flera bitcoinpublikationer, inklusive Bitcoinlightning.com