LINUX.ORG.RU

Альфа-версия Rust 1.0

 


2

6

9 января тихо и незаметно вышла альфа-версия Rust 1.0. Этот релиз является этапным в том смысле, что набор возможностей языка зафиксирован и в версиях 1.x значительных несовместимых изменений больше не будет (см. ниже); то же относится и к стандартной библиотеке. Гарантии стабильности означают, что Rust уже можно изучать, не опасаясь скорого устаревания полученных знаний из-за эволюции языка.

Тем не менее, апгрейд в линии от альфа-версии до финальной версии может вызвать мелкие несовместимости (Sync/Send changes, переименование uint/int в usize/isize), но все проблемы планируется решить до выпуска 1.0.

Основные изменения со времени предыдущего релиза:

  • улучшенная поддержка массивов и подобных им контейнеров в языке: DST
  • унификация трейтов и замыканий в виде unboxed closures: теперь замыкания - это просто объекты, реализующие определенные трейты

Полный список изменений с подробным их описанием по ссылке:

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

★★★★★

Проверено: JB ()
Последнее исправление: JB (всего исправлений: 1)

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

ошибки в Rust игнорируются только сознательно.

Да, но в большинстве случаев нам ошибки игнорировать не надо. И в этом случае мы получаем не слишком удобный инструмент.

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

мы получаем не слишком удобный инструмент

Сравниваю с проверками кодов возврата в Си - очень удобно. С исключениями в Python - нормально. «Не слишком удобный» по сравнению с исключениями Си++? Ну-ну. Учитывая мегатонны мусора о том, как в Си++ писать «exception-safe code».

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

С исключениями в Python - нормально.

Чего же тут нормального-то?

«Не слишком удобный» по сравнению с исключениями Си++?

Даже с ним.

Учитывая мегатонны мусора о том, как в Си++ писать «exception-safe code».

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

И мы вполне можем в С++ сделать так же, как в Rust, никаких проблем...

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

В стандартной библиотеке Rust иерархии нет и я не припомню планов ее добавить

Зато есть трейты Error и FromError, позволяющие упростить обработку исключений (фактически, с ними можно просто везде использовать try!()).

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

«Не слишком удобный» по сравнению с исключениями Си++?

Даже с ним.

О, это уже интересно. «Даже» - а что, есть другая модель исключений, приемлемая для низкоуровневого языка? Я весь внимание.

И мы вполне можем в С++ сделать так же, как в Rust, никаких проблем...

Как «так же» - с ADT? Не можете.

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

Да, я знаю и даже дал ссылку на FromError. Но анон хочет как в Си++.

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

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

Нет. Просто превзойти C++ в вопросе отвратительного кода довольно тяжело. Rust справился.

Как «так же» - с ADT? Не можете.

ADT не особо нужен тут. Если я правильно понимаю. Можно более развернутый пример кода с обработкой ошибок?

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

Просто превзойти C++ в вопросе отвратительного кода довольно тяжело. Rust справился.

Troll harder.

Можно более развернутый пример кода с обработкой ошибок?

Забавно. То есть ты можешь сделать, как в Rust, но еще не знаешь, как оно в Rust. Я дал тебе ссылку на статью про обработку ошибок в Rust, вот еще от того же автора. Что надо развернуть?

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

На фоне механизма исключений это все напоминает костыли, которые вполне реализуемы на крестах.

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

Есть такое неудобство. Опять же, это из-за отсутствия полиморфизма высших порядков в языке.

Ладно... Какой-нибудь простенький проект сделаю на пробу, там посмотрим. Но по-моему отказ от исключений в таком виде - это шаг назад.

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

Ясно понятно.

Ну а что тут за проблемы? optional/result сделать несложно. С алгебраическими типами не все гладко, да. В любом случае, библиотечной реализации вполне хватает. Но я до сих пор не понял, в чем преимущество такой системы над исключениями.

anonymous
()

Rust уже можно изучать

Ну слав тебе хоспади, дождалися!

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

Я не умею раст, но у меня есть вопрос по мотивам вашего срача.

try-catch-finally обычно используют еще и для того, чтоб всегда закрыть какое-то падучее гогно, например (абстрактный псевдокод):

f = {
  try {
    file = "/path/to/file" open
    1 / 0 // с файлом все ок, но все поломалось
    return file readAll
  } catch {
    logger log e
  } finally {
    file close
  }
}

// где-то там
f() // файл по любому закрылся

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

cast ozkriff also

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

А, дайте угадаю, RAII?

Тип того: http://is.gd/DjTycY. При раскрутке все drop`ы должны вызваться.

thread '<main>' panicked at 'NOOOO', <anon>:14
cleanup
cleanup
playpen: application terminated with error code 101
Program ended.

А вообще я, поскольку пишу игрульки, а не АСУ для атомных реакторов, по возможности придерживаюсь: http://bitsquid.blogspot.ru/2012/01/sensible-error-handling-part-1.html - или возвращаю ошибку в явном виде через Option\Result или грохаю все приложение к черту без всяких чисток с более-менее адекватным комментарием. Так что лично мне и раскрутка стека не сильно-то и нужна)

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

... только ещё мощнее за счёт проверки lifetime

А как это делает SBRM еще мощнее?

ozkriff
()
Последнее исправление: ozkriff (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.