The OpenNET Project / Index page

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

Проект Mozilla выпустил язык программирования Rust 0.4

16.10.2012 16:32

Представлен релиз экспериментального языка программирования Rust 0.4, развиваемого проектом Mozilla. Rust является языком со строгой типизацией, сфокусированным на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий (возможность порождать тысячи и даже миллионы подпроцессов). Исходные тексты проекта распространяются под лицензией MIT. Компилятор поддерживает сборку для платформ Linux (x86 и x86_64), FreeBSD (x86_64), Mac OS X (x86 и x86_64) и Windows (x86), включая возможность кросс-компиляции и сборки сразу для нескольких целевых платформ. Параллельно с Rust развивается экспериментальный браузерный движок Servo, написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).

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

С момента прошлого выпуска внесено около 2200 изменений. При подготовке новой версии основное внимание было уделено стабилизации синтаксиса языка и реализации поддержки передачи результатов функций через указатели. Поддержка ранее используемого метода передачи аргументов прекращена. Из других важный улучшений можно отметить начальную поддержку JIT-компиляции и "аккуратного" сборщика мусора. Вместо классов ('class') теперь предлагается использовать более простые структуры ('struct'). Переименованы некоторые неоднозначные элементы, например, вместо ret теперь следует использовать return, вместо alt - match, вместо import - use. Для эффективного взаимодействия между задачами реализована поддержка неименованных каналов (pipe), добавлена новая библиотека с инструментами синхронизации (std::sync).


fn main() {
    for ["Alice", "Bob", "Carol"].each |name| {
        let name = copy *name;
        do task::spawn {
            let v = rand::Rng().shuffle([1, 2, 3]);
            for v.each |num| {
                io::print(fmt!("%s says: '%d'\\n", name, *num))
            }
        }
    }
}

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

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


  1. Главная ссылка к новости (https://mail.mozilla.org/piper...)
  2. OpenNews: Первый релиз языка программирования Go
  3. OpenNews: Компания Google представила новый визуальный язык программирования Blockly
  4. OpenNews: Представлен Halide, новый язык программирования для обработки изображений
  5. OpenNews: Mozilla разрабатывает новый язык программирования Rust
  6. OpenNews: Язык программирования REBOL будет переведён в разряд свободных проектов
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/35097-rust
Ключевые слова: rust, mozilla
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (46) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 16:42, 16/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Для каждого языка должны быть samples легкодоступны, чтобы на практике и наглядно  показывать зачем Это и его(языка) возможность
     
     
  • 2.5, Boboms (ok), 17:09, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >    for ["Alice", "Bob", "Carol"].each |name| {
    >     let name = copy *name;

    После таких ананонов пестон кажется верхом совершенства.

     
     
  • 3.9, Виктор (??), 18:58, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чем-то Ruby напомнило
     
     
  • 4.11, Ищавин (ok), 19:25, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вот да, только не ясно зачем for, если логичнее просто [el1, el2, el3].each |el|
     
     
  • 5.12, user (??), 20:04, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    for позволяет использовать break.
     
     
  • 6.14, Ищавин (ok), 20:17, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, и правда так. Спасибо за объяснение.
     
  • 6.31, ан0нимус (?), 03:04, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А кто мешает в итераторе использовать break?

    http://shelr.tv/records/507de8139660807d95000070

     
     
  • 7.32, Ищавин (ok), 03:32, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Разговор о Rust, а не о Ruby.
     
  • 6.37, Аноним (-), 09:47, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    а зачем в ruby break, если вместо each можно использовать [1,2,3].detect{|x| condition }?
     

  • 1.2, Pickle (?), 16:45, 16/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Даешь кол-во Яп = кол-во программистов
     
  • 1.4, Аноним (-), 17:07, 16/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Чо, еще один Rust? :)

    А вообще если серьезно, у них там документик есть, где написано, что Мозилла не планирует переводить его когда-либо для продакшна, и останется экспериментальным.
    Ну и конечно неясно, что с этими всеми языками делать: зачастую, многие, так и не успев опериться, умирают

     
     
  • 2.6, taliano (ok), 17:17, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ну как что. Напишите на нем незаменимый софт и зарабатывайте на его поддержке всю оставшуюся жизнь.
     
     
  • 3.7, Очередной Анонимус (?), 17:54, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Разработчики Mathematica и AutoCAD гарантируют это.
     
  • 3.19, Aquarius (ok), 22:02, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    есть одна проблема: в таком случае, кто-то должен для вас поддерживать сам язык, точнее интерпретатор/компилятор и средства разработки
     
  • 2.28, pro100master (ok), 00:20, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    например написать быстро, минут за 20, какую-нибудь одно-двух- разовую утилитку - самое милое дело на каком-нибудь простом и быстром языке )
     
     
  • 3.43, Аноним (-), 13:10, 18/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Shell, не?
     
     
  • 4.46, pro100master (ok), 00:59, 22/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Shell, не?

    с базой, блек джеком и шлюхами? неа, не надо :)

     

  • 1.8, rshadow (ok), 18:12, 16/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что только не придумают лишь бы PHP, Python, Perl, Rubi ... в браузер не интегрировать.
     
     
  • 2.10, Виктор (??), 19:00, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Что только не придумают лишь бы PHP, Python, Perl, Rubi ... в
    > браузер не интегрировать.

    s/Rubi/Ruby/

     
  • 2.15, зачем имя анониму (?), 20:30, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    в браузерах вполне достаточно одного недоязыка
     
     
  • 3.47, vasek (?), 22:29, 31/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    да и то щас его ярые rails-ruby-онанисты выпиливают и пытаются запилить coffeescript, а он еще лучше, в конце концов он компилируется в JavaScript!
     

  • 1.13, ВовкаОсиист (ok), 20:15, 16/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Оно умеет компилится в arm?
     
     
  • 2.20, Aquarius (ok), 22:04, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Оно умеет компилится в arm?

    http://tsya.ru/

     
     
  • 3.26, ВовкаОсиист (ok), 23:24, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ъ
     

  • 1.16, Loooooker (ok), 20:33, 16/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Вместо классов ('class') теперь предлагается использовать более простые структуры ('struct').

    То есть, все таки больше С, чем С++.
    Если бы он еще CUDA/OpenCL мог использовать (у них вроде как раз печально с классами), тогда вполне мог бы стать примечательным.

     
     
  • 2.17, Аноним (-), 20:39, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Если бы он еще CUDA/OpenCL мог использовать

    ЭЭэ так если заявлен простой интерфейс с си... ?

    В общем то задумка неплохая, но для демонстрации возможностей мозилле надо как минимум переписать на этом свой браузер :)

     
     
  • 3.18, Аноним (-), 21:59, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В общем то задумка неплохая, но для демонстрации возможностей мозилле надо как минимум переписать на этом свой браузер :)

    https://github.com/mozilla/servo

     
     
  • 4.33, Аноним (-), 03:53, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > https://github.com/mozilla/servo

    Ну так это только движок. Вот если они на этом файрфокс перепишут и получат +200 к производительности и +50 к крутизне концепций - это будет разговор :)

     
  • 2.42, Аноним (42), 12:02, 18/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >у них вроде как раз печально с классами

    С классами и метапрограммированием в CUDA всё ОК, нет только виртуальных методов. В любом случае, использовать полиморфизм в SIMT вычислениях - полная глупость.

     

  • 1.21, Anonus (?), 22:08, 16/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Аккуратная работа с памятью - никаких нулевых и потерянных указателей. Автоматическое управление памятью;

    Как это понимать ? Указатель нужно всенепременно инициализировать ? Что значит в данном контексте потерянный указатель ?


    > Крайне легкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;

    Эта как ?


    > Статическая, нативная компиляция с созданием исполняемых файлов ELF, PE, Mach-o;

    Где тогда сборщик мусора проживает ? Или он в тот же самый файлец прописывается ? Это какого же размера он тогда будет ?

    А если на этом чуде скажем динамическую библиотечку написать, где будет жить сборщик мусора ?

     
     
  • 2.22, Xasd (ok), 22:44, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Или он в тот же самый файлец прописывается ? Это какого же размера он тогда будет ?

    где тут фантастика-то?

    в Python -- сборщик мусора умещается внутри libpython2.XXX.so.YYY.ZZZ и вродебы это не занимает немыслеммое число мегобайт :-D

     
     
  • 3.23, Anonus (?), 23:02, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    А еслиф ахота всё статически слинковать, чтобы не зависеть от тантайма на конкретной машине ?
     
     
  • 4.24, Anonus (?), 23:05, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > А еслиф ахота всё статически слинковать, чтобы не зависеть от тантайма на
    > конкретной машине ?

    "тантайма" читать как "рантайма"

     
     
  • 5.35, Аноним (-), 03:55, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > "тантайма" читать как "рантайма"

    А как насчет "еслиф" и "ахота"? Граммар-наци, тащи ружье! :)

     
  • 4.34, Аноним (-), 03:54, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А еслиф ахота всё статически слинковать, чтобы не зависеть от тантайма на конкретной машине ?

    Походу программист из вас такой же как писатель коментов.


     
  • 3.25, Anonus (?), 23:07, 16/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > в Python -- сборщик мусора умещается внутри libpython2.XXX.so.YYY.ZZZ и вродебы это не
    > занимает немыслеммое число мегобайт :-D

    В статье написано "СТАТИЧЕСКАЯ НАТИВНАЯ КОМПИЛЯЦИЯ" - делаем упор на слово статическая.
    Или тогда надо пояснить что сие означает.

     
  • 2.27, Ищавин (ok), 00:09, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Что значит в данном контексте потерянный указатель ?

    Не найденный сборщиком, как я понимаю.

    >> Крайне легкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;
    > Эта как ?

    Это без минимум одного мегабайта на новый поток, как в C.


    > Где тогда сборщик мусора проживает ? Или он в тот же самый файлец прописывается ? Это какого же размера он тогда будет ?

    Так же как и у Go.

     
     
  • 3.29, Anonus (?), 00:59, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Это без минимум одного мегабайта на новый поток, как в C.

    И кто будет "рулить" этим хозяйством, ОС или они сами?

    Слово "подпроцессы" по отношению к Венде, которую они тоже поддерживают, совершенно непонятно. Там либо нормальные процессы либо потоки, и то и другое "разруливается" самой ОС. При создании потока в Венде не обязательно иметь мегабайт стека, можно указать сколько надо.

    Коротко говоря, нифига не понятно с этими миллиардами легковесных "подпроцессов".

    Надежда тока на Ищавина, может он растолкует.

     
     
  • 4.30, Ищавин (ok), 01:30, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Я без понятия как в винде, насколько я понимаю, идеология та же, что у Go и Erlang, никаких системных потоков и процессов не создается, все в одном и том же адресном пространстве одного процесса. Это в общем случае. На практике, создается по одному «контролирующему» процессу на ядро, который и выполняет эти легковесные потоки со своим встроенным планировщиком. По факту система управляет только этими оболочками в которых находятся «подпроцессы». К сожалению, более конкретно я не могу рассуждать, так как не моя стихия.
     
     
  • 5.41, Anonus (?), 23:38, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Получаются "зелёные потоки", то есть они сами "унутре" всем рулят.
     
  • 4.39, NavDotRu (?), 19:53, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Если я правильно помню, в Win есть унаследованные еще с Win16 API для управления нитями - вполне себе легковесные потоки в UserSpace. Правда они работают в режиме кооперативной многозадачности и должны сами отдавать управления. Если данный функционал в Rust  реализован подобным способом, то возникает вопрос, как обрабатывается ситуация блокировки на вводе-выводе, или, например, бесконечный цикл.
     

  • 1.36, Аноним (-), 09:33, 17/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Во сколько раз медленнее C++, кто проверял?
    А то пишут, в 10 раз медленнее и другие отрицательные моменты.
     
     
  • 2.40, mumu (??), 21:10, 17/10/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Никто не будет заниматься оптимизацией компилятора на этапе разработке ещё синтаксиса языка
     

  • 1.44, Аноним (-), 10:03, 19/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Какой же у него жуткий синтаксис...
     
  • 1.45, Аноним (-), 14:47, 20/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Сколько еще будет языков, созданных лишь потому, что кому-то хочется, чтобы Python или Javascript был похож на C?
     
  • 1.48, vasek (?), 22:33, 31/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Rust

    хорошее название =)

     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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