<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div name="messageBodySection">
<div dir="auto">Спасибо за сравнение!</div>
</div>
<div name="messageSignatureSection"><br />
<div class="matchFont">
<div dir="auto">Максим</div>
</div>
</div>
<div name="messageReplySection">On 24 Mar 2021, 17:30 +0100, Valentin Nechayev <netch@netch.kiev.ua>, wrote:<br />
<blockquote type="cite" style="border-left-color: grey; border-left-width: thin; border-left-style: solid; margin: 5px 5px;padding-left: 10px;">Wed, Mar 24, 2021 at 17:02:32, doka wrote about "[uanog] Rust or Go?":<br />
<br />
<blockquote type="cite">странно, но чёт захотелось какой-нибудь другой язык программирования<br />
выучить, компилируемый - так, чтобы с типизацией, со всей строгостью<br />
по закону, без этих вольностей "тут строка, а теперь - число".<br />
Конкретной задачи нет, это чисса интересно и проветрить мозг, но в<br />
совсем уж академически-маргинальное лезть не хочется - может<br />
всё-таки польза какая будет при случае :)<br />
<br />
Rust или Go? Наверное, главный вопрос - наличие экосистемы<br />
библиотек/модулей, чтобы всё-таки была можливость не всякий раз<br />
лезть в low-level coding, а хотя бы раз через три? :)<br /></blockquote>
<br />
Экосистема есть у обоих.<br />
Свойство (которое может стать проблемой) у обоих языков: у них<br />
объектная модель без наследования (у Go - с отдельными элементами<br />
наследования, но костылём). Сейчас даже модно говорить, что так<br />
правильно, но под эту модель надо заметно выгибаться.<br />
<br />
Специфика Go:<br />
+ Неплохая система конкурентности, позволяющая дешёвую асинхронность<br />
на императивном коде.<br />
+ Относительная лёгкость написания и чтения кода. От ряда фич типа<br />
переопределения операторов отказываются намеренно из-за возможных<br />
последствий типа "фиг его знает что скрывается за этим плюсом".<br />
Есть единственный канон на форматирование кода.<br />
- Самое тяжёлое: агрессивно-невменяемое сообщество, выросшее из того,<br />
что по дизайну Go пошёл против массы вроде бы уже проверенных<br />
решений. Фактически большинство это или примитивисты, которым всё<br />
равно, что делать, или сектанты. Авторы языка подстёгивают это<br />
сектанство.<br />
- Плохая типизация на уровне выше примитивных типов: она принципиально<br />
утиная в зависимости класса и интерфейса (сигнатура совпадает -<br />
считаем реализующим интерфейс, даже если совпадение недопустимо).<br />
± Объектная система без наследования (есть косвенно через включение<br />
безымянного базового поля, но она не даёт, например, виртуальных<br />
функций).<br />
- Язык предельно провоцирует копипастинг. Сложно объяснить, почему<br />
так, но это общее мнение всех кто пишет на нём и не фанат.<br />
- Многословность из-за принципиального отказа от исключений (как в<br />
Rust, но не компенсируется макрами и прочими средствами для разбора<br />
ошибок).<br />
Картинка в тему: https://pbs.twimg.com/media/DCIF7-2W0AEAv9c.jpg<br />
- Свой доморощенный кодогенератор, не использующий массу возможностей<br />
процессора - например, там в принципе нет передачи через регистры,<br />
всё через стек. Если бы не кэш, он был бы раз в 100 медленнее C :)<br />
- Излишняя жёсткость в ряде мест (например, неиспользованный импорт не<br />
даёт скомпилировать, даже если это быстрая проба для отладки).<br />
<br />
Rust:<br />
± Отдельная модель управления памятью: и не ручное как в C/C++, и не<br />
автоматическое с GC; вместо этого концепция владения и<br />
заимствования. (И подсчёт ссылок для разделяемого между нитками.)<br />
К ней надо привыкнуть.<br />
+ Система типов плавно приближается к тому, что делают в<br />
функциональных языках - это позволяет свалить на компиляцию много<br />
проверок, которые на других делаются только в рантайме.<br />
± Пока компилятор согласится с кодом, можно поседеть ;) но после этого<br />
почти все проблемы устранены.<br />
± Некоторые вещи не укладываются в концепцию владения (знаменитый<br />
пример - двусвязный список - можно сделать только на unsafe. Но<br />
genericʼи спасают - один раз сделал и дальше используешь.)<br />
± Объектная система без наследования. Но есть traits (аналоги<br />
интерфейсов Java/C#) с возможностью их назначения чужим классам.<br />
<br />
<blockquote type="cite">Шо думаете?<br /></blockquote>
<br />
Если из этих двоих, начни таки с Rust. Сбежать на Go успеешь всегда ;)<br />
<br />
<br />
-netch-<br />
_______________________________________________<br />
uanog mailing list<br />
uanog@uanog.kiev.ua<br />
https://mailman.uanog.kiev.ua/mailman/listinfo/uanog</blockquote>
</div>
</body>
</html>