LINUX.ORG.RU

Rust 1.34

 ,


3

8

Вышел релиз 1.34 языка системного программирования Rust, развиваемого проектом Mozilla.

Ключевое-долгожданное:

  • Начиная с этого выпуска, Cargo может поддерживать альтернативные реестры. (Эти реестры сосуществуют с crates.io, так что вы можете писать программы, которые зависят и от crates.io и от вашего реестра.)
  • Трейты TryFrom и TryInto были стабилизированы для поддержки ошибок при преобразовании типов.

>>> Полный анонс



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

Не понимаю откуда столько хейта.

Работаю на С++ 4 года в небольшой компании на 100 человек. Замечаю что регулярно кто-то ломает код, большинство разработчиков бородатые математики которые вроде как и шарят в С++, но регулярно вот так фейлят. Санитайзеры гоняются не останавливаясь. В компании есть здоровенный coding standard для которого собирают целую группу из разрабов.

Так я о чём: Может быть раст и загнётся так и не став популярным, но идея его будет жить и скорее всего из этого всего получится отличный язык в конце-концов. Ведь по сути раст построен так что практически любая ошибка для отлова которой писались санитайзеры ловится в расте на стадии компиляции (Ну конечно если это safe часть языка). Как можно это хейтить? Такое ощущение что вы даже не пытались почитать простенькие гайды по расту.

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

Такое ощущение что вы даже не пытались почитать простенькие гайды по расту.

Такое ощущение, что вы даже не пытались писать на нем реальные программы.

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

Замечаю что регулярно кто-то ломает код

Именно по ошибке работы с памятью и пр.? Странно...

Так-то код периодически люди ломают вне зависимости от языка. Главное, чтобы это было как можно раньше обнаружено. В идеале - на компе у разраба, но если в CI, то тоже неплохо. Но это зависит не от языка, а от процессов в команде.

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

Санитайзеры гоняются не останавливаясь

Тогда в чем проблема? Еще советую прикрутить пару статических анализаторов.

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

Как можно это хейтить?

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

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

Как можно это хейтить?

Хейтят не идею раста как таковую (в частности, сделать зеро-оверхед автоматическое управление ресурсами), а конкретную реализацию. Снова переусложнённый язык с миллионом фич, снова дикий синтаксис а-ля перл, снова бездумное расширение и разбухание. С такими принципами развития любой язык загнётся, что мы наблюдаем на примере C++, Джавы, Питона...

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

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

С такими принципами развития любой язык загнётся
что мы наблюдаем на примере C++, Джавы, Питона...

/0

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

Проблема в том что санитайзеры это не решение, а костыль.

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

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

Согласен что синтаксис необычный. Но это новый язык, я и не ожидаю что он будет как известный для меня С-синтаксис. Более того я даже нормально принимаю то что на него многие идеи из С++ не маппятся нормально. Если посмотреть на С++ - в современном С++ синтаксис не намного лучше, помойка из разных сортов скобочек. Об информативности ошибок компилятора ходят легенды. А уж сколько методов инициализации в современном С++, так это можно целые таблицы и многостраничные мануалы составлять. Я уже не говорю что С++ это самый плохой язык в плане «наименьшего удивления». Чтоб сделать язык с нуля который был бы хуже - это ещё надо сильно постараться.

Так что то что для вас кажется странным и неудобным в расте - просто с непривычки. Мне он тоже кажется наркоманским. Но желание выпилить санитайзеры и valgrind с своих проектов сильнее нежелания изучать новый язык.

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

Раст это и позволяет делать

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

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

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

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

Я признаюсь что на нём ничего не писал сложнее хелловорлдов

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

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

А это и невозможно сделать в компайл тайме. Я понимаю это. Но всё-равно есть масса других ошибок которые им ловятся в компайл тайме, но в мире С++ эти ошибки принято ловить санитайзерами/valgrind'ом.

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

Проблема в том что санитайзеры это не решение, а костыль.

Нет, это хороший инструмент. Как и статические анализаторы.

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

А это и невозможно сделать в компайл тайме

Статические анализаторы более-менее справляются.

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

А это и невозможно сделать в компайл тайме.

Очень часто - возможно.

Но всё-равно есть масса других ошибок которые им ловятся в компайл тайме

Они ловятся и с помощью анализаторов для С++.

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

Если посмотреть на С++

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

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

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

Да, в этом суть всей современной разработки, увы.

Лучший _для кого_?

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

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

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

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

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

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

Недавно писали рекомендательную систему, писали мы на Rust т.к. проще писать не падающие многопоточные приложения и без потери по производительности. Работа с памятью у раста очень сильно помогла, т.к. на плюсах я бы не заметил некоторых ошибок. Компилятор раста помог. Просто помогает не выстрелить в ногу. Очень многое там хорошо продумано с точки зрения надежности.

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

Не согласен

use std::io::{self, Read};

fn main() -> io::Result<()> {
    let mut buffer = String::new();
    io::stdin().read_to_string(&mut buffer)?;
    buffer.remove(buffer.len() - 1);
    let int: usize = buffer.as_str().parse().unwrap();
    let a = [1, 2, 3, 4];
    println!("{}", a[int]);
    Ok(())
}

thread 'main' panicked at 'attempt to subtract with overflow', src/main.rs:7:19
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
snake266 ★★
()
Ответ на: комментарий от anonymous

Ну во многих случаях этим всем можно пожертвовать чтоб получить надёжную систему написанную на нормальном языке. На крайняк можно использовать С/C++ библиотеки и в расте.

В плане инструментов с С++ тоже весело, ну ладно есть IDE и дебаггеры хорошие. Но вот элементарно сейчас решили оценить в своём проекте кроссплатформенные системы сборки. А их по сути и нет. Есть CMake от вида которого хочется плакать, есть Bazel который гугл соизволил заопенсорсить и он со скрипом поддерживается в 1 платной IDE. И всё. Если бы гугл не соизволил это заопенсорсить - так бы все и сидели до сих пор с одним смейком. И это происходит когда в джаве нормальные системы сборки есть уже лет 15. С кешированием компиляции и прочьими плюшками.

А время компиляции С++ и весь этот цирк с Unity билдами? Вы же понимаете насколько это смешно выглядит в 2к19-м году? Все эти хедеры и препроцессоры.

Просто иногда выглядываю из крестомирка, и понимаю в каком же болоте С++. Этому языку-мемчику лет 15 назад надо было уходить на покой.

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

т.к. на плюсах я бы не заметил некоторых ошибок

Например? У меня уже несколько лет не было ошибок работы с памятью (проверяется в нашем CI если что).

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

Держи


fn main() {
    let a = [1, 2, 3, 4];
    println!("{}", a[6]);
}

error: index out of bounds: the len is 4 but the index is 6
 --> src/main.rs:5:20
  |
5 |     println!("{}", a[6]);
  |                    ^^^^
  |
  = note: #[deny(const_err)] on by default

error: aborting due to previous error

Ну и хотелось бы сказать что C++ на нативных массивах даже в рантайме никак не отреагировал, да и на векторах без .at()

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

А по ссылке Rust беспомощен, ахах, хотя казалось бы, такая простая ситуация! И как тут о безопасности то говорить?

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

У меня все это скомпилилось (gcc tets.c -Wall)

#include <stdio.h>

int main(void) {
    int a[5];
    for(int i = 0; i < 5; i++) {
        a[i] = i;
    }

    printf("%d", a[10]);
    return 0;
}
И даже выдало какую то рандомную цифру

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

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

dmitry@ibm-pc:~$ clang++ main.cpp -Wall -Werror
main.cpp:9:18: error: array index 10 is past the end of the array (which
      contains 5 elements) [-Werror,-Warray-bounds]
    printf("%d", a[10]);
                 ^ ~~
main.cpp:4:5: note: array 'a' declared here
    int a[5];
    ^
1 error generated.

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

Для него нужны другие флаги, -Wall это вообще минимум.

main.cpp: In function ‘int main()’:
main.cpp:9:11: warning: array subscript 10 is above array bounds of ‘int [5]’ [-Warray-bounds]
     printf("%d", a[10]);

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

надо вывести этих мошенников-шарлатанов

Действительно надо, им вообще платят? Они работают в Mozilla? Если да, то стоит засудить, ведь вместо них могли бы нормальные люди делать браузер.

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

надо вывести этих мошенников-шарлатанов

Действительно надо, им вообще платят? Они работают в Mozilla?

Нет, некоторые даже ушли оттуда, хотя работали.

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

По какой статье, лол?

Virtuos86 ★★★★★
()
Ответ на: комментарий от snake266
$ alias g++='g++ -O2 -Wall -Wextra -Wchkp -Wmissing-include-dirs -Wswitch-default -Wunused \
  -Wduplicated-branches -Wduplicated-cond -Wshadow -Wpointer-arith -Wundef -Wunused-macros \
  -Wcast-qual -Wzero-as-null-pointer-constant -Wparentheses -Wuseless-cast -Wsign-conversion \
  -Wlogical-op -Wredundant-decls -Wrestrict -Winvalid-pch -Warray-bounds=2'

$ g++ source.cpp
Deleted
()
Ответ на: комментарий от Virtuos86

По какой статье, лол?

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

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

О, сработало. Почему же тогда нельзя сделать так чтобы компилятор делал баундчеки с помощью одной команды (той же -Warray-bounds),а не целой простыни флагов?

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

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

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

Вот так вот компилятор спасет

fn main() {
    const N: usize= 10;
    let arr = [1,2,3,4,5,6];
    println!("arr[{}] = {}", N, arr[N]);
}
error: index out of bounds: the len is 6 but the index is 10
 --> src/main.rs:5:33
  |
5 |     println!("arr[{}] = {}", N, arr[N]);
  |                                 ^^^^^^
  |
  = note: #[deny(const_err)] on by default

snake266 ★★
()
Ответ на: комментарий от snake266
#include <iostream>

int main(void) {
	const int N = 10;
	int arr[] = {1,2,3,4,5,6};
	std::cout << arr[N] << std::endl;
}
main.cpp:6:15: error: array index 10 is past the end of the array (which
      contains 6 elements) [-Werror,-Warray-bounds]
        std::cout << arr[N] << std::endl;
                     ^   ~
main.cpp:5:2: note: array 'arr' declared here
        int arr[] = {1,2,3,4,5,6};
        ^
1 error generated.
Deleted
()
Ответ на: комментарий от anonymous

Так и багов не было на эту тему.

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

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

Что самое смешное, компилятор C/C++ дает предупреждение если используется переменная вместо константы, а rust нет, ахах!

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

Самое простое из того что помню, в реале это всё выглядит намного сложнее, с сложным конструктором и кучей полей/методов, но для примера:

class Foo
{
    const double& m_veryUsefulNumber;
public:
    Foo(const double veryUsefulNumber) : m_veryUsefulNumber(veryUsefulNumber) {}
};
anonymous
()
Ответ на: комментарий от snake266

[inline]buffer.remove(buffer.len() - 1);[/inline]

Но почему не просто [inline]buffer.pop();[/inline]?

@

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