LINUX.ORG.RU

Вышел Rust 1.0

 , ,


12

10

15 мая 2015 года, в соответствии с планом, вышел публичный релиз Rust 1.0 - языка программирования общего назначения, разрабатываемого Mozilla совместно с сообществом. Язык ориентирован на разработку безопасных и эффективных приложений, имеет развитую систему типов, оптимизирующий кодогенератор на основе llvm и предоставляет расширенные гарантии потокобезопасности и безопасного доступа к памяти без использования сборщика мусора. В частности, Mozilla использует Rust для разработки браузерного движка следующего поколения servo.

Выход релиза 1.0 означает стабилизацию языка и стандартной библиотеки, их дальнейшее развитие будет происходить с сохранением обратной совместимости. В то же время, выход релиза не означает остановки развития языка - одновременно с релизом 1.0 разработчики выпустили бета-версию Rust 1.1, и в дальнейшем планируют выпускать новую версию каждые 6 недель. Среди ожидаемых изменений - заметное уменьшение времени компиляции и дальнейшее расширение стандартной библиотеки.

Перед релизом сообществом была проделана большая работа по обновлению пакетов в официальном репозитории crates.io , где подавляющее большинство из 2000 пакетов приведены в соответствие с версией 1.0. Онлайн-компилятор play.rust-lang.org претерпел редизайн и теперь позволяет выбирать между версиями компилятора. Менеджер пакетов и система сборки cargo так же получил ряд улучшений. Большинство популярных редакторов уже имеют полноценную поддержку языка, с подсветкой ошибок и автодополнением на основе racer, дополнительно вчера вышел Visual Rust 0.1 - расширение для поддержки Rust в Visual Studio. Официальная документация (The Book, The Rust Reference, Rust By Example и документация стандартной библиотеки) была приведена в соответствие со стабильным релизом, сегодня же стала доступна для предзаказа книга Programming Rust издательства O'Reilly, выход которой ожидается в ноябре 2015 года.

Некоторые изменения со времени альфа-версии, вышедшей в феврале:

Официальный сайт: http://rust-lang.org/.

Примечания к релизу: https://github.com/rust-lang/rust/blob/master/RELEASES.md.

Ссылка на скачивание: http://www.rust-lang.org/install.html.

Официальная документация: http://doc.rust-lang.org/stable/.

>>> Подробности



Проверено: maxcom ()
Последнее исправление: cetjs2 (всего исправлений: 14)

Ответ на: комментарий от ya-betmen

Ещё как делает, бэтмен. :-) Помнишь, что сказал ваш комрад про С++11? «Surprisingly, C++11 feels like a new language». :-)

anonymous
()
Ответ на: комментарий от anonymous

Нужно сделать так, чтоб unsafe был только для вызовов сишных функций

Это можно сделать и сейчас.

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

Прекрасно. Как это сделать?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

C# в каждой новой версии как будто новый язык. Или ECMAScript 5 и 6 сравни, тоже новый язык.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

Любое. Если это не итерация того же самого языка. C++ не был итерацией C. Более того, вместо Си мог быть взят какой-то другой «системный» язык.

anonymous
()
Ответ на: комментарий от anonymous

Любое. Если это не итерация того же самого языка. C++ не был итерацией C

Каким образом можно отличить итерацию от не итерации? Впиливание фичи class в ECMAScript 6 это что?

ya-betmen ★★★★★
()
Ответ на: комментарий от tailgunner

Больше бесят сами сокращения. Почему mut место mutable? Почему fn вместо function? mod (я сначала не понял при чём тут остаток от деления) vs module. pub vs public и так далее.

h4tr3d ★★★★★
()
Ответ на: комментарий от anonymous

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

h4tr3d ★★★★★
()
Ответ на: комментарий от anonymous

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

Так двусвязные списки и сейчас можно написать с помощью Rc<RefCell<T>>> и циклических ссылкок умных указателей. В деструкторе убираем цикличность и даем объектам удалиться (или используем weak pointers). Вопрос в том, что от стандартных контейнеров ожидают максимальную производительность и отсутствие лишних потребностей в памяти. Такая оптимизация требует unsafe, что собственно, и не удивительно. Некоторые оптимизации вообще требуют ассемблера.

Marvel
()
Ответ на: комментарий от tailgunner

Не совсем, проверил только что, компилятор выдал ~9кБ:

#include <iostream>

int main() {
  std::cout << "Hello, world!\n";
  return 0;
}

Сборка просто:

$ g++ hello.cpp
$ g++ --version
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Итоговый размер:

$ ls -l ./a.out 
-rwxr-xr-x 1 alexd alexd 8962 мая   18 15:00 ./a.out

Хотя, что там в Растовском исходнике - не знать.

UPD: можно сравнить и суммарный размер вместе с либами :) но нужен выхлоп ldd для растовского бинаря.

h4tr3d ★★★★★
()
Последнее исправление: h4tr3d (всего исправлений: 1)
Ответ на: комментарий от m0rph

Тогда примерно соизмеримо:

$ g++ -static-libstdc++ -static-libgcc hello.cpp
$ ldd ./a.out 
	linux-vdso.so.1 =>  (0x00007ffe80b07000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbf1b28b000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fbf1b680000)
$ ls -l ./a.out 
-rwxr-xr-x 1 alexd alexd 725294 мая   18 15:08 ./a.out
$ strip ./a.out 
$ ls -l ./a.out 
-rwxr-xr-x 1 alexd alexd 515432 мая   18 15:08 ./a.out

h4tr3d ★★★★★
()
Ответ на: комментарий от h4tr3d
exl@exl-Lenovo-G560e:~/Projects/HelloRust$ vim main.rs 
exl@exl-Lenovo-G560e:~/Projects/HelloRust$ rustc main.rs 
exl@exl-Lenovo-G560e:~/Projects/HelloRust$ ./main 
Hello, world!
exl@exl-Lenovo-G560e:~/Projects/HelloRust$ ldd main
        linux-vdso.so.1 =>  (0x00007ffe0fef7000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc567ac9000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc5678ab000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc5676a2000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc56748c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc5670c2000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc567f51000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc566db9000)
exl@exl-Lenovo-G560e:~/Projects/HelloRust$ ll -ah main
-rwxrwxr-x 1 exl exl 565K мая   18 12:20 main*
EXL ★★★★★
()
Ответ на: комментарий от Aswed

Ну да, например, случайно можно вляпаться, выбрав для проекта C++, да ещё и придерживаться всех догм ООП и патёрнов вроде «одиночки», писать иерархию классов в соответствии со схемой БД (ведь нужен же ООП API на Цепепе, и без него - никак. ORM форева!), ну и для полной радости ещё и обвешивать атрибуты смапленных сущностей в этот чудесный ООП API методами set_attribute(const& std::string a), std::string get_attribute() const. Ведь это же инкапсуляция, напрямую работать с членами структуры - это большая и грубая ошибка, нарушение догм ООП :-)

anonymous
()
Ответ на: комментарий от h4tr3d

А strcat вместо string_catenate тебя не настораживает? Есть культура многословных названий, есть культура сокращений. В rust-к вторая.

Legioner ★★★★★
()
Ответ на: комментарий от ya-betmen

Это расширение языка, дорогой. :-)

anonymous
()
Ответ на: комментарий от anonymous

на коболе до сих пор больше кода (в строках).

Пруф?

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

Это возможно.

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

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

Обычно это указывается в доках и стандартах.

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

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

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

Я вот не могу понять, вы пытаетесь кого-то убедить, что C++ и C — это один язык? Или вы уверены в том, что С++ не является другим языком программирования, отличным от C?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Я вот не могу понять, вы пытаетесь кого-то убедить, что C++ и C — это один язык?

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

ya-betmen ★★★★★
()
Ответ на: комментарий от EXL

Только пока непонятно, какого хрена ему нужен «Rust source tree».

Racer'у нужно где-то определения для стандартной библиотеки брать.

nonimous
() автор топика
Ответ на: комментарий от nonimous

Racer'у нужно где-то определения для стандартной библиотеки брать.

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

EXL ★★★★★
()
Ответ на: комментарий от tailgunner

мало того что обосрался, ещё и хамишь.

anonymous
()
Ответ на: комментарий от ya-betmen

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

Многие детали этого флейма от меня ускользнули, но, ЕМНИП, в истории есть всего несколько успешных случаев, когда новый язык намеренно создавался с сохранением совместимости с одним из уже имеющихся языков:

* C++ и C. В первых версия стандартная библиотека C++ была лишь чуть-чуть разбавленной iostream-ами стандартной библиотекой C. Ситуация поменялась заметно лишь со стандартизацией STL;

* Eiffel и С. До недавнего времени транслировался в C, а уже затем C-шный код компилировался C-шным компилятором (возможно и сейчас так, но уже не слежу за эти языком, потому утверждать не берусь). За счет этого интеграция C-шных библиотек в Eiffel, насколько я помню, была гораздо проще, чем в других нативных языках с GC. Правда Eiffel нифига не мейнстрим и никогда им не был, хотя своя ниша у него таки есть;

* Scala и Java. Не единственный такого рода проект, т.к. с некоторых пор JVM стали рассматривать как платформу для развития новых языков. И есть ряд JVM-based языков, которые более-менее на слуху: Groovy, Kotlin, Ceylon, Gosu. Но из них Scala наиболее близка к мейнстриму.

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

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 2)
Ответ на: комментарий от tailgunner

Это где так? У Си++ давно уже стабильный ABI.

в твоей параллельной вселенной разве что. не знаешь — можно и помолчать. стабильный аби пытались обещать в с++17, но неосилили.

anonymous
()
Ответ на: комментарий от EXL

Возможно, будут использовать метаданные из бинарников библиотек, но я не уверен, что там достаточно информации. Вообще, можно наверно распространять сериализованный AST стандартной библиотеки для таких целей. И да, в Visual Rust автодополнения просто нет.

nonimous
() автор топика
Ответ на: комментарий от anonymous

C++. Был совместим с C.

...пока не вышел с89...

anonymous
()
Ответ на: Си++ - это надмножество Си89 от anonymous

А тут много кто пытается говорить об убогом Цепепе, толком не зная что это за язык такой, для чего придуман, и что создавший его теоретик говорил о надлежащим его использовании. Используют лишь часть этого самого цепепе, ваяя обёртки с деструкторами, которые сводятся к вызову сишных функций. Но зато, как объектно-ориентированно! При этом абстракций новых в цепепешные поделки особо не добавляются, потому как язык не позволяет - низкоуровневый он, с почти что единственным средством абстракции, которые есть - определяемые пользователем типы. На этом абстракции заканчиваются, и начинается старый добрый C :-)

anonymous
()
Ответ на: комментарий от eao197

* Eiffel и С. До недавнего времени транслировался в C, а уже затем C-шный код компилировался C-шным компилятором

Трансляция в С - это всё-таки немного другое, имхо. В этом случае, можно ещё добавить Vala и Nim.

DarkEld3r ★★★★★
()
Ответ на: комментарий от eao197

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

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

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

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

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

Но анонимам этого не понять, эт точно.

eao197 ★★★★★
()
Ответ на: комментарий от DarkEld3r

Трансляция в С - это всё-таки немного другое, имхо. В этом случае, можно ещё добавить Vala и Nim.

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

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Я специально оговорился об успешных случаях.

Ну Vala свою нишу имеет, вроде. А Nim просто на слуху, так что упомянул заодно.

DarkEld3r ★★★★★
()
Ответ на: комментарий от h4tr3d
% cat hello.rs
fn main() {
    println!("Hello, world!");
}
% rustc --version
% rustc 1.1.0-dev ... built 2015-04-28
% rustc hello.rs
% ls -lh hello
-rwxr-x---  1 ононим  ононим   1,2M 18 Маy 18:42 hello*
% strip hello && ls -lh hello
-rwxr-x---  1 ононим  ононим   291K 18 May 18:42 hello*
% rustc -C prefer-dynamic hello.rs && ls -lh hello
-rwxr-x---  1 ононим  ононим   8,7K 18 May 18:43 hello*
% strip hello && ls -lh hello
-rwxr-x---  1 ононим  ононим   5,9K 18 May 18:43 hello*
anonymous
()
Ответ на: комментарий от anonymous

Понятное дело - учить математику. :-) А эти ваши unsafe, safe, поинтеры, шмоинтеры, русты, хрусты, цепепешки - это всё временное.

Математики совсем недавно только 2 + 2 научились считать, сейчас над факториалами трудятся — им до программистов как раком до луны.

anonymous
()
Ответ на: комментарий от ya-betmen

Каким образом можно отличить итерацию от не итерации?

Так пишут же в заголовке документа. Не понимаю, в чем трудность.

anonymous
()
Ответ на: комментарий от ya-betmen

Да. Кстати, а плагиат кто-нибудь детенктит в таких случаях?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.