LINUX.ORG.RU

Вышел новый релиз языка программирования Rust 0.8

 ,


0

9

Вышел новый релиз системного и прикладного языка программирования общего назначения Rust 0.8.

В основном были доработаны/изменены стандартная библиотека и рантайм языка, в меньшей степени синтаксис.

Кратко из изменений в этом релизе:

  • изменения в синтаксисе for цикла — с применением итераторов.
  • новый метод форматирования format! (заменит fmt! в будущем)
  • изменения в FFI: теперь вызов foreign функции может быть прямым, без дополнительной обертки/оверхеда, при использовании специальной аннотации.
  • изменения в cast naming conventions.
  • новый рантайм языка и планировщик задач были переписаны с C++ на Rust: теперь Rust почти полностью написан на самом себе.
  • новый рантайм улучшил новую I/O подсистему std::rt::io реализующую: TCP, UDP, файлы, таймеры и процессы.

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

https://github.com/mozilla/rust/wiki/Doc-detailed-release-notes

http://www.rust-lang.org/

★★

Последнее исправление: gensym (всего исправлений: 2)

Мне нравится, как-то в нём разумно всё сделано. Правда, большинство всё равно выберет Go, потому что на швабре и HN это щас модно. Ну да оно и к лучшему.

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

Ну да оно и к лучшему.

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

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

«Закопать плюсы» - значит сделать так, чтобы на плюсах никто не хотел писать. А компиляторы и библиотеки после этого перестанут развиваться и постепенно вымрут.

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

Меня лично плюсы всем устраивают, но на ЛОРе кто-то писал, что Rust убъёт плюсы, я в этом пока что крайне сомневаюсь, но если всё-таки убъёт, то должно быть возможно писать на нём любой код, для которого сейчас применяют плюсы.

Whatever, я просто несу чушь, потому что лень нести не чушь.

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

Я надеюсь, что С++ рано или поздно полностью заменит С.

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

silver-bullet-bfg ★★
()
Ответ на: комментарий от silver-bullet-bfg

Это поколение не только выросло, но и уже написало очень солидную часть прикладного и системного софта

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

Это поколение не только выросло, но и уже написало очень солидную часть прикладного и системного софта

Да и посмотрите теперь на его качество

silver-bullet-bfg ★★
()

Попытался собрать, словил «internal compiler error»

cp: i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/librustrt.so
compile: i686-unknown-linux-gnu/rt/stage0/arch/i386/morestack.o
link: i686-unknown-linux-gnu/rt/stage0/arch/i386/libmorestack.a
cp: i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/libmorestack.a
compile_and_link: i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/libstd.so
compile_and_link: i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/libextra.so
compile_and_link: i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/libsyntax.so
compile: i686-unknown-linux-gnu/rustllvm/RustWrapper.o
compile: i686-unknown-linux-gnu/rustllvm/PassWrapper.o
def: i686-unknown-linux-gnu/rustllvm/rustllvm.linux.def
link: i686-unknown-linux-gnu/rustllvm/librustllvm.so
cp: i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/librustllvm.so
compile_and_link: i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/librustc.so
error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug
note: try running with RUST_LOG=rustc=1 to get further details and report the results to github.com/mozilla/rust/issues
make: *** [i686-unknown-linux-gnu/stage0/lib/rustc/i686-unknown-linux-gnu/lib/librustc.so] Ошибка 101

encyrtid ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

А мне вот кажется, что это будет означать, что выросло поколение, которое не отказывается от инструмента по религиозным причинам. С++ объективно лучше и местами быстрее С.

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

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

forCe
()
Ответ на: комментарий от tailgunner
fn map<T, U>(vector: &[T], function: &fn(v: &T) -> U) -> ~[U] {
    let mut accumulator = ~[];
    for element in vector.iter() {
        accumulator.push(function(element));
    }
    return accumulator;
}

Ну и что это за ад в объявлении map?

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

Кто-нибудь мне объяснит, чем оно лучше того же Go или D?

Ну как минимум, гораздо стройнее и прогрессивнее.

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

Ну и что это за ад в объявлении map?

Шо не ясно?

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

что это за ад в объявлении map?

Мир разделился на тех кто ещё не испортил мозги крестами и тех кого уже не вернуть :)

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

Дружище разьясни пожалуйста каждый спецсимвол синтаксиса в первой строке

// человек который испортил мозг плюсами

anonymous
()
Ответ на: комментарий от vasilenko
template <class T>
void map( vector<T> &in, function<T (T)> fn, vector<T> &out )
{
	out.clear();
	for( auto element : in )
	{
		out.push_back(fn(element));
	}
}

Вот аналог на C++.

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

разьясни пожалуйста каждый спецсимвол синтаксиса в первой строке

Дженерик-функция, зависящая от типов T и U, принимающая на вход borrowed вектор элементов типа T, borrowed замыкание, принимающее на вход значение типа T и возвращающее значение типа U, и возвращающая owned вектор элементов типа U.

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

Обратно не то. В твоей версии out надо самому руками создать и передать. Фортран прям.

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

Тоже не точно. Как минимум, второй vector должен быть возвращаемым значением и, наверное, оба вектора должны быть *_ptr на векторы.

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

Вообще аналог уже есть, причем более гибкий - std::transform.

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

Почему боишься возвращать вектор? RVO в старом С++ и move-самантика в текущем избавит от лишних копирований.

Как-то так:

template<class T, class U>
vector<U> map(const vector<T> & in, function<U(T)> fn)
{
    vector<U> accum;
    accum.reserve(in.size());
    transform(in.begin(), in.end(), back_inserter(accum), fn);
    return accum;
}

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

Аналогом ~[T] в С++ является vector<T>.

Наверное, ты знаешь Rust лучше меня. Я по серости всегда считал ~Whatever указателем.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner
//ver.3
template <class T, class U>
vector<U> map( vector<T> &in, function<U (T)> fn )
{
	vector<U> accumulator;
	for( auto element : in )
	{
		accumulator.push_back(fn(element));
	}
	return accumulator;
}
// use std::move(), Luke!
anonymous
()
Ответ на: комментарий от tailgunner

Итак, код приведен аналогичный, но декларация map менее «хаскелеподобная» (космическая) в C++. Зачем тогда нужен этот Rust?

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

Зачем тогда нужен этот Rust?

Чтобы писать на нем программы.

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

если говорить про IDE с поддержкой разных ЯП - NetBeans

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

Я имею ввиду в данном случае стандартную эрлагновую засаду с отсутствием shared mem даже для immutable data. Это засада мрачная. Пришлось изобрести ссылки на C для эрланга:))

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

Может, наоборот, ты. ~[T] сам является указателем, при этом данные размещаются в динамической памяти, а сам наш объект-указатель является уникальным владельцем. Но ведь именно так себя и ведет вектор. Он хранит у себя указатель на память и является ее уникальным владельцем.

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

Я правильно понял, что если использовать select/recv и прочее то все потоки встанут? Зачем такая многопоточность нужна?

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

перед тем как давать глупые советы, можно и прочитать дальше

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