LINUX.ORG.RU

Rust 0.7

 ,


1

5

3 июля было объявлено о выходе очередной версии Rust — языка программирования, разрабатываемого Mozilla. Новая версия включает в себя около 2000 изменений и исправлений ошибок.

Основные изменения:

  • Изменения в языке:
    • квалификатор видимости больше неприменим к 'impl', только к методам;
    • переписан borrow checker, исправлено множество ошибок;
    • параметр 'self' больше не равен неявно `&'self self` и для него может быть явно определено время жизни;
    • перегружаемые составные операторы ('+=' и пр.) были временно удалены из-за ошибок;
    • циклы 'for' теперь требуют 'for'-итераторов, чтобы вернуть 'bool';
    • 'Durable' trait был заменен `'static`;
    • структуры с атрибутом '#[packed]' выравниваются по байтовой границе;
    • параметры типов, привязываемые посредством 'Copy', должны быть явно скопированы с ключевым словом 'copy';
    • 'Option<~T>' сейчас представляется как nullable-указатель;
    • '@mut' делает динамические borrow checks корректно;
    • функция main теперь ищется только на верхнем уровне. Атрибут '#[main]' валиден в любом месте;
    • поля структур больше не могут быть мутабельными, вместо этого используется унаследованная мутабельность;
    • удалены атрибуты '#[no_send]', '#[no_freeze]';
    • неограниченная рекурсия прерывается при достижении лимита, определенного переменной окружения 'RUST_MAX_STACK' (1gb по умолчанию);
    • удален режим 'vecs_implicitly_copyable', векторы никогда не копируются неявно;
    • атрибут '#[static_assert]' выдает assert'ы о статических булевых переменных во время компиляции;
    • 'argument modes' больше не существует;
    • редко используемая инструкция `use mod` удалена.
  • Расширения синтаксиса:
    • 'fail!' и 'assert!' принимают списки аргументов '~str', '&'static str' или 'fmt!';
    • `Encodable`, `Decodable`, `Ord`, `TotalOrd`, `TotalEq`, `DeepClone`, `Rand`, `Zero` и `ToStr` могут быть автоматически выведены посредством директивы `#[deriving(...)]`;
    • макрос `bytes!` возвращает вектор байтов для string, u8, char и численных литералов.
  • Библиотеки:
    • `core` crate был переименован в `std`;
    • `std` crate был переименован в `extra`;
    • расширена и улучшена документация;
    • добавлен модуль std: `iterator` для внешних итераторов (external iterator objects);
    • std: многие итераторы, написанные в старом стиле, были заменены на реализацию 'Iterator';
    • std: многие внутренние векторы и строковые итераторы (включая 'any', 'all и пр.) удалены;
    • std: prelude теперь не реэкспортирует любые модули, только типы и трейты;
    • std: дополнения в Prelude: `print`, `println`, `FromStr`, `ApproxEq`, `Equiv`, `Iterator`, `IteratorUtil`.

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

Как все замечательно поломано! И опять же, фичи на фичах фичами погоняют.

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

Как все замечательно поломано

пусть тренируются, пока язык окончательно не релизнулся)

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

Это да, но на нем, емнип, уже что-то более-менее серьезное запилить пытались же :)

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

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

ymn ★★★★★ ()

Так и не получилось ни разу за 2 года собрать Servo, чтобы он отрендерил hello_world.html без цветной каши и сегфолтов.

shahid ★★★★★ ()

«Crate» надо перевести как «пакет», имхо.

unsigned ★★★ ()

Как обычно у программистов - бесконечная разработка

zyoung ()

Теоретически новость не нужна(т.к. минорщина), но практически нужна.

Bad_ptr ★★★★ ()

+=
были временно удалены из-за ошибок

Либо он у них делал что-то мегаархиособенное, либо их насиляторство достойно песни.

MiniRoboDancer ★☆ ()

Чем он лучше проверенного временем Си?

chromium ()

Надеюсь, версия 1.0 будет последней, в которой будут так радикально менять синтаксис. А то будет еще хуже, чем с питоном. Через пару годков на лоре: «А раст 1.5 уже мертв? Я хочу писать сайтики на раст 2, переписали ли все библиотеки?» (причем будет раст2 != раст 2.0).

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

Хотели уйти от убогости крестов, а вышло еще хуже.

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

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

cdshines ★★★★ ()

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

cdshines ★★★★ ()

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

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

chromium> Чем он лучше проверенного временем Си?

postman_> Хотели уйти от убогости крестов, а вышло еще хуже.

ЛОР такой ЛОР.

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

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

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

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

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

Особенно понравилось:

`core` crate был переименован в `std`;
`std` crate был переименован в `extra`;

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

Да там целых чертовых четыре сущности для управления памятью было

«Сущности», ну афигеть. Назови их.

tailgunner ★★★★★ ()

borrow checker, `&'self self`, циклы 'for', которые теперь требуют 'for'-итераторов чтобы вернуть 'bool', 'Durable' traitы, 'Option<~T>', '@mut', атрибуты и режимы — это всё, конечно, очень круто. Но действительно ли оно всё нужно, чтобы писать код?

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

Но действительно ли оно всё нужно, чтобы писать код?

Конечно же нет // К.О.

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

Managed box, owned box, borrowed pointer; четвертого найти что-то не могу, может, уже выкинули.

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

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

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

Managed box, owned box, borrowed pointer; четвертого найти что-то не могу

Ну вспомнишь четвертое - скажи, а то мне самому интересно.

tailgunner ★★★★★ ()

отлично, новый еще более сложный C++ уже очень скоро :)

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

Хотели уйти от убогости крестов с руби головного мозга, а вышло еще хуже.

Починил.

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

Т.е. 3 - это нормально, да? Меня даже ссылки в С++ повергли в шок, а тут такое.

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

Т.е. 3 - это нормально, да?

Во-первых, реально сущностей там две (~ и @); во-вторых, они в том или ином виде присуствуют во многих современных языках (Java, Си++ D); в-третьих, http://pcwalton.github.io/blog/2013/06/02/removing-garbage-collection-from-th...

И в-четвертых - пусть даже сущностей 3, что не так?

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

Интересный ЯП, но пока это вещь в себе... Если сабж станет популярным, возможно от него и будет реальная польза.

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

А что не так с ссылками в С++? Очень органичный элемент языка.

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

По сравнению с С.

----

yoghurt

А нельзя было обойтись указателями?

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

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

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

слишком усложнено.

По сравнению с чем?

По сравнению с С.

Си был примитивен даже для своего времени, а по сегодняшним меркам он просто убог (для протокола: я системный программист и Си - мой основной инструмент).

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

Плюс к этому ссылка невозможно *случайно* создать непроинициализированную ссылку

Бугага.

Foo *p = NULL;

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

Разыменовал нулевой указатель и радуется. Это не проблема ссылки, бугага на твое бугага!

yoghurt ★★★★★ ()

Пусть ломают, главное что бы к 1.0* пришли к чему то. Штука то интересна.. Авось толк будет

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

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

Нет, конечно. Это проблема тех, кто считает, что:

yoghurt> невозможно *случайно* создать непроинициализированную ссылку

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

Ну вообще я говорил об ошибке компиляции в этом простом случае:

int main (int argc, char *argv[])
{
    int &foo;
}

А любители стрелять себе в ноги всегда были, есть, и будут.

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

Ну вообще я говорил об ошибке компиляции в этом простом случае:

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

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

Вероятно, но это не повод городить такой ужас.

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

А что не так с ссылками в С++? Очень органичный элемент языка.

Как мне сдедать опциональный параметр в виде ссылки? Ну так чтобы иметь возможность передать null если он не задействован? К примеру, опциональный std::string?

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

это не повод городить такой ужас.

Ну так ты разъяснишь, что ужасного? Да, это сложнее Си. Ужас именно в этом? Развитие языков программирования должно остановиться именно на Си?

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

А что разъяснять? Мне не нравится, и все тут. Язык должен располагать к использованию, а тут сразу отторжение.

Если они позиционируют Rust как язык для системного программирования, зачем, зачем столько разных готовых типов управления памятью?

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

Как мне сдедать опциональный параметр в виде ссылки? Ну так чтобы иметь возможность передать null если он не задействован?

Так null или всё же в виде ссылки? :)

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

..., const std::string &optarg = std::string("")) {

И проверка на пустую строку в коде самой ф-ии. Никаких CL-ных supplied-p, да.

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