• Выпуск Rust 1.21

    • Перевод

    Команда Rust рада представить выпуск Rust 1.21.0. Rust — это системный язык программирования, нацеленный на скорость, безопасность и параллельное выполнение кода.


    Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


    $ rustup update stable

    Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.21.0 можно ознакомиться на GitHub.


    Что вошло в стабильную версию 1.21.0


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


    Первое изменение касается литералов. Рассмотрим код:


    let x = &5;

    В Rust он аналогичен следующему:


    let _x = 5;
    let x = &_x;

    То есть 5 будет положено в стек или возможно в регистры, а x будет ссылкой на него.


    Однако, учитывая, что речь идет о целочисленном литерале, нет причин делать значение таким локальным. Представьте, что у нас есть функция, принимающая 'static аргумент вроде std::thread::spawn. Тогда вы бы могли использовать x так:


    use std::thread;
    
    fn main() {
        let x = &5;
    
        thread::spawn(move || {
            println!("{}", x);
        });
    }
    Читать дальше →
  • Игрушечный фронтенд для LLVM, написанный на Rust: Руководство для начинающих

    • Перевод
    • Tutorial
    Примечание переводчика
    Приведённый в статье код скомпилирован с достаточно старыми версиями крейтов peg и peg_syntax_ext. Для текущих версий в исходники нужно внести минимальные изменения. Я вставил изменённые участки в спойлеры по тексту статьи. Для сборки кода установите компилятор nightly Rust.
    Полный исходник с моими правками можно скачать здесь: https://github.com/arktur04/rust-llvm-toy-frontend


    В настоящее время я работаю над компилятором, который написан на Rust, и порождает LLVM IR. LLVM API выглядит немного пугающе для новичков, и по нему не так много руководств (и все они на C++, поэтому не вполне очевидно, как сделать то же самое на Rust). Я бы хотел, чтобы кто-то протянул мне руку помощи, когда я начинал всё это, и эта статья является тем, что я хотел бы показать самому себе в то время.



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

    Полный исходный код для этого руководства находится здесь.
    Читать дальше →
  • Go быстрее Rust, Mail.Ru Group сделала замеры

      С такой фразой мне кинули ссылку на статью компании Mail.Ru Group от 2015 «Как выбрать язык программирования?». Если кратко, они сравнили производительность Go, Rust, Scala и Node.js. За первое место боролись Go и Rust, но Go победил.

      Как написал автор статьи gobwas (здесь и далее орфография сохранена):
      Эти тесты показывают, как ведут себя голые серверы, без «прочих нюансов» которые зависят от рук программистов.
      К моему большому сожалению, тесты не были эквивалентными, ошибка всего лишь в 1 строчке кода поставила под сомнение объективность и вывод статьи.
      Восстановим справедливость?
    • RustGo: вызов Rust из Go с почти нулевым оверхедом

      • Перевод

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


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


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

      Читать дальше →
      • +32
      • 4,4k
      • 2
    • Concurrency паттерны в Rust из Java

        Под катом находятся заметки, в которых расписано, как реализовать в Rust хитрые concurrency паттерны, которые я с легкостью пишу в Java, и в чем различие в подходах к concurrency у этих языков. Статья будет полезна и тем, кто переходит на Rust из C#, ведь у него аналогичная модель памяти.

        Читать дальше →
      • Выпуск Rust 1.20

          Команда Rust рада представить выпуск Rust 1.20. Rust — это системный язык программирования,
          нацеленный на скорость, безопасность и параллельное выполнение кода.


          Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


          $ rustup update stable

          Если же Rust еще не установлен, вы можете установить rustup с соответствующей
          страницы нашего веб-сайта и ознакомится с подробными примечаниями к выпуску Rust 1.20 на GitHub.

          Читать дальше →
          • +34
          • 5,3k
          • 1
        • Реклама помогает поддерживать и развивать наши сервисы

          Подробнее
          Реклама
        • Внутри супер-быстрого CSS-движка: Quantum CSS (aka Stylo)

          Привет, Хабр! Представляю вашему вниманию перевод статьи Inside a super fast CSS engine: Quantum CSS (aka Stylo) автора Лин Кларк.


          Вы возможно слышали о Project Quantum… Это проект по существенной переработке внутренностей Firefox с целью ускорить браузер. По частям мы внедряем наработки нашего экспериментального браузера Servo и значительно улучшаем остальные элементы движка.


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


          image


          Прим. переводчика: под катом много иллюстраций. Все они кликабельные (для просмотра в большем разрешении). Если Вы наткнетесь на неточности перевода и другие ошибки — буду благодарен, если сообщите об этом в комментариях или в личку.

          Читать дальше →
        • «Ржавая» IP-камера: прошивка на Rust

            До появления ботнета Mirai только особо интересующиеся знали о том, что находится внутри обычных IP камер. В большинстве случаев там стоит обычный линукс, причем частенько с дефолтным рутовым паролем, а то и вообще без него: у нас в офисе стоит такая камера, с прошивкой от декабря 2016 года и беспарольным рутовым телнетом.

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

            Грустная реальность в том, что очень часто этот софт написан далеко не лучшим образом. Достаточно сказать, что большинство камер, которые висят на улице очень страдают из-за большого расстояния до сервера, потому что авторы их прошивки освоили мастерство потерь данных по TCP.

            Мы решили исправить эту ситуацию своей прошивкой, причем сделав ставку на Rust.
            Читать дальше →
          • Microsoft не изолировала Windows Defender в песочнице, так что это сделал я

            • Перевод
            Microsoft подвергла своих пользователей немалому риску, когда выпустила Windows Defender вне песочницы. Меня это удивило. Песочница — одна из самых эффективных техник усиления безопасности. Почему Microsoft изолировала в песочнице другие высоковероятные цели атаки, вроде кода JIT в Microsoft Edge, но оставила Windows Defender без защиты?

            В качестве PoC (proof-of-concept) я изолировал Windows Defender, а сейчас выкладываю свой код в открытый доступ как Flying Sandbox Monster. Основа Flying Sandbox Monster — это AppJailLauncher-rs, фреймворк на Rust для помещения ненадёжных приложений в AppContainers. Он также позволяет вынести I/O приложения за TCP-сервер, чтобы приложение в песочнице работало на полностью другой машине. Это дополнительный уровень изоляции.

            В статье я опишу процесс и результаты создания этого инструмента, а также выскажу свои мысли о Rust на Windows.
            Читать дальше →
            • +46
            • 19,5k
            • 2
          • Выпуск Rust 1.19

            • Перевод

            Команда Rust рада представить выпуск Rust 1.19. Rust — это системный язык программирования, нацеленный на скорость, безопасность и параллельное выполнение кода.


            Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


            $ rustup update stable

            Если же Rust еще не установлен, вы можете установить rustup с соответствующей страницы нашего веб-сайта и ознакомится с подробными примечаниями к выпуску Rust 1.19 на GitHub.

            Читать дальше →
          Самое читаемое