AssemblyScript - AssemblyScript
| Paradigme | Multi-paradigme : funksjonell , generisk , imperativ , objektorientert |
|---|---|
| Familie | JavaScript , TypeScript |
| Designet av | Daniel Wirtz, Max Graey |
| Utvikler | AssemblyScript-prosjektet |
| Først dukket opp | 2017 |
| Stabil utgivelse | 0.18.29 / 28. april 2021
|
| Skrive disiplin | Statisk |
| omfang | Lexical |
| Tillatelse | Apache License 2.0 |
| Filnavnutvidelser | .ts |
| Filformater |
Tekst , Unicode (kilde) .wasm binært format (objekt) |
| Nettsted | www |
| Store implementeringer | |
| asc (AssemblyScript-kompilator) | |
| Påvirket av | |
| JavaScript , TypeScript , WebAssembly | |
AssemblyScript er et TypeScript- basert programmeringsspråk (i hovedsak JavaScript med statiske typer) som er optimalisert for WebAssembly og kompilert til WebAssembly ved hjelp av asc , referansen AssemblyScript-kompilator. Den er utviklet av AssemblyScript Project og AssemblyScript-fellesskapet.
Oversikt
I 2017 ble tilgjengeligheten av støtte for WebAss Assembly , en standard definisjon for en lavt nivå bytekode og en tilknyttet virtuell maskin , utbredt blant store nettlesere , og ga webutviklere et kompilasjonsmål på lavere nivå og potensielt høyere ytelse for klientsiden. programmer og applikasjoner som skal kjøres i nettlesere, i tillegg til det tolket (og også typisk dynamisk kompilerte ) JavaScript Web-skriptspråket. WebAssembly gjør det mulig å kompilere programmer og koder på forhånd for å kunne kjøre på potensielt native-nivå eller " bare-metal " ytelse i nettlesere, uten overhead for tolkning eller den første ventetiden til dynamisk kompilering.
Med adopsjonen av WebAssembly i store nettlesere, la Alon Zakai, skaper av Emscripten , en LLVM / Clang- basert C- og C ++ -kompilator som målrettet mot en delmengde av JavaScript kalt asm.js , støtte for WebAssembly som et kompileringsmål i Emscripten, slik at C og / eller C ++ programmer og kode som skal kompileres direkte til WebAssembly.
Mens Emscripten og lignende kompilatorer tillater webutviklere å skrive ny kode, eller porter eksisterende kode, skrevet på et høyt nivå språk som C, C ++, Go og Rust til WebAssemble for å oppnå potensielt høyere ytelsesnivå for utførelse i nettlesere Dette tvinger webutviklere som er vant til å utvikle klientsides web-skript og applikasjoner i JavaScript ( de facto programmeringsspråket på klientsiden i nettlesere) til å bruke et annet språk for å målrette WebAssembly enn JavaScript. AssemblyScript, som en variant av TypeScript som er syntaktisk nesten identisk med JavaScript, lar utviklere som er vant til JavaScript, bruke et kjent språk for å målrette WebAssembly, og potensielt redusere læringskurven til et eget språk som kan kompileres til WebAssembly. Videre, fordi AssemblyScript ble designet for å være et optimalt kildespråk for WebAssembly, gjenspeiler språkets typesystem nøye det for WebAssembly, og språket gir standard lavnivåfunksjoner (vanligvis implementert som makroer ) som kartlegges direkte til WebAssembly-instruksjoner som speiler spesialisert maskinvare. instruksjoner gitt av moderne prosessorer som SIMD- og vektorinstruksjoner og mer spesialiserte instruksjoner som clz (telle ledende nullbiter), ctz (telle etterfølgende nullbiter) og popcnt ( populasjonsantall ), brukt i applikasjoner som kryptering og kryptografiske biblioteker.
AssemblyScript-kompilatoren asc er basert på Binaryen, en back-end kompilatorverktøykjede utviklet av Alon Zakai som kompilerer til WebAssembly og er en del av Emscripten (som Zakai også utviklet). Den stigende kompilatoren og andre verktøy er tilgjengelige via NPM pakkebehandleren.
Mens WebAssembly opprinnelig ble designet for kjøring i nettlesere, har utviklingen av WASI (WebAssembly System Interface), en fellesspesifikasjon for et standard API som gir WebAssembly-programmer tilgang til systemanrop og andre operativsystemfunksjoner , ført til utviklingen av WebAssembly runtime miljøer fra prosjekter som Wasmtime og Wasmer som tillater WebAssembly, og kode skrevet på språk som AssemblyScript som kan kompileres til den, også å kjøre i ikke-webmiljøer.
Kompatibilitet med JavaScript
AssemblyScript er samlet til WebAssembly-moduler, som deretter kan instantieres til websider på klientsiden ved hjelp av standard JavaScript-metoder, som WebAssembly.compileStreaming og WebAssembly.instantiateStreaming akkurat som standard WebAssembly-binærfiler. Data som går mellom JavaScript og de kompilerte WebAssembly-modulene, samt funksjonssamtaler mellom JavaScript og WebAssembly, er da de samme som for alle WebAssembly-moduler.
Fordi AssemblyScript-språket stort sett er et delsett av TypeScript (det har også et lite supersett av TypeScript), er det mulig å skrive et AssemblyScript-program ved hjelp av delsettet og kompilere det til både vanlig JavaScript og WebAssembly, ved å bruke både TypeScript-kompilatoren og AssemblyScript-kompilatoren , henholdsvis. Dette muliggjør bærbar kode som kjører i både JavaScript og WebAssembly miljøer.
Bruk
Fra og med mars 2021 er omtrent 3000 prosjekter vert på GitHub skrevet, helt eller delvis, i AssemblyScript, med omtrent 5000 nedlastinger av AssemblyScript-kompilatoren per uke via npm .
Resepsjon
Lead Emscripten-utvikler Alon Zakai har karakterisert AssemblyScript som “designet med tanke på WebAssembly og kodestørrelse. Det er ikke et eksisterende språk vi bruker til et nytt formål, men det er et språk designet for WebAssembly. Den har god wasm-opt integrasjon - faktisk er den bygget med den - og det er veldig enkelt å få god kodestørrelse. ”
Den norske musikeren Peter Salomonsen demonstrerte bruken av AssemblyScript for sanntids-kompilering til WebAssembly i live elektronisk musikksyntese, og sa: "Jeg valgte AssemblyScript fordi den har høyt lesbarhet og kontroll på lavt nivå; Det er som et språk på høyt nivå, men du får den følelsen på et lavt nivå, og du kan til og med skrive direkte WebAssemble-egenart hvis du vil. ”
Aaron Turner, senioringeniør i Fastly , en cloud computing-tjenesteleverandør som bruker WebAssembly for selskapets Compute @ Edge serverløse beregningsmiljø, skrev i en gjennomgang av AssemblyScript:
Mens AssemblyScript krever strengere skriving enn TypeScript, holder den seg så nært som mulig TypeScript-syntaks og semantikk - noe som betyr at de fleste JavaScript-utviklere vil finne AssemblyScript behagelige å bruke - og det gir god støtte for det moderne JavaScript-økosystemet. For eksempel er AssemblyScript-kompilatoren tilgjengelig på npm , samt vanlige AssemblyScript-verktøy og biblioteker som as-pect . AssemblyScript filer også bruke Loggfila er ' Ts ' filtype, og det inkluderer riktig typings for å tillate AssemblyScript å piggy-back på typescript verktøy, som for eksempel Loggfila linter. Med de rette små tilpasningene kan AssemblyScript til og med brukes med TypeScript-kompilatoren.
Dette er veldig spennende, ettersom AssemblyScript tilbyr et lavt overhead-inngangspunkt for JavaScript-utviklere å plukke opp et språk for å sende ut WebAssembly - både når det gjelder å lære å lese og skrive AssemblyScript, samt å bruke mye av det allerede eksisterende verktøyet som allerede kan være i en arbeidsflyt for JavaScript-utviklere. AssemblyScript blir ofte referert til i WebAssembly-fellesskapet som en flott inngangsport til å plukke opp WebAssembly. Det gir en stor gruppe utviklere som allerede skriver applikasjoner for nettet en vei å plukke opp og lære WebAssembly. Selv om du begynner fra bunnen av og ikke er spesielt kjent med JavaScript eller TypeScript, er AssemblyScript et solid valg når du velger et språk for å begynne å sende WebAssembly.
Turner fortsatte imidlertid med å sitere språkets relative nyhet og dermed mangelen på noen funksjoner tilgjengelig på større, mer komplekse og etablerte programmeringsspråk som potensielle mangler ved språket.
Se også
Referanser
Eksterne linker
- AssemblyScript.org (offisielt nettsted)
- AssemblyScript-dokumentasjon (prosjektside)
- AssemblyScript-prosjektet (på GitHub)
- assemblyscript (on npm )