-
Notifications
You must be signed in to change notification settings - Fork 0
lessons
Miguel Gamboa edited this page Mar 8, 2023
·
28 revisions
Lessons:
- 01-03-2022 - Lesson 01 - Introduction and Modern VMs, e.g. JVM, Node
- 03-03-2022 - Lesson 02 - Kotlin and the Java Type System, Components and Metadata
- ..-03-2022 - Lesson 04 - Programming with Metadata
- Bibliography and Lecturing methodology: github and slack.
- Tools:
javac
,javap
,kotlinc
, JDK 17 and gradle. - Program outline in 3 parts:
- Java Type System and Reflection;
- Metaprogramming and Performance;
- Iterators versus Sequences (
yield
). Generics and Reified type parameters.
- Project in 3 parts according to program outline.
- Managed Runtime or Execution Environment.
- Informally virtual machine (VM) or runtime
- Historic evolution since Java to nowadays
- Examples of languages targeting JVM: Java, kotlin, Scala, Clojure.
- Examples of languages targeting Node: JavaScript, TypeScript, Kotlin.
- Java syntax similar to C and C++.
- Distinguish between Programming Language
<versus>
VM
- Type System - Set of rules and principles that specify how types are defined and behave.
- Module
.class
for eachclass
definition -
CLASSPATH
- e.g.
-cp .
- local folder - e.g.
-cp .:JetBrains/IntelliJIdea2022.2/plugins/Kotlin/lib/*
- (for windows use
;
rather than:
)
- e.g.
- Class have Members
- Members may be: Fields, Constructors or Methods.
- Constructor is a function with name
"<init>"
returningvoid
. - Using
javap -p Student.class
to inspect metadata - Using
javap -c -p AppKt.class
to inspect metadata and bytecodes definition of data classPoint
- Analyzing kotin properties in Java.
- There are NO properties in Java Type System.
- A Kotlin property may generate:
- Backing field -- accessed with
getfield
bytecode. - Getter, i.e. function
get...
-- called withinvoke...
bytecode. - Setter, i.e. function
set...
(if defined withvar
).
- Backing field -- accessed with
- Kotlin
val
<=>
Javafinal
. - FIELDS => MEM
- bytecode
invokevirtual
to call e.g.getNr()
andprint()
-
Component - Reusable software unit, with:
- IR - code in intermediate representation (e.g. bytecodes, IL, other)
- Metadata - auto description
- Ready to use
=>
does not require static compilation. - API
=>
conforms to a public interface. - Indivisible
=>
1 module (file)
-
Software development by Components:
- Reduce Complexity;
- Promote Reuse.
- Developer roles:
- Provider - provides a component with a well-known API (e.g.
Point
) - Client - uses the component from a provider to build an Application, or another component (e.g.
App
).
- Provider - provides a component with a well-known API (e.g.
- Managed Runtime:
- Software components = Metadata + IR (intermediate representation) (e.g. bytecodes)
- Interoperability supported at bytecode and metadata level e.g. Java <> Kotlin
- Portability - Compile once and run everywhere with VM, e.g. JRE.
- Jitter - Just-in-time compiler
- Safety - NO invalid memory accesses
- GC - Garbage Collector.
- ClassLoader and CLASSPATH - dynamic and lazy load.