Size: a a a

2020 July 22

M(

MIT/Yardanico (alt) in ru.nim.talks
MIT/Yardanico (alt)
proc main(data: string) = 
 let a = data
 echo a

main("hello")
вот ВСЯ функция в скомпиленном си
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
N_LIB_PRIVATE N_NIMCALL(void, main__Hsygv509cfV9cFoGhMOACVxg)(NimStringV2 data) {
 NimStringV2 a;
 tyArray__nHXaesL0DJZHyVS07ARPRA T1_;
 a = data;
 T1_[0] = a;
 echoBinSafe(T1_, 1);
}
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
сейчас покажу как эта функция выглядела месяц назад с ARC
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
N_LIB_PRIVATE N_NIMCALL(void, main__Hsygv509cfV9cFoGhMOACVxg)(NimStringV2 data) {
 NimStringV2 a;
 tyArray__nHXaesL0DJZHyVS07ARPRA T2_;
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 a.len = 0; a.p = NIM_NIL;
 eq___aBBXmHFBEivKqERloP6zmA((&a), data);
 T2_[0] = a;
 echoBinSafe(T2_, 1);
 {
   LA1_:;
 }
 {
   eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&a));
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
так что прогресс идёт большими шагами)
источник

A

Andrew in ru.nim.talks
MIT/Yardanico (alt)
N_LIB_PRIVATE N_NIMCALL(void, main__Hsygv509cfV9cFoGhMOACVxg)(NimStringV2 data) {
 NimStringV2 a;
 tyArray__nHXaesL0DJZHyVS07ARPRA T2_;
NIM_BOOL* nimErr_;
{nimErr_ = nimErrorFlag();
 a.len = 0; a.p = NIM_NIL;
 eq___aBBXmHFBEivKqERloP6zmA((&a), data);
 T2_[0] = a;
 echoBinSafe(T2_, 1);
 {
   LA1_:;
 }
 {
   eqdestroy___dS1BF3Vxjg9aJMmmhVJKSpQ((&a));
 }
 if (NIM_UNLIKELY(*nimErr_)) goto BeforeRet_;
 }BeforeRet_: ;
}
Жесть.
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
Andrew
Жесть.
не. на самом деле вполне нормально
источник

A

Andrew in ru.nim.talks
MIT/Yardanico (alt)
не. на самом деле вполне нормально
Ну да, возможно GCC сам бы разрулил до того, что сейчас делает этот ARC.
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
ага
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
но сейчас nim сам это делает всё равно
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
все эти оптимизации и деструкторы направлены на уменьшение количества ненужных копий
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
чтобы меньше копий, меньше ОЗУ потреблялось, и быстрее программки работали
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
ещё кстати с давнего уже времени есть --panics:on
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
из-за 1.0 нельзя по дефолту его включить, но короче этот аргумент компилятора делает некоторые ошибки "паническими"
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
т.е. их нельзя поймать и они приводят к завершению приложения
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
такие как IndexDefect к примеру (переименовали с IndexError)
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
или OverflowDefect
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
но из-за обратной совместимости --panics по дефолту "off"
источник

DP

Dmitry Ponyatov in ru.nim.talks
Andrew
Заново переосмысленные языки - это лиспы/хаскели и прочие непривычные.

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

M(

MIT/Yardanico (alt) in ru.nim.talks
Dmitry Ponyatov
кстати Nim как раз натолкнул меня серьезно задуматься о трансляции (генерации сишного кода) из высокоуровневого интерпретатора типа Scheme/Lisp (Clojure наиболее близка кстати, годно сахарка добавлено)
если ты имеешь ввиду о в некоторм виде трансляции lisp/scheme в Си, такое вроде бы есть уже
источник