гомоиконичность - ponyatov/nimbook GitHub Wiki

Гомоиконичность

собственный синтаксис не нужен

  • Мы можем использовать метаязык, не заморачиваясь с изобретением синтаксиса, и написанием парсера.
  • У языка metaL нет синтаксиса, в нём всё есть граф (см. гомоиконичность):
    • и данные, и пользовтельский интерфейс,
    • и исходный код программы, и исполняемый код
    • (и машинный, если вы напишете LLVM-компилятор).
    • объектный граф является первичным представлением программы
    • файлов с исходным кодом у metaL нет
  • Python используется как фронтенд интерпретатора:
    • он уже предоставил нам и парсер, и рантайм
    • и все существующие готовые библиотеки
    • не нужно учить новый синтаксис -- если вам привычнее другой язык, перепишите на нём ядро metaL
    • вы можете встроить metaL в любую систему -- Django, JVM, компилятор, микроконтроллер,..

проблемы с определением

  • "свойство некоторых языков программирования, в которых структура программы похожа на его синтаксис"
    • очень спорная формулировка, тут скорее речь про соответствие текста программы ее внутреннему представлению в компиляторе/интерпретаторе
  • "это позволяет всему коду на языке быть доступным и обработанным в качестве данных"
    • весь исходный код на Си доступен в виде данных (файлов), но в Си нет никаких средств работы с ним как с данными
  • главное требование гомоиконичности -- в языке должны быть развитые средства для чтения и модификации программы
    • для этого программа должна быть представлена как типовая структура данных: данные = программа
    • и язык должен быть в первую очередь заточен на работу с этой структурой,
    • причем эта структура данных/программы должна быть модифицируема одновременно с ёё выполнением (работой программы)