The OpenNET Project / Index page

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

Выпуск языка программирования Rust 0.10, развиваемого проектом Mozilla

04.04.2014 11:01

Проект Mozilla представил выпуск Rust 0.10, экспериментального языка программирования со строгой типизацией, сфокусированного на безопасной работе с памятью и обеспечению высокого параллелизма выполнения заданий (возможность порождать тысячи и даже миллионы подпроцессов). Исходные тексты проекта распространяются под лицензией MIT. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo, написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).

С момента прошлого выпуска внесено около 1500 изменений. В дополнение к архивам с исходными текстами для Linux и OS X началось формирование бинарных сборок. Из состава удалена библиотека libextra, которая разделена на серию мелких модулей. Добавлены атрибуты "#[macro_export]" и "#[phase(syntax)]", дающие возможность задания макросов и расширений синтаксиса, не привязанных к контейнерам, в которых они определены. В систему умных указателей добавлены две новые языковые конструкции Deref и DerefMut, позволяющие управлять разыменованием указателей. Улучшены средства обработки ошибок ввода/вывода.

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

Базовые возможности языка:

  • Ориентация на безопасность:
    • Аккуратная работа с памятью - никаких нулевых и потерянных указателей. Автоматическое управление памятью;
    • Контроль изменчивости. Объекты неизменяемы (Immutable) по умолчанию;
    • Безопасность динамического выполнения: обработка сбоев, исключения, ведение лога, RAII / dtors;
    • Typestate: возможность определения сложных инвариантов, контролирующих структуры данных.
  • Ориентация на параллельность и эффективность кода:
    • Явный контроль памяти, контролирование схемы распределения памяти;
    • Крайне лёгкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;
    • Итераторы стека (фактически лямбда-блоки без распределения кучи);
    • Статическая, нативная компиляция с созданием исполняемых файлов ELF, PE, Mach-o;
    • Прямой и простой интерфейс для кода на языке Си;
  • Ориентация на практическое применение:
    • Мультипарадигмальный, функциональный, императивно-процедурный, объектно-ориентированный, поддерживающий параллельную actor-модель;
    • Функции высшего порядка с биндингами;
    • Нет номинальных типов или иерархии типов;
    • Мультиплатформенный, поддерживается Windows, Linux, Mac OS X, *BSD;
    • Хранение строк в UTF-8, разнообразие низкоуровневых типов;
    • Работает с существующими нативными наборами инструментов: GDB, Valgrind, Shark и т.д.;
    • Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать.


  1. Главная ссылка к новости (https://mail.mozilla.org/piper...)
  2. OpenNews: Для GCC подготовлен фронтэнд с поддержкой языка Rust, развиваемого проектом Mozilla
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/39490-rust
Ключевые слова: rust
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (39) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 11:10, 04/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Когда я искал что-нибудь новенькое для изучения выбор был между Go и Rust.
    К счастью я выбрал Go...

    PS. Ничего не имею против Rust, но мне кажется, что они слишком часто ломают API.

     
     
  • 2.11, Хрен с горы (?), 11:53, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    http://jaredly.github.io/2014/03/22/rust-vs-go/index.html
     
     
  • 3.28, Пользователь Дебиан (?), 13:33, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Я бы также посоветовал прочитать "Go and Rust — objects without class": http://lwn.net/Articles/548560/
     
  • 2.13, Аноним (-), 12:02, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > PS. Ничего не имею против Rust, но мне кажется, что они слишком часто ломают API.

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

    Посмотрите внимательно на номер версии. На этой стадии "слишком часто ломать API" не только можно, но и нужно.

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

    P.S. Однако добавлю свое "не против".
    Зачем они его назвали "Rust"? Что они имели в виду?
    Rust - означает "ржавчина", в лучшем случае "окисление". По крайней мере других значений я не нашел.
    Как корабль назовешь, так оно и полетит...

     
     
  • 3.17, Анонимоус (?), 12:21, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Как корабль назовешь, так оно и полетит...

    Матиас Руст в свое время до Красной площади вполне успешно долетел ;)

     
  • 3.22, zserge (?), 12:45, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В Go на ранних версиях сделали gofix, который автоматически фиксил изменения в апи и в языке. Т.е. с выходом новой несовместимой версии просто обрабатываешь исходники с gofmt - и получаешь поддержку новых апи.
    А насчет версий и циферок: проекты Go и Rust - ровесники, оба с 2009 года, не важно какие цифры в версиях ставить - все равно у Rust темпы развития заметно ниже.
     
     
  • 4.25, Аноним (-), 12:50, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Go развивает Google, Rust - Mozilla и сообщество. Естественно, у первых больше ресурсов и темпы развития выше.
     
     
  • 5.32, Пользователь Дебиан (?), 13:41, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Go развивает Google, Rust - Mozilla и сообщество. Естественно, у первых больше
    > ресурсов и темпы развития выше.

    Не говорите, если не знаете: в Google над Go работает пять-шесть человек, и из них не все делают это фулл-тайм. Основной мейнтейнер Windows-порта не работает в Google. И т.п.

     
  • 4.26, Аноним (-), 13:24, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    это не более чем видимость. Синтаксис Go давно стабилизирован из-за своей чрезвычайной простоты, но под капотом там надо еще очень много чего сделать.
     
  • 3.24, Аноним (-), 12:48, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Лучше сначала план действий построить, потом пачку прототипов для тестирования и уже потом продукт. Но тут решили пойти по пути без промежуточных прототипов, что в свою очередь заставляет их до сих пор API ломать и ломать...
    Повторюсь, я ничего не имею против Rust если будет свободное время то даже посмотрю как он поведет себя на небольшой реальной задачке(но это будет не скоро), а пока мне более интересен Go.
     
     
  • 4.47, Аноним (-), 08:00, 05/04/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > а пока мне более интересен Go

    Всем нам очень интересно, что там интересно тебе. На это раз говорю за всех, да.

     
  • 3.30, Пользователь Дебиан (?), 13:37, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> PS. Ничего не имею против Rust, но мне кажется, что они слишком часто ломают API.
    > То что вы ничего не имеете против, это конечно хорошо, но только
    > сразу видно, что сами вы ничего никогда не создавали.
    > Посмотрите внимательно на номер версии. На этой стадии "слишком часто ломать API"
    > не только можно, но и нужно.
    > Лучше в начале хорошенько поломать, чтобы потом ломать можно было как можно
    > меньше ради всяких там обратных совместимостей.

    Вы правы, но есть одна "тонкость": иногда хочется/требуется, изучая новое, всё же писать код, у которого хорошие шансы *выжить,* и тогда нужна какая-то стабильность.
    Go со своим API Compatibility Promise для 1.x вполне это обеспечивает: я знаю, что мой код, написанный для Go 1.1 будет компилироваться Go 1.9, а также это относится ко всем пакетам, которые мой код использует.

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

     
  • 3.46, Аноним (-), 02:44, 05/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Посмотрите внимательно на номер версии. На этой стадии "слишком часто ломать API" не только можно, но и нужно.

    Посмотрите внимательно на номер версии Firefox. А API как начали регулярно ломать с 4-й версии, так и продолжают. Особенно интересно будет, если Electrolysis (выделение вкладок в отдельные процессы) все-таки запилят, то авторам всех расширений, хоть как-то взаимодействующих с содержимым страниц, придется все переписать. Ну, или сменить браузер. :)

     

  • 1.2, Аноним (-), 11:12, 04/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что это такое?

    >>Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать

     
     
  • 2.10, Аноним (-), 11:53, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    пишешь unsafe и шпаришь на "сях" -- круши-ломай, память вся твоя
     
     
  • 3.36, Гость (?), 15:25, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > пишешь unsafe и шпаришь на "сях" -- круши-ломай, память вся твоя

    Воспитанные на сишке и плюсах так и будут писать, поэтому толку от безопастности Rustа будет мало.


     
  • 2.23, zserge (?), 12:46, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А что это такое?
    >>>Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать

    Около 30% кода компилятора Rust обернуто в блоки "unsafe". Т.е. язык настолько безопасен что сколь-либо полезную программу без unsafe не написать.

     
     
  • 3.37, Гость (?), 15:28, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >Т.е. язык настолько безопасен что сколь-либо полезную программу без unsafe не написать.

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


     
     
  • 4.40, zserge (?), 16:25, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>Т.е. язык настолько безопасен что сколь-либо полезную программу без unsafe не написать.
    > Просто программисты раньше писали на си и плюсах и привыкли к ним
    > до такой степени, что перестроиться под безопасный Rust не смогли.

    Мне кажется что компилятор Rust пишут разработчики, знающие Rust и понимающие как его применять

     
     
  • 5.43, тоже Аноним (ok), 16:41, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Господа теоретики, а вам не кажется, что наличие чего бы то ни было в компиляторе отнюдь не означает нужду в этом в прикладном коде?
    Сколько процентов макросов и шаблонов в коде GCC?
    А STL и Boost, например, все из шаблонов - специально для того, чтобы уже пользователю с ними не париться, а спокойно использовать вылизанные решения на более высоком уровне.
     

  • 1.12, Хрен с горы (?), 11:55, 04/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати, недавно Servo прошел Acid2
    http://i.imgur.com/CsLkgLl.png
     
     
  • 2.19, Аноним (-), 12:32, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А вот как это развивалось http://imgur.com/a/O667X
     
  • 2.21, Аноним (-), 12:43, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Кроме этого, недавно его запустили на контроллере: http://i.imgur.com/I6yDNjz.jpg
     

  • 1.15, Аноним (-), 12:19, 04/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я уже достаточно пообсуждал этот язык с профи.
    Они говорят, что когда есть C++, от Rust пользы никакой, а только дополнительная головная боль из-за ограничений, которые присутствуют в Rust, вследствие того, что это "безопасный язык".

    Так что, если не хотите ерундой лишний раз страдать и терять попусту время, тогда учите C++.
    И это не говоря уже о том, что для C++ есть уже всё и больше чем всё во всех сферах и моментах, а для раст инраструктура до такой степени разовьётся лет через 15-20. И то при условии, что все массово начнут отказываться от C/C++.

     
     
  • 2.20, Аноним (-), 12:41, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Никто не планирует внедрять Rust, язык не рекомендуется использовать в production на данный момент.
    C++ - мощнейший инструмент, позволяющий использовать различные парадигмы и технологии программирования. Кроме того, обладающий отличной производительностью. Безопасность - единственное слабое место языка. Писать безопасно на C++ можно, но нужно быть очень осторожным.
    Mozilla создаёт язык, который по её мнению сможет стать безопасной заменой C++. Писать на нём не сложнее, а вот выстрелить себе в ногу - гораздо сложнее. Вместе с тем, Rust остаётся производительным, что немаловажно для системного ПО. На мой взгляд, за этим языком будущее.

    P.S. John Regehr не так давно говорил, что пора уйти от небезопасных моментов C, создав новый язык. Современные мощности позволяют утратить незначительную долю производительности, получая взамен безопасность. Большой специалист по Си. Как фамилии ваших профи, не поделитесь?

     
     
  • 3.27, Аноним (-), 13:32, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А как же язык D?
     
     
  • 4.31, Аноним (-), 13:37, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Лажа полная.
    C++ и больше ничего не нужно.
     
  • 3.29, Аноним (-), 13:36, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я Вам что, стукач что ли? Это Михаил Шигорин сливает личную переписку, и вообще всех сливает.
     
  • 3.34, ... (?), 14:46, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Второй абзац и ниже - можно смело заменять нпример "Mozilla"->"Gnome" и "Rust"->"Vala".
    Да, конечно, Rust != Vala, но:

    > Современные мощности позволяют утратить незначительную долю производительности, получая > взамен безопасность.

    кричат на каждом углу Java, Ruby, Python да и все кто медленнее С  и имеет сборщик мусора.

     
     
  • 4.42, Аноним (-), 16:33, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем, когда давно есть Objective-C?
     
  • 3.35, Гость (?), 14:47, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >P.S. John Regehr не так давно говорил, что пора уйти от небезопасных моментов C, создав новый язык.

    Зачем? Когда уже давно существует безопасная сишка Cyclone и виртовские обероны?

     
     
  • 4.38, Гость (?), 16:10, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Добавлю: таже Ada ещё например.
     
     
  • 5.41, Аноним (-), 16:31, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А я добавлю LLVM бит код.
     
  • 5.50, цуауца (?), 01:49, 10/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Добавлю: таже Ada ещё например.

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

    if Ada.Command_Line.Argument_Count /= 1 then
      Ada.Text_Io.Put_Line (File => Ada.Text_Io.Standard_Error,
                            Item => "USAGE: " & Ada.Command_Line.Command_Name & "<input-file-name>");
    end if;

    впорочем синтаксис раста вообще создан больными на голову программистами (впрочем а бывают ли другие то) - сократить привычное, полезное и заметное ключевое слово function до непонятного и незаметного fn, но зато всюду пихать бессмысленное let, поменять привычный и безвредный switch/case  на match, но оставить бессмысленные и плохо читаемые ц сокращения типа += и т.п.

     
  • 2.33, Хрен с горы (?), 13:54, 04/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Я уже достаточно пообсуждал этот язык с профи.

    На ЛОРе. :)

     
     
  • 3.45, Аноним (-), 00:26, 05/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Нет :)
     
  • 2.49, цуауца (?), 00:33, 10/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > то при условии, что все массово начнут отказываться от C/C++.

    От ц++ уже массово отказались все (и везде) кто-только мог. Правда новые языки тоже изрядное гуано.

    >C++ Безопасность - единственное слабое место языка.

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

     

  • 1.18, Аноним (-), 12:26, 04/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Нет номинальных типов

    A structure is a nominal structure type defined with the keyword struct.
    An enumeration is a simultaneous definition of a nominal enumerated type as well as a set of constructors.

     
  • 1.48, Аноним (-), 22:34, 05/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > #!/bin/sh
    > local V=$1

    https://github.com/mozilla/rust/blob/master/configure

    вот как так?

     

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



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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