The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Релиз языка программирования Rust 1.25

30.03.2018 21:28

Доступен релиз языка программирования Rust 1.25, развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.

По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io.

В подготовке нового выпуска приняли участие 139 разработчиков. Основные новшества:

  • Компилятор переведён с кодовой базы LLVM 4 на LLVM 6. В компилятор также добавлена опция "-C lto=val" для выбора типа LTO-оптимизации и целевая платформа "i586-unknown-linux-musl";
  • Предложен новый способ использования выражения "use" для оформления вложенных групп импортирования:
    
       use std::{fs::File, io::Read, path::{Path, PathBuf}};
    вместо
       use std::fs::File;
       use std::io::Read;
       use std::path::{Path, PathBuf};
    
  • Добавлена возможность использования символа "|" для отделения сопоставлений в блоке match:
    
       enum Foo { A, B, C }
       fn main() {
           let x = Foo::A;
           match x {
               | Foo::A
               | Foo::B => println!("AB"),
               | Foo::C => println!("C"),
           }
       }
    
  • Принят и стабилизирован RFC 1358, определяющий атрибут "#[repr(align(x))]", при помощи которого можно указать способ выравнивания данных для структур;
  • В разряд стабильных переведена новая порция API, в том числе std::ptr::NonNull‹T› и Location::column;
  • В libcore добавлен модуль time, содержащий тип Duration, который раньше присутствовал только в libstd. Функции from_secs и from_millis теперь определены как "const", т.е. могут использоваться для создания констант:
    
       static MINUTE: Duration = Duration::from_secs(60);
    
  • Объявлен устаревшим метод net::lookup_host;
  • Документация по умолчанию переведена на использование разметки CommonMark (спецификация для формата Markdown) вместо Hoedown;
  • На сайте doc.rust-lang.org предложено новое руководство "Rust By Example";
  • В пакетном менеджере Cargo команда "cargo new" теперь по умолчанию создаёт исполняемые бинарные файлы (флаг "--bin"), а не библиотеки (для библиотеки теперь нужно явно указывать флаг "--lib"). Команда "cargo new" также теперь не удаляет префикс "rust-" и суффикс "-rs" из имени пакета;
  • Существенно ускорена работа "cargo doc" и операции получения кода зависимостей из Git.


  1. Главная ссылка к новости (https://blog.rust-lang.org/201...)
  2. OpenNews: Для Linux и Redox представлена реализация Libc на языке Rust
  3. OpenNews: Релиз языка программирования Rust 1.24
  4. OpenNews: Третий выпуск операционной системы Redox OS, написанной на языке Rust
  5. OpenNews: В Firefox добавлен CSS-движок Stylo, написанный на языке Rust
  6. OpenNews: Эксперимент по разработке частей ядра Linux на языке Rust
Лицензия: CC-BY
Тип: Программы
Ключевые слова: rust, lang
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (41) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (-), 22:45, 30/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Как насчёт использования APL символов? Обычные то закончатся скоро, а слова писать, по всей видимости, не Ъ.
     
     
  • 2.2, Аноним (-), 23:14, 30/03/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    До скалы с операторами вида <>|<> еще далеко.
     
     
  • 3.3, Crazy Alex (ok), 23:26, 30/03/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот как раз подумалось, что очень похоже становится. И запросто может сфейлиться по той же причине - перестарались с "крутостью".
     
     
  • 4.36, авыф (?), 07:11, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    да, скала это, конечно, это вещь в себе.
    Разработчики такие: "
        А че это у нас скобочки как у всех? Давайте скорее угловые скобки сделаем квадратными... а квадратные - круглыми! Нужен какой-нибудь крутой концепт, чтобы "всё было чем-нибудь", подождите, минуточку, ...  о госпади, это гениально "every value is an object"!. Тааак, интерфейсы мы переименуем во что-нибудь модное, готово! Вот эту хрень возьмем из питона. Вот эту хрень из js. Язык готов!"  

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

     
  • 3.4, Аноним (-), 00:24, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Ууу, ыкспердс опеннета, неосиливший Scala. В Scala нет операторов.
     
     
  • 4.6, angra (ok), 00:40, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    https://docs.scala-lang.org/tour/operators.html
    То, что операторы используют механизм методов, не мешает им быть операторами.
     
     
  • 5.7, Аноним (-), 00:49, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >То, что операторы используют механизм методов

    Ещё раз. По слогам - В СКАЛА НЕТ ОПЕРАТОРОВ, есть только методы классов/объектов. Инфиксная форма вызова метода с одним параметром - синтаксический сахар компилятора. Например "оператор" + это метод класса и без синатксического сахара записывается как 1.+(2). В случае настоящего оператора, как в джаве или с++ такое просто не возможно, ибо там это именно операторы.

     
     
  • 6.10, Буратино (?), 01:20, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Лолчто?

    В C++ спокойно пишется что obj1 += obj2, что obj1.operator+=(obj2).

     
  • 6.11, angra (ok), 01:44, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +10 +/
    > В СКАЛА НЕТ ОПЕРАТОРОВ

    Если написать большими буквами, то убедительней не будет, особенно в свете того, что официальная дока говорит об обратном.

    > Инфиксная форма вызова метода с одним параметром - синтаксический сахар компилятора.

    Ага, а их приоритет чем является?

    > В случае настоящего оператора, как в джаве или с++ такое просто не возможно, ибо там это именно операторы.

    Ты похоже даже близко не представляешь, что в С++ возможно с операторами. Причем это там было, когда не только scala, но и java в проекте не существовало.

     
  • 6.13, Аноним (-), 06:49, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >Например "оператор" + это метод класса и без синатксического сахара записывается как 1.+(2).

    Если оператор + можно записать как-то по другому, он не перестает быть оператором.

     
  • 6.23, Илья (??), 14:06, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > как в джаве или...

    извините, но скала работает на jwm.

    Обратите внимание на то, что операторы практически везде таким же образом "появляются".
    Вот пример из .net:
        
        public static bool operator ==(Decimal d1, Decimal d2)
        {
          return Decimal.FCallCompare(ref d1, ref d2) == 0;
        }

     
  • 2.5, мурзилла (?), 00:31, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +11 +/
    ну что вы, apl - детище древних serial терминалов, у которых только половина ascii и то неполная.

    У нас в XXI веке - полный unicode тех символов. Правда, пока голоса разделились поровну- никак не определим, смайлик-какaшка это унарный или бинарный оператор?

     
     
  • 3.9, funny.falcon (?), 01:12, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Думаю, как с минусом: если у себя наложил, то унарный; если же соседу по дверь, то бинарный.
     

  • 1.14, Аноним (-), 07:49, 31/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Можно узнать про связь языка Раст с LLVM?

    Зачем Расту LLVM? Без LLVM компилятор Раста не умеет компиляить себя? А может для компиляции исходников *.rs нужна стороняя виртуальная машина?

    Зачем разработчикам языка, который к тому-же, позиционирует себя как системный язык вообще понадобилась эта виртуальная машина?

    К тому же LLVM не любят во Free Softwere Foundation.

     
     
  • 2.15, сишечка с пюрешечкой (?), 09:01, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    если совсем просто, то писать компилятор очень тяжело. llvm - одна из лучших вещей, которые случались с компиляторами, она позволяет писать только фронтенд и сэкономить кучу времени и сил, а заодно и получить качественный результат. в приличных ОС (Fedora например) вообще весь llvm это 20 мегабайт, можно и потерпеть ради такой прелести.
     
     
  • 3.16, Аноним (-), 10:18, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > если совсем просто, то писать компилятор очень тяжело. llvm - одна из
    > лучших вещей, которые случались с компиляторами, она позволяет писать только фронтенд
    > и сэкономить кучу времени и сил, а заодно и получить качественный
    > результат.

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

    Хорошо, но почему они выбрали в качестве бекенда LLVM? Почему нельзя в качестве бекенда выбрать GCC с его лютой GNU GPL ver.3? LLVM разрешительно-пермиссивная, есть опасность, что вокруг LLVM могут создастся проприетарные сервисы.

    >в приличных ОС (Fedora например) вообще весь llvm это 20 мегабайт, можно и потерпеть ради такой прелести.

    20 мегабайт это обманка. Твой дистр видимо просто разрезал LLVM на части и упаковал их. Чуть что, при первой же необходимости, ты очутишь прелести недостатка по зависимостям. Это типично для дистрибутивов с deb и RPM пакетной системой.

     
     
  • 4.19, leap42 (ok), 12:28, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Почему нельзя в качестве бекенда выбрать GCC?

    Он так не может

    > вокруг LLVM могут создастся проприетарные сервисы

    это норма, его же проприерасты из Apple придумали, но исходники открыты и всегда будут (* по крайней мере старые версии никуда не денутся)

    > 20 мегабайт это обманка. Твой дистр видимо просто разрезал LLVM на части и упаковал их

    это не обманка, а адекватная работа пакетного менеджера, он на то и нужен

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

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

     
     
  • 5.27, Аноним (-), 17:45, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > по крайней мере старые версии никуда не денутся

    Ага, и ассемблер никуда не денется. Причём тут это? В новости явно сказано, что требуется новая версия LLVM. Какой будет прок со "старых версий", если ржавый зависит от новых?

     
     
  • 6.32, Аноним (-), 21:04, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Rust версию llvm с собой таскает. Обожаю когда свободофобы придумывают очередную невероятную причину не любить свободные лицензии.
     
     
  • 7.41, Alan Walk (?), 13:40, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    LLVM это компилятор, с возможностью запуска кода в виртуальной машине.  Раст поступает так.  Он своим оптимизатором оптимизирует код используя возможности языка, а после готовит байт код для LLVM. А LLVM уже готовит оптимизирует, разворачивает этот байт код для какого-нибудь железа.

    Вокруг LLVM крутятся огромные деньги, все его пилят оптимизируют, используют, он открытый. Тотже эпль язык использует LLVM. И множество других компилируемых.

    Взять сишный Clang компилятор, он работает также(в связке с LLVM и по такомуже циклу).

    А GCC, он для единственного си идет только...

    В итоге мы имеем скорость как у сишки на Clang(хром в последнее время на Clang везде собирается если что).

     
     
  • 8.44, Led (ok), 21:00, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты специально сегодня зарегался только для того, чтобы показать какой ты недалёк... текст свёрнут, показать
     
  • 4.25, Аноним (-), 15:08, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Хорошо, но почему они выбрали в качестве бекенда LLVM?

    Альтернатив нет. GCC не был написан по подобному модульному принципу. Если только Вы не хотите компилировать свой язык в Си (как в Vala), который в свою очередь через GCC прогонять.

     
  • 3.28, yet another (?), 18:51, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Положим, там не 20M, а несколько кусков с размерами около 1G.
     
  • 2.21, Аноним (-), 13:07, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Зачем разработчикам языка, который к тому-же, позиционирует себя как системный язык вообще понадобилась эта виртуальная машина?

    Ты бы почитал про LLVM что-нибудь, кроме расшифровки названия. Это не (только) виртуальная машина, это фреймворк для создания компиляторов.

     

  • 1.17, anomymous (?), 11:53, 31/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > По структуре язык Rust напоминает C++

    Нет.

     
     
  • 2.24, Илья (??), 14:08, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> По структуре язык Rust напоминает C++
    > Нет.

    ну чуточку. Вообще, эта фраза мигрирует из новости в новость :)

     

  • 1.18, Аноним (-), 12:26, 31/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Предложен новый способ использования выражения

    Мне одному кажется, что Rust становится новым перлом?

    Если что-то легко реализовать в компиляторе, это не значит, что это что-то нужно тащить в язык...

     
     
  • 2.22, Аноним (-), 13:08, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В данном случае такое расширение вполне логично.
     
  • 2.26, Аноним (-), 15:11, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Предложен новый способ использования выражения
    > Мне одному кажется, что Rust становится новым перлом?
    > Если что-то легко реализовать в компиляторе, это не значит, что это что-то
    > нужно тащить в язык...

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

     
     
  • 3.30, Аноним (-), 20:36, 31/03/2018 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Никому не нужное дерьмо тащат, а ООП так и не завезли. Без ООП не нужен. Нам одних си-фанатиков хватает с их макросно-процедурным гoвнокодом, а сюда ещё раст-фанатиков завезли с тем же дерьмoм.
     
     
  • 4.34, Nexmean (?), 06:16, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Не нужен ООП в расте, никогда его там не будет. В расте куда более мощная и гибкая система типов нежели ООП.
     
     
  • 5.35, авыф (?), 06:53, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Расскажите подробнее, интересно посушать.
    Вообще, по мне так в ООП нет ничего плохого кроме переопределения методов базовых классов.
    В некоторых компаниях на уровне кодоанализа разрешают наследовать типы только от абстрактных классов, и это круто
     
     
  • 6.38, Аноним (-), 07:23, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Расскажите подробнее, интересно посушать.
    > Вообще, по мне так в ООП нет ничего плохого кроме переопределения методов
    > базовых классов.

    Поподробнее не могу, скажу просто, ООП нужно тем, кто неможет, или не умеет в алгоритмы.

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

    Эти "некоторые компании" отсавь себе, на второе. Я знаю одно, для системного программирования ООП не нужно. Лишняя сущность.

    Короче, любители ООП идите стройным шагом прямо в лес. Не загрязняйте чистые воды Раста.

     
     
  • 7.39, афаф (?), 11:35, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Поподробнее не могу, скажу просто, ООП нужно тем, кто неможет, или не умеет в алгоритмы.

    Извините, не вижу никакого противоречия Вы его сами придумали?

    > Я знаю одно, для системного программирования ООП не нужно.

    Раст вроде не только про системное программирование.
    Взгляните на количество http-фреймворков: https://github.com/flosse/rust-web-framework-comparison
    Имеются привязки к gtk/qt Есть ОРМ-ка, diesel. Да и вообще, насколько я понимаю, он изначально для SERVO писался

     
     
  • 8.40, Аноним (-), 12:53, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Хорошо, попытаюсь в лоб Людям, которые ничего кроме ООП и готовеньких шаблонов ... текст свёрнут, показать
     
     
  • 9.42, Афаф (?), 16:01, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Я бы сказал общепринятых шаблонов Наличие паттернов оо проектирования это скоре... текст свёрнут, показать
     
     
  • 10.43, Led (ok), 20:58, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    У тебя не пройдёт ... текст свёрнут, показать
     
  • 10.48, Солнышко (??), 17:21, 02/04/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да если б хотя бы ООП знали ... текст свёрнут, показать
     
  • 4.37, Аноним (-), 07:16, 01/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Боже упаси! Не нужно никакого ООП! Для языка, который позиционируется системным ООП не нужен.
     

  • 1.31, Аноним (-), 20:58, 31/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Qt порт бы целиком под Rust...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру