Napiszmy sobie Interpreter
Prowadzący: Michał Horodecki
Stwórzmy swój własny język programowania!
Opis
Pierwsze komputery były programowane jako bajty w kodzie maszynowym zrozumiałym bezpośrednio dla procesora, co było wymagającym zadaniem dla ówczesnych programistów. Obecnie programy pisane są w językach wysokopoziomowych takich jak C, C++, Python, czy Java, jednak nawet współczesne komputery końco oczekują ciągu bajtów, które reprezentują instrukcje procesora.
Jak to jest więc możliwe, że kod w Pythonie
if x > y:
print("Hello, World!")
else:
print("Goodbye, Mars!")
jest wykonywany na procesorze, który rozumie tylko ciągi bajtów a napisy takie jak if, >, czy print są dla niego zupełnie obce?
Co więcej - skąd w ogóle wiemy, że taki program jest poprawny i da się go sensownie zamienić na instrukcje procesora?
Na te, i na inne pytania odpowiemy sobie na warsztatach.
Od podstaw napiszemy w Pythonie interpreter prostego języka programowania i zobaczymy jakie problemy i decyzje wiążą się z różnymi aspektami, które często wydają się niemal oczywiste.
Żeby było nam nieco prościej to będzie to język funkcyjny, ale koncepty które poznamy będą przydatne również przy pisaniu języków obiektowych i imperatywnych.
Wymagania
- laptop z Pythonem 3.6+ i ulubionym środowiskiem
- dobra znajomość Pythona
- umiejętność rozwiązywania problemów
- minimalne podstawy programowania funkcyjnego
- mile widziane będzie również ogólne obeznanie z programowaniem i innymi językami programowania.
Zachęcam do zapoznania się z przynajmniej jednym językiem z listy: C, C++, Java, Rust, Lisp, Haskell
Przydatne rzeczy
Link do repozytorium z testami do zadania pierwszego: https://github.com/mhorod/www19-quals
Wszystko będę się starał wytłumaczyć na bieżąco, ale zaznajomienie się z poniższymi nie zaszkodzi.
- Wstęp do Haskella (podstawy programowania funkcyjnego) - http://learnyouahaskell.com/chapters
- AST Explorer - https://astexplorer.net/
- Crafting Intepreters - http://craftinginterpreters.com/
- interpretery i kompilatory przeróżnych języków - http://replit.com
Kontakt
michalhorodecki2002+www@gmail.com
Uwaga: Rozwiązania należy wysyłać przez stronę warsztatów.