Abstrakt. Vi reducerar JavaScript till en kärnanalys strukturerad som en småskalig operationell semantik. Vi presenterar flera egenheter i språket och visar att vår kalkyl modellerar dem. Vi explicerar avsockringsprocessen som förvandlar JavaScript-program till sådana i kärnan. Vi visar trohet mot JavaScript genom att använda verkliga testsviter. Slutligen illustrerar vi nyttan genom att definiera en säkerhetsfastighet, genomföra den som ett typsystem på kärnan, och utvidga den till hela språket. Den växande användningen av JavaScript har skapat helt nya tekniska och affärsmodeller för programkonstruktion och installation. JavaScript är ett funktionsrikt språk med många egenheter, och dessa egenheter utnyttjas ofta av säkerhets- och integritetsattacker. Detta gäller särskilt i fall där JavaScript har en välbekant syntax men en okonventionell semantik. På grund av dess popularitet och brister har företag och forskare försökt tämja JavaScript via programanalyser [4, 9, 10, 13], underspråk [5, 7, 17] och mycket mer. Dessa verk hävdar, men visar inte på sundhet, delvis på grund av att vi saknar en lättfattlig skildring av språket. JavaScript-standarden [6] är kapig och informell, medan en stor formell semantik [15] är stor, inte mottaglig för konventionella bevistekniker, och ärver standardens komplexitet, som vi diskuterar i avsnitt 5. I kontrast: -Vi presenterar ett kärnspråk, λ JS, som förkroppsligar JavaScripts väsentliga funktioner (sans eval). λ JS passar på tre sidor och lämpar sig väl för bevistekniker som ämnesreduktion. -Vi visar att vi kan avsockra JavaScript till λ JS. I synnerhet, avsockring handtag beryktade JavaScript funktioner som denna och med, så λ JS själv förblir enkel (och därmed förenklar bevis som använder den). -Vi mekaniserar både λ JS och avsockring. -För att visa överensstämmelse med verkligheten, vi framgångsrikt testa λ JS och avsockring mot själva Mozilla JavaScript testsviten. -Slutligen visar vi användningen av våra semantik genom att bygga en säker delmängd av JavaScript. Detta program belyser hur vår partitionering av JavaScript in i kärnan och syntaktiskt socker ger struktur till bevis. Våra tilläggsmaterial (full avsockring, verktyg, etc.) finns tillgängliga på
λ J S REF är en kärna av JavaScript med en reduktion semantik.
The Essence of JavaScript
{'venue': 'ArXiv', 'journal': 'ArXiv', 'mag_field_of_study': ['Computer Science']}