Я делаю набросок дизайна чего-то (машинное обучение функций), которое предпочтительно будет хотеть функциональный язык программирования, а также самоанализ, в частности, способность исследовать собственный код программы в каком-то приятном для восприятия формате, и предпочтительнотакже возможность компилировать сгенерированный компьютером код во время выполнения, и мне интересно, на каком языке лучше его писать. Лисп, конечно, обладает сильными возможностями самоанализа, но статически типизированные языки также имеют свои преимущества;я рассматриваю следующие вопросы:
Разве вы не можете просто разобрать исходный код как обычный интерпретатор или компилятор?Зачем вам интроспекция?
F # - у платформы .Net хорошая история: вы можете читать байт-код во время выполнения, а также генерировать байт-код и компилировать его;Я предполагаю, что нет никаких проблем с доступом к этим средствам из F #.
F # имеет элементарный механизм цитат, но вы можете только заключать в кавычки некоторые выражения, а не другие виды кода, особенно определения типов.Кроме того, его механизм оценки на несколько порядков медленнее, чем подлинная компиляция, поэтому он практически бесполезен.Вы можете использовать рефлексию для анализа определений типов, но, опять же, это довольно элементарно.
Вы можете читать байт-код, но он был скомпилирован, поэтому большая часть информации и структуры была потеряна.
F # также имеет технологию лексирования и синтаксического анализа (особенно fslex, fsyacc и FParsec), но она не настолько развита, как OCaml.
Haskell, Ocaml - имеют ли они аналогичные средства, либо через байт-код, либо при разбореtree?
На Haskell есть шаблон Haskell, но я никогда не слышал о том, чтобы кто-нибудь использовал его (утилиту?).
У OCaml есть макросистема Camlp4, и некоторые используют ее, но плохо документировано .
Что касается лексирования и синтаксического анализа, у Haskell есть несколько библиотек (особенно Parsec), а в OCaml много библиотек .
Существуют ли другие языки, на которые я также должен обратить внимание?
Языки переписывания терминов, такие как Mathematica, были бы очевидным выбором, поскольку они упрощают манипулирование кодом.Язык Pure может быть интересен.
Вы также можете рассмотреть MetaOCaml для его возможностей компиляции во время выполнения.