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

читать готовый код, вроде такого

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

Кстати, аннотации лайфтаймов кажутся лишними.

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

Вот, кстати, практический пример полиморфизма в С
void *pAppData;

Окей.

А это вообще не имеет отношения к теме.

Это имеет прямое отношение к теме полиморфизма в Си. Это, можно сказать, суть сишного полиморфизма.

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

Теперь еще и гуманитарий в треде.

Комплексы? Русский язык надо было в школе учить.

Надевают на себя, а на всех одевают.

рукалицо.ткст

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

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

Этот кодер написал код на Rust, а ты - нет.

Кстати, аннотации лайфтаймов кажутся лишними.

Кажутся, но не лишние.

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

Это имеет прямое отношение к теме полиморфизма в Си. Это, можно сказать, суть сишного полиморфизма.

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

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

раст не даст тебе собрать кривую программу, в отличие от компилятора С++.
Ага, не даст и все.
https://github.com/servo/servo/issues/6087

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

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

Этот кодер написал код на Rust, а ты - нет.

Это так. Но, с другой стороны, он написал плохой код, а я - нет.

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

Русский язык надо было в школе учить.

Розенталя переел? Одеть/надеть взаимозаменяемы в разговорном языке. Только школьная зубрилка может додуматься поправлять такие обороты. Еще ссылку на букварь приведи, блджад.

//другой хейтер хруста

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

Шапочки НАдевают.

Теперь еще и гуманитарий в треде. Надевают на себя, а на всех одевают.

Тебе должно быть стыдно.

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

void *pAppData;

Окей.

А это вообще не имеет отношения к теме.

Это имеет прямое отношение к теме полиморфизма в Си. Это, можно сказать, суть сишного полиморфизма.

Чушь.

Купи себе селедку и дури ей голову. Эта фигня с void * - она везде, где Си. Потому что по-другому просто невозможно.

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

Тебе должно быть стыдно.

Набежало гуманитариев, Пошли вон, нехрен тред засорять.

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

//другой хейтер хруста

Да пофиг, один или другой - вы все малограмотные.

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

Купи себе селедку и дури ей голову. Эта фигня с void * - она везде, где Си. Потому что по-другому просто невозможно.

Еще раз, это не имеет отношения к теме. Забудь про это поле. Ты можешь описать sqlite3_vfs без него? Да. Ты можешь создать экземпляр sqlite3_vfs и инициализировать его нужными функциями-методами? Да. Ты можешь передать его туда, где ждут sqlite3_vfs? Да. ты можешь его использовать без каста к void*? Да. Причем тут вообще void*?

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

Он не переопределяет переменную. Там `tmp`, `tmp` и `tmp` — разные переменные.

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

Забудь про это поле. Ты можешь описать sqlite3_vfs без него? Да.

...если эта VFS не будет ничего делать. Как только ей понадобится хранить специфические данные между вызовами - всё. Именно для этого и нужно это поле - автор sqlite это понимает.

Ты можешь [...] ?
Ты можешь [...] ?
Ты можешь [...] ?

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

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

Эта фигня с void * - она везде, где Си

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

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

почему он разрешает переопределить переменную?

В Rust область видимости переменной - от места ее определения до конца блока _или_ места определения другой переменной с таким именем. Самое странное design decision из всех решений в Rust, ИМХО.

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

Вполне себе полиморфизм без даже минимального контроля со стороны компилятора

/fixed

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

/fixed

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

Самое странное design decision из всех решений в Rust, ИМХО.

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

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

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

Не припомню, чтобы встречал такое в Окамле. Корни решения понятны, но решение всё равно дурацкое.

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

...если эта VFS не будет ничего делать. Как только ей понадобится хранить специфические данные между вызовами - всё. Именно для этого и нужно это поле - автор sqlite это понимает.

И опять чушь, еще и приправленная фантазиями. Когда надо добавлять хранить специфические данные в том же SQLite используют наследование:

struct sqlite3_vtab_cursor {
  sqlite3_vtab *pVtab;      /* Virtual table of this cursor */
  /* Virtual table implementations will typically add additional fields */
};

А в данном случае это поле используется самим sqlite, чтоб хранить указатель на указатель на функцию. Причем так сложно только потому-что они собирают с -pedantic под C90.

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

Да зачем такие извраты? Если уж очень припекло, берем плюсовые шаблоны и юзаем, вот и все. Будет сишка с дженериками. Хотя обычно это никому не надо. Фаны мощщщных язычков то ли не вкуривают в чем сила C/C++, то ли придуриваются.

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

нетривиальную VFS нельзя сделать без pAppData

Ты даже не знаешь для чего оно.

Ты врешь, потому что курсор можно!

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

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

А каким образом это параметрический полиморфизм в _Си_?

Ну, в Си шаблонов нет бай дизайн, смысл спора был в возможности реализовать замену плюсовых шаблонов.

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

У тылгунера просто сработал триггер на *void: ужас-ужас, канпелятор не проверяет тип, мы все умрем.

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

Results for JoinGuard: No results :(

Ох уж эти пруфстеры.

То есть пофиксили методом выпиливания???

Круто, че! Представляю, как из Linux выпиливают поддержку ext4, из за косяков в ней...

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

То есть пофиксили методом выпиливания???

Ну а что ещё делают с некорректным API?

Представляю, как из Linux выпиливают поддержку ext4

Ну, если бы ext4 by design портила данные, вместо того, чтобы просто работать...

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

Ну, если бы ext4 by design портила данные, вместо того, чтобы просто работать

Так она портила. Более того разрабы хотели чисто ради ext4 добавить по крайней мере один системный вызов, на что Линус послал их в ДЭП.

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

Но если в Firefox заменят Gecko на Servo

Раньше соберется какая-нибудь группа фанов и запилят свой браузер чисто на расте, с серво в основе. Давно пора.

ЗЫ: удивительно, что майкросойт с гуглом до сих пор не запилили свой язык уровня раста. Пользовательских язычков (c#, go) навыпускали, а в ключевых проектах (chrome, edge, office) продолжают жрать кактус++. Жду вариацию D/Rust со вкусом гугла

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

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

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

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

Микрософт делает (делала?) M#.

anonymous
()

Для чего нужна, она

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

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

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

ЗЫ

Не дождешься.

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

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

Корпоративное управление в действии XDXDXD

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

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

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

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

anonymous
()

Насчет нужности Rust

Разработчики решили сделать системный (достаточно низкоуровневый) язык с поддержкой линейных типов для контроля семантикой владения ресурсами на уровне компилятора. Это у них неплохо получилось. Проблема в том, что язык сейчас мало что значит. Библиотеки — это всё. А с этим плохо.

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

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

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

смысл спора был в возможности реализовать замену плюсовых шаблонов

Смысл еще в том, чтобы этим можно было пользоваться. Я JFF писал аналог std::vector на си - можно, ага, только пользоваться таким будут только мазохисты.

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

grammar nazi?

Одеть/надеть взаимозаменяемы в разговорном языке.

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

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

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

Го то стал, а вот хруст ничем пока не стал. Системным - это бред, никогда этого не будет. Вообще ниши не просматривается. Кстати, Александреску очень точно охарактеризовал это поделие по твоей ссылке выше. Точнее и лаконичнее я не видел, зачет дядьке.

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