Size: a a a

Compiler Development

2020 March 14

p

polunin.ai in Compiler Development
Да, лучше тащить с БД рантайм лиспа👍
источник

FO

FORTRAN ONE LOVE in Compiler Development
polunin.ai
Да, лучше тащить с БД рантайм лиспа👍
и емакс заодно :)
источник

МБ

Михаил Бахтерев in Compiler Development
FORTRAN ONE LOVE
лисп лучше :)
В Лиспе всё это уже есть
источник

AK

Andrei Kurosh in Compiler Development
polunin.ai
Если писать архитектуру на конкретном языке, то ты привязываешься к его средствам выражения абстракций
Реализацию на высокоуровневом языке типа питона можно считать псевдокодом, не более специфичным чем UML
источник

G

Gymmasssorla in Compiler Development
Читаю "Type-driven development with Idris". Говорят, что функции на уровне типов существуют только во время компиляции. Хорошо, принял к сведению.

Но потом они показывают пример с БД в терминале. Суть такова: есть схема данных, которые вводит пользователь, она определена примерно так:

data Schema = SchemaInt Schema | SchemaString Schema | End


Есть функция SchemaType, которая вычисляет тип записи в БД по Schema. Например, из SchemaInt (SchemaString End) получается (Int, String).

Теперь сама суть: мы в самом начале работы программы парсим строку в Schema, а потом из Schema вычисляем SchemaType. Но как такое возможно, ведь мы Schema получили во время исполнения, а функции на уровне типов, такие как SchemaType, работают только во время компиляции?
источник

АВ

Александр Вольнов in Compiler Development
Dmitry Ponyatov
Сейчас упаковка/декодирование как решается? есть какой-то генератор бинарных парсеров в код Си или LLVM?
Сейчас нет никакой реализации в принципе. Так как у меня типы могут создаваться динамически, генераторы парсеров не смогут покрыть все возможности языка. Первое, что я планирую сделать - это рантайм парсинг. А генераторы парсеров для частных случаев на языке C сделаю потом. Они пригодятся главным образом для микроконтроллеров, куда полноценный рантайм впихнуть вряд ли получится.
источник

AT

Alexander Tchitchigin in Compiler Development
Gymmasssorla
Читаю "Type-driven development with Idris". Говорят, что функции на уровне типов существуют только во время компиляции. Хорошо, принял к сведению.

Но потом они показывают пример с БД в терминале. Суть такова: есть схема данных, которые вводит пользователь, она определена примерно так:

data Schema = SchemaInt Schema | SchemaString Schema | End


Есть функция SchemaType, которая вычисляет тип записи в БД по Schema. Например, из SchemaInt (SchemaString End) получается (Int, String).

Теперь сама суть: мы в самом начале работы программы парсим строку в Schema, а потом из Schema вычисляем SchemaType. Но как такое возможно, ведь мы Schema получили во время исполнения, а функции на уровне типов, такие как SchemaType, работают только во время компиляции?
В общем и целом, функции на типах действительно отрабатывают во время компиляции, гарантируя, что код посчитает так как надо для любых данных, которые придут во время выполнения.
Но бывают краевые случаи, когда некоторые типы не удаётся стереть при компиляции и они остаются во время выполнения.
источник

p

polunin.ai in Compiler Development
Хм, а от перестановки флоатов/даблов при умножении/делении может результат разнится?
источник

G

Gymmasssorla in Compiler Development
Alexander Tchitchigin
В общем и целом, функции на типах действительно отрабатывают во время компиляции, гарантируя, что код посчитает так как надо для любых данных, которые придут во время выполнения.
Но бывают краевые случаи, когда некоторые типы не удаётся стереть при компиляции и они остаются во время выполнения.
Хм, ясно-понятно, спасибо
источник

FO

FORTRAN ONE LOVE in Compiler Development
polunin.ai
Хм, а от перестановки флоатов/даблов при умножении/делении может результат разнится?
Ну при делении точно будет разный))))
источник

p

polunin.ai in Compiler Development
А, да, не подумал что написал😂
источник

АВ

Александр Вольнов in Compiler Development
Dmitry Ponyatov
Детали в редакторе кода продумываются, на каком-нибудь легком для прототипирования языке типа Python, OCaml.
Просто в Notepad++ пишу примеры кода на своём языке, пытаюсь самим языком описать его же бинарный формат. Пишу комментарии с правилами, по которым он работает, и планом реализации по пунктам. Когда достигну минимального необходимого количества непротиворечащих друг другу правил и полностью опишу бинарный формат, начну реализовавывать.
источник

p

polunin.ai in Compiler Development
Чё вам листик и ручка не нравятся
источник

АВ

Александр Вольнов in Compiler Development
polunin.ai
Я надеюсь что он не решит на питоне это делать😂
Реализацию буду делать на C++. У меня уже есть своя библиотека с наработками, которые пригодятся для реализации. Я думаю, основная реализация займёт порядка 50 КБ в скомпилированном бинарнике. Хотя когда буду внедрять шифрование, сжатие и другие алгоритмы, размер реализации может подрасти за счёт сторонних библиотек, которые будут реализовывать эти алгоритмы.
источник

G

Gymmasssorla in Compiler Development
polunin.ai
Чё вам листик и ручка не нравятся
Например тем, что обратная связь как-то не очень. С редактором я могу хоть запустить код и посмотреть как он работает
источник

G

Gymmasssorla in Compiler Development
Ещё в редакторе писать и редактировать удобнее, чем в блокнотике с ластиком
источник

p

polunin.ai in Compiler Development
Gymmasssorla
Например тем, что обратная связь как-то не очень. С редактором я могу хоть запустить код и посмотреть как он работает
На листочке ты напишешь за пару минут то что на питоне будешь писать минут 10
источник

p

polunin.ai in Compiler Development
Gymmasssorla
Ещё в редакторе писать и редактировать удобнее, чем в блокнотике с ластиком
Нет, на листочке удобнее писать)
источник

p

polunin.ai in Compiler Development
И редактировать тоже - перечеркнул, и все
источник

FO

FORTRAN ONE LOVE in Compiler Development
polunin.ai
На листочке ты напишешь за пару минут то что на питоне будешь писать минут 10
А в голове вообще моментально!
источник