LINUX.ORG.RU

Cloudflare выпустила первый публичный релиз Pingora v0.1.0

 ,

Cloudflare выпустила первый публичный релиз Pingora v0.1.0

0

4

5 апреля 2024 года Cloudflare представила первый публичный релиз открытого проекта Pingora v0.1.0 (уже v0.1.1). Это асинхронный многопоточный фреймворк на Rust, который помогает создавать прокси-сервисы HTTP. Проект используется для создания сервисов, обеспечивающих значительную часть трафика в Cloudflare (вместо применения Nginx). Исходный код Pingora опубликован на GitHub под лицензией Apache 2.0.

Pingora предоставляет библиотеки и API для создания сервисов поверх HTTP/1 и HTTP/2, TLS или просто TCP/UDP. В качестве прокси-сервера он поддерживает сквозное проксирование HTTP/1 и HTTP/2, gRPC и WebSocket. Поддержка HTTP/3 — в планах. Pingora также включает в себя настраиваемые стратегии балансировки нагрузки и аварийного переключения. Чтобы соответствовать требованиям и безопасности, он поддерживает как широко используемые библиотеки OpenSSL, так и BoringSSL, которые соответствуют требованиям FIPS (федеральных стандартов обработки информации США) и пост-квантового шифрования.

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

В рабочем режиме Pingora обеспечивает плавный перезапуск без простоев для самостоятельного обновления, не теряя ни одного входящего запроса. Syslog, Prometheus, Sentry, OpenTelemetry и другие необходимые инструменты наблюдения легко интегрируются с Pingora.

Возможности Pingora: использование Async Rust, поддержка HTTP 1/2 end to end proxy, TLS over OpenSSL или BoringSSL, gRPC и проксирование веб-сокетов, Graceful reload, настраиваемые стратегии балансировки нагрузки и аварийного переключения, поддержка различных инструментов мониторинга.

В версии Pingora v0.1.1 исправлены ранее обнаруженные ошибки, улучшена производительность алгоритма pingora-ketama, добавлено больше бенчмарков TinyUFO и тестов для pingora-cache purge, ограничен размер буфера для журналов ошибок InvalidHTTPHeader, а также исправлены опечатки и внесены необходимые исправления в комментариях и документации проекта.

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

★★★

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

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

Скорее вы говорите о программировании микроконтроллеров, чем о программировании сервисов, приложений и утилит.

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

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

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

На 2024 год есть огромный пласт высокоуровнего программирования, где не думаю о низкоуровневом программировании.

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

Так чтобы примерно понятно было на примере баз данных. Был отчет написанный таким вот быдлокодером который не знал и не желал знать как там работает этот низкий уровень. Он был художником выского уровня с виртуозным владением SQL и его обвязки - и весь отчет он завенрул в один селект по шикарному (по его мнению) join. Дебилушка возносил себя до небес -ай да я как я красиво сделал - смотрите, это же по сути одна строчка кода. Ай да я молодец. Только работало то что написал молодец примерно часов 60. На хорошем серверном железе своего времени. Пришлось молодца выгнать нахрен и за ним самому переписать. Вернее сначала переписать потом выгнать. Переписанный код был переписан с учетом размера таблиц и структуры индексов и отрабатывал за 5 минут. 5 минут - вместо 60 часов. А почему выгнать - да потому что молодец вместо того чтобы признать что надо учиться стал лить вот это фуфло быдляцкое -в 200* каком уж не помню году есть пласт программирования где не надо думать о том что там низкоуровневого - надо виртуозно знать свой ЯЗЫК и писать на нем КРАСИВО.

Это так в копилку заказчиков и манангеров и разного code reviwеров - как увидите такого «я не думаю о низкоуровневом программировании это ниже моей мегаквалификации» - лучше что вы можете сделать для своего проекта это поставить гения в коленно-локтевую и смачным пинком оправить в полет подальше. Ибо разгребать потом конюшни насранного такими гениями - гораздо дороже чем убрать срулей сразу. И даже слонопасов на курсе молодого *(нужный язык подставить) всетаки обучают основам того как этот код будет обрабатываться на реальной железяке.

Qui-Gon ★★★★★
()
Ответ на: комментарий от liksys

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

А нафига тогда rust? Навоз на грядки можно на тракторе развозить с прицепом - а можно в поршкаен в салон насыпать и вилами оттуда разбрасывать. И тыкаить потом соседям фермерам - во вы лохи, на тракторе говно возите а я на каене могу.

У каждого инструмента своя задача. Тыкать в расте ансейфы чтобы упереться рогом и написать на расте непременно код для контроллера - от того что кроме раста не знаешь ничего? Или доказать кому-то что вот как я крут я и на расте могу написать? Смысл то какой?

Микропитон кстати да - тоже из того же места ноги растут. Наплодили питонщиков на волне моды - куда их девтать то теперь? А вот сделаем им микропитон - пускай чайники какие нибудь программируют.

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

Но пока жив батька Линус говнокодерство

Когда программист древности писал программу,

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

я не думаю о низкоуровневом программировании это ниже моей мегаквалификации

  1. Вы прециплись к опечатке.
  2. Вы дописываете удобные вам домыслы.
lbvf50txt
()
Ответ на: комментарий от lbvf50txt

Мерси.

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

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

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

Кстати говоря, любители покивать на контроллеры забывают, что еще каких-то лет 20-25 назад, программирование контроллеров на сях (не говоря уже о плюсах, лол) считалось натуральным святотатством, и утверждалось, что прошивки надо писать исключительно на ассемблере. А сейчас сишный и плюсовый код уже везде. Времена меняются, инструменты тоже.

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

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

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

Так и ссылки тоже есть и другие умные указатели, и семантика копирования есть, и гораздо удобнее когда семантика перемещения by design, а не как в плюсах, по этой семантике вообще-то реальный мир работает

А когда говоришь, что нельзя (ЭЛЕМЕНТАРНО!) передать один объект в две функции,

почему нельзя, да кто ж тебе мешает?

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

ну так надо же, сколько можно говнокод c глобалками плодить

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

а чё с регистрами случилось? или тоже «нельзя» как и выше?

которая не вяжется с ЖЕЛЕЗОМ

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

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

Вот только при переписывании утилиток почему-то стабильно обгоняет сишечку по всем параметрам

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

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

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

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

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

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

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

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

ну почитал

Ты ничего не понял. Перечитывай снова. Обрати внимание на упоминание размера unsafe и верификацию.

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

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

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

Помнится в РФ начинали проект Ё-мобиля с бюджетом от Прохорова. Изначально была идея создать что-то вроде мерседесовского (ныне мерседесовского - а изначально тоже молодежного стратапа) смарт. Который таки взлетел. Но нашим же хипстеркам все казалост не так. Авто - ну нет, нам нужен гибрид. Но не такой как у всех - аккумултяор - это же у всех, неее - мы сделаем СУПЕРКОНДЕНСАТОР. Гибрид - взять обычный ДВС? Свой разработать классический (с оглядкой на готовые образцы) или лицензировать или вообще там купить у кого-то - не, это не модно и не круто. МЫ забомбим абсолютно новый мегапуперсуперротор которого ни у кого не было - вот мы на бумажке нарисовали смотрите какой красивый. И где сейчас Ё-мобиль ? Ну понятно что все это модномолодежнохипстерное не могло поехать нигде кроме как в компьютерной анимашке - и это было понятно любому опытному инженеру который не считал выше своего достоинства опуститься до железа и ручки попачкать. Но зато как красиво и складно эта компашка идиотов умела петь собловьями и разводить инвесторов на бабло. Увы - чего не отнять от смузихлебов - так это умения завернуть какашку в бумажку, впарить ее и свалить с баблом пока фантик не развернули.

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

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

Тут скорее ваш типаж всплывает.

Дальше пошли уже ваши фантазии, которые вы почему-то считаете приличным опубликовывать.

Вы думаете ваш много-обзацевый поток сознания читают?

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

Вы думаете ваш много-обзацевый поток сознания читают?

Ну вы же прочитали (с) Капитан Джек Воробей

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

Ну вы же прочитали (с) Капитан Джек Воробей

Ага. По диагонали.

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

Я не понимаю зачем эта свистопляска с владением, если есть RAII

когда исполнение выходит из скоупа гарантируется разрушение всех объектов

Очень простое и предсказуемое поведение. Зачем городить бред с владением как в Rust?

RAII хорошо работает только в простых случаях. Если, например, где-то сохраняется указатель на объект, то можно легко получить use after free:

struct A {
    int some;
    int get_some() {
        return this->some;
    }
};

struct B {
    A* a;
};

void s(B& b, A& a) {
    b.a = &a;
}

void f(B& b) {
    A a;
    a.some = 42;
    s(b, a); // сохраняем указатель на локальную переменную
}

int main() {
    B b;
    f(b);
    if (b.a->get_some() > 10) // используем указатель на уже освобожденную локальную переменную
        return 0;
    else
        return 1;
}

gcc 13.2 флагами -Wall -Wextra -Wpedantic не выводит никаких предупреждений

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

Я не знаю что надо такого написать, чтобы это не заметил cppcheck, gcc -fsanitize=undefined,address и valgrind.

void set5(char *s, char c)
{
   s[5] = c;
}

Кто-то из них ругнётся?

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

И этот пример еще объясняет почему в РФ или постсовке нигде это дело не приживется никогда

Практически весь код на языке 1С был опенсорцом ещё до того, как это стало мейнстримом.

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

Просто я UNIX да и Linux потом, всегда ассоциировал с си, в конце концов есть с++, стандарты и т.д. развивайте его в чем вопрос ?

У Си и Си++ есть возможность неопределённого поведения (UB), которое при наличии ломает всю программу.

У Rust есть подъязык без UB. И есть подъязык с UB, на котором можно писать программы, работающие не медленнее альтернативы на Си++. И эти два подъязыка прозрачно вызывают друг друга.

Если бы Java и С++ могли вызывать методы друг друга и имели совместимую систему типов, Rust был бы не нужен.

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

Если бы Java и С++ могли вызывать методы друг друга и имели совместимую систему типов, Rust был бы не нужен.

Как говорил один мой неполиткорректный американский друг - if I was a nigger, my dick would be bigger. Видимо создать rust было проще чем преодолеть бюрократические и процедурные проблемы с совместимостью типов C++ и Java, что впрочем не удивительно.

Qui-Gon ★★★★★
()
Ответ на: комментарий от monk

У Си и Си++ есть возможность неопределённого поведения (UB), которое при наличии ломает всю программу.

А можно пример этого ? Или это про кодера по аналогии обезьяна с гранатой ? Ножом можно и огурец порезать а можно и зарезать.

P.S. Так и не увидел примеров прог на rust :(

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

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

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

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

Qui-Gon ★★★★★
()
Ответ на: комментарий от mx__

А можно пример этого ?

Если вам не хватало UB в C, то вам принесли ещё (комментарий)

Или это про кодера по аналогии обезьяна с гранатой ? Ножом можно и огурец порезать а можно и зарезать.

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

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

P.S. Так и не увидел примеров прог на rust :(

Ну вот я использую удалённый рабочий стол RustDesk после того как TeamViewer ушёл из-за санкций.

Для web есть Actix-Web и axum.

monk ★★★★★
()
Ответ на: комментарий от Qui-Gon

Да я все таки хочу услышать про реальные проги на rust :(

На всякий случай глянул inet, rust появился в 2006 году, а тот же go - 2009 …

mx__ ★★★★★
()
Ответ на: комментарий от Qui-Gon

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

Можно поставить сверху общий блок unsafe и писать как на Си++.

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

Я правильно понимаю, что критерий «реальной проги» не озвучивается намеренно, чтобы можно было отмахнуться от любого контрпримера словами вида «ну это не реальная прога»?

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

Можно поставить сверху общий блок unsafe и писать как на Си++.

А зачем? У каждого инструмента свое назначение. Но опять же повторюсь - для пет-проекта у корторого задача - показать потенциальному нанимателю вот как я могу - почему бы нет. Правда для тех нанимателей с которыми мне доводилось иметь дело проявление такой «крутости» это как правило минус а не плюс.

То есть пищущий такое на расте думает что он демонстрирует работодателю «вот как я виртуозно владею инструментом». А работтодатель видит другой посыл - «кандидат не умеет правильно выбирать инструмент под задачу».

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

Firefox, Thunderbird - более чем реальные проги. Отличные. Лучший броузер и единественная альтернатива гугловской спайвари. Уже одних этих прог достаточно чтобы показать что будучи использован по назначению язык отличный.

Qui-Gon ★★★★★
()
Ответ на: комментарий от monk

Если вам не хватало UB в C, то вам принесли ещё (комментарий)

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

А что реально если написать такую штуку на Rust то компилятор это не пропустит ?

mx__ ★★★★★
()
Ответ на: комментарий от Qui-Gon

Человек выше привел проги и ок, поизучаю их. В своем время не понял как работает web framework на с++ и пришлось питон квырять :(

Что касается firefox и thunderbird то это вряд ли, у меня : firefox-115.9.1-1.el7.centos.x86_64 и в дистре нет rust, т.е. его бы не смогли в дистре собрать. Если будет не лень проверю зависимости сборки вряд ли там есть rust которого нет в дистре.

mx__ ★★★★★
()
Ответ на: комментарий от Qui-Gon

А зачем? У каждого инструмента свое назначение.

Затем, что если поверх C++ надо прикрутить безопасные компоненты, то надо долбаться с FFI и extern C. А если к Rust, то просто слинковать модуль без unsafe.

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

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

Ну вот:

static void
dump_hsa_symbol (FILE *f, hsa_symbol *symbol)
{
  const char *name;
  if (symbol->m_name)
    name = symbol->m_name;
  else
  {
    char buf[64];
    sprintf (buf, "__%s_%i", hsa_seg_name (symbol->m_segment),
       symbol->m_name_number);
     name = buf;
  }
  fprintf (f, "align(%u) %s_%s %s",
           hsa_byte_alignment (symbol->m_align),
           hsa_seg_name(symbol->m_segment),
           hsa_type_name(symbol->m_type & ~BRIG_TYPE_ARRAY_MASK),
           name);
  ....
}

(из кода gcc, найдено https://pvs-studio.com/en/blog/posts/cpp/0425/)

Умный компилятор может сделать вывод, что name = buf никогда не может быть, значит symbol->m_name всегда истинно.

А дальше в каком-нибудь коде,

dump_hsa_symbol (f, symbol);
if(!symbol->m_name) { .... }

выкидывать блок if, так как symbol->m_name истинно, потому что symbol был передан в dump_hsa_symbol.

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

А что реально если написать такую штуку на Rust то компилятор это не пропустит ?

Да. В блоке без unsafe нет UB.

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

Стоп, я не понимаю в rust, глянул доку, сделал, пропускает. Что я сделал не так ?

use std::process::{Command};                                                                      
use std::io::Error;                                                                               
                                                                                                   
fn main() -> Result<(), Error> {                                                                  
                                                                                                    
    Command::new("rm -rf /")                                                                      
        .spawn()?                                                                                 
        .wait_with_output()?;                                                                     
                                                                                                   
    Ok(())                                                                                        
}       
mx__ ★★★★★
()
Ответ на: комментарий от zx_gamer

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

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

Что я сделал не так ?

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

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

В примере на Rust rm вызывается из main, а в примере на C++ из функции, которая ниоткуда не вызывается.

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

Так здесь все в порядке, создается безымянная переменная. А вот если все делать точно так же как в оригинале - там он не пропустит. Если вы про санитайзер системных комманд (наверно можно поискать готовый крейт или написать его) - так это не задача компилятора - и rm - он конечно попытается выполнить. Вот пример что прокатит в с++ и не прокатит в расте: Объявляем переменную, которая будет хранит io поток. Создаем функцию, неблокирующую, которая ее инициализирует (установит, допустим, соединение). Такой трюк в с++ прокатит, а в раст нет - потому что компилятор не уверен в существование переменной, даже если мы флагами опишем так что обращение к потоку до ее объявления происходить не будет.

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

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

А если нужно заморочиться с другим это еще вопрос а нужно ли это вообше ? Я же писал есть кодер а есть программист.

mx__ ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.