LINUX.ORG.RU

Rust 1.11

 


1

5

Команда разработчиков Rust рада представить релиз Rust 1.11. Rust — это системный язык программирования, при разработке которого внимание сосредоточено на безопасности, скорости и параллелизме.

Как обычно, вы можете установить Rust 1.11 с соответствующей страницы на официальном сайте, а также посмотреть примечания к выпуску на GitHub.

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

  • Большая часть изменений касалась пока ещё нестабильных внутренностей компилятора. Началась работа над инкрементальной компиляцей и переходом на MIR. В этом выпуске были заложены основы для этих возможностей.
  • В выпуске 1.10 был введён новый формат контейнеров cdylib, который используется при компиляции кода на Rust для встраивания в другие языки. До этого момента поддержка cdylib была реализована только в компиляторе, теперь эта возможность стала доступна и в Cargo.
  • В стандартной библиотеке изменилась функция хэширования по умолчанию с SipHash 2-4 на SipHash 1-3.

Стабилизации библиотеки

  • В BinaryHeap, BTreeMap, и BTreeSet добавлен метод append.
  • В BTreeMap и BTreeSet добавлен метод split_off.
  • Методы to_degrees и to_radians ранее были реализованы для f32 и f64 в libstd, теперь они также доступны в libcore.
  • В Iterator добавлены два новых метода: sum и product.
  • Cell и RefCell получили метод get_mut.
  • assert_eq!, как и assert!, теперь принимает пользовательское сообщение об ошибке.
  • Главный поток теперь называется “main” вместо “<main>”.

Cargo

  • Добавлена поддержка цвета для Windows-консолей, и вы можете теперь конфигурировать цвета для stderr так же, как и для stdout.
  • Скрипты сборки теперь могут выдавать предупреждения.
  • Как было упомянуто выше, добавлена поддержка cdylib-контейнеров.
  • Cargo теперь предотвращает публикацию контейнеров при наличии изменённых файлов или файлов, которые не являются частью рабочего дерева.

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

★★★★★

Проверено: Shaman007 ()

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

Сколько уже уязвимостей связанных с переполнением памятью нашли? Да, я могу писать на go или java, но софтом созданным на крестах пользоватся вынужден. Нет, я конечно могу начать писать ось не на си подобных языках или присоеденится к какому-то проекту, но времени на создание чего-то юзабельного уйдёт столько, что это можно и не рассматривать в серьёз. Ведь моей оси придётся конкурировать с линем, а противопоставить ей будет почти нечего. Кому нужна безопасность, если всё закончится консолью или гуем напоминающим винду 3.11?

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

Для себя я пишу на чём хочу. А вот те кто пишут не для себя нередко выбирают(или возможно им навязывают)путь мучений.

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

Про лисп говорят что он умер, про джаву что она тормозит... Видимо не туда смотрел

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

вот этот метод должен работать так же как и в этой структуре

trait ThisMethod {
    fn this_method(&self);
}

struct ThisStruct;

impl ThisStruct {
    fn new() -> Self {
        ThisStruct
    }
}
        
impl ThisMethod for ThisStruct {
    fn this_method(&self) {
        println!("42");
    }
}

struct ThatStruct {
    parent: ThisStruct,
}

impl ThatStruct {
    fn new() -> Self {
        ThatStruct { parent: ThisStruct::new() }
    }
}

impl ThisMethod for ThatStruct {
    fn this_method(&self) {
        self.parent.this_method();
    }
}

fn main() {
    let a = ThisStruct::new();
    let b = ThatStruct::new();
    a.this_method();
    b.this_method();
}
Esper ()
Ответ на: комментарий от anonymous

Трейты умеют в дефолтную реализацию. Можно дерайвить дефолтное поведение, там где нельзя дерайвить можно написать макрос

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

Ужа даже смешно, как лузеры, не могущие в С++ обвиняют С++ в том, что у них(лузеров) руки из жопы растут.

не хочешь разбираться в портянках из пары сотен строк на cmake и гуглить версии зависимостей = лузер! Ок, ясно

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

О уж0с уж0с уж0с... Сколько строк... Народ, зачем опять возвращатся к многословным языкам? Неужели трудно сделать что-то типа такого

public class A {
  public void test() {
    stdout.printf("42\n");
  }
}
public class B : A {

}

void main() {
  var a = new A();
  var b = new B();
  a.test();
  b.test();
}

Код на Vala - 15 строк, на rust - 40. Вам что за количество строк платят?

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

Да пусть ставит. Мне вот плевать на руст ибо я не пользуюсь им. Пользовался бы-вайнил на переменные с let как в барсике и т.п.

А тут на лоре каждую неделю на арене цирка люди, которые по их же словам на C++ не пишут, рассказывают как им C++ не нравится и его надо запретить

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

И к чему был этот...это... я даже не знаю как это назвать.

После какого слова смеяться хотя бы скажите

i36_zubov ()
Ответ на: комментарий от anonymous
struct Data1;
struct Data2;

trait Hello {
    fn hello(&self) {
        println!("Hello");
    }
}

impl Hello for Data1 {}
impl Hello for Data2 {}

fn main() {
    let a = Data1;
    let b = Data2;

    a.hello();
    b.hello();
}
RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Тогда уж:

fn main() {
    println!("Hello");
    println!("Hello");
}

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

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

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

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

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

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

А тут на лоре каждую неделю на арене цирка люди, которые по их же словам на C++ не пишут, рассказывают как им C++ не нравится и его надо запретить

Призовём КО на помощь: «не пишут» в настоящем времени. Вполне могли писать до этого. «не писал» в прошлом. Например я 11 лет назад не писал на плюсах. «не писал ни разу» думаю и так всё поняно.

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

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

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

Если у тебя в «hello world» утечёт память... Ну это будет крайне плохо.

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

Не смешно.

И не планировалось смешным.

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

Я написал код, который приводит к одному результату.

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

Я написал код, который приводит к одному результату.

Я тоже.

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

Речь шла про наследование данных, если что, ты же привел пример оторванный от любых данных.

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

В одной строке - нельзя. Но учитывая как работает раст - оно и не нужно. Ведь зачастую на мне нужен объект содержащий все методы, а только нужные. А значит достаточно:

fn my_func<T: Hello>(value: T) {
    value.hello();
}
RazrFalcon ★★★★★ ()
Ответ на: комментарий от anonymous

Наследования данных в расте нет. С этим никто и не спорил. Есть только наследование интерфейсов.

Мой пример не оторван от данных. Трейт работает с &self, ака ссылкой на данные.

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

Наследования данных в расте нет. С этим никто и не спорил. Есть только наследование интерфейсов.

Да, и выше был правильные пример на Rust как поступать в таких случаях. Зачем был твой - непонятно.

Мой пример не оторван от данных. Трейт работает с &self, ака ссылкой на данные.

Имелись в виду родительские данные.

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

выше был правильные пример

Это попытка натянуть сову на глобус. Зачем изображать ООП в языке без ООП? Правильность этого примера сомнительная.

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

Это попытка натянуть сову на глобус.

Да, но, например, в servo есть такие натягивания.

в языке без ООП

ООП очень растяжимое понятие, в какой-то мере оно в Rust есть.

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

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

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

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

За что я не люблю всяких петросянов и задорновых? Им платят за шуточки и не серьёзное отношение к теме. И какой бы вопрос им не задать - рассуждать логически они не способны. Уже не одна уязвимость связанная с неправильной работой с памятью найдена. Уже шутка про плазму которая не падает стали бояном. Да, можно приложив кучу усилий заставить код на си работать правильно. Но зачем? Зачем нужно тратить на это кучу сил, если можно сделать это проще?

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

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

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

И теперь вместо красивого и ёмкого var a = ... или let mut a = ... мы наблюдаем SmartPointer<Dictionary<string, vector<string>> a.......

Ну зачем же так сильно передёргивать? Вместо let mut a = ... будет auto a = ....

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

2) методы и свойства в одном месте

Но зачем?

в одном месте объявляем свойства, в другом методы)

Скорее не «свойства и методы», а «данные и методы».

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

Я ни разу не видел, что те, кто используют С++, вайнили на тему какие плохие Rust, D, Java или лисп.

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

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