Copenhagen Tech Polyglots at issuu
issuu hosts a gathering devoted to all kinds of programming languages.
Last week, on the 27th of April, issuu held a meetup for Copenhagen Tech Polyglots. Around 30 people got together for talks, pizza and beer. Topics of the day included an introduction to dependent types in Idris; and Brainfuck, an esoteric programming language.
David Christiansen, a PhD student at ITU, started off with a very interesting talk about Idris. This language supports dependent types, which allows you to encode information in the type system that would traditionally only be enforced at run-time. For example, it is possible to specify that a function should accept only lists of a fixed length, and then have a type system guarantee that all applications of the function will only be in a context where the list argument has that length. More advanced examples could be defining an AVL tree that the type system guarantees will always be balanced. The talk was similar to one David did at Galois, which can be found on Vimeo.
The second part of the talk – by Jan Krag – covered the
esoteric programming language Brainfuck, which basically implements a
Turing Machine with a language with single-character
instructions. There is a (conceptually infinite) memory, a memory
pointer and an instruction pointer. The instructions for the memory
pointer are move left (<
); move right (>
); increment the value by
one (+
); decrement the value by one (-
); print the ASCII value of
the value at the pointer (.
); and input a character from stdin
(,
). There is a “branch-if-zero” ([
and ]
) instruction as
well. Jan entertainingly walked us through a program that could print
polyglots.dk\n
to the console on the whiteboard. The program is
shown in the listing below:
+++++++++
[
>+++++ ++++ (9*9 = 81)
>+++++ +++++ + (9*11 = 99)
>+++++ +++++ ++ (9*12 = 108)
>+++++ +++++ +++ (9*13 = 117)
>+++++ (9*5 = 45)
>+ (9*1 = 9)
<<<<<<-
] Result: 0 81 99 108 117 45 9
>
-. P = 80 = 81 minus 1
>>+++. o = 111 = 108 plus 3
---. l = 108 = 111 minus 3
>++++. y = 121 = 117 plus 4
<<++++. g = 103 = 99 plus 4
>. l = 108
+++. o = 111 = 108 plus 3
>-----. t = 116 = 121 minus 5
-. s = 115 = 116 minus 1
>+ . = 46 = 45 plus 1
<<<---. d = 100 = 103 minus 3
>----. k = 107 = 111 minus 4
>>>+. newline = 10 = 9 plus 1
As an encore, David started live-programming an Idris implementation of a Brainfuck interpreter, with several of the participants following along with questions and suggestions.
Below are a few pictures from the event: