Gdzie w programach sens, gdzie logika

Prowadzący: Michał Horodecki


informatyka informatyka teoretyczna
Po co w programach są typy i z czym się to je

Disclaimer: Zdaję sobie sprawę że zadań kwalifikacyjnych jest trochę i mogą nie być najłatwiejsze - dlatego nie trzeba robić wszystkich - zrobienie połowy, w tym nadesłanie częściowych rozwiązań i pomysłów jest ok i z dużym prawdopodobieństwem wystarczy do kwalifikacji.

Opis

Kto pisał w jakimś języku programowania ten niemal na pewno spotkał się z pojęciem typów, chociażby w postaci błędów kompilacji lub w runtimie:

>>> 2 + "pomidor"
Traceback (most recent call last):
  File "<python-input-0>", line 1, in <module>
    2 + "pomidor"
    ~~^~~~~~~~~~~
TypeError: unsupported operand type(s) for +: 'int' and 'str'

O ile w Pythonie lub C++ sprawa jest względnie prosta - podajemy typy/wartości explicite i jak coś się nie zgadza to rzucamy błędem - to okazuje się że istnieje cały świat rożnorakich pomysłów w Teorii typów które rozważają takie pomysły jak:

  • Automatyczne wnioskowanie typów (jak w Haskellu) - zamiast podawać typy argumentów jak C++ zmuszamy kompilator do zrobienia tego za nas
  • Zastosowanie typów do dowodzenia twierdzeń (jak w Leanie lub Rocqu (Coqu)) - typ reprezentuje twierdzenie matematyczne, a kompilujący się program jest dowodem jego prawdziwości
  • Path Dependent Types w Scali - gdzie typ obiektu zależy od tego kto go stworzył, dzięki czemu nie da się pomieszać obiektów stworzonych w różny sposób
  • Gradual typing - gdzie celujemy w coś pomiędzy C++ a Pythonem - z jednej strony niektóre typy chcemy żeby sprawdzał kompilator, z drugiej strony niektóre chcemy zostawić dynamicznymi
  • aż po takie dziwactwa jak Homotopy type theory która robi jakąś gęstą matematykę homotopii na typach w programowaniu??? Nie wiem, nie pytajcie mnie, tym się na szczęście nie będziemy zajmować
  • I wiele wiele innych, dość ciekawych zagadnień (w tym moja praca magisterska, którą obecnie piszę)

Na warsztatach zajrzymy w głąb króliczej nory i zapoznamy się z podstawami tej cudownej dziedziny na granicy teorii i praktyki informatyki.
Plan jest taki:

  1. Zaczynamy od czegoś prostego, czyli jak w ogóle opisujemy świat z perspektywy typów, i jak wygląda system od którego wszyscy wychodzą
  2. Przejdziemy sobie przez kilka różnych ciekawych aspektów, które moim zdaniem warto zobaczyć
  3. Spróbujemy się pobawić, dopisując własny system typów do zabawkowego języka programowania (może przydać się laptop)

Kontakt

W razie jakichkolwiek wątpliwości lub pytań w sprawie warsztatów i zadań kwalifikacyjnych, zachęcam do kontaktu :) (tylko nie per "Pan" bo poczuję się staro :P)

discord: noobexception#5365 (Michał Horodecki na discordzie www)

email: michalhorodecki2002+www@gmail.com