Adopting Node.Js and Coffeescript in a Software Design Course

Total Page:16

File Type:pdf, Size:1020Kb

Adopting Node.Js and Coffeescript in a Software Design Course Adopting Node.js and CoffeeScript in a Software Design Course Adopting Node.js and CoffeeScript in a Software Design Course Introduction Midwest Instruction and Computing Symposium Course Outline Server April 25, 2014 Technologies Node.js CoffeeScript MongoDB Maxwell Marti Client Technologies [email protected] jQuery Backbone.js Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion The Software Design and Development Course Adopting Node.js and CoffeeScript in a Software Design Course Single project Introduction Course Outline Small groups Server Technologies Node.js Agile methodology CoffeeScript MongoDB Client External customer: LightSide Labs Technologies jQuery Backbone.js Current technology Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion Node.js Adopting Node.js and CoffeeScript in a Software Design Course Framework for network applications Introduction Uses the V8 JavaScript Engine Course Outline Server Technologies Built in web server Node.js CoffeeScript MongoDB Asynchronous I/O and JavaScript evaluation Client Technologies Single-threaded event loop jQuery Backbone.js Bootstrap Large number of additional modules Testing and Integration Course Workflow Strider Mocha Conclusion Node Modules Adopting Node.js and CoffeeScript in a Software Design Course Introduction Course Outline Express Server Technologies Node.js Hogan CoffeeScript MongoDB Blanket Client Technologies jQuery Backbone.js Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion CoffeeScript Adopting Node.js and CoffeeScript in a Software Design Course Introduction A language that transpiles to JavaScript Course Outline Server Clean syntax Technologies Node.js CoffeeScript About 1/3 fewer lines of code MongoDB Client Technologies Scope safety and object encapsulation jQuery Backbone.js Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion CoffeeScript to JavaScript Example Adopting Node.js and var myObj, num, CoffeeScript in a Software numSquared, square; Design Course num = 9; num = 9 Introduction Course Outline square = (x) -> x * x square = function(x) { Server numSquared = square num return x * x; Technologies Node.js }; CoffeeScript myObj = MongoDB name: "Mr. Object", numSquared = square(num); Client Technologies likes: "squaring numbers", jQuery Backbone.js mySqare: square myObj = { Bootstrap name: "Mr. Object", Testing and Integration likes: "squaring numbers", Course Workflow mySqare: square Strider Mocha }; Conclusion MongoDB Adopting Node.js and CoffeeScript in a Software Design Course Introduction Document oriented database Course Outline Server Records in JavaScript Object Notation (JSON) Technologies Node.js CoffeeScript Queries in JavaScript MongoDB Client Technologies Mongoose module provides extra utility jQuery Backbone.js Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion jQuery Adopting Node.js and CoffeeScript in a Software Design Course Introduction DOM interaction library Course Outline Server Ubiquitous Technologies Node.js CoffeeScript Powerful selectors and functions MongoDB Client Technologies Integrates with other front-end tools jQuery Backbone.js Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion jQuery Example Adopting Node.js and CoffeeScript in a Software Design Course // set html for element $("p:first").html( "This is the <em>first</em> paragraph"); Introduction Course Outline Server // set value for all inputs of myClass Technologies $("input.myClass").val("default text"); Node.js CoffeeScript MongoDB // bind a function to the click event of an element Client Technologies $("#myButton").on("click", function(){ jQuery alert("Button was clicked"); Backbone.js Bootstrap }); Testing and Integration Course Workflow Strider Mocha Conclusion Backbone.js Adopting Node.js and CoffeeScript in a Software Design Course MV* Framework for client-side applications Introduction HTML rendering on the browser Course Outline Server Technologies Models, Views, Routers Node.js CoffeeScript MongoDB Hierarchical views with event emission Client Technologies jQuery REST API conformity with Models and Collections Backbone.js Bootstrap Minimal opinionation Testing and Integration Course Workflow Strider Mocha Conclusion Bootstrap Adopting Node.js and CoffeeScript in a Software Design Course Formerly Twitter Bootstrap Introduction Course Outline Responsive grid layouts Server Technologies Node.js CSS classes and JavaScript utilities for the client CoffeeScript MongoDB Client Easy to customize Technologies jQuery Backbone.js Simplifies web interface design Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion Development Workflow Adopting Node.js and CoffeeScript in a Software Design Course Introduction WebStorm IDE (based on IntelliJ IDEA) Course Outline Server Unit testing with Mocha Technologies Node.js CoffeeScript Version control with GitHub MongoDB Client Technologies Continuous integration with Strider jQuery Backbone.js Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion Strider Adopting Node.js and CoffeeScript in a Software Design Course Continuous integration and deployment server Introduction Pulls code from GitHub Course Outline Server Technologies Compiles Coffeescript and runs tests Node.js CoffeeScript MongoDB Computes code coverage metrics Client Technologies Deploys projects to web server for evaluation jQuery Backbone.js Bootstrap Supports plugins and custom shell scripts Testing and Integration Course Workflow Strider Mocha Conclusion Unit Testing With Mocha Adopting Node.js and CoffeeScript in a Software Design Course Introduction Defines structure and syntax of test code Course Outline Server Choice of assertion libraries Technologies Node.js CoffeeScript Different testing styles supported MongoDB Client Technologies Versions for Node.js and client-side code jQuery Backbone.js Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion Conclusion and Observations Adopting Node.js and CoffeeScript in a Software Design Course Unified language both helps and hurts students Introduction Course Outline Particular difficulty with Backbone.js Server Technologies Node.js Module driven development CoffeeScript MongoDB Client High velocity and low familiarity affects testing practices Technologies jQuery Backbone.js Customer interaction Bootstrap Testing and Integration Course Workflow Strider Mocha Conclusion.
Recommended publications
  • Extending Basic Block Versioning with Typed Object Shapes
    Extending Basic Block Versioning with Typed Object Shapes Maxime Chevalier-Boisvert Marc Feeley DIRO, Universite´ de Montreal,´ Quebec, Canada DIRO, Universite´ de Montreal,´ Quebec, Canada [email protected] [email protected] Categories and Subject Descriptors D.3.4 [Programming Lan- Basic Block Versioning (BBV) [7] is a Just-In-Time (JIT) com- guages]: Processors—compilers, optimization, code generation, pilation strategy which allows rapid and effective generation of run-time environments type-specialized machine code without a separate type analy- sis pass or complex speculative optimization and deoptimization Keywords Just-In-Time Compilation, Dynamic Language, Opti- strategies (Section 2.4). However, BBV, as previously introduced, mization, Object Oriented, JavaScript is inefficient in its handling of object property types. The first contribution of this paper is the extension of BBV with Abstract typed object shapes (Section 3.1), object descriptors which encode type information about object properties. Type meta-information Typical JavaScript (JS) programs feature a large number of object associated with object properties then becomes available at prop- property accesses. Hence, fast property reads and writes are cru- erty reads. This allows eliminating run-time type tests dependent on cial for good performance. Unfortunately, many (often redundant) object property accesses. The target of method calls is also known dynamic checks are implied in each property access and the seman- in most cases. tic complexity of JS makes it difficult to optimize away these tests The second contribution of this paper is a further extension through program analysis. of BBV with shape propagation (Section 3.3), the propagation We introduce two techniques to effectively eliminate a large and specialization of code based on object shapes.
    [Show full text]
  • Niklas Appelmann
    Niklas Appelmann Full-Stack Web Developer [email protected] https://niklasappelmann.de +49 151 6469 0684 Nationality German Education Bachelor of Science Computer Science Certificates Company Data Protection Officer IHK / Betrieblicher Datenschutzbeauftragter IHK (June 2018) Languages English (fluent) German (native) Skills Project Management Agile, Scrum, Kanban Frameworks and Tools AWS, Docker, Selenium, Puppeteer, MongoDB Programming Languages / Frameworks React, Meteor, Node.js, JavaScript, Python, Clojure, ClojureScript, CoffeeScript, TypeScript Relevant 3.5 years Experience Project examples since 01/2020 Fullstack Development, Freelance Various engagements in web development. • Automation of lead generation and business processes using Python, Selenium and Puppeteer. • Frontend development using ClojureScript and Reagent • Backend development using Node.js, Clojure and MongoDB • DevOps and Backend development at the government hackathon #wirvsvirus (2020) • AWS consulting (S3, Lambda, EC2, ECS, Route53, SQS, SES, Lightsail, DynamoDB, CloudFront) • Serverless fullstack architecture using AWS Team members: Other freelancers and remote contributors Technologies / Python, Selenium, Puppeteer, ClojureScript, Clojure, reagent, MongoDB, Tools Node.js, Meteor 03/2018 - Fullstack-Developer, blink.it GmbH & Co. KG 12/2019 Development of a progressive Meteor web application in a fast paced startup environment. • Built frontend functionality with React (JavaScript, CoffeeScript), Blaze, HTML5, SCSS/CSS • Built backend functionality with Node.js, Python and MongoDB • Worked on performance optimiziation on a large scale multi-tenant reactive application • Developed tools for data migration and automation of internal processes with Python • Developed an internal solution to migrate Pipedrive leads to Hubspot for a large set of leads and past deal flows Team members: 10 Technologies / React, AWS, JavaScript, CoffeeScript, Python, MongoDB, Node.js, Blaze, Tools HTML5, SCSS/CSS, Selenium, SCORM 10/2016 - Software Engineer (working student), blink.it GmbH & Co.
    [Show full text]
  • Onclick Event-Handler
    App Dev Stefano Balietti Center for European Social Science Research at Mannheim University (MZES) Alfred-Weber Institute of Economics at Heidelberg University @balietti | stefanobalietti.com | @nodegameorg | nodegame.org Building Digital Skills: 5-14 May 2021, University of Luzern Goals of the Seminar: 1. Writing and understanding asynchronous code: event- listeners, remote functions invocation. 2. Basic front-end development: HTML, JavaScript, CSS, debugging front-end code. 3. Introduction to front-end frameworks: jQuery and Bootstrap 4. Introduction to back-end development: NodeJS Express server, RESTful API, Heroku cloud. Outputs of the Seminar: 1. Web app: in NodeJS/Express. 2. Chrome extensions: architecture and examples. 3. Behavioral experiment/survey: nodeGame framework. 4. Mobile development: hybrid apps with Apache Cordova, intro to Ionic Framework, progressive apps (PWA). Your Instructor: Stefano Balietti http://stefanobalietti.com Currently • Fellow in Sociology Mannheim Center for European Social Research (MZES) • Postdoc at the Alfred Weber Institute of Economics at Heidelberg University Previously o Microsoft Research - Computational Social Science New York City o Postdoc Network Science Institute, Northeastern University o Fellow IQSS, Harvard University o PhD, Postdoc, Computational Social Science, ETH Zurich My Methodology Interface of computer science, sociology, and economics Agent- Social Network Based Analysis Models Machine Learning for Optimal Experimental Experimental Methods Design Building Platforms Patterns
    [Show full text]
  • Download Ebook ^ Javascript: Ajax, Cross-Site Scripting, Couchdb
    W5CAMG0U1NWQ < PDF ^ JavaScript: Ajax, Cross-Site Scripting, CouchDB, WebKit, JQuery, Dojo Toolkit, Bookmarklet, ActionScript, V8,... JavaScript: A jax, Cross-Site Scripting, Couch DB, W ebKit, JQuery, Dojo Toolkit, Bookmarklet, A ctionScript, V 8, SpiderMonkey, Qooxdoo, Ext JS Filesize: 7.09 MB Reviews It becomes an amazing book which i actually have at any time study. It is actually loaded with wisdom and knowledge You wont sense monotony at at any time of your respective time (that's what catalogues are for regarding should you request me). (Rosina Schowalter V) DISCLAIMER | DMCA EUQW6UIGSWMD > Kindle « JavaScript: Ajax, Cross-Site Scripting, CouchDB, WebKit, JQuery, Dojo Toolkit, Bookmarklet, ActionScript, V8,... JAVASCRIPT: AJAX, CROSS-SITE SCRIPTING, COUCHDB, WEBKIT, JQUERY, DOJO TOOLKIT, BOOKMARKLET, ACTIONSCRIPT, V8, SPIDERMONKEY, QOOXDOO, EXT JS Books LLC, Wiki Series, 2011. Condition: New. This item is printed on demand for shipment within 3 working days. Read JavaScript: Ajax, Cross-Site Scripting, CouchDB, WebKit, JQuery, Dojo Toolkit, Bookmarklet, ActionScript, V8, SpiderMonkey, Qooxdoo, Ext JS Online Download PDF JavaScript: Ajax, Cross-Site Scripting, CouchDB, WebKit, JQuery, Dojo Toolkit, Bookmarklet, ActionScript, V8, SpiderMonkey, Qooxdoo, Ext JS R6UOTKQRMAXT « PDF \ JavaScript: Ajax, Cross-Site Scripting, CouchDB, WebKit, JQuery, Dojo Toolkit, Bookmarklet, ActionScript, V8,... See Also A Smarter Way to Learn JavaScript: The New Approach That Uses Technology to Cut Your Effort in Half Createspace, United States, 2014. Paperback. Book Condition: New. 251 x 178 mm. Language: English . Brand New Book ***** Print on Demand *****.The ultimate learn-by-doing approachWritten for beginners, useful for experienced developers who want to... Read PDF » Why We Hate Us: American Discontent in the New Millennium Random House USA Inc, United States, 2009.
    [Show full text]
  • Comparing Javascript Engines
    Comparing Javascript Engines Xiang Pan, Shaker Islam, Connor Schnaith Background: Drive-by Downloads 1. Visiting a malicious website 2. Executing malicious javascript 3. Spraying the heap 4. Exploiting a certain vulnerability 5. Downloading malware 6. Executing malware Background: Drive-by Downloads 1. Visiting a malicious website 2. Executing malicious javascript 3. Spraying the heap 4. Exploiting a certain vulnerability 5. Downloading malware 6. Executing malware Background: Drive-by Downloads Background: Drive-by Downloads Setup: Making the prototype null while in the prototype creates a pointer to something random in the heap. Background: Drive-by Downloads Environment: gc( ) is a function call specific to Firefox, so the attacker would want to spray the heap with an exploit specific to firefox. Background: Drive-by Downloads Obfuscation: If the browser executing the javascript it firefox,the code will proceed to the return statement. Any other browser will exit with an error due to an unrecognized call to gc( ). Background: Drive-by Downloads Download: The return will be to a random location in the heap and due to heap-spraying it will cause shell code to be executed. Background: Goal of Our Project ● The goal is to decode obfuscated scripts by triggering javascript events ● The problem is when triggering events, some errors, resulting from disparity of different engines or some other reasons, may occur and terminate the progress ● We need to find ways to eliminate the errors and Ex 1therefore generate more de-obfuscated scripts <script> function f(){ //some codes gc(); var x=unescape(‘%u4149%u1982%u90 […]’)); eval(x); } </script> Ex 2 <script type="text/javascript" src="/includes/jquery/jquery.js"></script> Project Overview - Part One ● Modify WebKit engine so that it can generate error informations.
    [Show full text]
  • E-Commerce Application Using MERN Stack
    Quang Nhat Mai E-commerce Application using MERN stack Metropolia University of Applied Sciences Bachelor of Engineering Information Technology Bachelor’s Thesis 30 August 2018 Abstract Author Quang Nhat Mai Title E-commerce Application using MERN stack Number of Pages 36 pages + x appendices Date 30 August 2020 Degree Bachelor of Engineering Degree Programme Information Technology Professional Major Software Engineering Instructors Janne Salonen This thesis is about studying the basic components of MERN Stack technology such as: MongoDB, ExpressJS framework, ReactJS library, and NodeJS platform. Discussing the basic functions of an e-commerce web application such as sign up, sign in, showing dash- boards, displaying store categories and products Using MERN Stack technology in conjunc- tion with Braintree to build a web application to search for product stores and payment gate- way. Develop administrative functions for the website such as: user management, store management, statistics, and reports. Since then, this topic is declared to research and create an online product search website so that small grocery stores and groceries can post and manage their products right on the website. website system and branding. At the same time, the store can link to its own website (if any). For customers, they can quickly search for urgent products from their nearby stores. Based on the search results, customers can directly contact the store owner to discuss more about the product they are looking for. Keywords Contents List of Abbreviations 1 Introduction
    [Show full text]
  • Fat-Free Framework 1.4.1 Quick Reference Akismet Auth Data
    Akismet Data An API wrapper that you can use during input validation to Input data handlers and validators. determine if a blog comment, trackback, or pingback contains spam. This plug-in requires a key from akismet.com. input( string fields, mixed handler, [ string tags ],[ integer filter ], [ array options ] ); check( string text, string author, string email, string url ); Assign handler to HTML form fields for validation and Submit content (usually a blog comment) to akismet.com. manipulation. handler may be an anonymous or named function, Returns TRUE if the content is determined as spam. a single or daisy-chained string of named functions similar to the route() method. This command passes two arguments to handler ham( string text, string author, string email, string url ); function: value and field name. HTML and PHP tags are stripped Report content as a false positive. If the argument tags is not specified. PHP validation/sanitize filters, filter flags, and options may be passed as additional spam( string text, string author, string email, string url ); Quick Reference Quick Reference arguments. See the PHP filter_var() function for more details on Report content that was not marked as spam. filter types. verify( string key ); scrub( mixed value, [ string tags ] ); Secure approval from akismet.com to use the public API for Remove all HTML tags to protect against XSS/SQL injection spam checking. A valid key is required to use the API. Returns attacks. tags , if specified, will be preserved. If value is an array, TRUE if authentication succeeds. 1.4.1 1.4.1 HTML tags in all string elements will be scrubbed.
    [Show full text]
  • Demystifying V8 and Javascript Performance Twitter @Thlorenz | Github @Thlorenz | Irc Thlorenz Data Types
    Demystifying v8 and JavaScript Performance twitter @thlorenz | github @thlorenz | irc thlorenz Data Types ECMA defines data types v8 maps them to optimized data types Primitive Types Boolean Number String Null Undefined ! • Reference Types Object Array Typed Array Number ECMA double-precision 64-bit binary format IEEE 754 value v8 32-bit numbers to represent all values • ECMAScript standard: • number between -(2^53 -1) and 2^53 -1 • no specific type for integers • can represent floating-point numbers • three symbolic values: +Infinity, -Infinity, and NaN Tagging 32 bit signed integer (SMI) object pointer Tagging 31 bit signed integer (SMI) 0 object pointer 1 • numbers bigger than 31 bits are boxed • stored inside an object referenced via a pointer • adds extra overhead (at a minimum an extra lookup) • prefer SMIs for numeric values whenever possible • Objects Object Fixed Array Fixed Array Map Map Map Extra Properties Length Length Elements Property “poo” Property “0” Property “foo” Property “baz” Property “1” Property “bar” • above shows most common optimized representation • all blocks have a Map property describing their structure • most objects contain all their properties in single block of memory "foo", “bar" • object is a collection of properties aka key-value pairs • named properties that don't fit are stored in overflow array "poo", "baz" • numbered properties are stored in a separate contiguous array "1", “2" Objects Object Map Extra Properties Elements Property “foo” Property “bar” • property names are always strings • any name
    [Show full text]
  • Comparison of Javascript Frontend Frameworks and Web API Services Samarth Maganahalli1, Prof
    International Research Journal of Engineering and Technology (IRJET) e-ISSN: 2395-0056 Volume: 07 Issue: 06 | June 2020 www.irjet.net p-ISSN: 2395-0072 Comparison of JavaScript Frontend Frameworks and Web API Services Samarth Maganahalli1, Prof. Rashmi R2 1Information Science and Engineering Dept., R. V. College of Engineering, Bengaluru, India 2Assistant Professor, Information Science and Engineering Dept., R. V. College of Engineering, Bengaluru, India ---------------------------------------------------------------------***--------------------------------------------------------------------- Abstract - In this era of constant innovation and technology may not always have prior knowledge of web services before developments, some tools have stayed for long while many they actually use it, therefore Web Services are platform others have faded or have been dominated by newer independent and loosely coupled. There are two major types technologies. However, we would all be able to concur that the of web services being used – SOAP principles based, and JavaScript programming language will be staying for a very REST principles based. In the following sections, a long term. This astounding bit of technology is cherished by comparison is drawn between the two and why RESTful web millions for its adaptability — it very well may be deployed on services have better performance. both the server side and customer side, utilized for mobile 2. LITERATURE SURVEY applications as well as desktop. Hence, in this period, picking a tech stack has become a tedious task. Each factor - project Detailed study of the background, the internal structure and objectives, resources, time, app size, end-users and budget thorough analysis was carried out of each of the 3 front-end need to be considered.
    [Show full text]
  • Git Services
    Git Services Wakanda includes Git features that will help you manage the evolution of your solutions and files. These features are designed to share code as well as to handle multi‐developer projects and solutions. Note: Git is a distributed revision control and source code management system. For more information about Git, please refer to the Git page on Wikipedia or go to the Git official website. Overview Why Use Git? As explained on the Git official website, Git is a distributed revision control and source code management system. Integrated in Wakanda, it basically addresses three main issues regarding project management: Revision control (or source control): Using Git, you can track and take control over changes to your source code. This means that you can go back in your version change‐history, check and revert modifications, merge different versions, and so on. Remote development: Using Git, you can work on a solution locally and deliver it at any time to your remote Wakanda production server. Multi‐user development: Using Git, several developers can work on the same project and share modifications through smart push and pull commands. Potentiel conflicts are handled through advanced features that allow you to merge, edit or ignore modifications. Git Main Features Git implementation in Wakanda provides you with the following main features, mainly available through the Git button menu in the Wakanda Studio toolbar: Commit locally: This is the basic Git feature. Commiting means taking an instant picture of your application files and thus being able to compare, revert or push them to remote locations.
    [Show full text]
  • JSON As an XML Alternative
    JSON The Fat-Free Alternative to XML { “Lecture”: 27, “Course”: “CSC375”, “Days”: ”TTh", “Instructor”: “Haidar Harmanani” } JSON as an XML Alternative • JSON is a light-weight alternative to XML for data- interchange • JSON = JavaScript Object Notation – It’s really language independent – most programming languages can easily read it and instantiate objects or some other data structure • Defined in RFC 4627 • Started gaining tracking ~2006 and now widely used • http://json.org/ has more information JSON as an XML Alternative • What is JSON? – JSON is language independent – JSON is "self-describing" and easy to understand – *JSON uses JavaScript syntax for describing data objects, but JSON is still language and platform independent. JSON parsers and JSON libraries exists for many different programming languages. • JSON -Evaluates to JavaScript Objects – The JSON text format is syntactically identical to the code for creating JavaScript objects. – Because of this similarity, instead of using a parser, a JavaScript program can use the built-in eval() function and execute JSON data to produce native JavaScript objects. Example {"firstName": "John", l This is a JSON object "lastName" : "Smith", "age" : 25, with five key-value pairs "address" : l Objects are wrapped by {"streetAdr” : "21 2nd Street", curly braces "city" : "New York", "state" : "NY", l There are no object IDs ”zip" : "10021"}, l Keys are strings "phoneNumber": l Values are numbers, [{"type" : "home", "number": "212 555-1234"}, strings, objects or {"type" : "fax", arrays "number” : "646 555-4567"}] l Aarrays are wrapped by } square brackets The BNF is simple When to use JSON? • SOAP is a protocol specification for exchanging structured information in the implementation of Web Services.
    [Show full text]
  • A Little on V8 and Webassembly
    A Little on V8 and WebAssembly An V8 Engine Perspective Ben L. Titzer WebAssembly Runtime TLM Background ● A bit about me ● A bit about V8 and JavaScript ● A bit about virtual machines Some history ● JavaScript ⇒ asm.js (2013) ● asm.js ⇒ wasm prototypes (2014-2015) ● prototypes ⇒ production (2015-2017) This talk mostly ● production ⇒ maturity (2017- ) ● maturity ⇒ future (2019- ) WebAssembly in a nutshell ● Low-level bytecode designed to be fast to verify and compile ○ Explicit non-goal: fast to interpret ● Static types, argument counts, direct/indirect calls, no overloaded operations ● Unit of code is a module ○ Globals, data initialization, functions ○ Imports, exports WebAssembly module example header: 8 magic bytes types: TypeDecl[] ● Binary format imports: ImportDecl[] ● Type declarations funcdecl: FuncDecl[] ● Imports: tables: TableDecl[] ○ Types memories: MemoryDecl[] ○ Functions globals: GlobalVar[] ○ Globals exports: ExportDecl[] ○ Memory ○ Tables code: FunctionBody[] ● Tables, memories data: Data[] ● Global variables ● Exports ● Function bodies (bytecode) WebAssembly bytecode example func: (i32, i32)->i32 get_local[0] ● Typed if[i32] ● Stack machine get_local[0] ● Structured control flow i32.load_mem[8] ● One large flat memory else ● Low-level memory operations get_local[1] ● Low-level arithmetic i32.load_mem[12] end i32.const[42] i32.add end Anatomy of a Wasm engine ● Load and validate wasm bytecode ● Allocate internal data structures ● Execute: compile or interpret wasm bytecode ● JavaScript API integration ● Memory management
    [Show full text]