LINUX.ORG.RU

Rust 1.49

 


2

6

Опубликован релиз 1.49 языка программирования Rust.

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

Чтобы чётко обозначить, насколько поддерживается каждая система, используется система уровней:

  • Уровень 3. Система поддерживается компилятором, но не предоставляются готовые сборки компилятора и не прогоняются тесты.

  • Уровень 2. Предоставляются готовые сборки компилятора, но не прогоняются тесты

  • Уровень 1. Предоставляются готовые сборки компилятора и проходят все тесты.

Список платформ и уровней поддержки: https://doc.rust-lang.org/stable/rustc/platform-support.html

Новое в релизе 1.49

  • Поддержка 64-bit ARM Linux переведена на уровень 1 (первая система, отличная от систем на x86, получившая поддержку уровня 1)

  • Поддержка 64-bit ARM macOS переведена на уровень 2.

  • Поддержка 64-bit ARM Windows переведена на уровень 2.

  • Добавлена поддержка MIPS32r2 на уровне 3. (используется для микроконтроллеров PIC32)

  • Встроенный тестовый фреймворк теперь выводит консольный вывод, сделанный в другом потоке.

  • Перенесены из Nightly в Stable три функции стандартной библиотеки:

  • Две функции теперь помечены const (доступны на этапе компиляции):

  • Повышены требования к минимальной версии LLVM, теперь это LLVM9 (было LLVM8)

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

★★★★★

Проверено: Shaman007 ()
Последнее исправление: atsym (всего исправлений: 8)
Ответ на: комментарий от anonymous

Rust так же может распарсить json из строки, причём на уровне языка, а не вызовов внешнего рантайма.

Не может. Это аксиома. С++ полиморфный язык, т.е. на нём можно написать отображение string -> type - это так же аксиома. В раст-скриптухе этого сделать нельзя. Просто по факту.

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

Прав.

Лев.

Это другой язык.

Очень аргументированно.

Доказывается это очень просто - у них разный синтаксис и вообще разная семантика.

Вот очень доказательно, да.

Вырвать часть языка и гворить что его семантика отличается от семантики остальной части.

Другой язык, чё.

Скорее твоих, а не его.

О, ты такой же поц, который утверждает, что макросы оперируют текстом? Тогда всё с тобой ясно.

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

Ещё забыл кое что важное. Этот пример показательный. Пацан просто не вышел на суть проблемы, а ведь она куда шире. И вы сами своими ахренительными историями доказываете, что для декларации произвольных структур в это скриптухе нужен внешний язык. Допустим, тот же json.

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

А не, нет проблем. Ты осилил. Только я не поплыл, а просто не рассмотрел что там у вас в с++ коде. Но если тебе очень нужно зафиксировать поплывание, то валяй.

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

Вырвать часть языка и гворить что его семантика отличается от семантики остальной части.

Она полностью отличается. Ничего общего нет, шарятся только токены, без семантики. Препроцессор С/С++ никто частью языка не зовет, более того, его применяют и вне С/С++. Макросы раста обладают всеми теми же свойствами, разве что оперируют токенами, а не текстом – почему тогда их нужно считать частью языка?

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

Во первых, давай критерий что считать внешним языком. С какого места начинается другой язык. Потому что кому-то может показаться что class и virtual это один язык, а if, else - другой. Без точного определения не о чем говорить. Если разрабы раста называют это одним языком, то это один язык.

Во вторых, в чем проблема двух языков вместо одного?

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

Вырвать часть языка и гворить что его семантика отличается от семантики остальной части.

Я доказал это. Ты можешь попытаться оспорить мой довод. Но тем самым тебя себя похоронишь.

Если это два одинаковых языка, то языковые конструкции внутри макроса должны существовать и за его пределами.

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

Теперь твоя задача следующая. Показывать использование тех выражений, что ты передаёшь в макрос. Так же показать использования тех синтаксических коснтрукций, которые используются внутри макроса за его пределеами. Действуй.

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

У Nim, Vala и Swift тоже GC(ARC тот же GC, только ещё медленнее), а их тут уже предлагали как убийц С++ и конкурентов Rust…

Так комментарий про D vs Rust, при чём здесь другое говно.

На ним пишут 3.5 инвалида, знают его ещё меньше. Второе примерно как первое, третье анальная забава макафилов.

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

Код раста компилирует С++-компилятор с кастомным огрызком фронта.

Не правда, твой С++ такой же огрызок LLVM в виде Clang, как и растовский компилятор. Хотя конечно можешь продемонстрировать компилированием C++ напрямую с помощью LLVM

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

Я доказал это. Ты можешь попытаться оспорить мой довод.

Говно ты, и доводы твои, обмазывайся ими сколько хочешь.

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

Из того, что директивы препроцессора описываются в том же драфте, что и С++, следует что? Или ты отрицаешь использование cpp вне С/С++? Или ты отрицаешь, что в С++ нет никакого #define и #ifdef, и без препроцессора это невалидный С++, как и if else for – невалидные директивы препроцессора?

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

структура, параметризованная произвольным числом типов

Это как? Куда будут передаваться это произвольное число типов? Я ещё понимаю фиксированное число типов или (Args&&... args) и std::forward<Args>(args)....

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

И что? Это ничего не значит.

Ага, также как и твои потуги.

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

Не правда, твой С++ такой же огрызок LLVM в виде Clang, как и растовский компилятор.

Нет, llvm создавался для clang, llvm создавался на С++ для С++. Ну и там с мечтами о том, что можно будет прикрутить скриптуху. Эпл уже давно об этом мечтал.

Хотя конечно можешь продемонстрировать компилированием C++ напрямую с помощью LLVM

Зачем? Это крестовая инфраструктуру созданная крестами, для крестов и на крестах. К тому же есть гцц.

И да, llvm-ir - это и есть С++. Только мономорфный, таргет-зависимый и с упрощённым синтаксисом.

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

Не устроит. Это не-полиморфный вызов. И туда нельзя передать замыкание.

Об этом речи и не шло. Да, это - не полиморфный вызов, дальше что? Нужен полиморфный - используй дженерики (Для compile-time полиморфизма) или trait object-ы (Для runtime полиморфизма).

К тому же void-функций у тебя быть не может, зачем обманываешь?

Что за бред ты несёшь? Вот тебе кучка «void» функций.

fn foo(bar: fn()) {
    println!("Foo");
    bar();
}

fn baz() {
    println!("Baz");
}

fn quux() {
    println!("Quux");
}

fn main() {
    foo(baz);
    foo(quux);
}

Как ты собрался ошибки передавать? Ах да, как я мог забыть. Ты же о них даже не знаешь и твоё foo в любой момент может упасть с паникой.

Очередной бред. Result<T, E> дла кого придумали? Явно не для тебя.

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

anonymous-angler ★☆
()
Ответ на: комментарий от Siborgium

Из того, что директивы препроцессора описываются в том же драфте, что и С++, следует что?

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

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

Макросы раста обладают всеми теми же свойствами, разве что оперируют токенами, а не текстом – почему тогда их нужно считать частью языка?

По такой логике шаблоны - это отдельный от C++ язык.

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

Это значит, например,

Куда и как передаётся это переменное число параметров? Или оно объявлено просто чтобы было?

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

Нет конечно, потому что я могу написать

struct S { std::size_t N; };

template <S s>
struct T {
    std::array<char, s.N> A; 
};
Siborgium ★★★★★
()
Ответ на: комментарий от Siborgium

Из того, что директивы препроцессора

Препроцессор можно было к C++ любой прикрутить.
Тот который имеется конечно как-бы ориентирован на C++.
Но ни что не мешает для C++ разработать а-ля KotlinC++.

ИМХО препроцессинг - лаба.
Жаль, что разработчики с самого начала разработки Си не использовали метаданные.
Просто у них сил и времени на это не было.
А препроцессинг - «раз, два и в дамках».

Владимир

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

Нет, llvm создавался для clang, llvm создавался на С++ для С++. Ну и там с мечтами о том, что можно будет прикрутить скриптуху. Эпл уже давно об этом мечтал.

Пруф давай, какая разница для чего он создавался, если по факту он поддерживает кучу компилируемых языков?

Ты сказал что LLVM с++ компилятор, пруфа нет. Компилятор С++ должен уметь компилировать С++, иначе он не компилятор с++. И до фонаря зачем и для чего он создавался, логично?

Зачем? Это крестовая инфраструктуру созданная крестами, для крестов и на крестах. К тому же есть гцц.

Это риторический вопрос, ты не можешь, соответственно весь твой эпос из говна про «rust компилирует с++ компилятор», возвращается восвояси.

И да, llvm-ir - это и есть С++. Только мономорфный, таргет-зависимый и с упрощённым синтаксисом.

А питон это усложнённый «С» с виртуальной машиной и отступами. Слушаю дальше.

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

Зачем ты обманываешь? Тебя просят показать код на языке, а не код на левой либе. Пиши код на языке.

Это - стандартная библиотека. Итераторы есть даже в core. Они - часть интерфейса языка. Передёргивать вприсядку и/или заниматься решением синтетических задач, высосанных из пальца не входит в список моих увлечений, так что велосипедостроением занимайся сам.

Нет.

Ну нет так нет, никто не заставляет же. Хочется вприсядку - пожалуйста.

Ничего писать ненужно.

Сразу видно эксперта, который даже не прикасался к этому проекту.

Никакого отношения к языку не имеет. Это внешний кодоген. Иди и обмазывайся таким же в С++, если нужно.

Мне плевать, если честно. Это хороший, годный, простой в использовании додоген. Ещё раз, специально для тебя: хочешь вприсядку - пожалуйста. Только мне не предлагай, ок? :)

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

Об этом речи и не шло.

Шло, просто ты специально съехал на левую тему. Речь шла о С++ - там практически нахрен ненужны указатели на функции.

Да, это - не полиморфный вызов, дальше что?

То, что ты не можешь описать полиморфный.

Нужен полиморфный - используй дженерики (Для compile-time полиморфизма) или trait object-ы (Для runtime полиморфизма).

У тебя нет компилтайм-полиморфизма, зачем ты врёшь? У тебя и тот и тот полиморфизм рантайм. Просто к одному из них прикручен там где-то сбоку монорфизатор, но это не меняет динамической семантики.

Используй, покажи мне как определить полиморфный параметр.

Что за бред ты несёшь? Вот тебе кучка «void» функций.

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

В рамках семантики с исключениями void-функция может вернуть ошибку. А ошибка есть практически всегда, в том числе оно есть и у тебя println может вернуть ошибку. Но ты игонирируешь это обстоятельствол.

Очередной бред. Result<T, E> дла кого придумали? Явно не для тебя.

Как же бред, ты ничего не знаешь о своей скриптухе и уже бред? Иди почитай мануал, а потом пытайся кому-то что-то рассказывать. Иди переписывай мне println на result. Box на result, любое raii на result.

Ой, я же забыл, тебе об этом не рассказали, но raii не работает с result. Как же так, ну ничего.

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

Я объяснил. Ты специально пишешь void-функции, чтобы не писать синтаксический мусор, потому как в твоей скриптухе нет вывода типов.

Только вот void-функций у тебя быть не может. Потому как практически всегда функция должна возвращать ошибку. И у тебя вариантов не много. Либо ты называешь result несостоятельным, либо ты врёшь.

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

Он не просто из этих, он их сЦарёк :)

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

Если это два одинаковых языка

Для особо одарённых, это часть языка.

Часть.

Ферштейн?

Макросы Раста вне Раста не существуют. Если ты утверждаешь обратное, то докажи.

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

Это - стандартная библиотека.

Это не язык.

Итераторы есть даже в core. Они - часть интерфейса языка.

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

Передёргивать вприсядку и/или заниматься решением синтетических задач, высосанных из пальца не входит в список моих увлечений, так что велосипедостроением занимайся сам.

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

Поведение типичное для адепта этой секты.

Далее опять ничего не смог ответить, начал пастить какие-то куски фраз и ничего не отвечать.

Мне плевать, если честно. Это хороший, годный, простой в использовании додоген. Ещё раз, специально для тебя: хочешь вприсядку - пожалуйста. Только мне не предлагай, ок? :)

Опять проблемы. То он рассказывал что и почему, теперь, когда сел в лужу, начал рассказывать, что уже всё это неважно.

Тебе об этом сразу сказали. Скриптуха создана для того, чтобы не думать. Зачем ты пошёл спорить и рассказывать кому-то как и что работает, если ты ничег оне знаешь и знать не можешь?

Сиди и не лезь в подобные обсуждения.

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

почему тогда их нужно считать частью языка

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

Нет, ты конечно можешь придумать отдельный язык являющийся подмножеством rust, но без маккросов, но какое отношение к реальности это будет иметь?

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

нет отдельного препроцессора

Не проблема его выдрать из компилятора.

их нет вне языка

Вы хотели сказать «вне компилятора». В языке их нет – вы не можете взять адрес на них, вы не можете никуда передать, присвоить их значение чему-то, не имеете доступа к семантике переданных им языковых конструкций.

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

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

А в gcc к примеру как реализовано?
Препроцессор может много более функций выполнять, чем обработку директив.
Здесь пожалуй все от реализации зависит.

Владимир

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

Для особо одарённых, это часть языка.

Это не часть языка.

Макросы Раста вне Раста не существуют. Если ты утверждаешь обратное, то докажи.

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

Давай попроще, у тебя есть рожа и жопа. Существуют ли они вне тебя? Нет. Является ли жопа и рожа одной и той же частью тела? Нет. Хотя у тебя, возможно, да.

То, что ты взял два недоязычка А и Б и назвал А + Б А - это не означает, что одно А и второе А - это одно и тоже. Просто в рамках твоей секты это называется одним и тем же.

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

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

Непонятна решаемая задача. Нужно смотреть код целиком, который делает что-то полезное. Фича ради фичи не нужна.

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

Нет, шаблоны не оперируют токенами и, особенно, невалидными выражениями.

Они запросто могут оперировать невалидными структурами, невалидность которых становится понятна только после подстановки, вызывая длинные непонятные сообщения об ошибках. По сути шаблоны C++ не далеко ушли от препроцессора Си.

X512 ★★★★★
()

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

А сколько тех платформ вообще реально надо?

Windows x86_64, Linux x86_64, Linux arm_64

По-моему это основной набор платформ, которые не должны ждать никакие другие.

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

Они запросто могут оперировать невалидными структурами, невалидность которых становится понятна только после подстановки, вызывая длинные непонятные сообщения об ошибках. По сути шаблоны C++ не далеко ушли от препроцессора Си.

Препроцессору можно «Войну и Мир» подсунуть и если синтаксис директив будет правилен, то он сгенерирует

Анна Каренина

Владимир

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

Это не часть языка.

Разработчик заявляет, что часть языка = часть языка. Явный пример концепт-дрочера.

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

Он от этого начинает хуже работать, перестаёт, суть?

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

Разработчики называют это одним языком, ты можешь называть это разными языками, в чём практическая польза или необходимость этого разделения, что ты 2 страницы с пеной у рта пытаешься это доказать?

Давай попроще, у тебя есть рожа и жопа. Существуют ли они вне тебя? Нет. Является ли жопа и рожа одной и той же частью тела? Нет. Хотя у тебя, возможно, да.

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

То, что ты взял два недоязычка А и Б и назвал А + Б А - это не означает, что одно А и второе А - это одно и тоже. Просто в рамках твоей секты это называется одним и тем же.

А кто решил, что А это А, разработчики.

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

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

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

Это не часть языка.

«Потому что я так сказал!»(цы)

Я уже доказал почему почему это разные языки.

Ты, сам для себя, доказал, что земля плоская, поздравляю.

Только к реальности отношения это не имеет.

Давай попроще, у тебя есть рожа и жопа. Существуют ли они вне тебя? Нет. Является ли жопа и рожа одной и той же частью тела? Нет. Хотя у тебя, возможно, да.

«Я» - язык. «Рожа» - часть языка. Твои слова.

Остаётся понять причём тут «Жопа». У тебя какая-то фиксация на жопную тематику?

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

В общем, там твои собратья совсем гении, остался только ты.

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

Изучи как работает твоя скриптуха. Потому как зная это подобную херню нести невозможно. Давай я тебе объясню.

Макросня в расте в базе примитивный мусор. Такое огрызок сишных макропроцессоров из 70-80, даже синтаксис тот же. Он ничего не может.

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

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

С какого места начинается другой язык.

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

Потому что кому-то может показаться что class и virtual это один язык, а if, else - другой.

Не может. Каждая из этих конструкций оперирует теми же сущностями, что и другая.

Без точного определения не о чем говорить.

Типичная потуга балаболов. Хорошо, если без точного определения говорить нельзя, то почему ты говоришь? На каком основании ты утверждаешь, что это один язык?

Здесь мы видим, как адепт пытается просто забалтывать, требуя какой-то ни на чём не обоснованной херни.

Если разрабы раста называют это одним языком, то это один язык.

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

К тому же, где и как они это называю. Показывай.

Во вторых, в чем проблема двух языков вместо одного?

Я уже говорил об этом. Читай выше. Как минимум это означает, что базовый язык несостоятельный.

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

Препроцессор С/С++ никто частью языка не зовет

Препроцессор описан в стандарте языка. Более того, в главе Language наравне с синтаксисом самого С. Нет никакого смысла рассматривать С/С++ без препроцессора хотя бы потому что без #include язык ничтожен. Так же и в расте, макросы - это неотъемлемая часть языка.

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