Notice: file_put_contents(): Write of 5419 bytes failed with errno=28 No space left on device in /var/www/group-telegram/post.php on line 50

Warning: file_put_contents(): Only 8192 of 13611 bytes written, possibly out of free disk space in /var/www/group-telegram/post.php on line 50
Гепардово гнездо | Telegram Webview: gepardchan/132 -
Telegram Group & Telegram Channel
Как я в Nim коммитил

Немного расскажу про то, как я коммитил (раз, два) в язык программирования Nim.

Сначала кратко про сам язык. Если бегло посмотреть на примеры кода, то может показаться, что это компилируемый и типизированный Python. Однако такое описание не совсем точное: на самом деле, кроме Python, язык позаимстововал кучу полезных штук из C++, Pascal (из моего любимого — возможность легко делать индексы массивов enum'ами) и не только. В языке еще есть своя система отслеживания эффектов и гибкие макросы (из интересного — конструкция => для простого создания лямбд задана не как часть синтаксиса, а в виде макроса). Borrow checker'а и подобных штук для memory safety, как в Rust, нет, зато есть сборщик мусора (впрочем, можно писать код и на сырых указателях без него, если хочется)

Авторы языка не стали делать компиляцию через LLVM, а компилируют через трансляцию кода в C, C++ или JavaScript (что позволяет легко интегрироваться с существующими либами на этих языках)

В общем, язык довольно интересный, и я решил попробовать на нем написать какой-нибудь код. За это время я обнаружил пару интересных багов и решил занести фиксы в upstream.

Чтобы пофиксить баг, надо сначала научиться собирать компилятор. Как полагается современным языкам, компилятор Nim написан на нем самом :) Поэтому собирают его так: сначала надо взять предварительно оттранслированные в Си исходники и собрать компилятор из них, а затем уже, используя собранный из исходников на Си компилятор, собрать его еще раз, но теперь уже из исходников на Nim. Кажется довольно нестандартным, потому что обычно self-hosted языки можно собрать предыдущей стабильной версией компилятора. Но не в случае Nim: здесь сборка последней стабильной версией оказалась not supported and I don't know if it's fixable 🐳

После сборки компилятора все пошло довольно просто: надо написать код и прогнать тесты. Для удобной работы с репозиторием компилятора придумали утилиту koch, которая «a replacement for make and shell scripting», но «much more portable.» [угадайте, на чем эта portable утилита написана? :)]

Дальше осталось только сделать PR'ы (раз, два) и ждать, пока мейнтейнеры обратят на тебя внимание и заставят все переделывать. К счастью, здесь все прошло довольно гладко, и мои PRы влили без вопросов. Разве что их CI довольно любит флапать 🐳

Пост уже и так получился длинный, поэтому впечатления от самого языка, наверное, описывать здесь подробно не буду. Поделюсь лишь кратко: видно, что проект интересный, и потенциал у него есть, но в то же время у языка куда меньше пользователей и разработчиков, чем у Go, Rust и других мейнстримных языков, поэтому с библиотеками все сложнее (хотя пакетный менеджер имеется). Еще из минусов — язык местами слишком гибкий, и позволяет писать одинаковые вещи очень по-разному. А в остальном выглядит неплохо :)



group-telegram.com/gepardchan/132
Create:
Last Update:

Как я в Nim коммитил

Немного расскажу про то, как я коммитил (раз, два) в язык программирования Nim.

Сначала кратко про сам язык. Если бегло посмотреть на примеры кода, то может показаться, что это компилируемый и типизированный Python. Однако такое описание не совсем точное: на самом деле, кроме Python, язык позаимстововал кучу полезных штук из C++, Pascal (из моего любимого — возможность легко делать индексы массивов enum'ами) и не только. В языке еще есть своя система отслеживания эффектов и гибкие макросы (из интересного — конструкция => для простого создания лямбд задана не как часть синтаксиса, а в виде макроса). Borrow checker'а и подобных штук для memory safety, как в Rust, нет, зато есть сборщик мусора (впрочем, можно писать код и на сырых указателях без него, если хочется)

Авторы языка не стали делать компиляцию через LLVM, а компилируют через трансляцию кода в C, C++ или JavaScript (что позволяет легко интегрироваться с существующими либами на этих языках)

В общем, язык довольно интересный, и я решил попробовать на нем написать какой-нибудь код. За это время я обнаружил пару интересных багов и решил занести фиксы в upstream.

Чтобы пофиксить баг, надо сначала научиться собирать компилятор. Как полагается современным языкам, компилятор Nim написан на нем самом :) Поэтому собирают его так: сначала надо взять предварительно оттранслированные в Си исходники и собрать компилятор из них, а затем уже, используя собранный из исходников на Си компилятор, собрать его еще раз, но теперь уже из исходников на Nim. Кажется довольно нестандартным, потому что обычно self-hosted языки можно собрать предыдущей стабильной версией компилятора. Но не в случае Nim: здесь сборка последней стабильной версией оказалась not supported and I don't know if it's fixable 🐳

После сборки компилятора все пошло довольно просто: надо написать код и прогнать тесты. Для удобной работы с репозиторием компилятора придумали утилиту koch, которая «a replacement for make and shell scripting», но «much more portable.» [угадайте, на чем эта portable утилита написана? :)]

Дальше осталось только сделать PR'ы (раз, два) и ждать, пока мейнтейнеры обратят на тебя внимание и заставят все переделывать. К счастью, здесь все прошло довольно гладко, и мои PRы влили без вопросов. Разве что их CI довольно любит флапать 🐳

Пост уже и так получился длинный, поэтому впечатления от самого языка, наверное, описывать здесь подробно не буду. Поделюсь лишь кратко: видно, что проект интересный, и потенциал у него есть, но в то же время у языка куда меньше пользователей и разработчиков, чем у Go, Rust и других мейнстримных языков, поэтому с библиотеками все сложнее (хотя пакетный менеджер имеется). Еще из минусов — язык местами слишком гибкий, и позволяет писать одинаковые вещи очень по-разному. А в остальном выглядит неплохо :)

BY Гепардово гнездо


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/gepardchan/132

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

He said that since his platform does not have the capacity to check all channels, it may restrict some in Russia and Ukraine "for the duration of the conflict," but then reversed course hours later after many users complained that Telegram was an important source of information. Now safely in France with his spouse and three of his children, Kliuchnikov scrolls through Telegram to learn about the devastation happening in his home country. The SC urges the public to refer to the SC’s I nvestor Alert List before investing. The list contains details of unauthorised websites, investment products, companies and individuals. Members of the public who suspect that they have been approached by unauthorised firms or individuals offering schemes that promise unrealistic returns For Oleksandra Tsekhanovska, head of the Hybrid Warfare Analytical Group at the Kyiv-based Ukraine Crisis Media Center, the effects are both near- and far-reaching. Andrey, a Russian entrepreneur living in Brazil who, fearing retaliation, asked that NPR not use his last name, said Telegram has become one of the few places Russians can access independent news about the war.
from tw


Telegram Гепардово гнездо
FROM American