гомоиконичность - ponyatov/nimbook GitHub Wiki
Гомоиконичность
собственный синтаксис не нужен
- Мы можем использовать метаязык, не заморачиваясь с изобретением синтаксиса, и написанием парсера.
- У языка
metaL
нет синтаксиса, в нём всё есть граф (см. гомоиконичность):
- и данные, и пользовтельский интерфейс,
- и исходный код программы, и исполняемый код
- (и машинный, если вы напишете LLVM-компилятор).
- объектный граф является первичным представлением программы
- файлов с исходным кодом у
metaL
нет
- Python используется как фронтенд интерпретатора:
- он уже предоставил нам и парсер, и рантайм
- и все существующие готовые библиотеки
- не нужно учить новый синтаксис -- если вам привычнее другой язык, перепишите на нём ядро metaL
- вы можете встроить
metaL
в любую систему -- Django, JVM, компилятор, микроконтроллер,..
проблемы с определением
- "свойство некоторых языков программирования, в которых структура программы похожа на его синтаксис"
- очень спорная формулировка, тут скорее речь про соответствие текста программы ее внутреннему представлению в компиляторе/интерпретаторе
- "это позволяет всему коду на языке быть доступным и обработанным в качестве данных"
- весь исходный код на Си доступен в виде данных (файлов), но в Си нет никаких средств работы с ним как с данными
- главное требование гомоиконичности -- в языке должны быть развитые средства для чтения и модификации программы
- для этого программа должна быть представлена как типовая структура данных:
данные = программа
- и язык должен быть в первую очередь заточен на работу с этой структурой,
- причем эта структура данных/программы должна быть модифицируема одновременно с ёё выполнением (работой программы)