LINUX.ORG.RU

Rust 1.25.0

 


3

9

Сегодня вышел Rust 1.25.0 (2018-03-29).

Rust это системный язык программирования, нацеленный на надёжность, скорость и параллельное выполнение.
Если вы имеете предыдущую версию Rust, установленную через rustup, для получения версии 1.25.0 достаточно ввести в терминале:

$ rustup update stable

Что нового в 1.25.0 stable

Синтаксис

Компилятор

Библиотека

Стабилизированные API

  • Location::column;
  • ptr::NonNull;

    Наиболее значимое событие — это std::ptr::NonNull<T>. Этот тип похож на *mut T, но является ненулевым (non-null) и ковариантным. Если вкратце, NonNull<T> гарантирует, что никогда не будет равен null, а это означает, что Option<NonNull<T>> имеет тот же размер, что и *mut T. Если вы создаете структуру данных с небезопасным кодом, NonNull<T> зачастую будет правильным выбором для вас.

    Следующие функции теперь могут быть использованы в константных выражениях, т.е. например, static MINUTE: Duration = Duration::from_secs(60);:

  • Duration::new;
  • Duration::from_secs;
  • Duration::from_millis;
  • Duration::from_micros;
  • Duration::from_nanos.

Cargo

Разное

Примечания по поводу совместимости

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

★★★★★

Проверено: jollheef ()
Последнее исправление: Deleted (всего исправлений: 3)

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

Ну мозильщики не просто так насовали unsafe я думаю. Хотя может это от того, что их задолбало бодаться с канпелятором, когда можно просто указателями фигачить (хотя в расте и в ансейф не очень то просто).

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

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

Очень узкий класс. Корректность алгоритма сортировки в этот класс не входит.

Так нужен вердикт или не нужен? :)

Зависит от того, какое утверждения ты придерживаешься в данный момент:

Crocodoom> такой же быстрый, как на языке без статических гарантий отсутствия UB

Crocodoom> Ну просадку по множителю в 10-15% ещё можно списать

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

Как никто, а толпа лоровских хеловордщиков?

anonymous
()

код на этом Расте выглядит как адок, что мешало сделать что-то вроде D?

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

Ада, мало того, что мертва, не обладает даже намеком на систему lifetime-ов.

Настолько мертва, что из альтернатив спарку только Frama-c. Но ада всяко приятнее сишки (ибо типы, параметрический полиморфизм вместо void, триплеты хоара, объекты, RAII), да и с доказательствами в ней намного проще, особенно начиная с Ada2012/Spark2014, где завезли hoare logic искаробочный. Вряд ли в ближайшее время аду что-нибудь заменит, разве что всякие Fstar с Kremlin дорастут.

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

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

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

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

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

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

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

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

Нахрена? Там тупой цикл по сплайсу с известной длиной, всё должен выкинуть оптимизатор. Если не выкинет, то это явно баг в оптимизаторе и его нужно просто зарепортить.

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

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

Ада, мало того, что мертва, не обладает даже намеком на систему lifetime-ов.

Настолько мертва, что из альтернатив спарку только Frama-c

Ада настолько мертва, что даже DoD стал делать ПО для F-35 на Си++.

Но ада всяко приятнее сишки (ибо типы, параметрический полиморфизм вместо void, триплеты хоара, объекты, RAII)

В Аде есть RAII? Но в любом случае, делать новый язык на базе Ады может только Тафт.

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

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

Задача автора - провести корректное сравнение перформанса своего кода с референсной имплементацией (кодом из servo). Построить график с двумя зависимостями, где по оси Y — затраченное время, по оси X — длина массива. Какие именно брать массивы - это тоже хороший вопрос. Начать можно со случайных.

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

Дальше возможны варианты. Лично меня устроит, если safe-qsort будет иметь ту же асимптотику, и просадку по константе не более 15%. Кого-то нет. Кому-то хватит просто правильной асимптотики - пожалуйста. Пока не была продемонстрирована дажа асимптотика.

Для чего всё это? Во-первых, убедиться, что safe-qsort вообще имеет право на жизнь (верная асимптотика). Во-вторых, если будет асимптотика, 100% найдутся желающие оптимизировать и максимально вылизать код, оставаясь в рамках safe, чтобы догнать unsafe. От этого будет польза всему сообществу. А может даже полетят пулл-реквесты в кодовую базу компилятора. Это правильно и продуктивно.

А я лишь хочу направить энтузиазм в правильное русло :)

Crocodoom ★★★★★
()

А чего про goвядину полная тишина? Где новости?! Эй, goпники! Не прячемся по подфорумам, набиваем число топиков по тегу, холиварим в чужих темах, спрашиваем, как написать hello world, теребим инфопространство, одним словом. У нас информационный век, надо постоянно быть на виду, не то все забудут!

Новости

Роб Пайк съел на завтрак яичницу с беконом и зелёным горошком: какое влияние это окажет на будущее языка? 
Провокационные фото были загружены в личный Instagram этим утром, после чего на Reddit и Hacker News развернулась широкая дискуссия...


Goфер объявил себя Сатоши Накамото. Шокирующие доказательтва проверяют журналисты издания Guardian.


Президент Трамп опубликовал твит состоящий из пяти строчек кода на Go. Будущее Америки в надёжных руках?


Пятнадцатилетний goфер из Монреаля, Канада в своей работе на arXiv доказал несуществование дженериков. Научный мир в панике.

должны быть на главной ЛОРа УЖЕ ВЧЕРА!

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

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

Неправда ваша. Основная цель Rust - это добавлять статические гарантии, не отставая по скорости от C++. И он уже успешно её придерживается в достаточно широком классе задач. Относится ли к ним qsort - может быть выяснится в этом топике, но я сомневаюсь.

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

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

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

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

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

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

В общем просмотрел я квиксорт из серво - там именно тот вариант, который у нас в универе демонстрировали, тот, который я описал. В квиксорте что главное? Главное, чтоб каждое разбиение было как можно ближе к половине. Видимо сканирование с двух сторон поместит индекс разбиения ближе к середине в случае последовательности одинаковых ключей. Правда, их вариант тоже говно, на отсортированном массиве в O(N^2) выродится, причём с глубиной рекурсии в N. Надо опорный элемент случайно выбирать, а не из середины и, тем более, не из края.

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

А может даже полетят пулл-реквесты в кодовую базу компилятора.

В std tim sort, если не ошибаюсь. И из неё уже все что можно выжали.

RazrFalcon ★★★★★
()

можно использовать `|` в начале ветки сопоставления.

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

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

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

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

Чтобы не вырождалось, нужно просто переходить на другую сортировку на глубине рекурсии в логарифм.

Не выйдет. В худшем для квиксорта случае, для опорного элемента выбирается наименьший или наибольший элемент, например первый или последний элемент в уже отсортированном слайсе. В этом случае разбиение завершается 2мя интервалами, 1 из которых пустой, а второй только на 1 элемент короче предыдущего. Вот есть у нас массив размером в миллион, логарифм двоичный около 20, ну пробежимся мы по этому миллиону 20 раз и перейдём на другую, заведомо худшую, сортировку имея неотсортированный слайс из 999980 элементов. Чем это нам поможет? Со случайным выбором опорного элемента может, конечно, не повезти. Но чтоб не повезло 20 раз подряд выбрать граничный элемент - это уже нереально. Разве что массив подготовлен злодеем, который знает наш генератор, но этого можно избежать, сидируя генератор одним хорошим случайным числом.

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

код на этом Расте выглядит как адок, что мешало сделать что-то вроде D?

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

Того, кто придумывал D, тоже жалили в жопу сегфолты? А Ada? Нет, чтобы использовать C или C++, выдумали целый ЯП якобы безопасный.

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

не, он вообще еще на бОльшем зоопарке.

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

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

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

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

Того, кто придумывал D, тоже жалили в жопу сегфолты?

Не только сегфолты. Вальтера Брайта вообще задолбал трах с C++.

А Ada?

Вообще-то язык Ada появился за несколько лет до того, как C++ вышел в мир. Ну и мотивацией для создания Ada была вовсе не борьба с сегфолтами (насколько я помню, в Ada были возможности получения утечек памяти, обращения по указателю после освобождения и пр. прелестей работы без GC, разве что там проверок в run-time было больше).

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

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

Про heartbleed напомнить?

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

Того, кто придумывал D, тоже жалили в жопу сегфолты?

Не только сегфолты. Вальтера Брайта вообще задолбал трах с C++.

Сам виноват, что захотел компилятор C++ делать.

А Ada?

Вообще-то язык Ada появился за несколько лет до того, как C++ вышел в мир.

Надо полагать, C++ вышел в мир в обнимку с сегфолтом, и до этого момента никто про сегфолты ничего не знал?

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

Сам виноват, что захотел компилятор C++ делать.

Тогда времена были другие. И выбор был либо делать компилятор C++, либо делать какое-то никому не нужное говно.

Надо полагать, C++ вышел в мир в обнимку с сегфолтом, и до этого момента никто про сегфолты ничего не знал?

Надо полагать, что Ada разрабатывалась вовсе не ради борьбы с сегфолтами. Как и C++ создавался не для того, чтобы сегфолты провоцировать.

Только раньше к сегфолтам относились нормально: ну обычная ошибка, ничем не хуже и не лучше какой-либо другой ошибки. Но за последние 20-25 лет в разработку пришло такое количество криворуких ламеров + размеры кодовых баз выросли настолько, что в совокупности эти два фактора создали потребность в языках, в которых сегфолт допустить сложнее. Апофеоз чего, в виде Rust-а, мы сейчас и наблюдаем.

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

Но за последние 20-25 лет в разработку пришло такое количество криворуких ламеров + размеры кодовых баз выросли настолько, что в совокупности эти два фактора создали потребность в языках, в которых сегфолт допустить сложнее.

Так и вижу, как криворукие ламеры стройными шеренгами идут в системную разработку^W^W веб-разработку, потому что в здравом уме ни один ламер не полезет байты перекладывать: скучно и ничего не получается. Поэтому сегфолты всё больше досаждают вполне пряморуким кодерам, хотя, возможно, по достижении какого-то определенного уровня постижения Дао сегфолты и становятся рядовой редкой ошибкой, вам виднее.

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

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

Поинт же был простой: на некорректный аргумент от ckotinko вы привели не менее некорректный аргумент с упоминанием языков D и Ada (полагаю, что вы просто не знаете причин, которые привели к появлению этих языков, языка Ada в особенности).

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

Чем это нам поможет?

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

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

Так и вижу, как криворукие ламеры стройными шеренгами идут в системную разработку

Это ты про фанбоев раста?

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

за последние 20-25 лет в разработку пришло такое количество криворуких ламеров + размеры кодовых баз выросли настолько

За последние 25 лет вырос и размер кодовой базы и общая сложность ПО. Кроме того куда более распространённым стал интернет, он проник чуть ли не во все сферы человеческой жизнедеятельности. В итоге возросшая сложность ПО увеличила вероятность уязвимостей, а проникший везде интернет увеличил их стоимость.

В итоге появление Rust'а это не апофеоз деградации индустрии, а закономерный исход.

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

Вы думаете, что написанное вами как-то противоречит тому, о чем написал я?

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

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

Вы в своем репертуаре. Спасибо, в дебилы не записываете сразу.

Поинт же был простой: на некорректный аргумент от ckotinko вы привели не менее некорректный аргумент с упоминанием языков D и Ada

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

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

сегфолты всё больше досаждают вполне пряморуким кодерам

Нет, ты просто не знаешь какие кадры писали еще недавно прикладуху на C++. Да и сейчас еще бывает пишут, хотя конечно микрософт хорошо их пропылесосил своим дотнетом. Но вот именно в системном ПО сегфолты это ахтунг, хотя там пишут вовсе на си (который совсем дно по мнению лоровских многозвездных искпердов).

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

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

Так что вы продолжаете нести похмельный бред.

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

Да-да безопасный

Furthermore, unsafe does not mean the code inside the block is necessarily dangerous or that it will definitely have memory safety problems: the intent is that you as the programmer will ensure the code inside an unsafe block will access memory in a valid way.

Программисту лучше занть как тут поступить. Вне unsafe можно не забивать себе голову проблемами с памятью. Это типичный unix-way, из под рута нужно действовать с умом.

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

сегфолты всё больше досаждают вполне пряморуким кодерам

Нет, ты просто не знаешь какие кадры писали еще недавно прикладуху на C++. Да и сейчас еще бывает пишут, хотя конечно микрософт хорошо их пропылесосил своим дотнетом. Но вот именно в системном ПО сегфолты это ахтунг, хотя там пишут вовсе на си (который совсем дно по мнению лоровских многозвездных искпердов).

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

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

UPD: def настоящий qsort = qsort такой же быстрый, как на языке без статических гарантий

Сортировка характеризуется сложностью. Для квиксорта примерно O(n log n). И нефик загонять про настоящие и ненастоящие елочные игрушки.

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

У меня фиксация на том, чтобы человек, пытающийся донести до меня какую-то мысль, дал бы себе труд оформить свою мысль в понятном виде.

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