metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-11-21 10:07 am

(no subject)

Аааа, в моих интернетах не все преклоняются перед Хаскелем!:

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

[identity profile] blackyblack.livejournal.com 2011-11-21 03:48 pm (UTC)(link)
На сях сеть контроллеров делается крайне нетривиально, а на эрланге прозрачно из коробки. Обновление кода делается с горячей заменой кода - ни один интерпретатор для контроллеров этого не умеет. Кроме того, нехилые возможности по удаленному администрированию, которым ссш сливает по полной. Кроме того продвинутый фейловер, что немаловажно для железа в поле. Кроме того ин-мемори хранилище данных, альтернатива которым для железа сейчас только Sqlite, что явный перебор.

20 ног многовато, да. Ну может сделают 8ногую версию когда-нибудь. Чтобы например I2C/UART/ADC мультиплексированные, а остальное питание, земля, сброс и кварц.

[identity profile] nicka-startcev.livejournal.com 2011-11-21 04:05 pm (UTC)(link)
>На сях сеть контроллеров делается крайне нетривиально

на сях уже всё сделано. Ставим линух и имеем готовую отлаженую инфраструктуру. (если контроллер достаточно жирный для линухов)

> нехилые возможности по удаленному администрированию

А можно весь список? ссш, естественно, не под виндой, а на нормальных ос.

> Кроме того ин-мемори хранилище данных, альтернатива которым для железа сейчас только Sqlite, что явный перебор.

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

>20 ног многовато, да. Ну может сделают 8ногую версию когда-нибудь. Чтобы например I2C/UART/ADC мультиплексированные, а остальное питание, земля, сброс и кварц.

Кварц зачастую не нужен. 2 питания, 1 ресет, остальные 5 ног мультиплексированные. Ну или ресет тоже мультиплексированная, но тогда программирование будет чуть затейливее чем у авр через spi.

[identity profile] blackyblack.livejournal.com 2011-11-21 04:26 pm (UTC)(link)
"Ставим линух и имеем готовую отлаженую инфраструктуру."
Почитай про распределенные приложения в Эрланге. Будешь удивлен. :)

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

"кстати, а как у эрланга с гарантиями-реалтаймами?"
У Эрланга софт-риалтайм. Честно говоря, не совсем понимаю что это такое, но звучит круто. :)

[identity profile] si14.livejournal.com 2011-11-22 01:26 pm (UTC)(link)
У эрланга GC раздельный для каждого треда. Т.к. у идиоматических эрланг-тредов хип очень маленький обычно (зато тредов много), сборка мусора очень быстро отрабатывает (единицы микросекунд), причём виснет на это время только собираемый тред. Весь сетевой стек при этом продолжает работать (процесс может получать сообщения от сетевого стека, но не начинает их обрабатывать), поэтому в целом система никогда не делает пауз на GC.
В целом же Эрланг делался Эриксоном как раз для АТС, набранных из нескольких вычислительных нод и находящихся где-нибудь у чёрта на рогах. Отсюда удалённая консоль из коробки, отсюда возможность трейса всего и вся наживую, отсюда возможность замены любого кода прямо на лету, причём, возможно, с вызовом кода для смены состояния системы в новый формат. Отсюда куча разнообразных средств для обработки и изоляции ошибок, в т.ч. программиста.

[identity profile] nicka-startcev.livejournal.com 2011-11-22 01:44 pm (UTC)(link)
А минимальные требования к системе какие?

А почему эрланг так малопопулярен, если он так крут?

[identity profile] si14.livejournal.com 2011-11-22 01:53 pm (UTC)(link)
>А минимальные требования к системе какие?
Зависит от того, что нужно. Есть готовые сборки под Gumstix/Beagle вот тут http://www.erlang-embedded.com/ , под ARM компилируется без проблем вроде. По производительности можно брать «чуть быстрее cpython», если не брать в расчёт JIT (я не знаю, работает ли он на ARM). Слышал из первых уст, что кто-то пилит бортовые компьютеры для авто на Erlang'е, ну и Erlang Solutions много рассказывали о том, как они двигают Erlang в embedded — сборки, поддержка от вендоров железа, тестирование на разном железе. Думаю, если заинтересуют, можно с ними связаться.
>А почему эрланг так малопопулярен, если он так крут?
Потому что основная часть софта в количественном плане — сайты по продаже виагры на пхп, там эрланг не нужен.

[identity profile] si14.livejournal.com 2011-11-22 01:57 pm (UTC)(link)
О, в официальном faq'е:
Rule of thumb: if the embedded system can run an operating system like linux, then it is probably possible to get current implementations of Erlang running on it with a reasonable amount of effort. Getting Erlang to run on, say, an 8 bit CPU with 32kByte of RAM is not feasible. People successfully run the Ericsson implementation of Erlang on systems with as little as 16MByte of RAM. It is reasonably straightforward to fit Erlang itself into 2MByte of persistant storage (e.g. a flash disk).

[identity profile] nicka-startcev.livejournal.com 2011-11-22 02:45 pm (UTC)(link)
А. Ну это малоинтересно.
Вот что-то подобное для 8-биток было бы реально интересно.

[identity profile] nicka-startcev.livejournal.com 2011-11-22 02:51 pm (UTC)(link)
Зачем нужны восьмибитки?
Ну, малоногое маложручее иногда таки нужно.

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

[identity profile] si14.livejournal.com 2011-11-22 02:56 pm (UTC)(link)
Ну тут либо шашечки, либо ехать. Либо велосипедить очередную копию кусков линупса, либо писать код, делающий дело.

[identity profile] blackyblack.livejournal.com 2011-11-23 04:24 am (UTC)(link)
8битки уже выходят из моды и писать под них такого рода инфраструктуру никто не будет. А вот под популярные кортексы виртуальную машину эрланга можно было бы переточить.

[identity profile] nicka-startcev.livejournal.com 2011-11-23 09:09 am (UTC)(link)
то есть, когда вам понадобится что-то по сложности подобное сервомашинке, вы к ней сбоку прилепите платку два на два дюйма с кортексом, а не сантиметровую с тинькой? :)

[identity profile] berezovsky.livejournal.com 2011-11-23 09:12 am (UTC)(link)
по-моему мелкая хрень всегда где-нибудь нужна будет

потому всё время появляется какая-то мелкая поебень где надо крутится с памятью и прочим

[identity profile] nicka-startcev.livejournal.com 2011-11-23 09:31 am (UTC)(link)
И это тоже.
как пример - тупые весы. или RC-метр.
Одной ногой заряжаем конденсатор, второй разряжаем, третьей выкидываем результат в компорт. Итого занято пять ног. Ну шесть, если хотим каких-то хитростей. Ставить ради такой задачи plcc-48 или какой-то bga будет несколько избыточно.

[identity profile] metaclass.livejournal.com 2011-11-23 09:12 am (UTC)(link)
хм, STM32 вроде по размерам меньше attiny.

[identity profile] nicka-startcev.livejournal.com 2011-11-23 09:39 am (UTC)(link)
кстати, если я их ни с чем не путаю, у них с компиляторами всё плохо.
гцц нет, родной компилятор платен и глюкав, программатор тоже слегка аццкий и ни с чем не совместимый.

[identity profile] strelnikovvv.livejournal.com 2011-12-01 06:35 pm (UTC)(link)
странно, но и среды разработки кеил и прочая есть и с gcc
нативный гсс тоже нормально кодит.

[identity profile] metaclass.livejournal.com 2011-11-23 09:13 am (UTC)(link)
А, впрочем в soic корпусе attiny меньше.

[identity profile] blackyblack.livejournal.com 2011-11-23 09:23 am (UTC)(link)
Ну во-первых, речь шла о "такого рода инфраструктуре". Было дело, что и тиньку 25 ставили, хотя потом и пожалели, что помощнее не поставили. Во-вторых, кортекс и на сантиметровую платку встанет - см. lpc1111.

[identity profile] nicka-startcev.livejournal.com 2011-11-23 09:33 am (UTC)(link)
это который бга? Сколько слоёв понадобится развести и паяется ли такое на полуколенке?

[identity profile] blackyblack.livejournal.com 2011-11-23 09:49 am (UTC)(link)
Нет, он не бга. TSSOP-20 (пока правда нет в продаже) или HVQFN-33 - обычный, выводной, квадратный.

[identity profile] dmzlj.livejournal.com 2011-11-23 09:15 am (UTC)(link)
Эрланговая не пойдет, но похожую я сделал. С потоками и инкрементальным GC.

[identity profile] blackyblack.livejournal.com 2011-11-23 09:21 am (UTC)(link)
С какими именно потоками? Легковесными как в эрланге? Расскажите поподробнее плиз.

[identity profile] dmzlj.livejournal.com 2011-11-23 09:36 am (UTC)(link)
Легкие потоки + инкрементальный gc. Основное это gc конечно. Собственно, это не столько vm, сколько рантайм к компилируемому языку но можно и использовать как часть vm, привернув интерпретатор байткодов.

Хип иммутабельный, устроен примерно так: http://dmzz.me/post/10875973009/unidirectinal-heap

GC точный, инкрементальный, пакующий, стоимость сборки + компактификации в худшем случае примерно квадратичная, зато оверхед по памяти не более чем одно слово на блок. Выделение памяти строго O(1).

Стек или другая дополнительная память для сборки мусора не требуется.

Язык бесстековый, на каждый поток выделяется памяти примерно вот столько:

typedef struct __task {
    struct __task *next;
    hopc_ar *arhead;
    hcell regs[HOPCREGNUM];
    hopc_task_id id;
    hregmask mask;
    htime_t tsleep;
    htime_t tsleep_since;
} hopc_task;


т.е 22 слова. вероятно, task_id можно будет потом выкинуть. компилятор оптимизирующий, с выделением регистров, например замыкания пытается размыкать и преобразовывать в jmp если это возможно, само собой хвостовая рекурсия ну и т.п, все что положено. Типизация статическая, вывод типов, etc. Компилируется в Си для что бы проще было стыковать с имеющимся кодом + оптимизатор си достаточно эффективно дооптимизирует на низком уровне.





(no subject)

[identity profile] blackyblack.livejournal.com - 2011-11-23 10:24 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2011-11-23 10:33 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2011-11-23 10:31 (UTC) - Expand

(no subject)

[identity profile] dmzlj.livejournal.com - 2011-11-23 10:34 (UTC) - Expand