DynamickýPřekladPrakticky

Z Denik

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(I. Představujeme nejrychlejší univerzální virtuální stroj)
(II. How Modern Compilers Work)
Řádka 18: Řádka 18:
[https://stream.cuni.cz/cs/Detail/0/12041 Záznam úvodní přednášky]. Takovéto tradiční povídání o tom, co [[GraalVM]] umí a jak je snadné a jednoduché to vše použít. Pokud to ještě někdo neviděl, tak je to vhodná upoutávka k záznamům dalších lekcí.
[https://stream.cuni.cz/cs/Detail/0/12041 Záznam úvodní přednášky]. Takovéto tradiční povídání o tom, co [[GraalVM]] umí a jak je snadné a jednoduché to vše použít. Pokud to ještě někdo neviděl, tak je to vhodná upoutávka k záznamům dalších lekcí.
-
=== II. How Modern Compilers Work ===
+
=== II. Jak fungují moderní překladače? ===
-
Based on [https://chrisseaton.com/truffleruby/jokerconf17/ Chris talk and slides]:
+
Jak vlastně překládat Javu, Céčko a jiné staticky typované jazyky? Než se dostaneme k překladu dynamických jazyků, tak bychom si měli osvěžit, co to vlastně jsou překladače a jak fungují. Výborně nám k tomu poslouží [https://chrisseaton.com/truffleruby/jokerconf17/ přednáška kolegy Chrise Seatona].
 +
 
 +
Dokončení úvodu z minula následuje [https://stream.cuni.cz/cs/Detail/12042/12041 záznam přednášky] o moderních překladačích (od 35té minuty).
* What is a JIT compiler?
* What is a JIT compiler?

Verze z 15. 6. 2021, 09:29

Seminář na MatFyz pro letní semestr 2019, který pokračuje na jaře 2021.

Obsah

Dynamický Překlad Prakticky

Jaký je nejrychlejší programovací jazyk? Může být JavaScript rychlejší než Céčko? Existuje jednoduchý způsob, jak si napsat jazyk, který bude opravdu rychlý? Musíme opravdu psát všechny knihovny znovu a znovu? Jak se implementuje debugger? A jak profiler? Kolik to dá práce? To jsou otázky, na které v průběhu semináře budeme hledat a nalezneme odpovědi.

Budeme používat GraalVM, což je nejrychlejší virtuální stroj, který shodou okolností pomáhá vyvíjet tým z pražské pobočky OracleLabs. Díky tomu to bude seminář praktický, přibližující nejnovější trendy ve vývoji virtuálních strojů. Žádná otázka nebude tabu - o GraalVM víme úplně vše!

Cílem bude ukázat si na výhody a zádrhele dynamického překladu. Pochopit, co překladač ve skutečnosti dělá a naučit se dorozumět se s ním - tedy programovat tak, abyste z dynamického překladu v GraalVM získali co nejvíce. Máte-li vlastní programovací jazyk, vezměte si jej s sebou - uděláme jej rychlejší!

A pokud to někoho bude opravdu bavit, tak může pokračovat v létě při studijní stáži v OracleLabs v Jinonicích.


Osnova přednášek

I. Představujeme nejrychlejší univerzální virtuální stroj

Záznam úvodní přednášky. Takovéto tradiční povídání o tom, co GraalVM umí a jak je snadné a jednoduché to vše použít. Pokud to ještě někdo neviděl, tak je to vhodná upoutávka k záznamům dalších lekcí.

II. Jak fungují moderní překladače?

Jak vlastně překládat Javu, Céčko a jiné staticky typované jazyky? Než se dostaneme k překladu dynamických jazyků, tak bychom si měli osvěžit, co to vlastně jsou překladače a jak fungují. Výborně nám k tomu poslouží přednáška kolegy Chrise Seatona.

Dokončení úvodu z minula následuje záznam přednášky o moderních překladačích (od 35té minuty).

  • What is a JIT compiler?
  • Why write a JIT compiler in Java?
  • Setting up Graal
  • The JVM compiler interface
  • The Graal graph
  • From bytecode to machine code
    • The bytecode parser and graph builder
    • Emitting assembly
    • Assembly out
  • Optimisations
    • Canonicalisation
    • Global value numbering
    • Lock coarsening
  • Practicalities
    • Register allocation
    • Scheduling
  • What can you use Graal for?
    • A final-tier compiler
    • Your own specific optimisations
    • Ahead-of-time compilation
    • Truffle
  • Summary

III. Talk 2 Compiler: Directives

Walk-thru Talk 2 Compiler demo project:

  • Use `CallTarget` & `RootNode` to enter partial evaluation mode
  • Use `mvn test -Pigv` to send graphs to IGV
  • Install maven modules to IGV to show connection between graph and source
  • Follow the README:
    • `warmWelcome`
    • `transferToInterpreter`
    • Rewrite to use profiles
  • Show how to write own language

IV. Talk 2 Compiler: Assumptions & Caches

V. Talk 2 Compiler: Nodes & Specializations

VI. Memory Management

  • Garbage Collector
  • VirtualFrame
    • Descriptor
  • DynamicObject
    • Shape

VII. Graal Self

VIII. JIT vs. AOT překlad

IX. Interop mezi jazyky

X. Tools & Instruments

  • Making your language "toolable"
    • Source section
    • Tags
    • Show how to debug in NetBeans
  • Writing an instrument
    • Debugger, profiler, code coverage, language server protocol, NetBeans
  • node.js
    • Mixing Java and JavaScript & co.

XI. Static Languages with LLVM

  • Sulong - interpret C, Rust, atd.
  • Truffle NFI

XII. Writing bytecode interpreter

  • Espresso - Java interpreter
  • Sulong - bitcode interpreter

XIII. Real Language Problems

  • implementace FFI jazyku jako Ruby/Python/R
  • yield in JavaScriptu
  • lazy evaluation in R

Appendix A: Contributing To Open Source

  • Overview of the repositories
  • Python, JavaScriptem, Ruby, FastR, Espresso
  • mx tooling
  • Signing OCA

https://github.com/jtulach/bf https://www.youtube.com/watch?v=FJY96_6Y3a4