The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Google переписал на языке Rust прошивку pvmfm, используемую в Android, opennews (??), 10-Окт-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


12. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +10 +/
Сообщение от Анонимусс (?), 10-Окт-23, 12:01 
> но ситуация должна измениться после стабилизации поддержки макросов

Ну так для этого и нужно на нем писать. Чтобы понять чего не хватает/мешает и добавить/убрать это.
Раст же развивается, а не деградирует, в отличие от))

Ответить | Правка | Наверх | Cообщить модератору

18. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  –2 +/
Сообщение от Аноним (18), 10-Окт-23, 12:05 
Сейчас даже println! не могут нормально реализовать в макросах, так и пишет коментарием, что встроено глубоко в компилятор.
Ответить | Правка | Наверх | Cообщить модератору

37. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +5 +/
Сообщение от morphe (?), 10-Окт-23, 12:25 
println можно макросами реализовать, format тоже, и вообще все такие макросы, что не должны возвращать значение зависимое от borrowed данных. Смотри все крейты для логгирования в Rust, они же представляют свои альтернативы println.

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

let a = format_args!(...);

Должен раскрываться в

let _a = data_for_format(...);
let a = args(&data);

Однако если ты делаешь свой макрос, то тебе не обязательно пытаться повторить поведение format_args, поскольку если твой макрос будет сам переменную объявлять:

my_format_args!(a, ...);

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

Ответить | Правка | Наверх | Cообщить модератору

232. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от morphe (?), 10-Окт-23, 22:32 
В простых случаях его даже сейчас можно перевести на процедурный макрос:
    let a = 1;
    let b = 2;
    let c = a + b;
    format_args!("{a} + {b} = {c}")
Раскрывается в
        let a = 1;
        let b = 2;
        let c = a + b;
        Arguments::new_v1(&["", " + ", " = "],
            &[Argument::new_display(&a),
                        Argument::new_display(&b),
                        Argument::new_display(&c)])
Где new_v1, new_display - обычные функции, без магии:
  new_v1: https://doc.rust-lang.org/src/core/fmt/mod.rs.html#307
  new_display: https://doc.rust-lang.org/src/core/fmt/rt.rs.html#82-98
Ответить | Правка | Наверх | Cообщить модератору

201. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от Анонем (?), 10-Окт-23, 20:02 
Это факт. Непонятно почему коммент минусят? В исходниках println реально есть комментарий, что это магия компилятора.
Ответить | Правка | К родителю #18 | Наверх | Cообщить модератору

209. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от Fyjy (?), 10-Окт-23, 20:12 
Вот комментарии и код макроса println
  https://doc.rust-lang.org/src/std/macros.rs.html#85
с 85 по 139 строку.
Ты не мог бы подсказать, где именно этот самый комментарий?
Ответить | Правка | Наверх | Cообщить модератору

221. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от Додо (?), 10-Окт-23, 21:00 
Наверное, здесь?
https://doc.rust-lang.org/src/core/macros/mod.rs.html#904-907
/* compiler built-in */
Ответить | Правка | Наверх | Cообщить модератору

228. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от morphe (?), 10-Окт-23, 22:23 
> Наверное, здесь?
> https://doc.rust-lang.org/src/core/macros/mod.rs.html#904-907
> /* compiler built-in */

То, что оно реализованно как compiler built-in, не означает что оно не может быть реализовано процедурным макросом.
Многие интринзики компиляторов GCC/Clang же тоже можно реализовать напрямую через asm вставки, но это не сделано по разным причинам.

format_args же так реализован потому что с таким синтаксисом, который у него есть, его не получится реализовать, можно только если он сам будет объявлять переменную со структурой Arguments: https://www.opennet.ru/openforum/vsluhforumID3/131737.html#37.
Однако даже когда вопросы с этим разрешат (По идее это часть https://github.com/rust-lang/rust/issues/54727), не факт что стандартную реализацию переведут, поскольку специальная обработка компилятором позволяет также сильно сократить время компиляции, которое у Rust и так не маленькое.

А format_args! много где используется. format!, println!, writeln! и прочее в стандартной библиотеке (Они реализованы как обычные макросы использующие format_args!, а не как built-in), и вся экосистема для логов (Крейты tracing, log) также его используют.

Ответить | Правка | Наверх | Cообщить модератору

237. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от Додо (?), 11-Окт-23, 00:56 
Просили подтверждение, что этот макрос работает на магии (вместо конкретных исходников на самом Rust) - получите. Я ж не отрицаю, что аналогичный функционал можно реализовать средствами самого языка.
Тут вопрос должен быть скорее другой: зачем это сделано именно так, а не иначе?
А фишка в том, что format_args раскрывается на этапе компиляции, а не выполнения, в отличие от других языков. Благодаря этому достигается бо́льшая скорость выполнения кода (не нужно тратить время на разбор шаблона при каждом вызове printf), но недостатком является невозможность использовать произвольный шаблон из переменной (для этого уже нужно разбирать шаблон вручную).
Ответить | Правка | Наверх | Cообщить модератору

238. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от morphe (?), 11-Окт-23, 01:16 
> А фишка в том, что format_args раскрывается на этапе компиляции, а не
> выполнения, в отличие от других языков.

Это да, но это не причина по которой он является built-in. В Rust есть процедурные макросы, которые позволяют реализовать точно такой же функционал, т.е на этапе компиляции генерировать код не по шаблону, те же #[derive(...)] являются процедурными макросами.
И format_args с чуть изменённым синтаксисом можно было бы сделать тоже процедурным макросом.

Вот например есть крейт ufmt, реализующий форматирование с намного меньшим количеством кода (Это полезно для embedded): https://docs.rs/ufmt/latest/ufmt/macro.uwriteln.html
И это как раз аналог writeln!(), но реализованный не через built-in format_args!, а как процедурный макрос.

Ответить | Правка | Наверх | Cообщить модератору

32. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  –1 +/
Сообщение от Аноним (32), 10-Окт-23, 12:19 
Не думой, пиши!11

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

Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

36. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  –1 +/
Сообщение от Анонимусс (?), 10-Окт-23, 12:23 
Ну так пишите на 2021 edition. Там вообще ничего не меняется.
Вас кто-то заставляет использовать последние версии?
Ответить | Правка | Наверх | Cообщить модератору

53. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +2 +/
Сообщение от Аноним (53), 10-Окт-23, 12:41 
Stable rust nonsense. Stay unsafe!
Ответить | Правка | Наверх | Cообщить модератору

138. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от Аноним (-), 10-Окт-23, 15:29 
А это ничего что раст принципиально не бекпортит фиксы на свои дыры?
Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

168. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от Анонимусс (?), 10-Окт-23, 17:45 
А какое отношение edition имеет к версии компилятора?
Последний компилятор собирает любой edition начиная с 2015го.

All Rust compiler versions support any edition that existed prior to that compiler’s release, and they can link crates of any supported editions together. Edition changes only affect the way the compiler initially parses code. Therefore, if you’re using Rust 2015 and one of your dependencies uses Rust 2018, your project will compile and be able to use that dependency. The opposite situation, where your project uses Rust 2018 and a dependency uses Rust 2015, works as well.
https://doc.rust-lang.org/book/appendix-05-editions.html

Ответить | Правка | Наверх | Cообщить модератору

45. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от Аноним (45), 10-Окт-23, 12:35 
Комментаторам выше - Если zip выйдет только в С++23, то зачем на этом языке писались все эти программы столько десятилетий? Ведь zip используется в каждой программе от мала до велика.

Каждый день могу мимоходом находить по программе на раст, которую можно смело использовать уже сейчас. Сегодня нашел https://github.com/orhun/systeroid пользуйтесь на здоровье, и продолжайте плевать в тех кто для вас пишет бесплатно.

Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

123. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от Аноним (123), 10-Окт-23, 14:29 
Истероид и систероид? А зачем? Какой такой безопасности мне дало наличие несопровождаемой лапши в плохо оттестированной левой тулзе пытающейся мимикрировать под софт который миллионы людей десятки лет наяривают? Чтобы страдать на локалхосте в никому ненужные параметры с сомнительной документацией? Кто-то бесплатно написал для себя - ну, прикольный пэт, но мы ему ничего не должны, мы его не просили нам эту ахинеечку навязывать. А тебя и тем более.
Ну а про каждый день - тут откровенно кое-кто брехло
Ответить | Правка | Наверх | Cообщить модератору

239. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  –1 +/
Сообщение от Прохожий (??), 11-Окт-23, 01:24 
> наличие несопровождаемой лапши

Если ты чего-то не понимаешь, это совсем не означает, что это плохо.

> в плохо оттестированной левой тулзе

Из чего это следует? Или просто тебе так хочется?

> под софт который миллионы людей десятки лет наяривают

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

Доступно излагаю?

Ответить | Правка | Наверх | Cообщить модератору

196. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от Аноним (196), 10-Окт-23, 19:11 
А потом твой сисьтероид бросит из-за выгорания единственный разработчик и ты останешься сидеть на неподдерживаемом копролите. Я кстати почти не ерничаю, просто реально нет смысла пересаживатся на такие пачками мрущие микропроекты.
Ответить | Правка | К родителю #45 | Наверх | Cообщить модератору

240. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от Прохожий (??), 11-Окт-23, 01:26 
Вполне возможно, что этот микропроект и умрёт. Но также возможно, что люди, сравнив этот микропроект и то убожество, которое идёт в стандартной поставке, захотят лучшего.
Ответить | Правка | Наверх | Cообщить модератору

165. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от keydon (ok), 10-Окт-23, 17:30 
Макросы это то что надо было убрать из C.
А раст не только не убрал их, так еще и сделал метаязык для макросов, который еще и сильно отличается от самого раста.
Подозреваю долгая комиляция раста в том числе благодаря этому "прексрасному" решению.
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

241. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от Прохожий (??), 11-Окт-23, 01:28 
> Макросы это то что надо было убрать из C

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

Ответить | Правка | Наверх | Cообщить модератору

276. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от keydon (ok), 11-Окт-23, 15:35 
>> Макросы это то что надо было убрать из C
> Почему? Макросы - дополнительный уровень абстракции и, следовательно, большей гибкости.

goto тоже дополнительный уровень абстракции и весьма гибкий, его тоже стоит использовать по вашему мнению?

Потому что
макросы надо сначала отпроцессить, это как миниум один раз пройтись по всему тексту это сильно усложняет и утяжеляет IDE и ощутимо замедляет компиляцию
макросы могут ломать логику языка (вроде #define TRUE 0) и тяжело читаются (вроде A_plus_B * C может быть совсем не тем же самым что VAR * C из-за порядка выполнения арифместических действий)
макросы выглядят чужеродно, это костыль к языку, а не функционал (в отличии от темплейтов например)
макросы не нужны. Кроме условной компиляции (которую бы стоило заменить на более подходящии конструкции) как правило применение макросов являются костылем и говорят об архитектурных проблемах в проектах (возможно есть исключения, но в целом)

Ответить | Правка | Наверх | Cообщить модератору

259. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от Аноним (259), 11-Окт-23, 09:42 
>Макросы это то что надо было убрать из C

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

Ответить | Правка | К родителю #165 | Наверх | Cообщить модератору

277. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +/
Сообщение от keydon (ok), 11-Окт-23, 15:37 
>>Макросы это то что надо было убрать из C
> Не макросы убрать, а препроцессор. Макросы обрабатывать самим компилятором, чтобы получать
> адекватные и вовремя сообщения о проблемах. Т.к., в таком случае, компилятор
> может проанализировать, в корректную ли языковую конструкцию развернётся макрос.

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

Ответить | Правка | Наверх | Cообщить модератору

267. "Google переписал на языке Rust прошивку pvmfm, используемую ..."  +1 +/
Сообщение от Sw00p aka Jerom (?), 11-Окт-23, 11:59 
>Макросы это то что надо было убрать из C.

прошло 20 лет и я увидел этот комент, о великий магду :)

Ответить | Правка | К родителю #165 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру