Фух, чуть не бросился критиковать не дочитав до примечаний — только тогда обратил внимание, что это перевод. Странно, конечно, что люди бросаются писать такие статьи основываясь на незнание, в общем-то, вполне базовых вещей. Это я о forget, например.
Eсли честно, не понял и претензий к трейтам. Ну да, изнутри трейта нельзя обращаться к полям объекта. Зато можно это делать изнутри реализации трейта для конкретной структуры. Да и как иначе? Интерфейсы работают точно так же. Как по мне, не хватает разве что возможности удобным образом делегировать реализацию трейтов полям структуры — из-за этого приходится писать "мусорный" код. А в остальном вполне всё прилично.
Видим, что два языка, появившиеся раньше, являются и более популярными.
Ну так Haskell — "чисто функциональный", а другие два языка — нет.
Опять же, некая часть популярности Scala берётся от JVM платформы. В языке намешано всё что угодно и нередко предполагается (поначалу) "писать как на джаве". Не пытаюсь доказать, что Scala "недостаточно функциональна", но не уверен, что (очень) мультипарадигменные языки могут быть "стандартом" в чём-то одном.
Собственно, не удивлюсь, если Clojure популярнее чем Common Lisp. А в рейтинге TIOBE вообще некий "обобщённый" лисп присутствует: вполне возможно, что туда всё лиспо-подобное попало.
Мало того, например С++ очень близок с Java по «идеальности роли»
Это как? Ты говоришь о нескольких ролях, в контексте С++ нас две интересует: "опасный но быстрый и лаконичный" и "безопасный, но медленный и многословный". С++ более безопасный чем С и более быстрый чем джава. То есть, он ни туда ни сюда, если следовать этой "теории".
Так-то я тоже думаю, что "роли" есть, но не эти и не три.
Все где «намешано и универсально» не будет популярно никогда.
Где там у нас С++ в рейтингах?..
С# развивается довольно активно и в новые версии не стесняются добавлять разнообразные фичи.
Скала тоже довольно популярна — не как С/Java, разумеется, но работу найти вполне реально, что вполне себе показатель. А там чего только нет.
Первые в топах это С и Java, и совершенно понятно почему
Конечно, понятно. Появились в нужное время, имеют серьёзную поддержку (можно сравнить Оракл и Мозиллу раз уж мы в контексте раста), ну а дальше по наклонной — готовые специалисты, наличие учебных материалов, легаси и т.д. Плюс продолжают развиваться: если бы, скажем, джава остановилась несколько версий назад, то её, наверняка, потеснил C# и другие языки на JVM.
Новым языкам, ясное дело, сложнее. Это логично и я не жалуюсь на "несправедливость", если что. (:
или язык действительно безнадёжно затянут в бездну обратной совместимости?
Не без этого. Вот только те проблемы, что вы перечислили они не про обратную совместимость, а про нежелание жертвовать производительностью. Скажем, как компилятор сам расставит "метки виртуальных функций", если вы пишете библиотеку?
В более новых языках типа Rust действительно многое проще (в том плане, что компилятор даст по рукам, если что), но суть остаётся той же: такие решения приходится принимать самому: если нужные виртуальные функции, то используем трейт-объекты и т.д.
Так ведь в (Common) лиспе есть и что-то типа goto (tagbody) и аналог исключений и мутабельные переменные и сравнение значения ссылок и наследование и т.д.
Тут противоречит разве что минус работающий по разному в зависимости от того есть пробел или нет. С другой стороны, о том, что разделителем является пробел и о том как выглядит вызов функций мы, скорее всего, узнаем из любого букваря ещё до того как до арифметики дойдём.
Во многих интересных языках можно найти что-то «противоречащее предыдущему опыту».
Разумеется. Но я с самого начала говорил, что ценность "оригинальности" имеют не сами по себе, а вместе с новыми возможностями. Или вы с этим не согласны? А то ведь можно "обогащать свой опыт" вещами типа brainfuck или ещё лучше — whitespace.
Думаю, это было как минимум удобнее разработчику компилятора, но ценой неудобства пользователей.
Отличный подход, ничего не скажешь.
Это то же самое, как если кто-то вам (как Rust-аману) будет говорить, что Rust плохой потому что там синтаксис плохой или скобочки не те
Регулярно говорят, но на людей я не бросаюсь. (:
И да, в расте есть куча моментов которые мне не особо нравятся. Как из-за (не)привычности, так и "более объективных". И к аргументированной критике отношусь совершенно спокойно, даже с интересном: любопытно же узнать, что разным людям в глаза бросается. Довольно занятно как раст воспринимается людьми в зависимости от их "любимого языка". И в общем-то это довольно важно, если мы хотим новый язык продвинуть: каждая "необычность" должна быть чем-то обоснована, иначе будет сложнее отвоёвывать целевую аудиторию.
Повторюсь касательно Смолтока: я понимаю почему так сделано и понимаю, но там оно хотя бы "логично" в рамках языка. И собственно, является продолжением его особенностей.
Фух, чуть не бросился критиковать не дочитав до примечаний — только тогда обратил внимание, что это перевод. Странно, конечно, что люди бросаются писать такие статьи основываясь на незнание, в общем-то, вполне базовых вещей. Это я о forget, например.
Eсли честно, не понял и претензий к трейтам. Ну да, изнутри трейта нельзя обращаться к полям объекта. Зато можно это делать изнутри реализации трейта для конкретной структуры. Да и как иначе? Интерфейсы работают точно так же. Как по мне, не хватает разве что возможности удобным образом делегировать реализацию трейтов полям структуры — из-за этого приходится писать "мусорный" код. А в остальном вполне всё прилично.
А есть (применимые на практике) языки "общего назначения", которые вообще никак не позволяют в ногу выстрелить?
На этот случай есть std::array, впрочем, у него есть свои недостатки.
И какой оверхед std::array привносит?
std::array ведь не умеет выводить размер из списка инициализации?..
Cпособ совсем не новый.
В курсе, что это уже устоявшийся термин в русскоязычном сообществе, но лично меня коробят как раз "типажи". (:
Ну так Haskell — "чисто функциональный", а другие два языка — нет.
Опять же, некая часть популярности Scala берётся от JVM платформы. В языке намешано всё что угодно и нередко предполагается (поначалу) "писать как на джаве". Не пытаюсь доказать, что Scala "недостаточно функциональна", но не уверен, что (очень) мультипарадигменные языки могут быть "стандартом" в чём-то одном.
Собственно, не удивлюсь, если Clojure популярнее чем Common Lisp. А в рейтинге TIOBE вообще некий "обобщённый" лисп присутствует: вполне возможно, что туда всё лиспо-подобное попало.
Это как? Ты говоришь о нескольких ролях, в контексте С++ нас две интересует: "опасный но быстрый и лаконичный" и "безопасный, но медленный и многословный". С++ более безопасный чем С и более быстрый чем джава. То есть, он ни туда ни сюда, если следовать этой "теории".
Так-то я тоже думаю, что "роли" есть, но не эти и не три.
Ага, потеснила из тех ниш, где С++ был не лучшим выбором. Тем не менее, С++ остаётся весьма популярным и "дальнейшего вытеснения" не происходит.
Но вообще я не верю, что ты это всё серьёзно пишешь. (:
Где там у нас С++ в рейтингах?..
С# развивается довольно активно и в новые версии не стесняются добавлять разнообразные фичи.
Скала тоже довольно популярна — не как С/Java, разумеется, но работу найти вполне реально, что вполне себе показатель. А там чего только нет.
Мир не ограничивается джавой и С.
Конечно, понятно. Появились в нужное время, имеют серьёзную поддержку (можно сравнить Оракл и Мозиллу раз уж мы в контексте раста), ну а дальше по наклонной — готовые специалисты, наличие учебных материалов, легаси и т.д. Плюс продолжают развиваться: если бы, скажем, джава остановилась несколько версий назад, то её, наверняка, потеснил C# и другие языки на JVM.
Новым языкам, ясное дело, сложнее. Это логично и я не жалуюсь на "несправедливость", если что. (:
Честно говоря, не понимаю какое отношение приведение типов имеет к ООП.
Не без этого. Вот только те проблемы, что вы перечислили они не про обратную совместимость, а про нежелание жертвовать производительностью. Скажем, как компилятор сам расставит "метки виртуальных функций", если вы пишете библиотеку?
В более новых языках типа Rust действительно многое проще (в том плане, что компилятор даст по рукам, если что), но суть остаётся той же: такие решения приходится принимать самому: если нужные виртуальные функции, то используем трейт-объекты и т.д.
Если сделать возможность указать (но сознательно указать) использовать дефолтную реализацию сравнения, то много кода не будет.
Так ведь в (Common) лиспе есть и что-то типа goto (tagbody) и аналог исключений и мутабельные переменные и сравнение значения ссылок и наследование и т.д.
А ещё, если я ни с чем не путаю, то вместо ключевого слова предлагалось * использовать, но решили, что будет сбивать с толку.
Так-то Rust пытается быть и безопасным и быстрым. (:
Тут противоречит разве что минус работающий по разному в зависимости от того есть пробел или нет. С другой стороны, о том, что разделителем является пробел и о том как выглядит вызов функций мы, скорее всего, узнаем из любого букваря ещё до того как до арифметики дойдём.
Разумеется. Но я с самого начала говорил, что ценность "оригинальности" имеют не сами по себе, а вместе с новыми возможностями. Или вы с этим не согласны? А то ведь можно "обогащать свой опыт" вещами типа brainfuck или ещё лучше — whitespace.
Отличный подход, ничего не скажешь.
Регулярно говорят, но на людей я не бросаюсь. (:
И да, в расте есть куча моментов которые мне не особо нравятся. Как из-за (не)привычности, так и "более объективных". И к аргументированной критике отношусь совершенно спокойно, даже с интересном: любопытно же узнать, что разным людям в глаза бросается. Довольно занятно как раст воспринимается людьми в зависимости от их "любимого языка". И в общем-то это довольно важно, если мы хотим новый язык продвинуть: каждая "необычность" должна быть чем-то обоснована, иначе будет сложнее отвоёвывать целевую аудиторию.
Повторюсь касательно Смолтока: я понимаю почему так сделано и понимаю, но там оно хотя бы "логично" в рамках языка. И собственно, является продолжением его особенностей.