Programmering

Seje værktøjer til kompilering til JavaScript

Hver programmør har et yndlingssprog eller to. JavaScript-elskere er de heldigste i disse dage, fordi deres sprog overtager Internettet, og Internettet overtager verden. De, hvis hjerter bor andre steder i programmeringssprogsverdenen, sidder dog fast. De kan enten forblive på sidelinjen og forbande den ubarmhjertige juggernaut af HTML, CSS, JavaScript og Node.js, eller de kan finde en måde at elske det på.

Heldigvis er der en tredje måde, der giver dig mulighed for at nyde glæden ved dit yndlingssprog, mens du stadig implementerer din kode i den stadigt voksende verden af ​​JavaScript: Du skal blot konvertere din kode, hvilket kan være overraskende let. Ydeevne kan lide lidt, men ofte meget mindre, end du måske forestiller dig. Derefter kan du sende din kode til browsere og holde op med at prøve at få folk til at installere eksekverbare filer.

Den standhaftige vil føle, at dette er en voldsom kapitulation, et bittert tilbagetog fra de principper, der binder dig til din yndlingssyntaks. Nogle føler endda, at det er en smule forræderi, en handling så forræderisk, at du skal skjule det for dine kolleger. Andre vil helt korrekt antyde, at det ikke er så simpelt. At få koden til at køre er en ting. Limning af delene sammen og oprettelse af et brugergrænseflade er masser af ekstra arbejde.

Du er velkommen til at vælte dig i din skam, men der er masser af rationaliseringer, der gør ideen mere velsmagende. For det første kører JavaScript-motorer meget, meget hurtigere, end de gjorde tidligere. For det andet har det aldrig været nemmere at skabe et web-UI takket være rammer og rigeligt HTML / CSS-designtalent. For det tredje bliver JavaScript lidt af en lingua franca. Hvis du kan konvertere alle disse sprog til JavaScript, og listen er overraskende lang, kan du også linke dem alle sammen.

Her ser vi på de mange små sprog, der gør det muligt for nogle af de mest populære programmeringssprog at kompilere til JavaScript. En fremtidig artikel vil undersøge, hvordan falmende sprog genfødes ved at bringe dem til browseren. Der er ingen grund til at blive bange i medlidenhed eller had. Disse teknikker giver dig mulighed for at nyde dit yndlingssprog og køre hvor som helst JavaScript gør.

Rubin

Der er en række muligheder, der lader dig tænke som en Ruby-programmør, mens du kører i et JavaScript-miljø.

RubyJS er for eksempel et JavaScript-bibliotek, der tilføjer mange af de grundlæggende primitiver i et JavaScript-objekt. Hvad du skriver er teknisk JavaScript, men det specielle Ruby-objekt opfører sig som Ruby-kode det meste af tiden. Strenge, tal, itteratorer og tællere venter på dig.

Hvis det ikke er nok at skrive JavaScript, der fungerer som Ruby, oversætter Opal Ruby-kildekoden direkte til JavaScript. Det opfører sig ofte som en Ruby VM, men nogle gange gør det det ikke. Rubys foranderlige strenge konverteres for eksempel direkte til JavaScript's uforanderlige, hvilket ikke burde være et problem for nogle applikationer, men kan gøre et par mennesker sindssyge. Andre små effekter som denne kan føre til uhøflige overraskelser i kanttilfælde.

For dem, der ønsker mere, tilbyder HotRuby en mere komplet løsning, en virtuel JavaScript-maskine, der churner gennem Ruby op-koder. Kodebasen bliver lidt gammel, men den giver ægte troende en anden mulighed.

Java

Det er svært at vide, hvad der inspirerede Google til at oprette Google Web Toolkit, en forprocessor, der konverterer Java til JavaScript. Måske elskede lederen Java og ville ikke have den til at dø. Måske havde de ekstra Java-genier, der sad og ventede på at køre Internettet.

Uanset årsagen gjorde de det, og de bruger det ofte til deres mest sofistikerede webprodukter. Det er en god gave til alle med en bunke Java og ikke tid til at omskrive den. Sprogets tarm er alle der, men nogle af de mindre almindelige klasser som BigInteger mangler; når det er sagt, kan du normalt finde en måde at tilføje dem på. Brugergrænsefladerammen er stort set lånt fra Swing, så Swing-udviklere vil føle sig hjemme. Andre finder det ikke for svært at lære.

Google Web Toolkit er langt fra det eneste valg for Java-programmører. Java2Script er fuldt integreret med Eclipse, og GrooScript konverterer Java's kysende fætter, Groovy.

Der er flere værktøjer, der kører JVM-byte-kode med JavaScript, en smart idé, der lader dig implementere JAR-filer, selvom du ikke har Java-kilden. Nogle, som Doppio og Node-jvm, er tolke; andre, som TeaVM eller Dragome, vil konvertere bytekoden til JavaScript permanent.

Erlang

Erlang elskere har flere muligheder. En løsning er at bruge Erjang, et værktøj, der kører Erlang på JVM, som derefter bruges til at køre Java-byte-kode med en af ​​Java-indstillingerne ovenfor. Det lyder simpelt, ikke?

Shen er en kompilator, der konverterer Erlang og dens fætre, som Elixir, Joxa og Lol, til JavaScript. Hvis du vil køre denne kode i Node.js, er der også en pakke erlang-shen-js.

En tredje mulighed er at bruge LuvvieScript, en streng delmængde af Erlang, der har fået kroge til at få adgang til alle DOM-objekter. Du bruger den Erlang-struktur, du elsker, og den oversætter dine instruktioner til noget, som DOM forstår. Det er ikke nøjagtigt det samme, men det gør det.

C

Mange mennesker er overraskede over at finde ud af, at de kan bruge C- eller C-lignende sprog med JavaScript. Sikker på, den grundlæggende JavaScript-syntaks er meget lig C, men indvoldene er forskellige. C lader dig røre ved hukommelse direkte, men JavaScript skjuler alle disse detaljer. C giver dig mulighed for at manipulere markører, men JavaScript beskytter dig mod deres farlige magt. Alligevel er disse forskelle overvindelige med lidt smart hacking.

Det er måske ikke fair at kalde LLJS en version af C, men denne version af JavaScript tilbyder statisk typede variabler og programmeringskontrol af hukommelsen - ja, ikke hukommelsen i sig selv, men en JavaScript-version af den. Dokumentationen kan godt lide at love pausefri udførelse, fordi der ikke er nogen affaldsindsamling.

Hvis du vil arbejde med standard C, konverterer Clue C til JavaScript og en række andre script-sprog som Perl eller Lua. Udviklerne hævder endda, at nogle koder rent faktisk kører hurtigere i JIT for disse dynamiske sprog, end det vil, når de kompileres til indfødte binære filer. Hemmeligheden er, at JIT'erne kan bemærke ting under løbetiden, som de grundlæggende kompilatorer ikke kunne, fordi de kan se programmet køre.

Det største navn kan være Emscripten, en modificeret version af LLVM, der er kablet for at spytte ud instruktioner til asm.js i stedet for maskinkode. Hemmeligheden er, at asm.js er en smal delmængde af JavaScript designet til let at blive optimeret af de nyeste JavaScript-motorer, som SpiderMonkey. Resultaterne er imponerende, og noget af det bedste bevis kommer fra spilfællesskabet. Både Unity- og Unreal-motorerne kan køre spil i HTML5-kompatible browsere.

Python

Python er et andet populært dynamisk sprog, der nemt kan kortlægges til JavaScript. Mange af de interne funktioner er ens, og nogle af de største forskelle er i syntaksen.

Enklere muligheder som RapydScript og PyvaScript tilbyder kun Python-lignende syntaks, der er oversat ret direkte til JavaScript. De vil foretage et par transformationer, som f.eks. Indsætte krøllede parenteser for at matche de hvide mellemrumsindrykkede blokke og voilà - det kører i en browser. Disse er mere for programmører, der tænker i JavaScript, men som ønsker at skrive pythonisk, som sprogelskere siger.

Mere komplekse versioner, som PYXC-PJ og Pyjs, konverterer aktivt Python til JavaScript og skaber ofte noget, der er ret læsbart - eller mindst lige så læsbart som den originale kode. Pyjs leveres også med et widgetværktøjssæt, der gør det ret meget lig Google Web Toolkit.

Det sjoveste kan dog være PyPy, et utroligt stykke software engineering med næsten Rube Goldbergian-proportioner. Python går ind og kører på en Python-tolk skrevet i RPython, en delmængde af Python designet til let at blive kompileret. Denne RPython kompileres derefter ned til noget, der ligner C, der kan føres ind i Emscripten. Udviklerne hævder, at de kan vise nogle Python-benchmarks, der kører hurtigere i SpiderMonkey end CPython.

Hvis de kan gøre det med Python og C, kan du også.

JavaScript i et andet kostume

Selvfølgelig, selv når det kommer til JavaScript, har du alternativer. Når alt kommer til alt, kan nogle mennesker lide tegnsætningstegn, og andre ikke. CoffeeScript er til de mennesker, der ikke gør det. Hvis du har brug for at programmere i JavaScript, men har ondt af at skrive så mange semikoloner eller krøllede parenteser, er CoffeeScript noget for dig.

Tarmene til CoffeeScript er de samme som JavaScript, fordi det ikke rigtig er et sprog. Det er en forprocessor, der tilføjer semikolonerne og krøllede parenteser, så du behøver ikke. Du skriver dit program ud i Ruby-lignende enkelhed, og CoffeeScript konverterer det til en minificeret version af JavaScript.

Dette er ikke det samme som programmering på et andet sprog, fordi de variabler og funktioner, du definerer, stadig opfører sig som JavaScript-variabler og -funktioner. Variablerne vil stadig blive skrevet dynamisk, og alle de små forværringer vil stadig være der. Den matematiske og den egernlige, overbelastede opførsel af plus-operatøren vil stadig bære dig, men du sparer lidt tid på at skrive.

CoffeeScript-verdenen er bemærkelsesværdig forskelligartet. Når verden først indså, at den kunne forbehandle sin kode, kom mange ind i spillet. Iced CoffeeScript er for eksempel som almindelig CoffeeScript, men med et par ekstra konstruktioner, der gør asynkrone opkald lidt renere og enklere at skrive og læse. Der kan være mindst et dusin fætre, der tilbyder at forenkle din særlige programmeringsstil.

Relaterede artikler

  • 7 grunde til, at rammer er de nye programmeringssprog
  • 7 tidløse lektioner i programmering af 'gråbjælker'
  • 9 banebrydende sprog, der er værd at lære nu
  • Hent: Den professionelle programmørs guide til forretningsoverlevelse
  • Hent: 2015 Award of the Year of Technology
  • Hent: 29 tip til at lykkes som en uafhængig udvikler
  • Anmeldelse: De fire store Java IDE'er sammenlignet
  • Hent: Praktisk med 10 JavaScript-redaktører og IDE'er
  • 10 kampe raser for udvikleres hjerter og sind
  • Angreb af programmeringssprogene på et bogstav
  • PHP vs Node.js: En episk kamp for udviklerens mind share
  • 15 teknologier, der ændrer, hvordan udviklere arbejder
  • 12 forudsigelser for fremtiden for programmering
  • 15 varme programmeringstendenser - og 15 bliver koldt
  • Dev-olution: Hilser 19 generationer af computerprogrammerere
  • 10 funktioner, vi vil se i HTML6