Последние годы часто хвалят язык программирования Rust. Однако, без изучения синтаксиса и особенностей языка в нём сложно разобраться. Честно говоря, при первом просмотре дальше простых примеров я продвинуться не смог. Вроде догадываешься, что тут указываем тип переменных, амперсанд – это вроде “я только посмотреть”, но всё равно код складывался в некую мешанину иероглифов с кучей скобок и, на первый взгляд, случайно проставленных точек с запятыми. То ли дело Python, минимализм синтаксиса которого так привлекателен для неокрепших душ. Однако, так ли сложен Rust на самом деле или это миф? 

Я предположил, что те базовые знания по программированию, которые предлагают распространенные курсы можно дать и с помощью Rust.

Учебные материалы по Rust

На сегодняшний день в интернете есть много высококачественных, причем, даже бесплатных материалов по изучению языков программирования (это про вводные курсы начального уровня). Заметно, что каждый автор хочет признания своих усилий и старается быть лучшим. Но в отличии от того же Питона, по Расту материалов на несколько порядков меньше. Растовцы хвастаются хорошей документацией к языку и Rustbook`ом. Но его нельзя назвать понятным пособием для начинающих. Лично мне книга “не зашла”. И не мне одному, парни не дадут соврать:  ссылка, ссылка . Оказалось проще начать изучение с бесплатного курса Learn Rust from Scratch. Но вот как эффективно двигаться дальше человеку без значительного багажа знаний и опыта программирования непонятно. Разрозненные статьи в Интернете дают отрывочные знания, серьезные книги чересчур заумны.

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

Не существует сложных вещей, есть сложные объяснения

Сложность создания доступных обучающих материалов проистекает, по моему мнению, от избытка знаний, интеллектуальных способностей, но, прежде всего, опыта авторов. Человеку, который беглым взглядом считывает весь листинг кода, сложно представить себе какие-то проблемы, возникающие у новичка. Сложности добавляет объем знаний, который нужно передать. Непросто выстроить подачу материала, чтобы она опиралась исключительно на ранее пройденные темы.

Однако, автор учебного материала как-то получил свои знания и опыт. Как-то же складывалось по кирпичикам общее понимание. Соответственно, этот хаотичный путь получения знаний можно повторить. Более того, этот путь можно оптимизировать. Нужно, чтобы следующее поколение программистов имело больше возможностей двигаться дальше, к новым открытиям и свершениям. Как, кто и что должен для этого делать – это тема отдельной статьи, здесь я расскажу о своем хоббийном микро-проекте.

Проба пера

При изучении Rust я начал писать себе короткую шпаргалку пройденного материала, но тут знакомый заинтересовался программированием и возникла идея подготовить для него нормальный учебный материал, чтобы он шел по моим следам и не тратил время. Эта работа, кстати, была ну очень полезной для самообучения. Когда кто-то наивно полагает, что ты лучше в чем-то разбираешься, не хочется “ударить в грязь лицом”, приходится чуть глубже вникать и меньше откладывать на потом. Очень рекомендую такой подход для самообучения. 

Мои потуги не остались без критики со стороны более опытных товарищей. Вот такую остроумную рецензию я получил:

Питер Брейгель Старший «Слепой ведёт незрячего»
Питер Брейгель Старший «Слепой ведёт незрячего»

Надеюсь, что это просто дружеская гипербола и двигаюсь дальше. 

При подготовке обучающего материала я вспоминал свой опыт обучения и сформулировал несколько правил правил :

  1. Выдавать информацию дозированно. По одной небольшой теме за раз. А потом, когда базовый материал уляжется в голове, когда появится некоторая уверенность и способность считывать простой код, тогда давать следующую порцию информации.

  2. По возможности плавно переходить от темы к теме. Одно следует за другим и подводит к следующему, как в рассказе, поэтому учащийся не перенапрягается.

  3. Наращивать знания последовательно. Давать задачи строго в рамках пройденного материала. 

  4. Чисто академическое изложение скучно. Изложение на практических жизненных примерах, может где-то, не показать общеприменимость примера, но зато даёт четкое осознание практической полезности программирования и включает образное мышление. Поэтому материал лучше усваивается и легче вспоминается в какой-то реальной жизненной ситуации.

  5. Не делать избыточных упрощений. Иногда хочется знать как именно нечто устроено внутри, а тебе дают упрощенную модель и её сложнее понять, следовательно запомнить и использовать.

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

Сначала я просто писал в документах гугла, но потом захотелось выложить материалы на сайт. Потом захотелось добавить подсветку кода, затем потребовалась навигация, далее возникла идея сделать более приятную для глаз темную тему. После даже зарегистрировал отдельный домен rusteon.ru. Однако, важно вовремя остановиться, поэтому показываю альфа-версию курсов по Rust.

Не обращайте внимание на декларативные разделы, там сейчас более-менее готов Курс I и выложено самое начало Курса II.

Рождение и смерть проектов

Основная проблема у курсов и прочих полезных начинаний в том, что у авторов хватает запала только чтобы начать свой проект. А потом, сталкиваясь со сложностями, с невостребованностью или нехваткой средств, автор забрасывает свою идею. Это приводит к тому, что в интернете очень много информации начального уровня, а уже среднего уровня сложности, не говоря уже о высших материях, почти не найти в связном последовательном цельном изложении. У меня такая же история. Поэтому и я здесь рассказываю о своем проекте, чтобы получить некие оценки текущего результата и понять нужно ли это кому-нибудь вообще.

Приглашение попробовать

Приглашаю тех, кто до сих пор не знаком с языком программирования Rust ознакомиться с материалами: Курс I. Rust для начинающих https://rusteon.ru/course/rust-I и некоторыми лекциями Курса II. Погружение в Rust https://rusteon.ru/course/rust-II

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

Если вы опытный специалист, и у вас есть немного времени и желания, то посмотрите нет ли там серьезных ошибок. Прошу писать в личку или по контактам, указанным на сайте.

Вопросы для обсуждения

Чтобы этот материал был полезен всем, кто создает курсы, видеоуроки или пишет книги, поделитесь, пожалуйста, в комментариях своим мнением:

  1. Что именно вам понравилось в тех курсах или учебных материалах, которые оставили у вас положительные впечатления?

  2. Что вы можете посоветовать создателям обучающих материалов, чтобы учащиеся могли качественнее и быстрее усваивать материал?

Комментарии (85)


  1. Ales_Nim
    20.07.2022 19:05

    Добрый день, а на чем делали сам сайт? Самописный или какой-то движок готовый?


    1. IvanKlut Автор
      20.07.2022 19:06

      Айтинити, ядро Друпала + обвес, чтобы можно было нормально работать обычным людям и верстальщикам. Давнишняя история.


      1. Ales_Nim
        20.07.2022 19:07
        +2

        Спасибо, я уж грешным делом подумал что-то опенсорсное


        1. IvanKlut Автор
          21.07.2022 09:30

          Опенсорсное, но не раскрученное, если будет интерес, предоставлю исходники.


      1. pfr46
        21.07.2022 04:41
        +2

        Как по мне так ужасно не удобно справа листинг глав.


        1. IvanKlut Автор
          21.07.2022 09:29

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


          1. pfr46
            21.07.2022 09:46
            +1

            В том и дело, что как раз он и отвлекает. Уже как бы стандарт де-факто о расположение списка страниц слева. Какое бы online мануал не взять. Будь то pdf, документация на API или список классов к какой-нибудь библиотеки. Или даже список файлов в проекте хоть IDE хоть приложения типа CAD.


          1. nikolas78
            21.07.2022 15:40

            К списку справа я уже привык, а то, что основной текст прижимается к левому краю экрана, пока привыкнуть не могу)

            И еще, я бы при регистрации спрашивал бы только ник и почту. А опросник можно оставить на потом.


  1. md_backend_binance
    20.07.2022 19:25
    -11

    Мой опыт с растом на виндовс: Дальше установки не ушел :)))

    1) не было для powershell сертификатов c доступом уровня "секюрити" для успешного окончания установки rust (версия виндовс - энтерпрайз 10)

    2) после этого, в конце rust установка падал из за какого то "mvc" от новой "VSC"

    на этом плюнул


    1. IvanKlut Автор
      20.07.2022 19:26
      +8

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


    1. tommyangelo27
      20.07.2022 19:37

      А к нему докер образ не идёт случайно?


    1. aegoroff
      20.07.2022 19:47
      +5

      1. C сертификатами ни на Windows 10 Pro ни на 11 Pro проблем не испытывал. А зачем вы вообще powershell пользуетесь для этого? загрузили https://static.rust-lang.org/rustup/dist/i686-pc-windows-gnu/rustup-init.exe и запускаете из обычной командной строки

      2. По хорошему, лучше иметь VS Studio установленным на машине - редакции Community будет вполне достаточно. Наверно можно какой-то отдельный маленький рантайм поставить - но я лично так не пробовал, у меня есть студия (и 2019 и 2022)


      1. Vest
        20.07.2022 19:56
        +2

        Я даже не ставил себе Community версию, там достаточно иметь VS Build Tools. Вообще, у меня нет трудностей ставить тулчейн под Windows, единственное, кто мне палки в колёса вставляет, так это антивирус.


        1. aegoroff
          20.07.2022 20:02
          +1

          а точно VS Build Tools должно хватить - спасибо за уточнение! А антивирус очень странно - ни виндос Дефендер ни Касперский мне ни разу не мешали, причем последний стоит в достаточно злой конфигурации (рабочий копм)


          1. Vest
            20.07.2022 20:04
            +2

            Это сраный бдительный МакАфи, у него какие-то странные правила, на которые срабатывает переименовывание файлов. Баг репорт не мой, там их парочка таких.


            1. aegoroff
              20.07.2022 20:05

              Понял. Спасибо за инфу!


      1. mayorovp
        20.07.2022 20:12
        +1

        Там на самом деле от студии нужен только линкер. И ничто не мешает вместо тулчейна stable-x86_64-pc-windows-msvc поставить себе stable-x86_64-pc-windows-gnu (stable-gnu для краткости)


        1. aegoroff
          20.07.2022 20:15

          Или так, да - согласен


    1. delaklo
      20.07.2022 20:05
      -3

      а меня установщик заставил скачивать вижуал студио плюс windows11sdk(не убрал галочку). Короче минус 10 гигов памяти


    1. md_backend_binance
      21.07.2022 10:34
      -1

      не понимаю почему люди минусуют за факты. Лучше бы шли на гитхаб и решали проблемы и зависимости с установщиком )


  1. DirectoriX
    20.07.2022 21:09
    +14

    Rust вообще и Rust Book в частности гораздо легче «заходят» если есть опыт программирования на нормальных компилируемых языках со статической типизацией, особенно с C-подобным синтаксисом. Тогда и не будет «случайно проставленных точек с запятыми», и многие куски документации будут просто как напоминалочка, что такое вообще бывает.


    1. mapron
      20.07.2022 21:26
      +2

      Ну как сказать, у меня вот обширный опыт на С++, хелоуворлды на rust с циклами и арифметикой без проблем, но как только попытался что-то более сложное — наследования нет, виртуальных методов нет, вместо коллбеков и каррирования — делай вася агрегирование доп. классов с методами и тд и тп.
      Эксперименты с Java/C# чет у меня такого дискомфорта не вызывали, там все плюс минус такое же имеется (ну иногда многословнее, а иногда и поудобнее).

      Изучать я Rust однозначно буду и дальше. Но больна.


      1. mayorovp
        20.07.2022 23:24
        +1

        виртуальных методов нет

        dyn trait же


      1. lain8dono
        20.07.2022 23:27
        +1

        наследования нет, виртуальных методов нет

        И то и другое есть. Чего нет, так это классов. Вместо этого ООП представленно через трейты. Сходство только внешнее.


        1. mayorovp
          20.07.2022 23:54
          +2

          Как раз-таки классы есть (структуры их успешно заменяют), как и интерфейсы (трейты). Нету именно наследования классов.


          1. lain8dono
            21.07.2022 00:49
            +1

            Структуры безусловно чуточку похожи на классы и вместе с тем ими не являются. Это более простая и более низкоуровневая абстракция.


  1. sashagil
    20.07.2022 22:12
    +3

    Начал читать, имея только шапочное знакомство с Rust - глаза зацепились за фрагмент в "Плюсы Rust", "... и без сборщика мусора" (как будто это что-то хорошее :) ). Тут вероятно было бы уместно упомнятуть "строгий контроль использования памяти, не опирающийся на сборщик мусора". В C++ нет сборщика мусора (кстати, часть языка, позволявшая интеграцию сборщика мусора, существовала некоторое время в стандарте - убрали), но нет и строго контроля, легко выстрелить в ногу. В D есть строгий контороль, но есть и сборщик мусора. В дизайне Rust сознательно отказались от сборщика мусора, что имеет далекоидущие последствия из-за более сложных мер по обеспечению строгого контроля.


    1. IvanKlut Автор
      21.07.2022 09:23

      Спасибо за информацию. Про сборщик мусора, предположу, что идут параллели с Go.


  1. MikeLP
    21.07.2022 05:04
    +2

    Было бы классно иметь возможность скачать курс в виде PDF файла и читать офлайн в дороге и тд..


    1. IvanKlut Автор
      21.07.2022 09:27

      Идея интересная. Пока перед поездкой можно делать скриншот экрана, например, с помощью расширения для хрома fireshot. Все равно более одной темы за раз нет смысла загружать в память. И самое важное в обучении - это сразу кодить самому, пробовать, а что, если я по своему сделаю, ругнется ли компилятор?


  1. MUTbKA98
    21.07.2022 09:52
    +7

    Rust Book аболютно адекватен. Просто сам язык немного необычен. Он очень сильно заточен на борьбу с проблемами предыдущих поколений языков, и, если читатель не налетал многократно на все те грабли, вполне возможно, что ему такой фокус будет плохо заходить.

    Ну а у тех, у кого ноги все сплошь в старых ранах от стрельбы по ногам в старые добрые времена (и все равно встречаются и свежие шрамы) - для таких это все просто музыка для ушей, и падает в подсознание очень легко.


    1. IvanKlut Автор
      21.07.2022 10:21

      Не спорю, адекватен, но для новичков не самый лучший старт. Глава вторая:

      use std::io;
      
      fn main() {
          println!("Guess the number!");
      
          println!("Please input your guess.");
      
          let mut guess = String::new();
      
          io::stdin()
              .read_line(&mut guess)
              .expect("Failed to read line");
      
          println!("You guessed: {guess}");
      }

      Тут сразу на новичка вываливается: использование библиотек, мутабельность, объект строки, заимствование, result.

      Знания приносят страх.


      1. MUTbKA98
        21.07.2022 10:27
        +5

        Ну, тут от бэкграунда зависит. Те, кто хоть немного знаком c С++, или даже Java - ЭТОТ код сразу поймут даже без объяснений.

        use std::io сразу ассоциируется с using namespace std; #include "<iostream>, к примеру, ну и так далее.

        Вот попытка "слегка" это модифицировать - тут да, могут уже возникнуть вопросы. Но далее уже и объясняется по тексту, что и как.


      1. mayorovp
        21.07.2022 10:32
        +2

        Напротив, именно такой подход новичкам и нужен. Сначала даётся программа, потом объясняется каждая её строчка, со ссылками на будущие главы. Можно начать с готового примера и "играться" с ним — менять часть строк, смотреть что получилось...


        Альтернативный подход, когда даётся 15 глав теории, без возможности опробовать это всё на практике пока не дочитаешь до конца, попросту глуп.


        1. IvanKlut Автор
          21.07.2022 11:25
          +1

          Вы описали две крайне противоположные ситуации. Истина где-то посередине. Нужно давать последовательную теоретическую базу одновременно закрепляя её практикой.


          1. mayorovp
            21.07.2022 11:42

            Не для любого языка это возможно.


            1. IvanKlut Автор
              21.07.2022 11:46

              Не соглашусь, этот подход предпочтителен не только к языкам программирования, а к любой отрасли знания. Так лучше изучается и математика и шитьё одежды.


              1. mayorovp
                21.07.2022 11:55
                +2

                Он может быть сколь угодно предпочтительным, но если язык требует чтобы код был написан в функции main — вам придётся либо начинать объяснять его с понятия функции (что странно), либо дать изучающему язык "заготовку" с этой функцией и обещанием вернуться к функциям позже.


                У вас просто нет варианта "ничего не говорить про main".


                1. ReadOnlySadUser
                  22.07.2022 18:01

                  Я может быть какой-то невероятный гений, но почему такие простые концепции как функция, переменная и даже, о ужас, указатель вызывают у людей хоть какие-то проблемы с пониманием? Чёт когда я учился программировать я понял суть секунды эдак за 4, а сложность всех проблем с этими вещами - она раскрылась уже позже с опытом и решаемыми задачами.


                  1. mayorovp
                    22.07.2022 19:14

                    Вопрос-то не с пониманием функции, а с тем в каком порядке что рассказывать.


                    1. ReadOnlySadUser
                      22.07.2022 19:17

                      Да никак не рассказывать. Функция - понятно из математики за 5-й класс. Переменные - тем более. Просто провести аналогию и не упарываться по объяснениям пока не придёт время)


                      1. mayorovp
                        22.07.2022 19:49

                        В математике функции возвращают значение. В программировании они что-то делают (особенно main). Тяжело тут аналогию провести, особенно просто…


                        Опять-таки, переменные в математике неизменяемые, а в программировании изменяемые придумали. И ведь этого не умолчать, не оставить на потом — это ж самые азы, если только вы не ФП рассказываете.


        1. ShaggyCat2
          21.07.2022 20:01

          На Хабре есть статья про то, в какой последовательности читать растбук по главам:

          https://habr.com/ru/post/537790/


          1. IvanKlut Автор
            21.07.2022 20:03

            Да, я на неё сослался в статье. Именно в том и суть, что человек потерял кучу времени и нервов, только из-за текущей последовательности материала. Поэтому есть куда стремиться при создании обучающих материалов.


    1. orekh
      21.07.2022 10:44
      +2

      Ну, мне например не нравится как там подается инфа о разбиении на модули.

      Рассказ идёт с тех модулей, которые практически никому не нужны - которые внутри того же файла, не знаю как они точно называются.

      А как происходит объявление и доступ к файлам модулей - почти вскользь. Реально полезная инфа может быть подчерпнута только из пары примеров кода про файловую иерархию в конце той главы или методом тыка.

      И то придется дополнительно гуглить как раньше указывались пути к модулям и как сейчас.


      1. MUTbKA98
        21.07.2022 10:51

        Ну самое важное в модулях - это рассказать об областях видимости и что и как с этим делать. А где это лежит - это одна строчка объяснений, что можно mod { } заменить на mod "имя", и тогда все будет искаться в файле "имя". И все (по крайней мере, в актуальной версии Rust).


      1. orekh
        21.07.2022 19:08

        upd: я сейчас нагуглил растбук: и либо это другой растбук; либо, с того времени как я его смотрел раньше, эта часть значительно улучшилась.

        Defining Modules to Control Scope and Privacy


    1. mikhanoid
      22.07.2022 10:28

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

      Мне кажется, наоборот, Rust надо учить одним из первых языков, пока человек не освоил алгоритмы. Иначе Rust вызывает недоумение, потому что не позволяет писать привычные алгоритмы без unsafe. Это лично для меня источник постоянного дискофорта. Никак не привыкну к идее, что простейшая биномиальная куча - это небезопасная структура данных.


      1. mayorovp
        22.07.2022 10:48
        +1

        Хм, а где в биноминальной куче нужен unsafe?


        1. mikhanoid
          22.07.2022 11:59

          В той реализации, которую я знаю, использован replace


          1. mayorovp
            22.07.2022 12:07
            +1

            Но ведь replace — это безопасная функция?


            1. mikhanoid
              22.07.2022 12:20

              Не знаю ????????‍♂️: внутри у неё unsafe.


              1. mayorovp
                22.07.2022 12:22
                +1

                Но снаружи-то unsafe нет!


                1. mikhanoid
                  22.07.2022 15:12

                  То есть, если unsafe спрятать внутрь, то как бы и не считается?


                  1. mayorovp
                    22.07.2022 15:17
                    +4

                    Если он не нарушает языковых инвариантов — то да, для того его и придумывали как бы. Если это библиотечный код — два раза да. Если это стандартная библиотека — тем более.


                    1. Siemargl
                      23.07.2022 01:26
                      -2

                      язык на встроенных костылях. как паскаль


                  1. DarkEld3r
                    22.07.2022 15:26
                    +2

                    То есть, если unsafe спрятать внутрь, то как бы и не считается?

                    Никого ведь не беспокоит, что где-то внутри условной JVM есть нативный код, который всякого натворить может?.. На джаве пишут принимая как факт, что сборка мусора работает корректно и всяких сишных UB не случится.


                    Мне кажется, что и ансейф надо примерно так же воспринимать. Разве что с поправкой, что авторы произвольных библиотек могут быть менее аккуратны, чем авторы самого языка и стандартной библиотеки.


              1. DirectoriX
                22.07.2022 20:56
                +1

                Да вообще вся std так или иначе обращается к ОС (память выделить, тред запустить, файл открыть-прочитать-записать) — выходит, по вашей логике на Rust ничего нельзя написать без unsafe?


                1. Siemargl
                  23.07.2022 01:28
                  -1

                  для точного ответа стоит просто почитать исходники std и популярных либ =)


      1. DarkEld3r
        22.07.2022 14:51

        Мне кажется, наоборот, Rust надо учить одним из первых языков, пока человек не освоил алгоритмы.

        Это тоже спорно. (:


        Ограничения раста проще понять вдоволь потоптавшись по граблям С или С++. Иначе может быть непонятно ради чего это всё.


        1. mikhanoid
          22.07.2022 15:16
          +1

          Мало кто учил тот же Си, начав с Ассемблера, чтобы потоптаться по граблям Ассемблера, и понять, ради чего это всё. Проблема в том, что у опытного программиста возникают вопросы к выразительности Rust. Точно так же, как у программистов на Ассесблере возникли вопросы к Си. А новичок воспримет это всё как данность.


          1. DarkEld3r
            22.07.2022 15:22

            Это, конечно, исключительно мой личный опыт, но с С++ на раст переключился относительно легко. Был, конечно, период привыкания, но без особых страданий.


  1. amarao
    21.07.2022 11:05
    +3

    Rust - очень сложный для изучения и очень простой для использования язык. Связано это не с сложностью языка, а с тем, что под ковёр GC не заметаются множество понятий, которые требуют внимания от программистов. Освоив их и научившись в рамках этих понятий размышлять о коде, программист становится лучше. А компилятор ему в этом помогает, отлавливая мелкие отклонения в логике и ошибки.

    В целом, стримы Jon Gjengset'а на ютубе - пока лучшее, что я видел. А Fault Lore (блог автора Rustonomicon'а) - самое жутко-прекрасное, что я читал.


    1. IvanKlut Автор
      21.07.2022 11:28
      +1

      Хочу заметить, что сложный для изучения не потому, что сложный, а потому, что мало кто уделяет внимания базовым вещам в обучении языка. Я приводил в статье ссылку на курс на educative.io, там всё достаточно просто изложено, почти на уровне обычных курсов по Питону.


      1. amarao
        21.07.2022 11:58

        Вы знаете, я несколько лет учу Раст, при весьма хорошем бэкграунде как в Си так и в Питоне, и я могу сказать, что Rust - очень сложный для изучения язык. При том, что есть иллюзия простоты (которая потом хорошо поддерживается компилятором для человека, который знает эту сложность), но попытка понять что такое place expression и кто является владельцем place expression начинает взрывать мозг по мере попыток думать об этом. Неявные заимствования, сравнение unsized значений, появление эфимерных ссылок в момент создания указателей...


        1. Siemargl
          21.07.2022 14:13
          -5

          Вы знаете, я несколько лет учу Раст, при весьма хорошем бэкграунде как в Си так и в Питоне

          потерянные годы. зачем?

          для абстрактных, но малоприменяемых знаний был же универ


          1. amarao
            21.07.2022 14:28
            +6

            Ну, я мог вместо изучения Rust'а пройти все части Ведьмака и Киберпанк. Это было бы засчитано за потерянные годы?

            Rust - это отдушина здравого смысла и манифестация Касталии (из игры в биссер). Наконец-таки в индустрии кто-то что-то делает на совесть не срезая углы.

            А ещё бонусом открывается возможность написать любую программу, которую хочешь. Даже если это рендеринг шрифтов в opengl в реальном времени 144 раза в секунду. Этой возможности мне очень сильно не хватает в питоне, где "нарисовать картинку" просто, а показать её на экране - big deal, с нюансами.

            А ещё вдумчивое чтение документации по Расту открывает многие аспекты современных компьютеров. Например, если бы не Rust, я бы никогда не разобрался с linux memory model, потому что оно слишком странно написано; а в рамках примитивов Rust (окей, окей, С++ с фэнсервисом) - куда разумнее и лучше.

            При этом копание в Rust не оставляет PTSD как, например, ходьба по сишным граблям с type aliasing.


            1. Siemargl
              21.07.2022 15:01
              -2

              Вот подмена понятий не нужна. Все написано на С, и если ты эту модель понимаешь, то понимаешь мир, иначе никакой язык тебя не спасет (ассемблер как второй вариант).

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

              Этакий черный квадрат Малевича. Идеал ничего.


              1. amarao
                21.07.2022 15:54
                +3

                У современного Си модель памяти соответствует С++.

                Речь про https://en.cppreference.com/w/cpp/atomic/memory_order

                Старинный "обычный" C никакого acquire/release не поддерживает.


                1. Siemargl
                  21.07.2022 17:01
                  -3

                  Какой то странный дерейл.

                  С эмбедщиками пить не советую.


                  1. amarao
                    21.07.2022 17:06
                    +5

                    При чём тут эмбеддщики? Вы когда последний раз видели компьютер с одним процессором? Уже давно 2-4-6-8-12-24-32-48-64-128-256 ядер. И вот там-то модель памяти становится критически важной, потому что ошибка с режимом доступа к памяти приводит к фантастическим глюкам, включая прыжки в будущее (потому что спекулятивное исполнение).

                    А "sequential на всё" превращает ваш компьютер в тыкву по производительности.


                    1. Siemargl
                      21.07.2022 17:14
                      -3

                      Дерейл на какой то невиданный "режим доступа к памяти" и ирония в том, что раст то как раз "sequential на всё". Удачи.


                      1. amarao
                        21.07.2022 17:16
                        +2

                        std::sync::atomic::Ordering::Relaxed.


                      1. Siemargl
                        23.07.2022 01:32
                        -2

                        я не зря упомянул эмбедщиков - они точно знают, какие у них операции атомарные, а какие - нет.

                        а это все из очередной попытки писать АБСОЛЮТНУЮ МАШИНУ абсолютно переносимый код

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


                      1. mayorovp
                        23.07.2022 11:02
                        +1

                        А что не так с абсолютно переносимым кодом и почему вдруг это недостаток?


                      1. Siemargl
                        23.07.2022 12:27
                        -1

                        Это недостижимый идеал, в погоне за которым появляется куча избыточных абстракций.


                      1. mayorovp
                        23.07.2022 12:53
                        +1

                        А чего это он недостижимый-то?


                        И даже если так, почему приближение к нему рассматривается как что-то плохое?


                      1. amarao
                        23.07.2022 11:18
                        +2

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

                        А про бэкграунд в питоне - why not? Есть жирнючие ценные проекты на нём написанные, которые нужно сопровождать. Если же учесть, что у меня основная работа вообще вокруг ансибла с testinfra строится, то что мне использовать, кроме питона? Писать модули на перле, маме на зло?


                      1. Siemargl
                        23.07.2022 12:29
                        -2

                        писать то можно, хвастаться не стоит =)

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


                      1. amarao
                        23.07.2022 13:13
                        +2

                        Моё резюме касается только меня и людей, которые мне будут деньги платить. Вы, вероятнее всего, считаете, что питон - это детский сад, и все благородные доны должны писать на coq (haskell, whatever). Но я подозреваю, что тщательно написанный на самом вами любимом языке программирования код окажется в большой неприятной заднице, потому что вендор железки, с которой вы хотите работать, срал на стандарты и обновления, и надо использовать netmiko, которую (увы, увы!) на coq никто не портировал. Либо лично изобретать тайминги слипов после отправки команд по устаревшей версии ssh, отсутствующей во всех современных ОС.


            1. mikhanoid
              22.07.2022 10:55

              До Rust были языки, спроектированные "по науке". Поэтому высказывание "наконец-то" выглядит странным. Примеры: Haskell, ML, Scheme, Oberon, Algol и так далее.

              Модель памяти Linux описана в терминах работы железа. Не очень понятно, что именно в этом описании "странно".

              Ну, и, наконец, рендеринг шрифтов 144 раза в секунду на OpenGL от языка не зависит: шейдеры будут с одинаковой сокростью работать. От языка зависит сложность составлерия и загрузки этих шейдеров. Но, вроде, на Python это не сложно сделать. Не уверен, что сложнее, чем в Rust.


              1. Siemargl
                23.07.2022 01:35
                -2

                До Rust были языки, спроектированные "по науке". Поэтому высказывание "наконец-то" выглядит странным. Примеры: Haskell, ML, Scheme, Oberon, Algol и так далее.

                И они всем практически мертвы, на практике не используются (еще Эйфелль). Экстраполяция очевидна


                1. 0xd34df00d
                  23.07.2022 04:58
                  +3

                  Мертвы только последние два с половиной.


              1. amarao
                23.07.2022 11:15
                +1

                Эта наука учитывает модель вычислителя, не совсем соответствующую реальному компьютеру, что создаёт значительный оверхед (а то и глупости, типа i30 и u31 в OCaml).

                Шрифты рендерятся в процессоре, а не в видеокарте, видеокарта их отображает.

                И я очень хочу посмотреть как вы это будете делать на питоне без массивной коллекции so-файлов, выполняющих реальную работу.


  1. IvanKlut Автор
    22.07.2022 17:18
    +1

    Спасибо большое, что пишете про опечатки, я это ценю и сразу исправляю.