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

"And that set off kind of a battle royale for control of the platform that Durov eventually lost," said Nathalie Maréchal of the Washington advocacy group Ranking Digital Rights. In addition, Telegram now supports the use of third-party streaming tools like OBS Studio and XSplit to broadcast live video, allowing users to add overlays and multi-screen layouts for a more professional look. At this point, however, Durov had already been working on Telegram with his brother, and further planned a mobile-first social network with an explicit focus on anti-censorship. Later in April, he told TechCrunch that he had left Russia and had “no plans to go back,” saying that the nation was currently “incompatible with internet business at the moment.” He added later that he was looking for a country that matched his libertarian ideals to base his next startup. 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. At the start of 2018, the company attempted to launch an Initial Coin Offering (ICO) which would enable it to enable payments (and earn the cash that comes from doing so). The initial signals were promising, especially given Telegram’s user base is already fairly crypto-savvy. It raised an initial tranche of cash – worth more than a billion dollars – to help develop the coin before opening sales to the public. Unfortunately, third-party sales of coins bought in those initial fundraising rounds raised the ire of the SEC, which brought the hammer down on the whole operation. In 2020, officials ordered Telegram to pay a fine of $18.5 million and hand back much of the cash that it had raised.
from vn


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