Pull to refresh
30
0
Станислав Ткач @DarkEld3r

Rust developer

Send message

Фух, чуть не бросился критиковать не дочитав до примечаний — только тогда обратил внимание, что это перевод. Странно, конечно, что люди бросаются писать такие статьи основываясь на незнание, в общем-то, вполне базовых вещей. Это я о forget, например.


Eсли честно, не понял и претензий к трейтам. Ну да, изнутри трейта нельзя обращаться к полям объекта. Зато можно это делать изнутри реализации трейта для конкретной структуры. Да и как иначе? Интерфейсы работают точно так же. Как по мне, не хватает разве что возможности удобным образом делегировать реализацию трейтов полям структуры — из-за этого приходится писать "мусорный" код. А в остальном вполне всё прилично.

А есть (применимые на практике) языки "общего назначения", которые вообще никак не позволяют в ногу выстрелить?

На этот случай есть std::array, впрочем, у него есть свои недостатки.

1) Когда критично быстродействие и размер использованной памяти.

И какой оверхед std::array привносит?

std::array ведь не умеет выводить размер из списка инициализации?..

Разве что от "трейтов" коробит немного — почему не "типажи"? :)

В курсе, что это уже устоявшийся термин в русскоязычном сообществе, но лично меня коробят как раз "типажи". (:

Видим, что два языка, появившиеся раньше, являются и более популярными.

Ну так Haskell — "чисто функциональный", а другие два языка — нет.


Опять же, некая часть популярности Scala берётся от JVM платформы. В языке намешано всё что угодно и нередко предполагается (поначалу) "писать как на джаве". Не пытаюсь доказать, что Scala "недостаточно функциональна", но не уверен, что (очень) мультипарадигменные языки могут быть "стандартом" в чём-то одном.


Собственно, не удивлюсь, если Clojure популярнее чем Common Lisp. А в рейтинге TIOBE вообще некий "обобщённый" лисп присутствует: вполне возможно, что туда всё лиспо-подобное попало.

Мало того, например С++ очень близок с Java по «идеальности роли»

Это как? Ты говоришь о нескольких ролях, в контексте С++ нас две интересует: "опасный но быстрый и лаконичный" и "безопасный, но медленный и многословный". С++ более безопасный чем С и более быстрый чем джава. То есть, он ни туда ни сюда, если следовать этой "теории".


Так-то я тоже думаю, что "роли" есть, но не эти и не три.

Например Java появилась после С++ и тем не менее она его потеснила несмотря на «молодость» по отношению к С++ в то время и легаси код прочее подобное.

Ага, потеснила из тех ниш, где С++ был не лучшим выбором. Тем не менее, С++ остаётся весьма популярным и "дальнейшего вытеснения" не происходит.


Но вообще я не верю, что ты это всё серьёзно пишешь. (:

Все где «намешано и универсально» не будет популярно никогда.

Где там у нас С++ в рейтингах?..
С# развивается довольно активно и в новые версии не стесняются добавлять разнообразные фичи.
Скала тоже довольно популярна — не как С/Java, разумеется, но работу найти вполне реально, что вполне себе показатель. А там чего только нет.


Мир не ограничивается джавой и С.

Первые в топах это С и Java, и совершенно понятно почему

Конечно, понятно. Появились в нужное время, имеют серьёзную поддержку (можно сравнить Оракл и Мозиллу раз уж мы в контексте раста), ну а дальше по наклонной — готовые специалисты, наличие учебных материалов, легаси и т.д. Плюс продолжают развиваться: если бы, скажем, джава остановилась несколько версий назад, то её, наверняка, потеснил C# и другие языки на JVM.


Новым языкам, ясное дело, сложнее. Это логично и я не жалуюсь на "несправедливость", если что. (:

Честно говоря, не понимаю какое отношение приведение типов имеет к ООП.

или язык действительно безнадёжно затянут в бездну обратной совместимости?

Не без этого. Вот только те проблемы, что вы перечислили они не про обратную совместимость, а про нежелание жертвовать производительностью. Скажем, как компилятор сам расставит "метки виртуальных функций", если вы пишете библиотеку?


В более новых языках типа Rust действительно многое проще (в том плане, что компилятор даст по рукам, если что), но суть остаётся той же: такие решения приходится принимать самому: если нужные виртуальные функции, то используем трейт-объекты и т.д.

тонны бессмысленного кода

Если сделать возможность указать (но сознательно указать) использовать дефолтную реализацию сравнения, то много кода не будет.

Так ведь в (Common) лиспе есть и что-то типа goto (tagbody) и аналог исключений и мутабельные переменные и сравнение значения ссылок и наследование и т.д.

А ещё, если я ни с чем не путаю, то вместо ключевого слова предлагалось * использовать, но решили, что будет сбивать с толку.

Так-то Rust пытается быть и безопасным и быстрым. (:

(- 1) = 1 не противоречит?

Тут противоречит разве что минус работающий по разному в зависимости от того есть пробел или нет. С другой стороны, о том, что разделителем является пробел и о том как выглядит вызов функций мы, скорее всего, узнаем из любого букваря ещё до того как до арифметики дойдём.


Во многих интересных языках можно найти что-то «противоречащее предыдущему опыту».

Разумеется. Но я с самого начала говорил, что ценность "оригинальности" имеют не сами по себе, а вместе с новыми возможностями. Или вы с этим не согласны? А то ведь можно "обогащать свой опыт" вещами типа brainfuck или ещё лучше — whitespace.

Думаю, это было как минимум удобнее разработчику компилятора, но ценой неудобства пользователей.

Отличный подход, ничего не скажешь.


Это то же самое, как если кто-то вам (как Rust-аману) будет говорить, что Rust плохой потому что там синтаксис плохой или скобочки не те

Регулярно говорят, но на людей я не бросаюсь. (:


И да, в расте есть куча моментов которые мне не особо нравятся. Как из-за (не)привычности, так и "более объективных". И к аргументированной критике отношусь совершенно спокойно, даже с интересном: любопытно же узнать, что разным людям в глаза бросается. Довольно занятно как раст воспринимается людьми в зависимости от их "любимого языка". И в общем-то это довольно важно, если мы хотим новый язык продвинуть: каждая "необычность" должна быть чем-то обоснована, иначе будет сложнее отвоёвывать целевую аудиторию.


Повторюсь касательно Смолтока: я понимаю почему так сделано и понимаю, но там оно хотя бы "логично" в рамках языка. И собственно, является продолжением его особенностей.

Information

Rating
5,089-th
Date of birth
Registered
Activity