LINUX.ORG.RU

Rust 1.6

 ,


2

3

Команда разработчиков Rust рада представить первый в этом году релиз Rust — 1.6. Rust — это системный язык программирования, при разработке которого внимание сосредоточено на безопасности, скорости и параллелизме. Как обычно, вы можете установить Rust 1.6 с соответствующей страницы на официальном сайте, а также посмотреть примечания к выпуску на GitHub. Выпуск включает в себя около 1100 патчей и содержит ряд небольших улучшений, одно важное изменение, а также изменение на Crates.io.

Стабилизация libcore

Самым большим нововведением в 1.6 является стабилизация libcore. Стандартная библиотека Rust состоит из двух уровней: небольшая базовая библиотека libcore и полная стандартная библиотека libstd, которая построена на основе libcore. libcore является полностью платформонезависимой, и требует только горстку внешних функций. libstd строится на основе libcore, добавляя поддержку выделения памяти, операций ввода-вывода и параллелизма. При использовании Rust во встраиваемых средах и при написании операционных систем, разработчики часто избегают libstd, используя только libcore.

Стабилизация libcore являтся важным шагом к возможности писать самое низкоуровневое ПО, используя стабильный Rust. Это позволит развиваться экосистеме библиотек вокруг libcore, но приложения пока полностью не поддерживаются. Ожидайте изменения в этой области в будущих релизах.

Стабилизации библиотеки

Около 30 библиотечных функций и методов теперь являются стабильными в 1.6. Заметные улучшения включают в себя:

  • Семейство функций drain() для коллекций. Эти методы позволяют перемещать элементы из коллекций, сохраняя память, в которой они размещены, тем самым снижая выделение памяти в некоторых ситуациях.
  • Ряд реализаций типажа From для конвертирования между типами стандартной библиотеки, в основном между целочисленными типами и числами с плавающей точкой.
  • Наконец, Vec::extend_from_slice(), ранее известный как push_all(). Этот метод существенно быстрее, чем более общий метод extend().

Crates.io запрещает использование масок в версиях зависимостей

Если вы являетесь мейнтейнером контейнера на Crates.io, возможно вы видели следующее предупреждение:

новые контейнеры более не могут использовать маски при описании зависимостей.

Другими словами, это запрещено:

[dependencies]
regex = "*"

Вместо этого вы должны указать конкретную версию или диапазон версий, используя одну из опций: ^, ~, или =.

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

>>> Официальный анонс

★★★★★

Проверено: Klymedy ()
Последнее исправление: Klymedy (всего исправлений: 6)
Ответ на: комментарий от shkolnick-kun

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

Дело в том, что сделать крупное приложение, корректно работающее с памятью на мейнстримных языках невозможно. Причем это относится в том числе к языкам с GC и жирным рантаймом (прочитайте java memory model и, если осилите, подумайте как этим пользоваться в жизни). Мозилла же сделала язык, в котором большая часть ошибок при работе с памятью невозможна, при этом на нем все ещё можно что-то писать. Сейчас же занимается тем что делает так чтобы писать на этом языке было проще и доставляло меньше боли.

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

На сколько реально сделать такой язык? Думаю, что реально, если не задаваться целью сделать его идеальным.

Ну хз. Думаю основная проблема тут в том, что хотя «любой» плюсовик и «мечтает» о таком языке, но договориться о том каким он должен быть вряд ли смогут. Тот же Александреску - мало того, что делает язык с GC, так ещё и шаблоны у них хотя и шаг вперёд, по сравнению с С++, но нормальных макросов всё равно не завезли. Примерно так же с растом - кто-то посчитает, что они как раз выкинули всё ненужное из плюсов, другие возразят, что повыкидывали как раз полезные вещи.

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

Следуя «логике разработчиков языка» следует ввести ряд новых анальных ограничений:

  • Запилить индексные типы для адресации элементов массивов.
  • Запилить для них такие же ограничения, как для различных видов указателей, причем проверять соблюдение «правил» придется рекурсивно...
  • Использовать для адресации массивов ТОЛЬКО индексные типы.
shkolnick-kun ★★★★★
()
Ответ на: комментарий от anonymous

Кстати, Александреску очень точно охарактеризовал это поделие по твоей ссылке выше. Точнее и лаконичнее я не видел, зачет дядьке.

Уж чья бы корова мычала, а он бы помолчал.

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

А ты думаешь, что смена ниши начинается тогда, когда это объявлено публично?

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

Ну и было интересно знаешь ли ты когда появился unsafe.

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

о Go говорят, по моим ощущениям, куда больше, что в общем-то закономерно.

На го еще и код пишут, и не только в стол. У раста пока один пиар с мозголомными хеловордами.

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

Следуя «логике разработчиков языка» следует ввести ряд новых анальных ограничений:

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

Но мне кажется, что следуешь ты своей собственной логике.

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

А в ранних версиях было:

The pAppData pointer is unused by the SQLite core. The pointer is available to store auxiliary information that a VFS information might want to carry around.

Почти то же самое, что я сказал (если заменить второе «information» на «implementation», будет точно то же самое). С чем ты вообще споришь?

Потому ты откровенно облажался со своим «нетривиальную VFS нельзя сделать без pAppData»

Естественно, я говорил не о sqlite core.

Но как всегда будешь юлить и говорить «ой, все».

Ой, да засчитай уже слив. Мне пофиг, а ты сможешь гордиться воображаемой победой.

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

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

Валяюсь. Ну спасибо, хоть что-то можно. Тут Александреску точно просек: любой код на расте - это битва за memory safety. То есть еще более жесткий культ компилятора, чем у предшественников.

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

в приведённом коде злоупотребления не вижу.

Ты считаешь, что замечательный мнемонический идентификатор tmp, который в разных частях функции из 11 строк ссылается на 3 разных значения (двух разных типов, насколько я могу судить) - это нормально? Ну окей.

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

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

Я думаю, здесь будет работать прагматика. Если язык вдруг станет практически востребованным в таком окружении, где нужны макросы и REPL, то даже они появятся. А нет, то и печали особой нет.

Насчет востребованности. Сейчас всякая бигдата прёт, и её, по иннерции всё еще на Java пишут, потому что а на чем же еще? Ну и вроде бы ничего, но большие кучи убийственно медленны на ссылочно-структурированных данных, поэтому бигдата бежит из кучи в offheap. Но у Java нет средств обобщенного программирования для работы с данными вне кучи, как нет их и у чемпионов отрасли Haskell и OCaml. А без обобщенного программирования в бигдате сейчас совсем тоскливо. С++ спасает с его возможностью делать обобщенные раскладки данных через шаблонный Value. Rust тут тоже теоретически, но пока не практически.

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

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

Ужасненько.

Ты, наверное, забыл с каким языком дело имеешь. Им детей хипстеров пугают. Для С++ очень даже всё стройно и структурировано. Просто подход непривычный. Унификация type-level и value-level метапрограммирования с совместным использованием обоих. Раньше такое было невозможно.

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

Ты считаешь, что замечательный мнемонический идентификатор tmp

Идентификаторы типа s мне тоже не особо нравятся. И если бы там вместо tmp было что-то типа a/b/c или val1/val2/val3 - было бы лучше? Возможно, если как следует вникнуть, то получится придумать более вменяемые названия.

Другое дело, что периодически попадается код типа:

const auto& value = get_value();
const auto& stringValue = value_to_string(value);
const auto& convertedValue = convert_value(value);
И вот тут ценности в том, что все переменные называются по своему вообще не вижу. Да, иногда восприятие кода можно улучшить, если давать правильные имена. Но чаще получается как в примере.

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

И почему это плохо?

Это как битва за урожай в совке. Вместо лучшей механизации выгоним всех жилы рвать на поля. Кому то наверно нравится управлять памятью, а не решать задачу, мало ли. Судя по примерам раст так и притягивает BDSMщиков.

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

где нужны макросы и REPL, то даже они появятся.

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

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

Не уверен.

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

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

Мне вообще-то нравится огрызок C++11, который я сейчас использую. Но Hana...

std::string r = switch_(a)(
  case_<int>([](auto i) { return "int: "s + std::to_string(i); }),
  case_<char>([](auto c) { return "char: "s + std::string{c}; }),
  default_([] { return "unknown"s; })
);

Это аналог match из Rust & K, насколько я понимаю. Да блин, Mach7 в использовании лучше выглядит.

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

Это как битва за урожай в совке. Вместо лучшей механизации выгоним всех жилы рвать на поля.

О, да ты еще и по совку специалист.

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

И если бы там вместо tmp было что-то типа a/b/c или val1/val2/val3 - было бы лучше?

Я считаю, что было бы лучше, если бы язык не давал возможности шифровать код. И да, tmp, pos1, pos2 было бы лучше.

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

unsafe, кстати, запилили после смены ниши для Rust, пока это был язык для сети его там в помине не было.

Вот, заморочился и поискал: unsafe добавился Oct 12, 2011. То есть до версии языка 0.1, которая вышла 2012-01-20. Уже тогда ниша поменялась значит?..

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

Ты не киборг часом? :-)

А у тебя не синдром рассеянного внимания?

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

необходимость в макросах давно есть

Все заняты более важными функциями, как говорят. Ну и комитет сам, как мне кажется, на расслабоне работает. Язык проектируется «между делом».

Не уверен.

Ну ладно. Сначала попытается, потом всё равно пошлет :)

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

Я считаю, что было бы лучше, если бы язык не давал возможности шифровать код.

Когда-то и я так думал.

Кстати, вывод типов тебя не напрягает? А то ведь есть и противники auto - ведь так тоже код «шифруется».

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

Это аналог match из Rust & K, насколько я понимаю. Да блин, Mach7 в использовании лучше выглядит.

Это с непривычки, я думаю. Я сам к Hana больше года присматриваюсь и только сейчас решил, что «таки да». Во-первых, допилили. Во-вторых, лучше вряд ли сделаешь так, чтобы всё в одном месте было, а не размазано по библиотекам типа Mach7.

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

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

Обычно статьи в педивикии пишут по информации с сайта проекта с некоторым отставанием по времени.

Первое упоминание о Раст, как о «системном языке» появляется в 2012году, что соответствует дате появления unsafe осенью 2011.

Такие дела.

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

Кстати, вывод типов тебя не напрягает?

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

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

Первое упоминание о Раст, как о «системном языке» появляется в 2012году

Не первое упоминание, а первое упоминание, которое ты смог найти. Вот интервью Грейдона, в котором он описывает историю: http://www.infoq.com/news/2012/08/Interview-Rust

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

Ты понимаешь, что упоминание на гитхабе != упоминанию в прессе?

И да, в том самом интервью написано:

Mozilla took an interest and set up a team to work on this language as a component of longer-term project to rebuild their browser stack around safer, more concurrent, easier technologies than C++. That larger project is called «servo». Mozilla is funding Rust development because of that.

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

Было это 2010 году, и только через джва года, ДЖВА, КАРЛ.

Появляется Rust, как системный язык! А с 2009 года Go уже существовал, как продукт выпускаемый Google, причем, в статье на педивикии написано:

Go originated as an experiment by Robert Griesemer, Rob Pike and Ken Thompson at Google, to design a new systems programming language,...

То есть изначально Go был системным, но потом ...

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

Да и работа будет происходить в IDE - думаю, она покажет выведенный тип.

Даёшь возможность хейтерам напомнить, что ИДЕ для раста особо и нет. Впрочем, даже в плюсовом мне это не всегда помогает (по крайней мере, в QtCreator).

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

Ты понимаешь, что упоминание на гитхабе != упоминанию в прессе?

Я понимаю, что язык был задуман как системный с самого начала (2006 год). По-моему, из интервью это очевидно.

и только через джва года, ДЖВА, КАРЛ.

Появляется Rust, как системный язык!

Не-а. Это всего лишь самое раннее упоминание, которое ты нашел.

То есть изначально Go был системным, но потом ...

Да пофиг на Go.

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

Даёшь возможность хейтерам напомнить, что ИДЕ для раста особо и нет

не надо

на виме надо писать

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

Я понимаю, что язык был задуман как системный с самого начала (2006 год). По-моему, из интервью это очевидно.

В интервью этого нет, само интервью дано в 2012 году, когда Rust уже позиционировали, как системный, именно по этому он говорит в настоящем времени о Ц.А.

Да пофиг на Go.

Ну и зря. Изменения таргетирования Rust и Go связаны c корпоративной стратегией «Корпорации добра»: дивизионы (и\или прокси-дивизионы) не должны конкурировать друг с другом.

Громоптицу уже практически закопали, перекинув разрабов на тот же Rust (зачем пользователю иметь возможность использовать любые почтовые сервисы через «толстый клиент», если можно использовать сервисы гугла через браузер).

В долгосрочной перспективе Google нужно подсадить всех, буквально, на свои продукты и сервисы, а значит и закопать Фурифокс.

Если Rust до не «взлетит» до закапывания фурифокса, его закопают вместе с ним и Мозиллой.

Именно поэтому Rust-евангелисты тралят на форумах Си-дерастов и Кресто-геев, а еще пишут в твиторах #rust #nogc #memorysafety.

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

разнежились ИДЕ теперь подавайте.

Щас у меня все на машинном языке писать будете. Нолики и единицы вам снится будут.

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

Не-а. Это всего лишь самое раннее упоминание, которое ты нашел.

Это самое раннее упоминание в ишью-трекере Rust, то есть из среды разработчиков языка (инсайд тащемта).

И это упоминание сделано незадолго (меньше месяца) до интервью, про то, как работает «свободная пресса», думаю все очевидно...

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

Нужно больше неадеквата

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

anonymous
()
Ответ на: Нужно больше неадеквата от anonymous

О, отличная идея, напишу ка я письмо MS, на линукс они вряд ли буду покушаться (Ц.А. их HyperV же), но FreeRTOS может и захотят подвинуть XDXDXD

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

Почти то же самое, что я сказал (если заменить второе «information» на «implementation», будет точно то же самое). С чем ты вообще споришь?

Ты не умеешь читать? Я специально это процитировал, т.к. это уже неактуальное описание, которое удалили из документации.

Естественно, я говорил не о sqlite core.

struct my_vfs {
    sqlite3_vfs _;
    ...;
};

И расширяй как хочешь.

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

само интервью дано в 2012 году, когда Rust уже позиционировали, как системный, именно по этому он говорит в настоящем времени о Ц.А.

Ты интервью прочитай, а не на его дату посмотри.

Громоптицу уже практически закопали, перекинув разрабов на тот же Rust

А пару страниц назад анонимус сказал, что Mozilla не занимается Thunderbird с 2012 года. Кстати, не подскажешь фамилии перекинутых?

инсайд тащемта

Фейспалм например.

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

Я специально это процитировал, т.к. это уже неактуальное описание, которое удалили из документации.

Ты процитировал описание, которое было актуально много лет. А теперь sqlite сменил шило на мыло - void * на «типа наследование».

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

Ты интервью прочитай, а не на его дату посмотри.

Я читал.

А пару страниц назад анонимус сказал, что Mozilla не занимается Thunderbird с 2012 года.

Совпадение? Не думаю! Киселев.жпг

Кстати, не подскажешь фамилии перекинутых?

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

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

разработчики Rust решили сделать язык для работы в сети
Проблема в том, что язычок делали не для сишников, гыгы.

Я скажу, что прикладухи на нем пока писать тоже невозможно. Я попробовал написать на Rust что-нибудь сложнее HelloWorld - и отошел в сторону, посмотрю пока на это кино издалека.

void_ptr ★★★★
()
Ответ на: комментарий от shkolnick-kun

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

We need to go deeper. В год выпуска бутстрап-компилятора Rust происходит извержение Эйяфьядлайёкюдля, а в год выхода его альфы - конец света по майя. ЭТО НЕСПРОСТА!!!111

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

Ну какбы есть события, которые можно связать, а есть события, которые нельзя связать.

В моем списке из трех событий есть связь по ресурсам Мозиллы, например.

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