Size: a a a

2020 December 28

MK

Mikhail Kuzmin in fprog_spb
Alexander Tchitchigin
В точности наоборот: "быструю Java" (JVM) для VLIW архитектуры сделать нельзя в принципе. 🤷‍♀️
ок, определились.

Вот моя гипотеза.

Есть цикл, предположим
for (int i = 0; i < 100, i++) {
 arr[i]++
}


Что-то подобное можно сделать и на C  и на JAVA.

Разница в том, что компилятор может разложить несколько итераций в одну VLIW команду лесенкой, а java - нет.
источник

AT

Alexander Tchitchigi... in fprog_spb
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kuzmin
ок, определились.

Вот моя гипотеза.

Есть цикл, предположим
for (int i = 0; i < 100, i++) {
 arr[i]++
}


Что-то подобное можно сделать и на C  и на JAVA.

Разница в том, что компилятор может разложить несколько итераций в одну VLIW команду лесенкой, а java - нет.
А вот моя гипотеза: в Вашем Web-приложении будет ровно 0 таких циклов. И чего тогда компилятор сможет оптимизировать? Вот именно.
источник

MK

Mikhail Kuzmin in fprog_spb
Еще раз. У меня нет цели сделать язык под эльбрус. Как минимум я хочу разобраться как все это работает на низком уровне, и какие проблемы возникают, почему так не делают и т.п.
Не нужно говорить, что я чего-то не знаю. Я и так это знаю. Подскажите как это исправить.
источник

AT

Alexander Tchitchigi... in fprog_spb
Ну и JVM C2 такие циклы, конечно, в SIMD оптимизирует, но это так, к слову.
источник

MK

Mikhail Kuzmin in fprog_spb
Alexander Tchitchigin
А вот моя гипотеза: в Вашем Web-приложении будет ровно 0 таких циклов. И чего тогда компилятор сможет оптимизировать? Вот именно.
структуры данных никто не отменял, особенно если они персистентые
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kuzmin
структуры данных никто не отменял, особенно если они персистентые
Отлично! А теперь читаем про кеши и думаем. 😉
источник

AI

Andrey Ivanov in fprog_spb
подсказываю как исправить - взять и начать писать. даже если не получится, то о многих моментах узнаешь лучше
источник

AT

Alexander Tchitchigi... in fprog_spb
Mikhail Kuzmin
Еще раз. У меня нет цели сделать язык под эльбрус. Как минимум я хочу разобраться как все это работает на низком уровне, и какие проблемы возникают, почему так не делают и т.п.
Не нужно говорить, что я чего-то не знаю. Я и так это знаю. Подскажите как это исправить.
The Tiger Book, PLAI, craftinginterpreters в конце концов. 🤷‍♀️
источник

AI

Andrey Ivanov in fprog_spb
и если не стоит задача сделать еще один супер язык (в плане семантики), а хочется нырнуть в дебри оптимизаций реализации, то лучше взять любой нравящийся известный язык и написать его реализацию под тот же Эльбрус
источник

AI

Andrey Ivanov in fprog_spb
Ту же Схему (хотя там жесть с call-cc), ЖС, Кложу или что нравится
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Andrey Ivanov
Делают, Хаскель, насколько я знаю, долго так именно и жил
Хаскель генерил код виртуальной машины на Си
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Т.е. виртуальная машина как была, так и осталась
источник

MK

Mikhail Kuzmin in fprog_spb
Если брать Clojure то возникают следующие вопросы
1) в C нет GC и не очень понятно что с этим делать
2) одна из идей в clojure - простой интероп с хостом, и как это должно выглядеть - вообще не очивдно для меня.
Брать за основу C++ и обращаться к C++ классам?
3) мне хочется континуации, и например, try/catch/finnaly поверх них, и в C много приколов с setjmp/longjmp, например как сделать сборку мусора, если мы выпрыгнули из континуации и обратно не хотим возращаться. тоже самое и про освобождение прочих ресурсов.
4) если делать интероп с C или C++, то нужно как-то явно выставлять семантику сборщика мусора, регистрировать указатели

В общем много вопросов
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Управление памятью, многопоточность отоичную от той, что есть в ОС — всё это нужно либо вкомпиливать в бинарь, либо таскать отдельно. Но иметь нужно всё равно.
источник

AP

Aleksei (astynax) Pi... in fprog_spb
"почему вот просто на статической памяти всё не пишут" ещё спросите
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Mikhail Kuzmin
Если брать Clojure то возникают следующие вопросы
1) в C нет GC и не очень понятно что с этим делать
2) одна из идей в clojure - простой интероп с хостом, и как это должно выглядеть - вообще не очивдно для меня.
Брать за основу C++ и обращаться к C++ классам?
3) мне хочется континуации, и например, try/catch/finnaly поверх них, и в C много приколов с setjmp/longjmp, например как сделать сборку мусора, если мы выпрыгнули из континуации и обратно не хотим возращаться. тоже самое и про освобождение прочих ресурсов.
4) если делать интероп с C или C++, то нужно как-то явно выставлять семантику сборщика мусора, регистрировать указатели

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

AP

Aleksei (astynax) Pi... in fprog_spb
Это бай дизайн так
источник

AI

Andrey Ivanov in fprog_spb
Aleksei (astynax) Pirogov
"почему вот просто на статической памяти всё не пишут" ещё спросите
почему не пишут ) под МК на Си и асме я именно так и писал - без этих ваших аллок/фри ) В смысле, пул памяти сам менеджил руками )
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Andrey Ivanov
почему не пишут ) под МК на Си и асме я именно так и писал - без этих ваших аллок/фри ) В смысле, пул памяти сам менеджил руками )
Не паясничай, ты понял, о чём я
источник