adventofcode
Dec. 20th, 2021 06:04 pmПрограммисты: как идут дела с Advent of Code у тех, кто продолжает этим заниматься?
Я где-то неделю не делал заданий из-за непредвиденных форс-мажоров. Теперь делаю по два задания в день, чтобы догнать. Сейчас закончил 15 и собираюсь к концу соревнования, к 25-му дню, догнать официальный график.
Пока что очень тяжелых не было. Мне нравится то, как каждый день разбит на две части, и вторая часть усложняет первую, но заранее не всегда ясно, как - она не открывается, пока не решишь правильно первую часть. Я обычно пытался угадать примерно, что будет сложнее во второй части, и подходит ли к этому мой дизайн. Два раза ошибся и пришлось для второй части писать по сути заново. Это было прикольно.
Я пишу на новом для себя языке Zig. Я бы описал его как попытку выжать максимум из парадигмы "C с человеческим лицом". По сути своей императивный язык без ООП и с ручной обработкой памяти, как C. Но, во-первых, хорошо продуманная система типов с runtime reflection и generic data structures. Во-вторых, очень много мелких удобств, облегчающих жизнь: type inference, безопасные массивы и указатели (проверка границ), безопасная работа с целыми типами (проверка на under/overflow, эксплицитное конвертирование), очень удобная поддержка slices, опциональные типы, гуманная обработка ошибок и еще много чего.
При всем при этом это остается языком довольно низкого уровня. Можно выстрелить себе в ногу и я несколько раз получал segmentation fault (держал указатель на элемент контейнера, не замечая того, и менял что-то в контейнере). Нет встроенного типа строки, которая передается по значению; вместо этого все передеают друг другу слайсы (указатель с длиной и известным типом) на существующую где-то в памяти строку, и чтобы создать другую ее копию, надо руками вызвать аллокатор.
В целом нравится!
Я где-то неделю не делал заданий из-за непредвиденных форс-мажоров. Теперь делаю по два задания в день, чтобы догнать. Сейчас закончил 15 и собираюсь к концу соревнования, к 25-му дню, догнать официальный график.
Пока что очень тяжелых не было. Мне нравится то, как каждый день разбит на две части, и вторая часть усложняет первую, но заранее не всегда ясно, как - она не открывается, пока не решишь правильно первую часть. Я обычно пытался угадать примерно, что будет сложнее во второй части, и подходит ли к этому мой дизайн. Два раза ошибся и пришлось для второй части писать по сути заново. Это было прикольно.
Я пишу на новом для себя языке Zig. Я бы описал его как попытку выжать максимум из парадигмы "C с человеческим лицом". По сути своей императивный язык без ООП и с ручной обработкой памяти, как C. Но, во-первых, хорошо продуманная система типов с runtime reflection и generic data structures. Во-вторых, очень много мелких удобств, облегчающих жизнь: type inference, безопасные массивы и указатели (проверка границ), безопасная работа с целыми типами (проверка на under/overflow, эксплицитное конвертирование), очень удобная поддержка slices, опциональные типы, гуманная обработка ошибок и еще много чего.
При всем при этом это остается языком довольно низкого уровня. Можно выстрелить себе в ногу и я несколько раз получал segmentation fault (держал указатель на элемент контейнера, не замечая того, и менял что-то в контейнере). Нет встроенного типа строки, которая передается по значению; вместо этого все передеают друг другу слайсы (указатель с длиной и известным типом) на существующую где-то в памяти строку, и чтобы создать другую ее копию, надо руками вызвать аллокатор.
В целом нравится!