The OpenNET Project / Index page

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



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

Оглавление

Rust вошёл в 20 самых популярных языков по рейтингу Redmonk, opennews (??), 30-Июл-20, (0) [смотреть все]

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


5. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  –11 +/
Сообщение от Аноним (5), 30-Июл-20, 11:47 
Модный и молодёжный язык. Жалко что он не может без рантайма. Язык претендующий на системный не должен таскать с собой батарейки. Берите пример с языка Си.
Ответить | Правка | Наверх | Cообщить модератору

11. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +5 +/
Сообщение от Аноним (11), 30-Июл-20, 11:53 
Если вы имеете в виду Rust, тогда там есть no_std, no_core.
А разве в C нет рантайма? crt0 ?
Ответить | Правка | Наверх | Cообщить модератору

15. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  –15 +/
Сообщение от Аноним (15), 30-Июл-20, 12:00 
>crt0

Это что такое?

>no_std, no_core

А-а стандартные отговорки. В Расте пишут в функциональном стиле. Отсутствие рантайма предпологают лютый процедурный код, попахивающий ассемблером. А растаманы не умеют писать люто и процедурно.

В чистом Си рантайма нет.

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

26. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +10 +/
Сообщение от Аноним (26), 30-Июл-20, 12:29 
Сразу видно специалиста!)
Ответить | Правка | Наверх | Cообщить модератору

34. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +3 +/
Сообщение от Аноним (-), 30-Июл-20, 12:39 
Не настолько уж и врет - на си реально с zero runtime и даже по сути и без ассемблера, если проц к тому располагает, типа cortex-M какого.
Ответить | Правка | Наверх | Cообщить модератору

258. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от alex312 (?), 31-Июл-20, 17:20 
>на си реально с zero runtime и даже по сути и без ассемблера,

Чувак, если ты сам накатал ResetHandler, то это значит что ты сам накатал минимальный рантайм, а не то что С может без него. Это как раз и значит что ты накатал этот самый рантам вручную.
Для AVR - это сделали разработчики libc, или уто там crt0 писал.

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

273. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (273), 31-Июл-20, 22:13 
> Чувак, если ты сам накатал ResetHandler, то это значит что ты сам
> накатал минимальный рантайм, а не то что С может без него.

ResetHandler - не рантайм в обычном понимании этого слова. Его никто не вызывает и не использует, кроме железа при ресете. Чтобы обзываться таковым у него наверное caller'ы какие-то должны быть, не?! При том что у reset handler их в общем случае by design как раз и нет.

И если это все же рантайм, является ли IRQ handler рантаймом? А обработчик сигналов в linux-ной проге?

> Это как раз и значит что ты накатал этот самый рантам вручную.

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

> Для AVR - это сделали разработчики libc, или уто там crt0 писал.

Ну так на сях можно и без crt0, вот ведь какой парадокс. Да, при этом изначально арена не соответствует стандарту. И вообще когда фирмварь после нажатия вспоминает свое состояние это выглядит крайне стебно (и, увы, опасно, ресет должен деглюк делать).

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

280. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от alex312 (?), 31-Июл-20, 22:56 
> ResetHandler - не рантайм в обычном понимании этого слова. Его никто не

почитай википедию - https://en.wikipedia.org/wiki/Runtime_system
И если у тебя в ресетхендлере инитятся переменные (.data) и зануляется .bss , то это что ни на есть настоящий рантайм.


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

63. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Аноним (63), 30-Июл-20, 13:23 
> Это что такое?

"Startup". Он подготавливает сишному коду окружение соответствующее стандарту. Можно при желании даже и без него - с некоторыми особенностями.

> А-а стандартные отговорки. В Расте пишут в функциональном стиле.

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

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

300. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от freecoderemail (?), 05-Авг-20, 10:11 
Код на Rust непонятен только тем, кто не знает Rust и никогда на нем не программировал. Код на C++ часто непонятен самим C++ разработчикам. ) Чувствуете разницу?
Ответить | Правка | Наверх | Cообщить модератору

77. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  –1 +/
Сообщение от Аноним (77), 30-Июл-20, 13:42 
>В чистом Си рантайма нет.

А libc это что?!

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

100. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (95), 30-Июл-20, 14:25 
Это вообще внешняя библиотека конкретной платформы. Далеко не везде она есть. А на МК вообще библиотек нету, как и ОС.
Ответить | Правка | Наверх | Cообщить модератору

291. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от alex312 (?), 01-Авг-20, 07:42 
>Далеко не везде она есть. А на МК вообще библиотек нету, как и ОС.

А можно пару примеров таких МК, для которых нет libc?
Или опять, абы ляпнуть ?

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

119. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (118), 30-Июл-20, 15:27 
> А libc это что?!

Либа стандартных функций. Но JFYI можно без нее. А иногда так даже и нужно. А куда вы будете делать fopen() на микроконтроллере каком, чтоли, когда у него ни малейшего намека на файловую систему нет? И как вообще это может выглядеть, при отсутствии stdin/out/FS/... ? :)

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

144. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от ann (??), 30-Июл-20, 16:58 
А в ядре нет libc, прикинь а. И ничего, написали на C
Ответить | Правка | К родителю #77 | Наверх | Cообщить модератору

82. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Анончик (?), 30-Июл-20, 13:56 
Ищвините, хочу спросить у специалистов что такое чистый си?
Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

110. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от alex312 (?), 30-Июл-20, 14:50 
чистый С - это фантастика!
Ответить | Правка | Наверх | Cообщить модератору

145. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от ann (??), 30-Июл-20, 16:59 
kernel.org
Ответить | Правка | К родителю #82 | Наверх | Cообщить модератору

32. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +2 +/
Сообщение от Аноним (-), 30-Июл-20, 12:38 
> А разве в C нет рантайма? crt0 ?

Можно и совсем без него - в режиме гольного "кодогенератора". Правда тогда придется написать в entry свой setup arena'ы, если хочется чтобы поведение соответствовало стандарту, но это довольно просто. Я так делал, канает.

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

58. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Совершенно другой аноним (?), 30-Июл-20, 13:18 
Буквально недавно обсуждали начиная отсюда: https://www.opennet.ru/openforum/vsluhforumID3/121332.html#107

Как минимум для Rust, похоже, нужен runtime в лице memcpy, memcmp, memset, rust_begin_panic и rust_eh_personality (это в режиме no_std, как я понял). C, как языку, такой runtime не нужен. В реализации gcc могут понадобиться разные хитрые процедуры 64-х разрядных умножений/делений, которые находятся в libgcc.

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

64. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (63), 30-Июл-20, 13:27 
> как языку, такой runtime не нужен. В реализации gcc могут понадобиться
> разные хитрые процедуры 64-х разрядных умножений/делений, которые находятся в libgcc.

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


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

75. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Совершенно другой аноним (?), 30-Июл-20, 13:40 
>> как языку, такой runtime не нужен. В реализации gcc могут понадобиться
>> разные хитрые процедуры 64-х разрядных умножений/делений, которые находятся в libgcc.
> Еще иногда это падло хочет memcpy, но назвать мой минимальный memcpy рантаймом
> мне как-то совесть не позволяет - функция на полэкрана не бог
> весть какой рантайм.

По логике хотеть не должен, если Вы явно не используете. Хотя, возможно, для больших структур/массивов инициализируемых:


int a[4096] = { 0 };

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

122. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (118), 30-Июл-20, 15:32 
> для больших структур/массивов инициализируемых:

Ну, я бы не назвал 16-байтовый массив таким уж прямо большим. Но вот в паре с LTO этот гад все же возжелал сие. Да еще самый угар - в optimize out оного потом сумел, как dead code. А потом обнаружил что не такой уж тот код и дед - на что сам же и пожаловался, гы! :)

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

125. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Совершенно другой аноним (?), 30-Июл-20, 15:51 
>> для больших структур/массивов инициализируемых:
> Ну, я бы не назвал 16-байтовый массив таким уж прямо большим. Но
> вот в паре с LTO этот гад все же возжелал сие.
> Да еще самый угар - в optimize out оного потом сумел,
> как dead code. А потом обнаружил что не такой уж тот
> код и дед - на что сам же и пожаловался, гы!
> :)

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

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

135. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 16:39 
> ну, возможно всё зависит от аппаратной платформы.

Cortex-M3 самый обыкновенный. Впрочем тот взбрык стал вообще фичой: там вообще static const просился на самом то деле и этот прикол лишний раз подхайлайтил этот факт, потому что нехрен мизерный RAM забивать RODATA которые вообще должны в флеше были быть :)

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

136. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 16:40 
p.s. и кстати да, RTFM показал что сие поведение описано в мане gcc. Только кто ж его читает, пока фича не укусит за окорок? :)
Ответить | Правка | К родителю #125 | Наверх | Cообщить модератору

81. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Аноним (81), 30-Июл-20, 13:50 
>>> нужен runtime в лице memcpy, memcmp, memset, rust_begin_panic и rust_eh_personality
>> как языку, такой runtime не нужен. В реализации gcc могут понадобиться
>> разные хитрые процедуры 64-х разрядных умножений/делений, которые находятся в libgcc.
> Еще иногда это падло хочет memcpy, но назвать мой минимальный memcpy рантаймом мне как-то совесть не позволяет

Т.е. ржавый memcpy - это рантайм, сишный - "не очень рантайм"?
Самим-то не смешно?

Хинт:


// These functions are used by the compiler, but not
// for a bare-bones hello world. These are normally
// provided by libstd.
#[lang = "eh_personality"]
#[no_mangle]
pub extern fn rust_eh_personality() {
}

#[lang = "panic_impl"]
#[no_mangle]
pub extern fn rust_begin_panic(info: &PanicInfo) -> ! {
    unsafe { intrinsics::abort() }
}


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

123. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (123), 30-Июл-20, 15:35 
> Т.е. ржавый memcpy - это рантайм, сишный - "не очень рантайм"?

Это ровно 1 функция. Без дергов каких либо внешний компонентов и вообще любого иного кода, довесков и прочего. Считанные байты кода, около нуля использования RAM.

>     unsafe { intrinsics::abort() }

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

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

139. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 16:54 
>> Т.е. ржавый memcpy - это рантайм, сишный - "не очень рантайм"?
> Это ровно 1 функция. Без дергов каких либо внешний компонентов и вообще
> любого иного кода, довесков и прочего. Считанные байты кода, около нуля
> использования RAM.

И че? Где там дерги внешинх компонентов-то?

>>     unsafe { intrinsics::abort() }
> Ага. А тут мы типа и не рантайм какой-то вызывали, с какой-то
> функцией, мде? И мне очень интересно - и чего вот эта
> интересно выглядящая шляпа удумает на микроконтроллере каком делать, например, ежели она все же вызовется?

С какого перепугу compiler-builtin стал рантаймом?
> As of Rust 1.38.0, intrinsics::abort lowers to a trap instruction on most architectures; on some architectures it simply lowers to call to the abort function (unmangled name). The exact behavior of intrinsics::abort is architecture and system dependent.
>

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

148. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (63), 30-Июл-20, 17:05 
> И че? Где там дерги внешинх компонентов-то?

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

> С какого перепугу compiler-builtin стал рантаймом?

Хм, а чем он интересно стал? И, главное чего эта пакость делает и насколько это оверрайднуть там можно?

>> As of Rust 1.38.0, intrinsics::abort lowers to a trap instruction on most architectures; on
>> some architectures it simply lowers to call to the abort function (unmangled name).
>> The exact behavior of intrinsics::abort is architecture and system dependent.

Охрененно. И эти люди еще будут нам тут что-то про undefined behavior лечить. Когда компилер может сделать <что-то>. Architecture dependent. При том это вообще-то видимо программу валит по задумке. И в штуке типа микроконтроллера мне вот например вообще совсем не катит подобный подход, особенно с "architecture dependent something".

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

157. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (157), 30-Июл-20, 17:34 
>> И че? Где там дерги внешинх компонентов-то?
> Ну вот там - под отсутствием рантайма в идеальном случае подразумевается что
> есть только мой код и более - нихрена.

Где "там"?

>> С какого перепугу compiler-builtin стал рантаймом?
> Хм, а чем он интересно стал? И, главное чего эта пакость делает
> и насколько это оверрайднуть там можно?

Хинт: посмотри для платформы или выкинь интринсик и впили свой код.

>>> As of Rust 1.38.0, intrinsics::abort lowers to a trap instruction on most architectures; on some architectures it simply lowers to call to the abort function (unmangled name).
>>> The exact behavior of intrinsics::abort is architecture and system dependent.
> Охрененно. И эти люди еще будут нам тут что-то про undefined behavior лечить.

И где там "undefinded"? Если есть trap для этой платформы, то он вставится компилером. Если нету, до будет ошибка при компилировании.
Если трапа недостаточно ... напиши то, что тебе именно нужно именно там.
> Когда компилер может сделать <что-то>. Architecture dependent. При том это вообще-то видимо программу валит по задумке. И в штуке типа микроконтроллера мне вот например вообще совсем не катит подобный подход, особенно с "architecture dependent something".

Отличное опровержение ... своих же фантазий.


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

181. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 18:38 
> Где "там"?

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

> Хинт: посмотри для платформы или выкинь интринсик и впили свой код.

А нельзя как-то сразу сказать что мне не надо медвежьих услуг? Ну и вообще, я вон посмотрел как растовик-затейник пытался решить "проблему Тойоты". Это когда у вас есть платформа без MMU, но очень хочется чтобы stack overflow был пойман и не порушил состояние системы. И там он совсем дошел - аж до кастомного экспериментального линкера(?!?!). Я попробовал - у меня такое, и даже круче, на си получилось с штатным гцц из системных репов. Стабильным. Без всякой экспериментальщины. Там пойнт в том чтобы перепахать layout RAM и сдалать верхушку стэка ниже прочих данных, тогда он не сможет протереть переменные, а когда RAM закончится совсем - за заезд вне региона проц уже сам даст в тыкву хардварным эксепшном. Блин, с фига оно у вас так сложно и криво? Эта типа-системная штука вообще не умеет изначально одуплять в кастомные лэйауты памяти? Или wtf?

> И где там "undefinded"? Если есть trap для этой платформы, то он
> вставится компилером.

Откуда я знаю что эти упыри вообще называют trap? Для начала не у любого проца на этом глобусе вообще есть какой-то эквивалент этого понятия, если это было нечто типа "exception" и "exception handler" по смыслу.

И тем более я ниипу как это реализовано у них на той или иной платформе. И то что это может быть еще и по разному и нет четкого определения как-то душу не греет. Вообще, на вид, ему бы какой-нибудь "freestanding mode" оформленый стандартом, как в c99 сделали, чтоли, не? А то выглядит как отписка какая-то, мол мы тут что-то сделаем а вы там ипитесь как хотите.

> Если нету, до будет ошибка при компилировании. Если трапа недостаточно ... напиши
> то, что тебе именно нужно именно там.

Самое логичное - ну, мой собственный обработчик позвать. Оно будет возбухать если своим обработчком их дефолтное барахло с какими-то там "трапами" перекрыть?

> Отличное опровержение ... своих же фантазий.

Ну, я так понял описание работы вон той фигни с ваших слов.

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

224. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 22:12 
>> Хинт: посмотри для платформы или выкинь интринсик и впили свой код.
>> Какие-то интринсики, билтинсы и проч. Всегда хочется оторвать бошку за это при програмизме под микроконтроллеры и проч.

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

> А нельзя как-то сразу сказать что мне не надо медвежьих услуг? Ну
> и вообще, я вон посмотрел как растовик-затейник пытался решить "проблему Тойоты".

Т.е. по теме сказать нечего.

> так сложно и криво? Эта типа-системная штука вообще не умеет изначально
> одуплять в кастомные лэйауты памяти? Или wtf?


$ cat link.x
/* Memory layout of the LM3S6965 microcontroller */
/* 1K = 1 KiBi = 1024 bytes */
MEMORY
{
  FLASH : ORIGIN = 0x00000000, LENGTH = 256K
  RAM : ORIGIN = 0x20000000, LENGTH = 64K
}

/* The entry point is the reset handler */
ENTRY(Reset);

EXTERN(RESET_VECTOR);

SECTIONS
{
  .vector_table ORIGIN(FLASH) :
  {
    /* First entry: initial Stack Pointer value */
    LONG(ORIGIN(RAM) + LENGTH(RAM));

    /* Second entry: reset vector */
    KEEP(*(.vector_table.reset_vector));
  } > FLASH

  .text :
  {
    *(.text .text.*);
  } > FLASH

  /DISCARD/ :
  {
    *(.ARM.exidx .ARM.exidx.*);
  }
}


Оно?

> на вид, ему бы какой-нибудь "freestanding mode" оформленый стандартом, как в
> c99 сделали, чтоли, не?

Смею заметить, что сделали аж 30 лет спустя. И эта, давно хотел спросить как у вас там с альтернативными компиляторами-то? А то сначала "ну, для gcc нужно еще сделать то и это", затем - "смотри стандарты".


> Самое логичное - ну, мой собственный обработчик позвать. Оно будет возбухать если
> своим обработчком их дефолтное барахло с какими-то там "трапами" перекрыть?

Изволите издеваться или не изволите читать? Дефолтное барахло в примере предоставляется самим погромистом компилеру. Только что анонимы возмущались по этому поводу.

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

275. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 31-Июл-20, 22:34 
> Т.е. по теме сказать нечего.

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

> Оно?

Ага. Только я не понимаю: а как по этой штуке
- Сам раст знает где у него стэк?
- Проц знает откуда стэк начинается?
- Как сие все вместе сообща играет?

Но вообще gcc'образненько так, я б сказал смотрится неплохо, люди прочухали как это должно быть. Но где тут описан layout RAM, самое интересное как раз?

> Смею заметить, что сделали аж 30 лет спустя.

Ну так те 30 лет как бы прошли. И это, нельзя было NIH урезать и стибрить идею? Или тут надо тоже 30 лет погодить? Блин, а я не МакЛауд :\

> спросить как у вас там с альтернативными компиляторами-то?

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

Так то сам код неплохо жрется тем же tcc. Но вот сгенерить поток команд cortex M он вроде не умеет, а если б даже и умел - у него не такой умный линкинг чтобы суметь структуру бинаря скомпоновать под кастомный образ, с указанием адресов и проч.

> А то сначала "ну, для gcc нужно еще сделать то и это", затем - "смотри стандарты".

Ну как бы именно злостно системные вещи имеют тенденцию несколько выезжать за пределы стандартов. Потому как сильно специфичные.

> Изволите издеваться или не изволите читать? Дефолтное барахло в примере предоставляется
> самим погромистом компилеру. Только что анонимы возмущались по этому поводу.

А, ок, значит я тормознул, пардон.

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

124. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Совершенно другой аноним (?), 30-Июл-20, 15:48 
>>>> нужен runtime в лице memcpy, memcmp, memset, rust_begin_panic и rust_eh_personality
>>> как языку, такой runtime не нужен. В реализации gcc могут понадобиться
>>> разные хитрые процедуры 64-х разрядных умножений/делений, которые находятся в libgcc.
>> Еще иногда это падло хочет memcpy, но назвать мой минимальный memcpy рантаймом мне как-то совесть не позволяет
> Т.е. ржавый memcpy - это рантайм, сишный - "не очень рантайм"?
> Самим-то не смешно?

нет, C-шный (по стандарту) runtime тоже указан в том обсуждении - для freestanding implementation это штук 9 h-файлов в которых нет ни одной функции. Т.е. вообще. Для GCC это не совсем так, как тут уже обсуждалось, есть libgcc, в которой есть поддержка 64-х разрядных операций, но это мы говорим про 32-х битные процессоры, но разных memcpy() и прочих mem*() среди них нет. И вообще сам по себе GCC не должен вставлять вызовы функций, там, где Вы этого не сделали (опять-же за исключением 64-х разрядных операций на 32-х битных процессорах).

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

130. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (130), 30-Июл-20, 16:30 
> нет, C-шный (по стандарту) runtime тоже указан в том обсуждении - для
> freestanding implementation это штук 9 h-файлов в которых нет ни одной функции.

Реально можно хоть 0 хидерфайлов. Но для C99 парочку стоит взять. Хотя-бы stdint.h, чтоли, с нормальными людскими типами. Для стандартного memcpy надо еще size_t дурацкий, это stddef.h.

> Т.е. вообще. Для GCC это не совсем так, как тут уже обсуждалось, есть libgcc, в которой
> есть поддержка 64-х разрядных операций, но это мы говорим про 32-х битные процессоры,

На кортексе M3 спокойно билдуется без всяких libgcc. И он 32-битный, разумеется.

> но разных memcpy() и прочих mem*() среди них нет. И вообще сам по себе
> GCC не должен вставлять вызовы функций, там, где Вы этого не
> сделали (опять-же за исключением 64-х разрядных операций на 32-х битных процессорах).

У меня вставил memcpy на инициализированный массив...


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

133. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Совершенно другой аноним (?), 30-Июл-20, 16:37 
>> нет, C-шный (по стандарту) runtime тоже указан в том обсуждении - для
>> freestanding implementation это штук 9 h-файлов в которых нет ни одной функции.
> Реально можно хоть 0 хидерфайлов. Но для C99 парочку стоит взять. Хотя-бы
> stdint.h, чтоли, с нормальными людскими типами. Для стандартного memcpy надо еще
> size_t дурацкий, это stddef.h.

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

>> но разных memcpy() и прочих mem*() среди них нет. И вообще сам по себе
>> GCC не должен вставлять вызовы функций, там, где Вы этого не
>> сделали (опять-же за исключением 64-х разрядных операций на 32-х битных процессорах).
> У меня вставил memcpy на инициализированный массив...

у нас такого не делал, правда для процессоров Atom.

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

151. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Аноним (151), 30-Июл-20, 17:16 
> так и я пытаюсь тут намекнуть прозрачно, что у С нет как
> такового runtime-а. Т.е. никаких функций для работы программы он не требует.

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

> у нас такого не делал, правда для процессоров Atom.

Ну это все же здорово другая архитектура. Массив для этого должен быть RW, инициализированный, да и очень врядли вы на Atom парились размером бинаря, так что LTO наверное не заморачивались. А вот когда у вас в чипаке на все 16 кил флеша, срезать добрую четверть фирмвари "совершенно нахаляву" (без потерь скорости или функциональности) почему-то становится очень уж соблазнительно. И LTO это обеспечивает. Но у него свой, довольно инопланетный подход к делу. Настолько инопланетный что он вот как оказалось даже может в принципе сам себя обмануть, посчитав memcpy напрочь unused и выкинув его. И потом заметив что не такой уж он и unused был :D. И да, вот за такие приколы я недолюбливаю builtins/intrinsics/типа-нерантайм/whatever this crap called.

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

112. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Аноним (-), 30-Июл-20, 14:52 
> Буквально недавно обсуждали начиная отсюда: https://www.opennet.ru/openforum/vsluhforumID3/121332.html#107
> Как минимум для Rust, похоже, нужен runtime в лице memcpy, memcmp, memset,
> rust_begin_panic и rust_eh_personality (это в режиме no_std, как я понял).

Везде вам рантайм мерещется. Нужны минимальные _реализации_ базового набора функций.
rust_begin_panic и rust_eh_personality - заглушки-однострочники.


#[lang = "eh_personality"]
#[no_mangle]
pub extern fn rust_eh_personality() {
}
#[lang = "panic_impl"]
#[no_mangle]
pub extern fn rust_begin_panic(info: &PanicInfo) -> ! {
    unsafe { intrinsics::abort() }
}

memcpy, memcmp, memset - можно взять из compiler-builtins, можно сваять самому
https://doc.redox-os.org/std/src/std/sys/redox/start.rs.html...

/// Memcpy
///
/// Copy N bytes of memory from one location to another.
#[unstable(feature = "start_fn", issue = "0")]
#[no_mangle]
pub unsafe extern fn memcpy(dest: *mut u8, src: *const u8,
                            n: usize) -> *mut u8 {
    let mut i = 0;
    while i < n {
        *((dest as usize + i) as *mut u8) = *((src as usize + i) as *const u8);
        i += 1;
    }

    dest
}


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

117. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Аноним (117), 30-Июл-20, 15:22 
Ну и уродство.
Ответить | Правка | Наверх | Cообщить модератору

129. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +1 +/
Сообщение от Аноним (129), 30-Июл-20, 16:10 
> Ну и уродство.

И потом эти люди удивляются что на этом никто в здравом уме не хочет операционки писать.

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

142. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 16:56 
> Ну и уродство.

Аргументативный аргумент, че.

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

186. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  –1 +/
Сообщение от Аноним (-), 30-Июл-20, 18:51 
> Аргументативный аргумент, че.

Ну реально ж дохрена каких-то диких закорюк. А с си я просто зырю описание memcpy в мане и пишу его за считаные минуты. Без этих странных закорюк.

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

225. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 22:19 
>> Аргументативный аргумент, че.
> Ну реально ж дохрена каких-то диких закорюк.

Ну раз дохрена, то покажи эти дикие закорюки, которых нет в си.

> А с си я просто зырю описание memcpy в мане и пишу его за считаные минуты.

От этого "оно выглядит не как си!" не стало серьезным аргументом.


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

276. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  –1 +/
Сообщение от Аноним (-), 31-Июл-20, 22:36 
> Ну раз дохрена, то покажи эти дикие закорюки, которых нет в си.

Ну, например, таких:
#[unstable(feature = "start_fn", issue = "0")]
#[no_mangle]

Это вообще что за монстры такие дикие? И зачем весь этот ужас в коде должен быть?

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

301. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от freecoderemail (?), 05-Авг-20, 10:33 
Это называется "атрибуты". Типа аннотаций, которыми можно помечать элементы программы. Они могут быть реализованы как в компиляторе, так и самим пользователем.
Ответить | Правка | Наверх | Cообщить модератору

126. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (129), 30-Июл-20, 16:05 
>[оверквотинг удален]
>      n: usize) -> *mut u8 {
>     let mut i = 0;
>     while i < n {
>         *((dest as usize +
> i) as *mut u8) = *((src as usize + i) as
> *const u8);
>         i += 1;
>     }
>     dest
> }

Мда...
1) В сях это определено как void* а не u8*. Это нечто для раста-онли, несовместимое с кодом на си, так?
2) Куча закорючек, да еще я не понимаю - ну ок, а если ей NULL дать на вход, то будет - что?

А, да, ну и на сях тогда уж:


void *memcpy(void *dest, const void *src, size_t n)
{
    size_t remains = n;
    uint8_t  *  sr8  = (uint8_t  *) src;
    uint8_t  *  ds8  = (uint8_t  *) dest;
    if ((dest == NULL) || (src == NULL) || (n == 0))
    {
        return dest;
    }

    while (remains > 0)
    {
        *ds8 = *sr8;
        remains--;
        ds8++;
        sr8++;
    }
    return dest;
}


Мне кажется, или оно лаконичнее, ловит явно кривые случаи как прописано в спеках, и закорючек меньше? Не буду утверждать что это 100% compliant но хотя оно делалось для стартапа, до кучи сие устроило и огромный сторонний код, которому я накидал тесткейсы и они проехали.
Ответить | Правка | К родителю #112 | Наверх | Cообщить модератору

153. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (157), 30-Июл-20, 17:25 
> Мда...
> 1) В сях это определено как void* а не u8*. Это нечто
> для раста-онли, несовместимое с кодом на си, так?

Мда, ржавый memcpy работает с ржавыми типами, вот так сюрприз ...

> 2) Куча закорючек, да еще я не понимаю - ну ок, а
> если ей NULL дать на вход, то будет - что?

А ты не давай и ничего не будет.

> Мне кажется, или оно лаконичнее, ловит явно кривые случаи как прописано в
> спеках, и закорючек меньше? Не буду утверждать что это 100% compliant

Кажется. В built-in фунции для внутренней развертки компилятором, в ЯП без NULL (в safe) и возможностью компилятора доказать ненульность аргументов, как-то более логично вынести проверку туда, где она действительно будет нужна. Чай не жабаскрипт.

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

196. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 19:19 
> Мда, ржавый memcpy работает с ржавыми типами, вот так сюрприз ...

А какое применение имеет сферический ржавый memcpy в вакууме? oO Ну, например, им можно допустим взлететь в типа-неправильном-расте, скопировать RWDATA flash -> RAM, проинитить нечто типа BSS, получить типа-правильный-раст и работать как будто этого не было, все это самим растом? Без асма и прочих интринсиков? На сях так проканало и вот там самопальный memcpy пригодился, как типа часть типа-стартапкода, который внезапно тоже на си. А что, разве не прикольно запустить си из си? Это квинтэссенция системного программизма.

> А ты не давай и ничего не будет.

Это уже на совести caller'а. Откуда я заранее знаю что наобум взятый caller делать по факту будет? Я что, телепат? oO Изначально оно вообще делалось наполовину чтобы запустить прикольный но крупный и чужой алгоритм, где я ессно не могу оценить чего тот подаст на вход моей функции, я не настолько крут чтоб в уме просчитать все фокусы ридсоломона при произвольных входных данных. Поэтому я могу лишь поFUZZить сие, сделать тесткейсы, а если safety был не пустым звуком - вместо "return dest" написать "system_fault()". Который не даст просто пойти и просто работать как будто проблемы не было.

> Кажется. В built-in фунции для внутренней развертки компилятором, в ЯП без NULL
> (в safe) и возможностью компилятора доказать ненульность аргументов, как-то более логично
> вынести проверку туда, где она действительно будет нужна. Чай не жабаскрипт.

Так эта функция заявлена как unsafe, не? Ну и в конкретно моем случае я был лимитирован совместимостью с стандартным прототипом, дабы не патчить вон тот код. Это собственно единственный пойнт за дурной size_t.

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

219. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 21:49 
>> Мда, ржавый memcpy работает с ржавыми типами, вот так сюрприз ...
> А какое применение имеет сферический ржавый memcpy в вакууме?

clone, copy и все такое?

> На сях так проканало и вот там самопальный memcpy пригодился, как
> типа часть типа-стартапкода, который внезапно тоже на си. А что, разве
> не прикольно запустить си из си? Это квинтэссенция системного программизма.

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


>> А ты не давай и ничего не будет.
> Это уже на совести caller'а. Откуда я заранее знаю что наобум взятый
> caller делать по факту будет? Я что, телепат? oO Изначально оно
> вообще делалось наполовину чтобы запустить прикольный но крупный и чужой алгоритм, где я ессно не могу оценить чего тот подаст на вход
> моей функции, я не настолько крут чтоб в уме просчитать все

А в огороде бузина? Что не понятного-то в "compiler-builtin" и в том, что сaller - это вообще-то исключительно компилятор?
И стандартное определение memcpy - валидные указатели. Как в сишке.


> Так эта функция заявлена как unsafe, не?

И че? Или труЪ-критикам ржавчины не разрешается узнавать, что на самом деле из себя представляет unsafe?

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

277. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (277), 31-Июл-20, 22:47 
> clone, copy и все такое?

А, типа это прогер должен предоставить компилеру в "freestanding" окружении?

> Еще раз, накуя ржавому коду иметь сишные дататипы, если это не предполагается
> к использованию сишкой?

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

> что сaller - это вообще-то исключительно компилятор?

Не понимаю откуда в случае memcpy следует что caller'ом будет исключительно компилятор. То-есть, мне самому этой функцией в другом коде пользоваться нельзя?

> И стандартное определение memcpy - валидные указатели. Как в сишке.

У сишки другой прототип вызова этой штуки. Я бы сказал немнго дурацкий (как минимум size_t) но сейчас видите ли уже есть легион кода, который написан именно вот так :\ и при всем уважении, коней на середине переправы менять уже поздно, а переписывать вообще все алгоритмы на этом глобусе "зато на раст" лично я морально не готов.

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

33. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  –3 +/
Сообщение от Нанобот (ok), 30-Июл-20, 12:38 
>Берите пример с языка Си

это которому нужен libc?

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

46. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (-), 30-Июл-20, 13:03 
> это которому нужен libc?

Не нужен в случае baremetal и проч :P

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

55. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +5 +/
Сообщение от Аноним (55), 30-Июл-20, 13:13 
Если используешь libc, то да - libc нужно, иначе не нужна.
Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

103. "Rust вошёл в 20 самых популярных языков по рейтингу Redmonk"  +/
Сообщение от Аноним (103), 30-Июл-20, 14:32 
Лично тебе "не нужна". Говори не за всех а за себя. Это тебе говорит лютый микроконтроллерщик.
Ответить | Правка | Наверх | Cообщить модератору

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

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




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

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