Доступен (http://blog.rust-lang.org/2015/09/17/Rust-1.3.html) релиз языка программирования Rust 1.3 (http://www.rust-lang.org), развиваемого проектом Mozilla, обеспечивающего (https://www.opennet.me/opennews/art.shtml?num=42241) автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (https://www.opennet.me/opennews/art.shtml?num=36576), написанный (https://github.com/servo/servo/) на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).В новом выпуске (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...) работа по оптимизации производительности была сфокусирована на стандартной библиотеке: задействован более эффективный алгоритм сопоставления строк, за счёт улучшения кода обнуления областей увеличена производительность вызовов Vec::resize и Read::read_to_end, проведена оптимизация вызова Read::read_to_end при работе со стандартным входным потоком и файлами, значительно ускорен код функции PartialEq.
В стандартной библиотеке представлен новый Duration API (http://doc.rust-lang.org/nightly/std/time/struct.Duration.html) для работы с интервалами времени. Улучшены реализации Error и Hash/Hasher. Добавлена поддержка FreeBSD на системах i686 (x86_64 поддерживается уже давно) и Windows XP, продолжено портирование под инструментарий MSVC. В пакетном менеджере Cargo улучшены (https://github.com/rust-lang/rfcs/pull/1193) средства диагностической сборки (lint). Представлено новое руководство Rustonomicon (http://doc.rust-lang.org/nightly/nomicon/), отражающее тонкости использования Rust и методы написания Unsafe-обработчиков.
URL: http://blog.rust-lang.org/2015/09/17/Rust-1.3.html
Новость: http://www.opennet.me/opennews/art.shtml?num=42981
Эталонное ненужно или все-таки серебряная пуля? Кто что думает?
Вам это не нужно
Посамому расту у меня мнения нет, но я доверяю мнению amarao http://habrahabr.ru/post/239067/#comment_8031769
Та же Vala, вид в профиль.
Или еще какой из сотен "c/c++ только лучше!"
15.05.2015 Rust 1.0
26.06.2015 Rust 1.1
08.08.2015 Rust 1.2
17.09.2015 Rust 1.3лепят как горячие пирожки
Они сами выбрали небольшой период релизов.
5 недель. цикл как у firefox..
Есть и есть, почему и нет
Название Rustonomicon отдаёт колдунством и некромансией. Рекомендую сменить на Rustomasutra.
Rustomasutra это вторая часть, сначала нужен Rustonomicon
все правильно, rust с unsafe - это оно и есть, колдунство и некромансия))
руководство распечатывается, скручивается в трубочку и начинается rustomania
The Rustonomicon
The Dark Arts of Advanced and Unsafe Rust Programming
Список приложений написанных на Rust:
bluejekyll/trust-dns — a DNS-server
BurntSushi/xsv — a fast CSV command line tool (slicing, indexing, selecting, searching, sampling, etc.)
buster/rrun — a command launcher for Linux, similar to gmrun
clog-tool/clog-cli — a conventional changelog port (generates a changelog from git metadata)
gchp/iota — a simple text editor
imjacobclark/Herd — an experimental HTTP load testing application
kbknapp/docli — a command line utility for managing DigitalOcean infrastructure
MaidSafe — a decentralized platform.
seppo0010/rsedis — a Redis reimplementation
Servo — a prototype web browser engine
uutils/coreutils — a cross-platform Rust rewrite of the GNU coreutils
Серво, велосипеды и хелоуворд-ы.
Печально.
А как же glutin - переписанный GLFW, а также glium - безопасная обёртка над OpenGL
толсто.более 3 тысяч приложений и пакетов за несколько месяцев,
от библиотек, вёбфреймворков, до геймдвижков, гуй-менеждеров и аудиcэплеров
https://crates.io/
>Список приложений
> http://www.piston.rs
> game engineВы не знаете что такое приложение? Хоть словарь купите, что ли.
> https://crates.io/
> более 3 тысяч приложений и пакетов за несколько месяцев,Пакетов не приложений. Самые популярные пакеты на этом сайле
libc
winapi
rand - в 2015 в Rust нет инструментов для генерации случайных чисел в стандартной библиотеке
gcc
time см rand
winapi-build
и тп.
Я выше привес список ПРИЛОЖЕНИЙ взятый из kud1ing/awesome-rust из раздела ПРИЛОЖЕНИЯ.
>в 2015 в Rust нет инструментов для генерации случайных чисел в стандартной библиотекеэто намеренное решение - сделать стандартную библиотеку как можно более легковесной и вынести все что можно в отдельные крейты под управлением менеджера пакетов (т.е. Cargo). В C++ такого менеджера нет, и поэтому приходится пихать все подряд в уже разросшийся до неприличных размеров libstdc++
>более 3 тысяч приложений и пакетов за несколько месяцев,слабо.
http://go-search.org/196291 golang packages in 102487 projects
а сколько там сам GO с первой версии живет?
Кол-во пакетов c релиза 1й версии GO за 6месяцев?И ещё, не забываем что GO, тянет любой репозитарий с гитхаба, которые если на мастере, могут разломать весь проект.
Вот тогда на текущий момент на гитхабе 7тыс "пакетов":
https://github.com/search?l=Rust&q=rust&ref=searchresults&ty...
Я посмотрел на образцы кода и у меня вытекли глаза.В 2015 году язык программирования Rust не может объявить массив(vector) с инициализацией значений.
<c++ 2003>
int foo [] = { 16, 2, 77, 40, 12071 };
<Rust 2015>
let x: Vec<u32> = {
let mut temp_vec = Vec::new();
temp_vec.push(1);
temp_vec.push(2);
temp_vec.push(3);
temp_vec
};
Фейспалм.
Но, погодите, можно же воспользоваться разрекламированными макросами в Rust и написать костылик!
macro_rules! vec {
( $( $x:expr ),* ) => {
{
let mut temp_vec = Vec::new();
$(
temp_vec.push($x);
)*
temp_vec
}
};
}
Вот это мощь!
А главное преимущество - если написать много такого кода тебя никогда не уволят.
Это пример из стандартной библиотеки
http://doc.rust-lang.org/book/macros.html
или скорее из стандартной костылетеки.
>
> <c++ 2003>
> int foo [] = { 16, 2, 77, 40, 12071 };let foo: Vec<u32> = vec![16, 2, 77, 40, 12071];
Уже есть "стандартный" готовый макрос, подключать и вводить дополнительно в код ничего не надо.
И кстати есть Плюсовые конструкции которые в РУСТ выглядят лучше и гораздо удобнее.
А я вот вижу в макросе Vec::new(). То есть для пользовательского типа макрос не сработает и потребуется писать его заново.
А ля
let myFoo: Myvec<u32> = myvec![]
Причем, костылесипедирование это официально рекомендованный метод написания кода.
>А я вот вижу в макросе Vec::new(). То есть для пользовательского типа макрос не сработает и потребуется писать его зановоэксперты opennet, как обычно, блещут знанием обсуждаемого предмета. Идите курите вывод типов в rust
Вот так точнее уж сравнивать
C++
int foo [] = { 16, 2, 77, 40, 12071 };
RUST
let foo = vec![16, 2, 77, 40, 12071];
> vec!Это! макрос! который! приведен! выше! Любой! пользовательский! тип! потребует! написания! уевой! тучи! таких! макросов!
>> vec!
> Это! макрос! который! приведен! выше! Любой! пользовательский! тип! потребует! написания!
> уевой! тучи! таких! макросов!Нахрена любому пользовательскому типу туева хуча макросов?
> Нахрена любому пользовательскому типу туева хуча макросов?Причем тут туева хуча?
Это макрос инициализации. Пользовательскому типу не нужна инициализация?
>> Нахрена любому пользовательскому типу туева хуча макросов?
> Причем тут туева хуча?
> Это макрос инициализации. Пользовательскому типу не нужна инициализация?Смотря чем, смотря какой тип. Кортежи, структуры, енумы - успешно инициализируются прямо в коде. Пользовательские типы обычно состоят именно из них.
Вектор - динамическая структура.
В конце концов обычно данные хранятся не в коде программы, а на внешних носителях.
let Rust = "Overhyped trash"
Deal::with::it()
Как тут ниже написали? "Анус запеканус". Это не уровень аудитории Rust, это уровень "критиков" (читай "троллей"). По делу ведь сказать нечего, критикуемый материал не осилили, в результате чего путаются и делают заведомо неверные утверждения, но такие ультракатегоричные высказывания )))
>> Нахрена любому пользовательскому типу туева хуча макросов?
> Причем тут туева хуча?
> Это макрос инициализации. Пользовательскому типу не нужна инициализация?Вот смотри, неосиливший:
let vertex_data = [
Vertex { pos: [ -0.5, -0.5 ], color: [1.0, 0.0, 0.0] },
Vertex { pos: [ 0.5, -0.5 ], color: [0.0, 1.0, 0.0] },
Vertex { pos: [ 0.0, 0.5 ], color: [0.0, 0.0, 1.0] },
];Инициализировано. Без макросов. Пользовательский тип.
Зато с макросами можно сильно больше.let program = {
let vs = gfx::ShaderSource {
glsl_120: Some(include_bytes!("triangle_120.glslv")),
glsl_150: Some(include_bytes!("triangle_150.glslv")),
.. gfx::ShaderSource::empty()
};
let fs = gfx::ShaderSource {
glsl_120: Some(include_bytes!("triangle_120.glslf")),
glsl_150: Some(include_bytes!("triangle_150.glslf")),
.. gfx::ShaderSource::empty()
};
factory.link_program_source(vs, fs).unwrap()
};
C++ - в 2003 году исполнилось 20 лет.
Rust - в 2015 году - первый стабильный релиз в котором зафиксировали синтаксис.
Кстати, а в чём проблема - компилятор сам понимает {1, 2, 3} или структуру формирует препроцессор vec![1, 2, 3]? Вы от одной мысли про макросы начинаете генерировать говнокод? ))
> C++ - в 2003 году исполнилось 20 лет.Эта возможность появилась в 2003(официально). Но у мозилы терминальный приступ NIH.
> Rust - в 2015 году - первый стабильный релиз
Надеюсь и последний.
> Кстати, а в чём проблема - компилятор сам понимает {1, 2, 3}
> или структуру формирует препроцессор vec![1, 2, 3]?Слава богу создатели Rust нагенерировали овнокода за нас и назвали стандартной библиотекой.
>> C++ - в 2003 году исполнилось 20 лет.
> Эта возможность появилась в 2003(официально). Но у мозилы терминальный приступ NIH.То есть, спустя 20 лет после появления самого языка. 20 лет жили не тужили.
И Мозилла как-то больше десяти лет юзала, пока вконец костыли C++ не осточертели и не подвернулась команда разрабатывающая язык с требуемыми фичами.
>> Rust - в 2015 году - первый стабильный релиз
> Надеюсь и последний.
>> Кстати, а в чём проблема - компилятор сам понимает {1, 2, 3}
>> или структуру формирует препроцессор vec![1, 2, 3]?
> Слава богу создатели Rust нагенерировали овнокода за нас и назвали стандартной библиотекой.Слава богу, всем наплевать на подобные мнения и пожелания. Как говорится, не хочешь - не разрабатывай ))
>И Мозилла как-то больше десяти лет юзалаи еще 40 будет "юзать". Servo даже не близок к использованию.
>команда разрабатывающая язык с требуемыми фичами.Игнорирую все наработки в дизайне языков программирования и прикладной опыт за эти 20 лет.
А потом они удивляются непопулярности их NIH творения.
> Servo даже не близок к использованиюКто-то его обещал прям сейчас на тарелочке с голубой каёмочкой™?
> Игнорирую все наработки в дизайне языков программирования и прикладной опыт за эти 20 лет.
> все
> ВСЕВот ты, например, ухитряешься игнорировать элементарную логику и ничего - пальцы веером ))
Это инициализация вектора заложенная в синтаксис языка - "все мировые наработки и прикладной опыт"?Должен разочаровать, твой опыт стремится к плинтусу. Снизу.
> let x: Vec<u32> = {
> let mut temp_vec = Vec::new();
> temp_vec.push(1);
> temp_vec.push(2);
> temp_vec.push(3);
> temp_vec
>};Вы массив фиксированного размера сравниваете со списком нефиксированного, разве нет?
Мне кажется более близким эквивалентом вашему коду на С++ является:let x = &mut [16, 2, 77, 40, 12071];
vector <string> vs{"alpha", "beta", "gamma"};
Работает не?
C++11?Вообще-то, как минимум (мы же не необразованные обезьяны использующие "use namespace std;", да?):
std::vector<std::string> vs {"alpha", "beta", "gamma"};
Без макросов можно еще (таки да, длиннее и не так эффективно - хотя фиг знает какие там оптимизации компилятор сделает...):
let vs: &mut Vec<_> = &mut (["alpha", "beta", "gamma"]).iter().cloned().collect();
>Вообще-то, как минимум (мы же не необразованные обезьяны использующие "use namespace std;", да?):using std::vector;
>let vs: &mut Vec<_> = &mut (["alpha", "beta", "gamma"]).iter().cloned().collect();
Без комментариев.
> Без комментариев.Ok, уговорил.
<c++ 2003>
int foo [] = { 16, 2, 77, 40, 12071 };
<Rust 2015>
let foo = [16, 2, 77, 40, 12071];
Когда уже наследование запилят для нормальной реализации DOM, GUI, RPG и прочих задач из классического ООП?
Никогда. И слава богу, ООП не нужен.
Это хорошо, что они развивают язык, но не рановато ли они его зарелизили? Решил как-то изучить Rust на задаче, уже решённой мной несколько раз на C, C++ и D - написании парсера выдуманного мной игрушечного ЯП. Язык показался достаточно приятным для системного, но borrow checker просто вынес мозг при написании парсера. Сначала я думал, что это я тупой и не вкурил в работу механизма заимствования, побежал читать доки, блоги и whatnot. Выяснилось, что всё я понял правильно, просто компилятор умеет определять только лексические области заимствования. То есть следующий код:fn parseExpr(&mut self) -> ParseResult {
match self.lexer.read() {
Some(token) => CompileError::new(&token.location, "parseExpr(): not implemented"),
None => CompileError::new(&self.location(), "parseExpr(): not implemented")
}
}Не компилится:
error: cannot borrow `*self` as immutable because `self.lexer` is also borrowed as mutable
None => CompileError::new(&self.location(), "parseExpr(): not implemented")Компилятор считает, что self.lexer заимствован в ветке None, хотя очевидно, что заимствование должно завершиться в самом её начале, т.к. заимствованная ссылка не используется. Но компилятору пофиг.
И разработчикам пофиг, потому что у RFC по этой проблеме - https://github.com/rust-lang/rfcs/issues/811 - стоит статус "отложено" (postponed). Они не считают это достаточно серьёзной проблемой, чтобы решать её до первого релиза, и хотят отложить это до Rust 2.0, хотя именно borrow checker доставляет больше всего проблем новичками-растоманам.
В общем, текущая реализация компилятора для меня сводит на нет всё удовольствие от изучения Rust. Подожду 2.0, чтобы не портить впечатление.
Погромисты на низкоуровневых ЯП любят испытывать боль. В русте ты получаешь всё те же ощущения, но зато у тебя появляется надежда: если мучения твои окончатся, ты получишь гарантированно рабочий код без течек и т.п. Можешь утешать себя этим.
Анус запеканус? На Rust в целом гораздо приятнее писать, чем на том же C, просто компилятор пока туповат. Когда починят и смажут, ощущения будут ещё лучше. Не вижу смысла так кипеть, если никто тебя не заставляет писать на Rust здесь и сейчас. А пока чинят, у тебя есть время отдышаться, успокоиться и нанести мазь на припекаемое место.
>> Анус запеканус
>> туповат
>> Когда починят и смажут, ощущения будут ещё лучше.
>> отдышаться, успокоиться и нанести мазь на припекаемое место.- Вот она, целевая аудитория Rust...
Есть форма, а есть содержание. Видимо, видеть второе за первым (я сейчас не про еду) дано не всем.
>ты получишь гарантированно рабочий кодБез утечек памяти и сегфолтов, багов и логических ошибок, от запуска этого кода у процессора отрастет новое ядро, а на hdd пропадут bad-ы.
Ну и понятно дело, волосы станут живыми и шелковистыми.
Кернел 4.2, amdgpu + radeonsi - null pointer dereference на старте системы и по совместительству вместо старта системы.
Упс, откуда это? Писали, тестировали, дебажили, наконец релизили, а оно...
В неурочный час и все ядра могут отваливаться и волосы на груди седеть ;)
>>И разработчикам пофиг...нет, этой проблемой как раз занимаются, должна быть решена с вводом MIR:
Отличные новости.