LINUX.ORG.RU

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

Можно написать простой враппер на C, который будет при panic перезапускать rust-программу

Init тоже будешь простым враппером на Си перезапускать?

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

А C при выходе за границы массива не паникует что-ли?

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

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

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

Это очень хорошо, пока его пишешь не ты. Когда ты начинаешь его писать, всплывает чудовищного размера пласт из стандартной либы, по сравнению с которой STL крестов — это эталон простоты и лаконичности. Например:

Очередного обсуждения Rust тред (комментарий)

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

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

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

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

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

у которых точно так же написано сотни специальных функций «почесать левое ухо», «засунуть правый мизинец в правую ноздрю».

это в точности мой хейтинг systemd. там тот же подход. пытаются предвидеть все возможные надобности.

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

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

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

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

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

Крипт перешёл на фряху

Еще не перешел, только прицеливается.

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

Если не нравится, смотрите на генту или даже крукс.

На генте с 2007 года с небольшими перерывами.

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

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

Это интерпретация стандартной библиотеки языка человеком, который в коде на этом языке делает две лишние аллокации на каждом проходе цикла. См. r.1.to_string() == "two".to_string() выше

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

некорректное сравнение. Нужно установить антивирус и на Linux. Но вообще да. Когда в msys + gcc компилирую, то Windows Defender процентов 40 процессора занимает. :(

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

Антивирус не идёт в базовой поставке «линукса».

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

некорректное сравнение. Нужно установить антивирус и на Linux.

Оно и без антивируса тормозит. NTFS – медленная файловая система.

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

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

Помница в mutter-3.24 был эпичный баг с gles (емнип). На багтрекере ответ от разрабов гласил: мы починили это в 3.26.

Те, кто сидел на 3.24 остались в жопке. Навечно.

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

Да по-моему у них сразу registry был опенсорсным, т.е. кто хотел тот и держал свои репы. Просто у них хаб захардкожен

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

В 2008 году pulseaudio уже работало как часы в каждой Nokia N900

В нокии оно может и работало, но на пека это было пшшаудио.

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

Так всё и дело в этом НО. Стандартная библиотека, которая паникует на выделении динамической памяти не годится. Вариант не использовать паникующие функции, не катит (за всеми не уследишь). Даже в ядро тянут Box, чтобы его инициализировать из сырого указателя и писать в комментариях, что это безопасно, вместо того чтобы написать аля KBox.

Возможность переполнения буфера есть у оптимизатора, чем пользуется no-panic, чего вполне достаточно для определения где должен быть [] а где .get()

Но один фиг, что в ядро, что в системд тянут фигню, которая позорит Rust.

С другой стороны, может тыканье в грязь носом, позволит сделать нормальный no-std

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

solaris для узкого применения

Если тебе не нравится systemd, то каким боком тебе нравится SMF в Solaris? По общей концепции это прямой предок Systemd, только с неудобными XML-конфигами вместо TOML/INI.

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

Обычно статически компилируется, как и в Go, т.е. переносимость отличная - на любом дистрибутиве с linux 2.6+ работает.

@crypt

Враньё. По умолчанию компилируется динамически. Только rustlib линкуется статически, libc, pthread - динамически.

Для статического бинарника нужно менять стандартную библиотеку на musl, но это нужно устанавливать rust с сайта, а не из дистрибутива(так как при установке из дистрибутива нет rustup, и cargo не понимает --target x86_64-unknown-linux-musl). Как-то так

rustup target add x86_64-unknown-linux-musl
cargo build --target x86_64-unknown-linux-musl

Минимальные требования:

linux-gnu targets now require minimum kernel 2.6.32 and glibc 2.11.

Простой пример, любой может проверить:

cargo new hello_world
cd hello_world
cargo run
ldd target/debug/hello_world

https://imgur.com/a/GlAtaqp

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

Более того, даже если тебе удастся выкорчевать панику из Rust, то ничто и никого не остановит от написания abort() или loop {}. Тут похоже нет никаких вариантов, кроме code review

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

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

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

Элементарный пример: должна ли стандартная библиотека писать из расчета сборки мусора или без? Язык D пошел по обоим путям — кто о нем помнит? Rust четко наметил путь «никакой сборки мусора». В случае Си вообще пофигу, можно писать как угодно — потому что ты работаешь на нулевом уровне абстракции, руками каждый раз выделяя память так, как тебе нужно, с GC или без. У Rust очень, очень жирные уровни абстракции, которые вызваны не только функционльностью, а и необходимостью гарантий отсутствия UB. Ниже я приводил пример того, насколько много кода пришлось писать в Rayon для того, чтобы просто изменить поведение итераторов для поддержки параллелизации iter() => par_iter():

Разработчики systemd рассматривают возможность внедрения Rust (комментарий)

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

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

Devuan - это Debian, из которого выпилили привязку к systemd. Поэтому Debian продолжают разрабатывать маинтейнеры Debian'а, а потом их Debian берут энтузиасты и выпиливают все привязки к systemd. Много людей выпиливать не нужно и в случае чего всегда найдутся новые энтузиасты, поскольку Debian значительно популярен. Настолько популярен, что входит в четвёрку самых популярных дистрибутивов: Debian, Ubuntu, Fedora и Arch.

а слакваре уже все

4.2. Просто затянули с новым релизом. Но уже были новости о бете Slackware 15. А Slackware-current активно пилилась и пилится все эти годы.

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

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

Очень интересно было бы узнать, правда ли это, но, к сожалению, компилятор настолько тупой, что вываливает огромный бинарь даже для hello world, и мне тупо лень ковырять его, чтобы разбираться, что же там он все-таки выкинул, а что — нет.

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

Почему Оберон умеет безопасно обрабатывать паники и SIGSEGV, а Rust нет? Не дотягивает Rust до безопасного языка

Ровно до тех пор, пока на Обероне на начали что-то писать. Как выше написали — чуда не бывает, либо у тебя паника, либо UB, либо жутко перегруженный код обработки ошибок.

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

Как выше написали — чуда не бывает

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

Причём это с самых древних версий Оберона работает (1987). Совсем программисты писать программы разучились.

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

Ты сейчас с раст-системы с раст-юзерспейсом и раст-драйверами пишешь? Полностью свободной от сишечки?

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

Враньё

Сорян. Не пишу на rust, собирал всегда на alpine, наверное, по-этому так думал

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

Это интерпретация стандартной библиотеки языка человеком, который в коде на этом языке делает две лишние аллокации на каждом проходе цикла. См. r.1.to_string() == «two».to_string() выше

*r.1 == "two"?

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

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

Причём это с самых древних версий Оберона работает (1987). Совсем программисты писать программы разучились

При желании, исключение, в том числе сегфолт, перехватить всегда можно — но толку с этого, если целостность состояния нарушена, данные в БД побиты, объекты синхронизации находят в некорректном состоянии,и всё, что ты можешь после «успешной» обработки ошибки — это бесконечно «успешно» обрабатывать такие же ошибки десять миллионов раз в секунду до перезагрузки.

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

Можешь на godbolt поиграться
https://gcc.godbolt.org/z/o5xfzoTvn

А, понел идею — нужно писать сферическую функцию в вакууме, без main и без использования ящиков.

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

но толку с этого, если целостность состояния нарушена, данные в БД побиты, объекты синхронизации находят в некорректном состоянии

Это всё элементарно решается через RAII. И никакой обработки ошибок не надо.

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

Ты не юли, у вас там >вечная сишечка, или коварно врывающийся в её лебенсраум, прямо в её проекты, ржавый? Теснят, однако. Не вечна, однако.

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

При желании, исключение, в том числе сегфолт, перехватить всегда можно

А как это делается на той же Сишеньке?

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

Я бы написал

let index = test.iter().position(|r| r == "two")?;

Что будет вместо вопроса, и нужен-ли вообще index зависит от того, что нужно сделать.

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

Что-то мне кажется, растофанбои потеснить весь лебенсраум сишечки не осилят в силу интеллектуальной ограниченности

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

D вон тоже лебенсраумы теснил, и где он сейчас

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

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

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

Уу, я думал, я какой-то платформонезависимый способ проглядел.

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

Можно и одну сделать, но нужно написать так:

Или num[1] + num[0]. То-ли у llvm c constrait propagation что-то не то, то-ли rust генерит IR, который говорит, что проверку на паники нельзя реордерить.

start:
  switch i64 %num.1, label %bb2 [
    i64 0, label %panic
    i64 1, label %panic1
  ], !prof !2

panic и panic1 - одно и то же. Непонятно почему llvm не сворачивает это в одну проверку.

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

Такие прогнозы были и на стадии «вот появится хотя бы один real-life проект на Rust, тогда и поговорим». А сейчас мы находимся здесь:

Ты сейчас с раст-системы с раст-юзерспейсом и раст-драйверами пишешь?

Princesska ★★★★
()

А что плохого в rust? Оно же безопасное :}

Gonzo ★★★★★
()

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

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