⭐ *Enroll:* dmitrysoshnikov.com/courses/essentials-of-interpretation/ 📚 *Udemy:* www.udemy.com/course/essentials-of-interpretation/?referralCode=E7D6C9ADFCA273A53950 👉 *DS Education:* www.dmitrysoshnikov.education/p/essentials-of-interpretation Lecture 1: Parsers, ASTs, Interpreters and Compilers Lecture 2: AST Interpreters and Virtual Machines Lecture 3: Compilers: AOT, JIT, Transpiler Lecture 4: Eva programming language Lecture 5: Self-evaluating expressions Lecture 6: Variables and Environments Lecture 7: Blocks: expression groups and Nested Scopes Lecture 8: Control flow: If and While expressions Lecture 9: Back to parsers: S-expression to AST Lecture 10: Built-in and Native functions Lecture 11: User-defined functions, Activation Records and Closures Lecture 12: Lambda functions and Functional programming Lecture 13: Call-stack and Recursive calls Lecture 14: Syntactic sugar: Switch, For, Inc, Dec operators Lecture 15: Object-oriented Eva: Classes Lecture 16: Class inheritance and Super calls Lecture 17: Code isolation: Modules and Imports Lecture 18: Final executable and further data structures
Hi thanks for putting out such amazing content. Wanted to ask a few quick questions: 1. You mentioned that it doesn't matter how you implement your language, what matters is the runtime semantics should be preserved. I am still not super clear on what you meant by the runtime semantics. In the context of JavaScript, can we think of the runtime semantics as the ECMAScript specs, as in the JS implementors have to follow and conform to the specs? 2. Is there a discord channel or any kind of support community for people who bought your courses?
Thanks for the feedback, glad you liked the course. Yes, the ES spec is a good example, since exactly a specification for a programming language defines its semantics (static and runtime). And for the same formal spec there might be multiple implementations: simple AST interpreter for JavaScript, or a Stack-based virtual machine, or static LLVM compiler to native code. A dedicated discord channel might be good idea, I'll think about creating one. Current students use discussion comments within each lecture.
@@DmitrySoshnikov-education hey thanks for the reply! I have two more followup questions if you don't mind 1. I am not super clear on the concept of runtime. it seems to me that it has multiple meanings: I understand it means "during the code execution, the opposite is compile time" but people always use it when they are saying that "V8/node/deno is a JS runtime" or "react is a UI runtime". Could you expound on this please? Also when you say "runtime semantics", which one were you referring to? 2. you mentioned that ES spec might have multiple implementations: simple AST interpreter for JavaScript, or a Stack-based virtual machine, or static LLVM compiler to native code. Do these implementations exist in the real world? Could you give me some examples?
@@zhenghaohe4727 yes, "Runtime" may refer to a system which handles execution of a program. It might be a VM (such as V8) or a framework (like React for UI), set of extra helper tools. And the "runtime" is the *time* during execution, i.e. opposite to the "static time", which is before execution. The "runtime semantics" refers to formal *rules* which describes how a Runtime should be implemented. I.e. it refers to implementations like V8 and others. Also, yes - V8, JavaScriptCore, Hermes, etc are all the different implementations of the ECMAScript spec, which defines formal semantics.
@@DmitrySoshnikov-education Hi thanks for the reply! Do you mind if I ask a few more followup questions about JavaScript specifically? 1. are variables in JavaScript basically C++ pointers under the hood (assuming the runtime is V8)? Even for primitive values like numbers and strings, they either live in the heap or they are pooled in Constant Pool. Therefore JS variables (their memory blocks) actually store the memory addresses of other C++ objects? 2. when we declare `const a = 1; const b = 'foo'` , what exactly provides the program with the number `1` and the string `foo` , is it the runtime e.g. V8 or it is something else that is providing these primitive values?
⭐ *Enroll:* dmitrysoshnikov.com/courses/essentials-of-interpretation/
📚 *Udemy:* www.udemy.com/course/essentials-of-interpretation/?referralCode=E7D6C9ADFCA273A53950
👉 *DS Education:* www.dmitrysoshnikov.education/p/essentials-of-interpretation
Lecture 1: Parsers, ASTs, Interpreters and Compilers
Lecture 2: AST Interpreters and Virtual Machines
Lecture 3: Compilers: AOT, JIT, Transpiler
Lecture 4: Eva programming language
Lecture 5: Self-evaluating expressions
Lecture 6: Variables and Environments
Lecture 7: Blocks: expression groups and Nested Scopes
Lecture 8: Control flow: If and While expressions
Lecture 9: Back to parsers: S-expression to AST
Lecture 10: Built-in and Native functions
Lecture 11: User-defined functions, Activation Records and Closures
Lecture 12: Lambda functions and Functional programming
Lecture 13: Call-stack and Recursive calls
Lecture 14: Syntactic sugar: Switch, For, Inc, Dec operators
Lecture 15: Object-oriented Eva: Classes
Lecture 16: Class inheritance and Super calls
Lecture 17: Code isolation: Modules and Imports
Lecture 18: Final executable and further data structures
Can't wait for the next one! Great work here, very clear explanations.
Thanks for the courses, when you planning to release next videos?
'
Thanks, the next lecture is already preparing and is coming soon!
Thanks for the hard work, waiting for the next video
Very useful tutorial...
Thanks.
Hi thanks for putting out such amazing content. Wanted to ask a few quick questions:
1. You mentioned that it doesn't matter how you implement your language, what matters is the runtime semantics should be preserved. I am still not super clear on what you meant by the runtime semantics. In the context of JavaScript, can we think of the runtime semantics as the ECMAScript specs, as in the JS implementors have to follow and conform to the specs?
2. Is there a discord channel or any kind of support community for people who bought your courses?
Thanks for the feedback, glad you liked the course. Yes, the ES spec is a good example, since exactly a specification for a programming language defines its semantics (static and runtime). And for the same formal spec there might be multiple implementations: simple AST interpreter for JavaScript, or a Stack-based virtual machine, or static LLVM compiler to native code.
A dedicated discord channel might be good idea, I'll think about creating one. Current students use discussion comments within each lecture.
@@DmitrySoshnikov-education hey thanks for the reply! I have two more followup questions if you don't mind
1. I am not super clear on the concept of runtime. it seems to me that it has multiple meanings: I understand it means "during the code execution, the opposite is compile time" but people always use it when they are saying that "V8/node/deno is a JS runtime" or "react is a UI runtime". Could you expound on this please? Also when you say "runtime semantics", which one were you referring to?
2. you mentioned that ES spec might have multiple implementations: simple AST interpreter for JavaScript, or a Stack-based virtual machine, or static LLVM compiler to native code. Do these implementations exist in the real world? Could you give me some examples?
@@zhenghaohe4727 yes, "Runtime" may refer to a system which handles execution of a program. It might be a VM (such as V8) or a framework (like React for UI), set of extra helper tools. And the "runtime" is the *time* during execution, i.e. opposite to the "static time", which is before execution.
The "runtime semantics" refers to formal *rules* which describes how a Runtime should be implemented. I.e. it refers to implementations like V8 and others.
Also, yes - V8, JavaScriptCore, Hermes, etc are all the different implementations of the ECMAScript spec, which defines formal semantics.
@@DmitrySoshnikov-education Hi thanks for the reply! Do you mind if I ask a few more followup questions about JavaScript specifically?
1. are variables in JavaScript basically C++ pointers under the hood (assuming the runtime is V8)? Even for primitive values like numbers and strings, they either live in the heap or they are pooled in Constant Pool. Therefore JS variables (their memory blocks) actually store the memory addresses of other C++ objects?
2. when we declare `const a = 1; const b = 'foo'` , what exactly provides the program with the number `1` and the string `foo` , is it the runtime e.g. V8 or it is something else that is providing these primitive values?
I do not find some lectures including: Lecture 2: AST Interpreters and Virtual Machines... and many others? thanks,
HI Saft, you can enroll to full course here: dmitrysoshnikov.com/courses/essentials-of-interpretation/
Hi Dmitry,
Unable to find the Lecture 2: i dont see it in the playlist. Is it available ?
Hi Chacko, yes, you can enroll to full class here: dmitrysoshnikov.com/courses/essentials-of-interpretation/
@@DmitrySoshnikov-education Thank you
which software do you use to make these presentations?
This is a combination of Good Notes, Notability, Camtasia, and live editing on iPad.