Metaprogramowanie i typy

Zadania kwalifikacyjne są tutaj.

Opis

Metaprogramming is a programming technique in which computer programs have the ability to treat programs as their data. It means that a program can be designed to read, generate, analyse or transform other programs, and even modify itself while running.

~wikipedia

Na warsztatach zajmiemy się metaprogramowaniem - programami, które piszą inne programy. Najprostszy przypadek, to programy, które po prostu generują kod źródłowy, które następnie jest kompilowany. 

Będziemy przyglądać się głównie statycznie typowanym językom. Weźmiemy pod lupę C++ i jego templates. Innym wariantem metaprogramowania dostępnym w C jest preprocesor. Rozwinięciem idei preprocesora jest funkcja eval i Lispowe makra. Potem zobaczymy jak makra można zaimplementować w statycznie typowanym języku na przykładzie Nima. Jak dobrze pójdzie, zobaczymy czym się różnią funkcje generyczne w Haskellu od templates w C++.

Warsztaty będą składały się z krótkiego wykłada i rozwiązywania krótkich ćwiczeń.

Wymagania

  1. Posiadanie komputera na WWW
  2. Podstawowa znajomość C++, w tym wiedza co to jest klasa, statyczne pola
  3. Znajomość jakiegoś dynamicznego języka (np. Python, Ruby, Javascript, Lisp)

Przydatne rzeczy

work in progress