LINUX.ORG.RU
Ответ на: комментарий от Shadow

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

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

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

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

Про freestanding сказали выше, с ним компилятор просто так вставлять вызовы стандартной библиотеки (которые вы не просили) не будет. И дело всё в том, что freestanding как раз существует под те условия, когда экономят даже на libc.

Без него же конечно может схитрить и подумать, что printf(«%s\n», foo) вполне валидно соптимизировать в puts(foo). И будет прав.

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

Автор высера не смог добавить -O, о какой там разнице чего-то с чем-то речь

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

Мешки ворочать^W^Wписать статьи не так чтобы моё. Ну и я ненастоящий программист на расте, я уже год не могу сделать аналог гошечного приложения с работы, чтобы просто сравнить. Там где на go я не без головняка на их CSP сделал, то на рачтовых асинках получается такой лютой гомолюбовью, что уже третья попытка вызывает состояние «meh…»

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

А точней не считают нужным нести идеи 60-х годов.

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

Не знаю, откуда...

А, тогда понятно, почему эта статья.

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

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

Подробнее о мотивации см. здесь.

Siborgium ★★★★★
()

Какое же говно.

Опять ссышник пытается обосрать кого-то, но забывает снять штаны.

Сообщество Rust — это мир фанатиков

Ну да, а сообщество ссышников ни разу не фанатики.

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

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

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

какой смысл этого органичения?

Типа такого, для format string: https://gcc.godbolt.org/z/TrPaenbaT

Хотя можно было бы и исключения кидать если строка плохая и проверяется в runtime, тогда можно и без consteval.

println!() - это макрос, и первым аргументом он принимает строковой литерал, а не строку/ссылку на строку/указатель на строку. Т.е. println!(s, 1) невалидно всегда.

Но видимо в Rust можно ограничить строковыми литералами какими-то другими средствами…

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

Я настоятельно рекомендую почитать хотя бы ту самую книгу Rust’а перед тем, как писать ерунду о своем же объекте почитания на публику.

consteval (C++)

Sometimes, however, we want to express that a function should always produce a constant when called (directly or indirectly), and a non-constant result should produce an error.

const (Rust)

Certain forms of expressions, called constant expressions, can be evaluated at compile time. In const contexts, these are the only allowed expressions, and are always evaluated at compile time. In other places, such as let statements, constant expressions may be, but are not guaranteed to be, evaluated at compile time. Behaviors such as out of bounds array indexing or overflow are compiler errors if the value must be evaluated at compile time (i.e. in const contexts). Otherwise, these behaviors are warnings, but will likely panic at run-time.

Siborgium ★★★★★
()

Мужики, я тут не очень в курсе про раст, расскажите, это C для джавистов, которые не осилили C, и при этом не любят плюсы, верно?

P.S. я если чо не имею ничего против раста, правда синтаксис страшненький, прям как у плюсов

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

Есть пруфы?
Я так-то не знаю никакого места где собирается сообщество «ссышников», хотел бы пойти посмотреть

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

Есть пруфы?

Этот тред.

Я так-то не знаю никакого места где собирается сообщество «ссышников»

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

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

Блин, чот никаких разговоров о C тут нет толковых :(

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

Типа такого, для format string: https://gcc.godbolt.org/z/TrPaenbaT

А. В Rust это есть, просто реализовано несколько иначе:

const fn foo(_s: &str) -> i32 {
    0
}

fn main() {
    const A: &str = "foo";
    let a = "foo";
    
    // OK. A is const, foo(A) is const, LSH requires foo(A) to be const.
    const FOO: i32 = foo("foo");
    
    // OK. a is not const, foo(a) is not const, LHS is mutable variable - foo(a) is not required to be const.
    let mut b = foo(&a);
    
    // ERROR. a is not const, foo(a) is not const, but LHS requires foo(a) to be const.
    //const FOO2: i32 = foo(a);
}
anonymous-angler ★☆
()
Ответ на: комментарий от luke

Правда, уверен, автор и его науч считают хабр помойкой.

Безотносительно статьи, хабр и так уже превратился в помойку. 80% переведенные Google Translate без вычитки статьи из топа Reddit/HN в корпоблогах (или копроблогах, как правильно пишется?), 20% — скудный креатив от тех же копроблогов, типа: «Наше агентство поможет вам переехать в центр мира — Литву». Кстати, года 3 назад в Армению так же звали, LOL.

Тьфу.

А в комментах сплошной кукушкопетухинг.

Когда на Хабре появился шизофреник копрофил GamerSuper, он моментально набрал гигантскую карму и толпу фанатов. Это всё, что надо знать о Хабре, в общем-то.

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

И зачем мне читать? Я же выше уже описал это поведение.

Другое дело что я до этого момента вообще не знал про consteval в плюсах. И даже теперь когда знаю, не вижу в нём смысла. Там где LHS - константа, код с не-константой всё равно не скомпилируется, верно? А там где нужна переменная - только создаст дополнительное препятствие без причины. Может этому есть какое-то применение, но мне оно неведомо.

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

И даже теперь когда знаю, не вижу в нём смысла.

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

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

Я бы к себе в команду его взял.

"А мальчонку я с собой забираю. Толковый мальчонка." (c)

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

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

По идее же consteval - это то же самое что constexpr, с той лишь разницей что результат может быть только константой, иначе ошибка компиляции. И если это так, то зачем оно нужно? Ведь в constexpr всё равно невозможно использовать не-константные значения.

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

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

ox55ff ★★★★★
()

ученика Столярова

Это как Драко Малфой или хуже?

gremlin_the_red ★★★★★
()

Пообщаца с автором статьи Алексеем Вересовым (учеником Столярова) можно на сайте самого Столярова в комментариях, там Вересов вполне активно отвечает. Разумеется, на сайте Столярова жёсткая премодерация, так что имейте ввиду.

http://stolyarov.info/node/342

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

Так там lhs - переменная. Я же говорю про

constexpr auto _2 = expr(x);

которое не скомпилируется. Мне кажется весьма нерациональным введение ещё одного ключевого слова, когда то же самое уже достижимо, и весьма тривиально, имеющимися. Если мне нужна переменная - пишу без constexpr, если нужна константа - пишу с constexpr. Что будет результатом функции - зависит от контекста точки вызова.

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

Если мне нужна переменная - пишу без constexpr, если нужна константа - пишу с constexpr

«LHS rule», а точнее присваивание возвращаемого значения функции const[expr] переменной, это способ «насильно» поместить функцию в constant-evaluated context.

Мне кажется весьма нерациональным введение ещё одного колючевого слова, когда то же самое уже достижимо, и весьма тривиально, имеющимися.

Недостижимо.

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

Ломающие новости

Новое слово в косноязычии.

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

Ну, окей, хорошо, считай что убедил. Я ничего не знаю про «reflection value» и почему ему нельзя оказаться в рантайме, так что добавить мне в общем-то нечего.

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

СТАТЬЯ ГОВНО, АВТОР ПИШЕТ БРЕД

@

ЕМУ УКАЗЫВАЮТ, ЧТО СТАТЬЯ ГОВНО, И ОН ПИШЕТ БРЕД

@

«СМАТРИТЕ, У ВАС ПОДГОРЕЛО, КАКАЯ ХОРОШАЯ СТАТЬЯ»

https://i.kym-cdn.com/photos/images/original/000/738/028/121.png

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

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

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

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

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

но пройти капчу на том сайте - это квест какой-то - смотрю в центр и не пойми есть там какие-то буквы или же нет их

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

Найми индусов-провидцев капчи. Не белый человек, что ли?

ashot ★★★★
()

Заглянув в исходники Rust, вы увидите, что он определён через макрос format_args_nl!, который в свою очередь имеет буквально следующее определение:

macro_rules! format_args_nl { ($fmt:expr) => {{ /* compiler built-in */ }};

И автор сразу делает вывод, что built-in это хак компилятора, поэтому макросы говно. Мне лень проверять, но что-то мне подсказывает, что под «builtin» там подразумевалось не это, а «вы не должны завязываться на текущую имплементацию».

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

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

Я не поленился пройти по ссылке и почитать. И мои опасения оправдались: автор сравнивает код абстракции без включенных оптимизаций :facepalm:. Дописываем «rustc -O» – и о чудо, ассемблерная простыня схлопывается. Видимо он не в курсе, что конструкции из функциональных ЯП появились ещё в C++ (ranges) именно после того, как компилятор научился такое неплохо оптимизировать. Да и сравнивает зачем-то с Си, хотя Rust вышел из C++11.

snizovtsev ★★★★★
()

Прочитал половину, и понял, что писал идиот.

Я не умею в Rust от слова вообще, но когда человек начинает жаловаться, что в языке есть конструкция типа 0...10, создающая Range без долгих разбирательств, и он от этого пугается — значит, он явно провёл последние лет двадцать в болоте и даже сейчас из него по-настоящему не выполз.

Miguel ★★★★★
()

А мне понравилось! Прям читал и хихикал над растаманами ))

deep-purple ★★★★★
()
Ответ на: комментарий от Miguel

он явно провёл последние лет двадцать в болоте

Всё куда печальнее. Человеку в целом всего 20 лет, он лишь в начале пути, но уже испорчен с порога учениями своего «мастера».

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

http://stolyarov.info/node/342.

Комментарий:

Попробуйте добавить -O к ключам компилятора rustc. Иначе заявленные числа ассемблерных строк являются совершенно нерепрезентативными.

Автор:

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

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

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

Наконец — можно и включить оптимизации, результат изменится не принципиально — код будет всё так же больше и всё так же медленней в случае Раста, особенно в случае Раста «эталонного».

Спасибо за комментарий!

Он невменяем совсем.

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

JS как раз вобрал в себя довольно много новых фишек. И ещё куча всего вошла в TypeScript.

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

Rust вышел из C++11.

Ещё один. Раст вышел из ML-семейства и к ним всё ещё имеет гораздо больше общего, чем к плюсам.

Есть мнение, что именно поэтому его сисиплюсплюсеры тяжело осиливают.

Dark_SavanT ★★★★★
()

Из статьи: На самом деле это не функция, а макрос, схожий по поведению с printf из Си, но разбирающий форматную строку во время компиляции.

А чо в этом плохого?

То есть на самом деле разбор форматной строки является не просто частью подключаемой по умолчанию библиотеки, что можно было бы предположить в случае println!, использованного в примере вывода Hello World, а и вовсе частью компилятора Rust.

И чо?

При этом невозможно занести сумму в x, ведь это неизменяемое значение. Почему не константа? Константами в Rust именуется ещё одна, третья сущность, обозначающая константы времени компиляции, те что в Си обычно определяются через define:

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

Подход к изменяемости данных в Rust формулируется так: всё, что не меняется, должно быть объявлено как неизменяемое. Чтобы принудить программистов соблюдать этот подход, введение переменных было затруднено дополнительным словом mut.

А в С словов const, и чо?

Можно подумать, что 1..101 — это часть синтаксиса конструкции for, которая обозначает для n стартовое значение 1 и недостигаемое конечное 101. На самом деле это конструктор объекта итерируемого типа из стандартной библиотеки.

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

Отметим, что в языке Rust многие конструкции являются выражениями.

Как и в других языках.

Так, на самом деле условные конструкции — это условные выражения, а потому их можно присваивать и передавать.

Это плохо?

Сложность разбора подобных программ — из которых приведённая одна из самых простых! — оставлю без комментариев

Да, не надо. Дислексия - это твоя личная проблема.

Во имя безопасности и принципов Rust делает программирование на себе решительно невозможным.

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

Сообщество Rust — это мир фанатиков.

Как будто сообщество JavaScript чем-то лучше.

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

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

но уже испорчен с порога учениями своего «мастера»

Кстати, а может кто пояснить, откуда столько шума вокруг Столярова? Что с ним (не)так? Я с его «творчеством» знаком очень поверхностно, но он не произвел впечатление дилетанта или напыщенного гуру. Вот прям здесь на лоре есть те, кто его уважает, и те, кто обсирает из последних сил. Почему так?

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