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)

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

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

Я фантазировал о VFS, а ты показал курсор. Т.е. ничего ты не показал.

ты придрался к опциональному полю.

pAppData решает совсем другую задачу.

Окей, окей.

tailgunner ★★★★★
()
Ответ на: Насчет нужности Rust от anonymous

Если бы они просто сделали новый язык над С++ с поддержкой линейных/афинных типов и полной совместимостью...

Вот-вот, у крещённых сишников есть какая-то душевная дрянь. Высокомерные они. Некоторые до сих пор думают что «Чистый Си» это, то ли надмножесто, то ли подмножество языка Си++. Когда им говорят что Си это отдельный и независимый язык, они выпячивают глаза. И возмущаются когда им говорят, что Чистый Си не обязан быть совместим с Си++.

И никто большие библиотеки на Rust переписывать не будет.

А когда Си в конце 1960-х появился, готовые библиотеки были? Со временем язык постепенно сам обрастет коллекцией стандартный библиотек.

Если Сишник станет Растоманом ничег плохого в этом не вижу.

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

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

Microsoft пилит такой язык. Midori, вроде.

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

Ну, разработчики и пользователи CBLAS, например, пользуются...

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

Если Сишник станет Растоманом ничег плохого в этом не вижу.

Я только за. Я даже за то, чтобы те, кому так не нравится С++ (есть за что), перешли на Rust или Nim. Там будет хорошо, а эти самые С++ библиотеки им, скорее всего и не понадобятся никогда.

C++ для тех задач, где он имеет уникальные возможности. А это изначально мономорфные генерики, охватывающие value-семантику. Кстати, сейчас полявилась довольно неплохая библиотека Boost Hana для обобщенного программирования на С++. Не Haskell, но тоже очень даже ничего. Многим за глаза хватит.

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

C++ для тех задач, где он имеет уникальные возможности. А это изначально мономорфные генерики, охватывающие value-семантику.

Кстати, в Rust тоже мономорфные генерики и value-семантика.

tailgunner ★★★★★
()
Ответ на: Насчет нужности Rust от anonymous

Еще раз!

Повторяю:

  • разработчики Rust решили сделать язык для работы в сети, чтобы сделать движок для браузера, на замену C++; Ц.А. была крестомакаки.
  • Гугл делали Go как системный; и Ц.А. была - ситарды.
  • В результате корпоративных игр ниши для языков решили поменять местами.
  • В итоге крестухам нравится Rust, хотя в системном программировании их меньшинство; сишникам и не только нравится Go, и теперь они могут делать не только ядра ОС, но и навороченные сетевые приложения.

Угадайте, кто выигрывает в данной ситуации...

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

да, один.

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

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

Midori, вроде

Midori - это ось на M#. То и другое грозились открыть, но пока видимо пилят.

А M# - по описанию очень годная вещь. В сравнеии с Rust, там анонсировали какую-то продвинутую асинхронность (подозреваю что-то в духе хаскеля) и продвинутая обработка ошибок (контракты, редкие исключения).

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

Кстати, в Rust тоже мономорфные генерики и value-семантика.

Да, и еще typeclasses. Но пока что нет специализации реализаций. Её планируют, но когда обещают — неизвестно. Пока что Rust не конкурент в этом смыслсе для С++. К сожалению.

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

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

Моё мнение таково: если часть не стабильна, то и целое стабильно быть не может.

под стабильностью подразумевается стабильность API. раньше API libcore было нестабильно, но когда оно используется только для реализации libstd - на это всем пофиг. libstd предоставлял стабильный API с версии 1.0

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

А когда Си в конце 1960-х появился, готовые библиотеки были?

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

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

свой пакетный менеджер

А ничего, что «свой пакетный менеджер» есть чуть ли не у каждого первого нового языка и у половины старых?

свою безопасную ОС

А это о чём?

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

А в случае с Rust ты либо тупо пишешь unsafe код и забиваешь на безопасность, либо явно выбрал не тот язык.

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

Ну и как по мне, то что unsafe явно видно - это всё-таки преимущество.

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

Ну и как по мне, то что unsafe явно видно - это всё-таки преимущество.

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

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

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

В чём проблема Си#? Его ведь создал Майкрософт специально для семейки Windows. По идее Си-Шарфисты должны быть в шоколаде. Я не использую Виндоуз. незаню какие там замуты. Неужели кто-то отбивает аппетиты Майкрософтских поделий? Жабисты что-ли!

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

Ну да, в том числе и они, весь сириусбизнес на жабе же!

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

У сишарписта в жизни в 99% случаев одна дорога - клепать сайтики/сервисы на aspnet. Ява при всех недостатках начала раньше и расползлась пошире.

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

Я фантазировал о VFS, а ты показал курсор. Т.е. ничего ты не показал.

Я тебе показал по твоим фантазиям. А конкретно про VFS:

The pAppData field of the sqlite3_vfs VFS objects are initialized to be pointers to the correct finder-function for that VFS.

Это в коде. А в ранних версиях было:

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. 

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

Кроме того, в том же sqlite3_vfs уже показано «наследование» - через iVersion и добавление новых полей.

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

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

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

Забавно, когда я только-только услышал о расте (изначально, кстати, язык воспринял достаточно прохладно), то эта штука (возможность «переопределять») показалась очень дурацкой. Мол будет ошибки провоцировать и нафиг она вообще нужна - можно ведь и новое имя придумать. Но с тех пор мнение несколько пересмотрел, опять же поинтересовался опытом других языков. И теперь оно мне кажется вполне удобным. И в приведённом коде злоупотребления не вижу.

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

Такое иногда встречается в функциональных языках (например в эрланге или окамле).

Вроде, в скале и немерле такое тоже есть? Не такая и редкая штука, в общем.

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

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

struct MutDnaSeqs<'a> {
    s: &'a mut [u8]
}

impl<'a> MutDnaSeqs<'a> {
    fn new(s: &mut [u8]) -> MutDnaSeqs {
	MutDnaSeqs { s: s }
    }
}

impl<'a> Iterator for MutDnaSeqs<'a> {
    type Item = &'a mut [u8];
    
    fn next(&mut self) -> Option<Self::Item> {
	let s = std::mem::replace(&mut self.s, &mut []);
	if let Some(i) = s.iter().position(|x| *x == b'\n').map(|i| i + 1) {
	    let j = s[i..].iter().position(|x| *x == b'>').unwrap_or(s.len() - i);
	    let (seq, tmp) = s[i..].split_at_mut(j);
	    self.s = tmp;
	    Some(seq)
	} else {
	    None
	}
    }
}
anonymous
()
Ответ на: комментарий от anonymous

По идее Си-Шарфисты должны быть в шоколаде.

Они в шоколаде, но только в узкой нише прикладного вин-онли софта. Учитывая закат эпохи десктопов это кисло. На мобилках и серверах полный провал. МС даже открыла сорцы, а все равно никому не нужно. Вдумайся только, дотнет - отличная зрелая платформа с кучей батареек и поддержкой мегакорпы, а летает низенько-низенько. Что уж ждать от наколенных поделок без библиотек, зато с марсианским синтаксисом (в случае раста и семантикой).

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

Примечательно, что ЛОР не смог распарсить и упрошенную версию Бугага!

Это не упрощённая версия, просто не такая вырвиглазная. Всё дело в том, что для указания времён жизни используется «'».

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

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

Дык, много чего они на шарпе переписывают понемногу. Ту же их вижуал студию.

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

Майкрософтовская ОС на сишарпе, кстати, не взлетела...

Что значит «не взлетела»? Её что вообще «применять» пытались? Это же чисто исследовательский проект был?

DarkEld3r ★★★★★
()
Ответ на: Для чего нужна, она от anonymous

Для чего создавался Rust. Наверно для мобильной операционки Firefox OS

То есть ты делаешь предположение и строишь на этом выводы? Или есть какая-то инфа про раст и фаерфокс ОС?

DarkEld3r ★★★★★
()
Ответ на: Насчет нужности Rust от anonymous

Если бы они просто сделали новый язык над С++ с поддержкой линейных/афинных типов и полной совместимостью с последним на уровне объектной модели и средств обобщенного программирования

Интересно насколько это реально и насколько такой язык будет похож на С++. В том смысле, что не получим ли мы другую проблему - все недостатки плюсов будут торчать наружу плюс добавятся свои сложности. Раст хотя бы решает (пусть и радикально) проблему груза совместимости. И то про него говорят - зачем куда-то дёргаться, если с C++14/17/... «все проблемы решаться», а библиотеки/инструменты останутся. Против нового языка, как мне кажется, эти аргументы работали точно так же.

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

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

А что он сказал? У него довольно обтекаемые и осторожные суждения. Оно и понятно ведь D не то чтобы сильно взлетел.

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

Ну и Redox уже какбы есть...

В курсе. Но разве это мозилла пилит?

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

Ну нету в крестах заморочек с владением и «одалживанием» переменных.

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

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

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

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

Во вторых, пруфы есть? Когда, по твоему, произошла «смена ниши» и в чём это проявилось? Насколько я вижу, упоминание unsafe ещё в 0.4 встречается. То есть задолго до того как Gc<T> выпилили.

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

в случае раста и семантикой

А что не так с семантикой?

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

Он сказал про сильные и слабые стороны разных языков.

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

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

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

Наиболее выраженная «сильная сторона» раста, это пиар, а совсем не мощная система типов (которая кстати недостаточно мощна, ибо позволяет написать «безопасный код», с утечками памяти).

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

Разработка прекращена, исходники открыты, никто не пользуется...

Лол, а как ты это представлял? Открыли исходники и все (или ещё смешнее - все виндузятники) начинают этим пользоваться? Ещё раз - это исследовательский проект. Вон в теме уже ссылались на то, что что-то и в винду попало. Тоже такое слышал, но пруфы искать лень, так что утверждать не буду.

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

Э, Midori оказывается уже свернули. Главный архитектор теперь хвалит Go и Rust, и участвует в cpp core guidelines.

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

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

Что я имел в виду... Я имел в виду что-то типа Скалы, но над С++. Этакий синтаксический сахар, чтобы как-то побороть многословность языка. В С++ ничего этого никогда не будет, так как им нужно тянуть обратную совместимость. Это и понятно. Так же хочется макросы, которые даже еще не обсуждаются. Полезная вещь для всякого метапрограммирования. Ну и предел мечтаний — REPL. Но это уже после Сингулярности, если только.

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

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

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

Во вторых, пруфы есть? Когда, по твоему, произошла «смена ниши» и в чём это проявилось? Насколько я вижу, упоминание unsafe ещё в 0.4 встречается. То есть задолго до того как Gc<T> выпилили.

Ну прямых конечно нет, но...

At first I was like...

but then I...

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

Разработчики раста как раз сделали то чего не стоило делать

Время покажет.

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

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

Наиболее выраженная «сильная сторона» раста, это пиар

Ну нет. О расте не так мало говорили/говорят и это действительно очень важно для нового языка. И это здорово и удивительно, учитывая явно ограниченные средства у разработчиков. Конечно, хз как объективно померить, но о Go говорят, по моим ощущениям, куда больше, что в общем-то закономерно.

которая кстати недостаточно мощна, ибо позволяет написать «безопасный код», с утечками памяти).

И есть пример большей мощности решающей и проблему утечек? Иначе это аргумент ни о чём.

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

Аналогичная история с английской версией статьи.

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