LINUX.ORG.RU

Вышел Rust 1.3

 ,


2

7

17 сентября вышел очередной стабильный релиз Rust 1.3 — языка программирования общего назначения, разрабатываемого Mozilla совместно с сообществом. Данный релиз в целом сохраняет обратную совместимость с Rust 1.0, вышедшим в мае этого года.

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

  • В стандартную библиотеку добавлен модуль Duration, предоставляющий API для работы с промежутками времени.
  • Документация пополнилась книгой The Rustonomicon, посвященной низкоуровневому программированию на Rust.
  • Изменен механизм вывода lifetime по-умолчанию.
  • Дальнейшее повышение производительности стандартной библиотеки и компилятора.
  • Реализована предварительная поддержка Windows XP в компиляторе.

Одновременно была выпущена бета-версия Rust 1.4, в которой разработчики планируют реализовать полноценную поддержку MS Visual C++ как среды сборки, что позволит использовать Rust под Windows без инструментария GNU.

>>> Официальный сайт

>>> Примечания к выпуску

>>> Ссылка на скачивание

>>> Официальная документация

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



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

Я не знаю. Могу питон в пример привести 2 и 3.

Если бы 3.0 был по фичам как 3.5, то переход был бы моментален и безболезнен. Там очень много сложнопортируемых косяков вылезло, как например убрали префикс u у строк, порезали методы у bytes. По факту писать под две версии стало более-менее ненапряжно к 3.3. А это четыре блжад года!

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

И в расте можно. Для передачи, конечно, придётся преобразовывать, так то и в C++ иногда приходится голый указатель на контейнер брать. Но в твоём-то коде везде Vec и String будет.

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

А то я у нас в стране как-то тоже спецов в Go не особо часто встречаю.

В ДС норм расплодились.

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

Бгг, я техдир. Кому уж как не мне.

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

открыть Книгу или rustbyexample и выучить основы?

Ну вот увидел я в «The Rust Programming Language» звёздочку. Откуда мне знать, что это dereferencing, откуда мне знать что это связано с указателями, как я должен знать что оно есть в «rustbyexample»? Может это вообще одна из устарелых фич языка или это какая-то опечатка? Бардак одним словом.

Возможно, ты имел в виду: print!(«Hello {}!», world); vs print!(«Hello» + world + "!");?

И то и другое выглядит, как-то не очень. Я имел в виду, что работа со строками в Rust выглядит очень громоздко, сложно и неудобно и всё из-за отсутствия вменяемой конкатенации.

Не надо оправдывать свою лень сложностью языка.

Да какая ж здесь лень? Я вижу, что можно было сделать лучше, я предлагаю идеи и говорю что не так, с точки зрения новичка. Хотел бы выучить — выучил бы, просто некоторые «несовершенства» желание учить отбивают.

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

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

Это привычка. Другие новички привыкли к другому.

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

А юзкейс-то какой?

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

хаскель

Вот с ним я немного игрался, смог сконфигурировать xmonad как мне нужно, понял некоторые аспекты, понял что такое функциональщина и понял что чистая функциональщина мне не нужна. Я бы не сказал что он намного сложнее чем Rust в изучении, просто из-за того что парадигма другая.

будто, мы о разных языках говорим.

Может оно так и есть

Начать с \этого и потом \это (тоже лучше начать с лайфтаймов). В теме ссылки были, кстати.

Первое прочитано, уже несколько раз перечитал, там немного не хватает. А вот ссылка на Rustonomicon когда ничего небезопасного вроде и не делаешь — странно.
Но спасибо.

Прочесть главу про указатели (ссылки)?

Откуда я должен знать, что это указатель \ ссылка или как-то с этим связано?

Возможно. И это, разумеется, не очень хорошо.

Я ещё надеюсь, что это у них «защита от идиотов» такая, чтобы не говонокодили в экосистему

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

Откуда мне знать, что это dereferencing, откуда мне знать что это связано с указателями, как я должен знать что оно есть в «rustbyexample»?

Ок, вижу где проблема.

Я имел в виду, что работа со строками в Rust выглядит очень громоздко, сложно и неудобно и всё из-за отсутствия вменяемой конкатенации.

Эта громоздкость связана с семантикой языка. Опять же, читай http://kgv.github.io/rust_book_ru/src/ownership.html

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

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

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

Прописываю чтение статей на лурке «Технофашиcn» и «Квадратно-гнездовой способ мышления» до полного выздоровления!

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

Да, ведь ты выдаёшь свои ощущения за истину.

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

Ну и? Один раз обьявляем (в <>), два раза используем.

Почему жизненное время обьявляем в том месте, где нормальные люди обобщённые типы записывают?

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

Эта громоздкость связана с семантикой языка.

Все-таки основной selling point этого ЯП состоит в том, чтобы сделать программы более надежными. Гарантии memory safety и race safety — это классно, но нужно помнить, что это только часть проблемы при написаннии надежного ПО. Ещё одна значительная часть — это всевозможные логические ошибки. И если код на языке становится громоздким и затрудняет понимание людьми реализованной в этом коде логики, то получается, что средства достижения цели сделали эту самую цель ещё более далекой, чем раньше.

Manhunt ★★★★★
()

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

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

Что скажешь насчет последних синтаксических новшеств в Python 3.5?

Зато теперь:

воруй@убивай
является валидным кодом)

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

А поддерживать потом кто будет?

Судя по твоим сообщениям, раст ты тоже рассматривал. А программистов на расте (пока?) тоже мало. Так что аргумент с поддержкой так себе.

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

Следующим похожим на меня неосиляторам)

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

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

Я не знаю. Могу питон в пример привести 2 и 3.

Ну так погуглили. Ничего не поломалось. В Java 7, внезапно, тоже ничего не ломали. В C++ вот так версии нумеровать не принято, но как ни странно, за 10 лет ничего не поломали. В общем, версии языка программирования несколько отличаются от «semantic versioning», если ты об этом. Без нужны стараются ничего не ломать.

И пример питона как раз показателен - на третью версию до сих пор все-все не пересели.

Или на D посмотри - то, что они, в какой-то момент, решили ломающие изменения делать многие считают причиной (одной из) малой популярности языка.

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

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

Придумаю на тот самый хардкорный вариант, который сюда скидывали.

Можешь начать с чего-то попроще. Хотя бы этого:

fn test<'a, 'b>(a: &'a i32, b: &'b i32) -> Test<'a, 'b, 'a>;

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

какой из них интереснее, удобнее и полезнее?

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

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

Ну вот увидел я в «The Rust Programming Language» звёздочку. Откуда мне знать, что это dereferencing

А ты точно не троллишь? Специально открыл книгу, первая глава, где попалось разыменование это «Iterators». Причём там написано, что это разыменование. А в соответствующей главе (References and Borrowing) так вообще всё нормально разжевывается.

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

И то и другое выглядит, как-то не очень.

У тебя просто ограниченный опыт или просто отказываешься признавать факты. Похожим образом строки форматируются просто в куче языков.

Тебе говорят, что через форматирование проще и удобнее чем через конкатенацию, а ты опять говоришь, что конкатенация неудобная.

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

Проблема как раз в том, что это «точка зрения новичка», причём новичка с определённым опытом. Если бы опыт был другой - говорил бы ты другое. А перечисленное и не проблемы вовсе.

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

Открыть исходник, открыть документацию и поисковик и начать работать.

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

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

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

Я бы не сказал что он намного сложнее чем Rust в изучении, просто из-за того что парадигма другая.

Я и не говорю, что сложнее, хотя мне раст показался проще. Дело в том, что он требует ломания привычек, если с функциональными языками дела не имел. Точно так же и с растом - если дело имел только с языками с GC, и не имеешь опыта с указателями, то логично, что многие вещи будут казаться «странными».

А вот ссылка на Rustonomicon когда ничего небезопасного вроде и не делаешь — странно.

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

Откуда я должен знать, что это указатель \ ссылка или как-то с этим связано?

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

Ну или покажи где ты такое нашёл. Кстати, «баг-репорты» можно писать, в том числе, и на документацию и мануал. Их реально хотят сделать понятными.

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

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

Ты опять путаешь «нормальность» и «непривычность».

У меня в процессе изучения тоже претензии возникали, правда другие. Но по мере вникания, как правило, соглашался, что решения приняты вполне удачные.

Разумеется, есть куча вещей которые меня раздражают и которые, на мой взгляд, сделаны убого. Вот только, если я, ты и остальные люди из этой темы выпишем свои претензии, то они не совпадут. Более того, могут противоречить друг другу. И что делать авторам языка?

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

Почему жизненное время обьявляем в том месте, где нормальные люди обобщённые типы записывают?

Мы же это уже обсуждали. Но я повторюсь: потому что это в 90% случаев не вызывает проблем. А если выделять отдельное место под лайфтамы, то было бы ещё более громоздко. Ты, кстати, решения не предложил. Ну кроме как вообще всё перелопатить, причём неудачно.

Жизнеспособное решение было у Manhunt, но я бы не сказал, что оно сильно лучше.

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

Логично, версия-то - 1.7.

Ок, уел. Но я надеюсь, что ты не будешь спорить с тем, что ломающие изменения при развитии языка - это скорее редкость? И явно не то к чему стоит стремиться.

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

И явно не то к чему стоит стремиться.

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

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

но как ни странно, за 10 лет ничего не поломали.

char* и const char*
Оно конечно компилируется, но со злобными варнингами.

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

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

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

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

адекватное решение этой проблемы

Адекватным решением будет изменение в обязательном порядке.
Иначе никак и придётся тащить чемодан без ручки.

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

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

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

Будет, конечно. И да, это плохо.

Вот только если постоянно всё «исправлять» и ломать, то будет только хуже - популярность языка будет падать. Проще тогда будет взять новый язык, чем за старый цепляться. А в старых проектах будут просто фиксировать версию языка/компилятора. И кому от этого лучше?

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

char* и const char*

Ещё старое значение auto вспомнить можно. Но это ведь мелочи.

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

чтобы успели подготовиться.

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

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

Что-то я отстал от реалий, что тут делает «собака»?

Оператор умножения матриц)

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

Чтоб уязвимостей меньше было, а то утята плакать будут. И я там ещё про интырпрайз писал, а это как раз главный фактор.

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

Чтоб уязвимостей меньше было, а то утята плакать будут.

Уязвимости от багов в компилятора это что-то на грани фантастики. Даже если говорить про фантастику, исходники есть, пофиксить можно.

И я там ещё про интырпрайз писал, а это как раз главный фактор.

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

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

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

Только почему-то до сих пор все юзают питон 2.

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

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

Придётся, но на Rust гораздо больше времени и нервов потратится.

Не понимаю зачем ты свалил в кучу статик лайфтайм и, тем более, функцию

Это всё имеет отношение к работе со строками

Вот как раз в расте всё весьма логично

Если смотреть снизу вверх, т.е. от самой идеи строк — логично. Но если читать код — получается много логических несоответствий хотя-бы в том же to_string(). Визуально это всё очень уродливо выглядит. Новички (в программировании) будут проклинать тех, кто так придумал записывать.

А теперь, чтобы ты немного ощутил всю прелесть ситуации, давай посмотрим на С++. Где у нас есть «сишные строки» (char*, wchar_t*, char16_t*, char32_t*). Кстати, char может быть signed/unsigned. А ещё это всё «может быть» (и по сути является) массивом. Потом есть string, wstring, u16string и u32string, которые являются соответствующими тайпдефами для basic_string<>. Есть экспериментальный string_view (так же известный как string_ref), разумеется в четырёх вариантах. Ещё иногда строками манипулируют как массивом символов, особенно в старом коде, где непрерывность данных в строке не гарантировалась. Плюс каждый фреймворк добавляет свой тип, а то и не один: QString, CString, множество их.

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

Но вообще можно посмотреть на тип, на котором это вызывают, и вбить в поиск документации to_lowercase.

Логика из разряда «докупить ещё несколько планок оперативной памяти»...

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

Не получилось две строки сложить или что?

Да, не получилось! Решил я «Hello World» модифицировать и не получилось. Нужно to_string() вызывать.
Я тогда попытался разобраться, зачем, но почитав документацию решил, что язык ещё не готов и оставил его в покое месяца на два.
А затем вышел 1.0 и я узнал что ничего не поменялось, что это не костыль а фича такая...

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

у раста другая ниша.

Какая другая? Rust и есть инструментом под разные задачи.
Просто в таком виде он на язык общего назначения не тянет

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

Это банально неудобно.

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

тебе правда кажется, что to_string выглядит неоднозначно при выборе между типами String и &str?

Да, и это не мне кажется, так есть на самом деле. Функция плохо себя описывает, такую простую вещь и искать в документации — ну смешно же

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

Другие новички привыкли к другому.

Что за новички такие, которые уже успели привыкнуть?

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

Ок, вижу где проблема.

Что за пробема, как решить?

Эта громоздкость связана с семантикой языка.

Я понимаю, что литерал нужно как-то трансформировать во владеющую строку, но тем не менее to_string() здесь выглядит очень костыльным решением. Что самое печальное, костыль этот торчит в исходном коде, часто повторяется, громадный и вообще, лично я не понимаю, зачем каждый раз его нужно указывать.
Единственное решение которое сейчас приходит в голову:
Литералы записывать

'вот так'
Владеющие записывать
"вот так" // то же что и 'asdfasfa'.to_string() 
Сhar записывать
`т`,`а`,`к`

«не могли как в питоне сделать, плохо сделали тупо».

Так 80% программистов скажут

I60R ★★
()
Ответ на: комментарий от DarkEld3r
struct Test { // структура с тремя разными лайфтаймами
    @x: &i32,
    @y: &i32,
    @z: &i32
}

// struct Test { // структура без лайфтаймов
//     x: &i32,
//     y: &i32,
//     z: &i32
// }
//
//// struct Test { // лайфтайм 'z' такой как у 'x'
////     @x: &i32,
////     @y: &i32,
////    x@z: &i32
//// }
////
////// struct Test { // 'x' и 'z' имеют одинаковый лайфтайм 'a'
//////    a@x: &i32,
//////     @y: &i32,
//////    a@z: &i32
////// }


fn test(@a: &i32, @b: &i32) -> Test {
    Test {
        a@x: a, // лайфтайм 'x' такой же как и у 'a'
        b@y: b,
        a@z: b  // лайфтайм 'z' такой же как и у 'a'
    }

    // Test {
    //     @x: a,
    //     @y: b,
    //    a@z: b  // лайфтайм 'z' такой же как и лайфтайм 'a'
    // }
    //
    //// Test {
    ////    d@x: a, // 'x' и 'z' имеют одинаковый лайфтайм 'd'
    ////     @y: b,
    ////    d@z: b
    //// }
}
I60R ★★
()
Ответ на: комментарий от DarkEld3r

А ты точно не троллишь?

Нет. Встретил в «References and Borrowing» и там ни слова о том что это dereferencing. Только те кто пришел из C\C++ схватят быстро, остальные будут смотреть на это как на какую-то безсмыслицу.

Тебе говорят, что через форматирование проще и удобнее чем через конкатенацию, а ты опять говоришь, что конкатенация неудобная.

В одних случаях удобна, в других нет.

А перечисленное и не проблемы вовсе

Что-бы я не говорил, ты всёравно станешь на другую сторону и будешь твердить обратное ))
Проблемы. Синтаксис Rust критикуют все кому не лень.

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

почему это неудобно?

Не соответствует избранному авторами раста кодинг-стайлу. А если забивать на такие вещеи - получится PHP. Да и вообще, мало встречал программистов, которые не считали бы Такой_Стиль_Наименования красивым.

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