Open pasaran opened 11 years ago
А порядок для опций будет произвольный? Было бы круто!
Он и сейчас произвольный.
Мне не нравиться жёсткая файловая зависимость. Хочется задавать имя obj-файла
И не нужна магия с --imports
(--modules
), нужно просто давать на вход имена obj
-файлов.
Мне не нравиться жёсткая файловая зависимость. Хочется задавать имя obj-файла
Тогда не получится компилировать файлы с импортами в одну команду. Ну и сразу наложить такой файл на данные не получится. Нужно сперва будет скомпилировать все импортируемые файлы, а потом уже основной.
/cc @doochik
А прямо так часто нужно это делать в одну команду?
Ну всегда приятнее делать это в одну команду. Я часто тестирую примеры из командной строки.
On Tue, Jan 29, 2013 at 4:04 PM, Alexey Ten notifications@github.comwrote:
А прямо так часто нужно это делать в одну команду?
— Reply to this email directly or view it on GitHubhttps://github.com/pasaran/yate/issues/145#issuecomment-12831630.
К слову, как это в перле работает?
2013/1/29 Sergey Nikitin nik.pasaran@gmail.com
Ну всегда приятнее делать это в одну команду. Я часто тестирую примеры из командной строки.
On Tue, Jan 29, 2013 at 4:04 PM, Alexey Ten notifications@github.comwrote:
А прямо так часто нужно это делать в одну команду?
— Reply to this email directly or view it on GitHubhttps://github.com/pasaran/yate/issues/145#issuecomment-12831630.
Ну ок. Предположим, что оно может работать так: yate a.yate b.yate c.yate data.js
.
Компилируем a.yate
, его obj-файл куда-нить в tmp складываем, потом компилируем b.yate
вместе с a.yate.obj
(b.yate.obj
опять складываем в tmp), потом уже c.yate
и потом все, что получилось склеиваем + runtime и накладываем на данные.
И отдельно можно сделать ключик типа:
yate a.yate --obj foo/bar/a.yate.obj
yate foo/bar/a.yate.obj b.yate
Нужно будет зафиксировать возможные расширения:
.yate
.obj
.ast
.js, .json
Тогда можно просто все подряд (но в нужном порядке) пихать в команд-лайн без ключиков.
У тебя порядок компиляции получается зависимым от порядка аргументов. Причём для меня он абсолютно неинтуитивен. Я первым аргументом пишу главный файл, а у тебя он получается последним.
Тогда нужен ключик --modules
или --imports
.
Еще один вариант: модуль "foo" должен находиться в файле с именем "foo.yate" -- как в перле. Тогда можно будет просто в любом порядке перечислять файлы.
И еще. В последнем варианте тогда можно вообще не указывать импортируемые модули.
Короче, мне нравится вот такой вариант:
yate
-файлы имеют расширение .yate
.foo
должен лежать в файле foo.yate
. Или вообще в этом случае не нужна директива module
? Просто имя модуля берется из имени файла.foo.yate.obj
. Не вижу никакой необходимости класть его куда-то еще (это все равно промежуточный файл). Например, gcc
так делает с объектными файлами.-L
(как в gcc
со списком папок, где нужно смотреть модули при импорте). Дефолт: .
. Или же .
со всеми поддиректориями?.yate
-файл. При импорте модуля foo
, ищем файлы foo.yate
в указанных папках. Берем первый найденный.Как-то так.
/cc @doochik, @alexeyten, @shirokoff, @artjock, @chestozo
Ну, похоже на правду. Только не нужно рекурсивного обхода. Нефиг искать файлы где попало, обычно это плохо кончается.
Ага. Мне тоже не хочется делать рекурсивный обход. Это может затянуться в некоторых случаях.
Я почти не пользовался CLI версией, так что со всем согласен )
а если импортируемый модуль лежит не в директории с foo ?
Тогда пишешь что-нить типа:
yate foo.yate -L../modules/:more/modules/:...
Единственная проблема -- если вдруг ты хочешь заимпортировать два модуля с одинаковыми именами (из разных директорий). Нууу... Кажется, это в любом случае плохая идея )
ага, тогда ок
Нужно упорядочить ключики, кажется. И кое-что в них поменять.
Обычная компиляция:
По-дефолту, результат компиляции идет в
stdio
.Сохранить результат в файл:
Сохранять
AST
после парсинга, чтобы не перекомпилировать неизменившиеся файлы.AST
сохраняется в файлfilename + '.obj'
(в данном случае вfoo.yate.obj
).Сохранить "объектную" информацию для модуля. Если имя модуля не равно
'main'
, то включается автоматически.Импортировать модули:
Или лучше
--modules
? В любом случае, берется файлmodule1.yate
, ищется рядом с нимmodule1.yate.obj
, если его нет, то файл сперва компилируется.Не сработает, если, скажем,
a.yate
импортируетb.yate
, а он, в свою очередь, импортируетc.yate
. Не сработает в смысле, что не удастся скомпилироватьa.yate
в одну команду -- сперва нужно будет скомпилироватьb.yate
.Скомпилировать и сразу наложить на данные:
Тоже самое, но еще и использовать внешние функции из соответствующего файла:
Еще бы неплохо уметь накладывать скомпилированный шаблон на данные. Типа так:
Но тогда нужно вводить ограничения на возможные расширения. Типа у yate-файлов всегда
.yate
, у скомпилированных -- всегда.yate.js
.Короткие варианты: