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: |

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 Oleksandra Matviichuk, a Kyiv-based lawyer and head of the Center for Civil Liberties, called Durov’s position "very weak," and urged concrete improvements. Telegram has gained a reputation as the “secure” communications app in the post-Soviet states, but whenever you make choices about your digital security, it’s important to start by asking yourself, “What exactly am I securing? And who am I securing it from?” These questions should inform your decisions about whether you are using the right tool or platform for your digital security needs. Telegram is certainly not the most secure messaging app on the market right now. Its security model requires users to place a great deal of trust in Telegram’s ability to protect user data. For some users, this may be good enough for now. For others, it may be wiser to move to a different platform for certain kinds of high-risk communications. Lastly, the web previews of t.me links have been given a new look, adding chat backgrounds and design elements from the fully-features Telegram Web client. Elsewhere, version 8.6 of Telegram integrates the in-app camera option into the gallery, while a new navigation bar gives quick access to photos, files, location sharing, and more.
from ua


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