Napiszmy sobie Interpreter

Prowadzący: Michał Horodecki


Stwórzmy swój własny język programowania!
Kategorie: informatyka

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.

Kontakt

michalhorodecki2002+www@gmail.com

Uwaga: Rozwiązania należy wysyłać przez stronę warsztatów.