LINUX.ORG.RU

Rewrite it in Rust - что бы ещё переписать?

 , ,


0

5

Мой кот спрашивает: «Привет, ЛОР овец! Надоело давиться питоном, стал пересаживаться на Растишку. Что бы такое небольшое Переписать на Расте™ для начала? О чём ни подумаешь, всё уже есть на crates.io! Кому-нибудь случайно не хватает некой либы или утилиты в пределах 5 KLOC? Есть шанс, что вы её получите бесплатно под GPL! Спасибо.»



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

Ну а на чём? Вон OpenMW на D начали писать, а потом на C++, ушли, по известным причинам. Но начинать новый проект на C++ в 2017-м можете только вы.

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

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

Пока ни кому не удалось сделать «простой» C. Ибо для написания надёжного софта нужны сложные конструкции. И всё само по себе приходит или к GC или к сложному Rust.

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

Вот здесь

Так можно сразу на весь остальной FF пальцем ткнуть и сказать, что Rust не увиноват, это там где-то кто-то другой накосячил, а в Rust несмотря на все unsafe падать ничего не может. Хотя тут разработчики явно обсуждали уже известные баги в коде на Rust, а не в glue.

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

А я и не писал что раст не виноват. Я не разработчик FF, может и не прав, но со стектрейса видно что в glue с плюсатого кода приходит что-то не то.

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

но со стектрейса видно что в glue с плюсатого кода приходит что-то не то.

Ну с экстрасенсами я спорить конечно не могу.

anonymous
()

Mosquitto сбиндани с поддержкой TLS, я бы и сам мог, но свободное время стремиться к нулю(((

Вот тебе уже сделанные мной 3 функции, осталось штук 20 и завернуть это всё в impl, ну ты понял.

AntonyRF ★★★★
()

Ещё можешь поломать себе мозг сделав через макросы математику над бесконечно (условно) числами, хотя бы простые вещи типа */-+, это будет очень полезно .

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

Ибо для написания надёжного софта нужны сложные конструкции.

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

for (i, value) in current.iter_mut().enumerate() {
    *value = i as i32;
}

Вроде просто, но можно было написать и так:

for i in 0..current.len() {
    current[i] = i as i32;
}

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

И всё само по себе приходит или к GC или к сложному Rust.

В общем и целом все остается так как и было. И тем более не стоит преувеличивать роль Rust. Когда-то и D был модным, а что он оставил после себя?

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

Да. Как до этого была цель потренироваться в хаскеле. Ну и движок впоследствии всё же было бы неплохо переписать на раст - в нём бэкендов больше.

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

но можно было написать и так

Только ваш пример позволяет инвалидировать «итератор».

Когда-то и D был модным, а что он оставил после себя?

D модным был пол года. Rust уже давно взлетел выше D.

RazrFalcon ★★★★★
()

postgresql перепиши.

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

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

а как тут разберёшься, если в ошибках от rust отсутствует backtrace?

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

Только ваш пример позволяет инвалидировать «итератор».

Оригинальный пример - тоже. Причем молча, достаточно менять контейнер при итерации и тогда хрен его знает что отберется, а что нет, итератор только молча проверит, что пора выходить:

    fn next(&mut self) -> Option<(A::Item, B::Item)> {
        if self.index < self.len {
            let i = self.index;
            self.index += 1;
            unsafe {
                Some((self.a.get_unchecked(i), self.b.get_unchecked(i)))
            }
        } else if A::may_have_side_effect() && self.index < self.a.len() {
            // match the base implementation's potential side effects
            unsafe {
                self.a.get_unchecked(self.index);
            }
            self.index += 1;
            None
        } else {
            None
        }
    }

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

D модным был пол года. Rust уже давно взлетел выше D.

Во-первых больше, во-вторых всякие rocket, показанные выше, однозназначно проигрывают vibe.d. А еще у D есть свой тулкит (то что на расте предлагают - порнография), IDE, несколько компиляторов в том числе gdc, когда Rust отвязаться от llvm пока явно не светит. Есть и свои истории успеха в facebook, netflix и пр. Плюс когда-то OpenMW был на D, а OpenMW на две головы выше чем все студенческие поделки с http://arewegameyet.com. Так что Rust еще взлетать и взлетать, чтоб даже хотя бы D уверенно обогнать.

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

а как тут разберёшься, если в ошибках от rust отсутствует backtrace?

Присутствует, смотри внимательно.

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

unsafe

Знаешь, Миша, а можно еще хер себе дверью специально прищемить и потом всем рассказывать про неправильные двери.

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

Знаешь, Миша, а можно еще хер себе дверью специально прищемить и потом всем рассказывать про неправильные двери.

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

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

Там подсчёт ссылок.

Ну да, в Rust тоже есть подсчет ссылок, никто ж не говорит, что это язык с GC (хотя в Rust был «традиционный» GC, но это другая история).

anonymous
()
Ответ на: комментарий от anonymous
impl<'a, 'r> FromRequest<'a, 'r> for User {
    type Error = ();

    fn from_request(request: &'a Request<'r>) -> request::Outcome<User, ()> {
        request.cookies()
            .get_private("user_id")
            .and_then(|cookie| cookie.value().parse().ok())
            .map(|id| User(id))
            .or_forward(())
    }
}

Вах! Так пожелаем же этому говноязычку быстрой, но мучительной смерти!

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

Ну да, в Rust тоже есть подсчет ссылок, никто ж не говорит, что это язык с GC

Потому что ты можешь его не использовать. В отличие от.

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

for (i, value) in current.iter_mut().enumerate() {

Вроде просто, но можно было написать и так:

for i in 0..current.len() {

Можно или нельзя - ХЗ, их твоего примера не ясно. Если у current нет операции индексации, то нельзя.

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

Всё с вами понятно. Проходите, не задерживайте очередь.

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

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

Потому что ты можешь его не использовать. В отличие от.

Тот GC, что был в Rust тоже можно было не использовать, это тоже был не GC? Или Rust до сих имеет опциональный GC?

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

Проходите, не задерживайте очередь.

Ты отрицаешь возможность побочных эффектов внутри итераторов?

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

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

Можно или нельзя - ХЗ, их твоего примера не ясно. Если у current нет операции индексации, то нельзя.

Пример мой, так что я решаю, что есть. Как и iter_mut, которого тоже может не быть.

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

Потому что ты можешь его не использовать. В отличие от.

Тот GC, что был в Rust тоже можно было не использовать, это тоже был не GC? Или Rust до сих имеет опциональный GC?

Даже не знаю, что сказать. Итак, в Clojure невозможно _не использовать_ GC. Причем тут GC в Rust, которого сейчас нет и который даже в древние времена был не обязателен к использованию?

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

Можно или нельзя - ХЗ, их твоего примера не ясно. Если у current нет операции индексации, то нельзя.

Пример мой

А недавно ты говорил, что скопипастил его откуда-то.

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

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

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

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

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

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

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

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

эквалайзер для PulseAudio

Кстати, переспективный вектор атаки: залить на крестьян-трубу видео, содержащее звук, вызывающий переполнение в эквалайзере для пшшшаудио. По-любому дыр полно. Убежал кодить.

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

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

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

Даже не знаю, что сказать. Итак, в Clojure невозможно _не использовать_ GC.

Я не это спрашивал. Так есть в Rust GC или нет?

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

А недавно ты говорил, что скопипастил его откуда-то.

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

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

Даже не знаю, что сказать. Итак, в Clojure невозможно _не использовать_ GC.

Я не это спрашивал. Так есть в Rust GC или нет?

Сейчас в Rust нет GC. Обязательного к использованию GC в Rust не было как минимум с 2012 года (а возможно, и никогда), и не планируется.

Пример мой

А недавно ты говорил, что скопипастил его откуда-то.

Одно другому не мешает, я ж его скопистил, с шутаута, если что

То есть он не твой, а какого-то автора с шутаута. И намерений этого автора мы не знаем.

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

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

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

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

Хорошо, как можно ошибиться при работе с индексами? Сделать механическую очипятку? Тут уже ничто не спасет, можно и с итераторами не то взять и не потому. Менять данные? Опять же - итераторы не панацея, и даже больше, возможно надо будет менять контейнер, и тогда итераторы не вариант. Менять индекс? Ну тут уж либо ССЗБ, либо те же итераторы не дают то, что надо, и все-равно будет свое решение на индексах, либо свой итератор, где накосячить можно еще проще.

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