Привет. Раздумываю над тем, какой выбрать скриптовый движок. Суть задачи и его место использования оставим за кадром. Вот требования, которые должны выполняться (все сразу): 1. Удобный байндинг скрипта к C++ в обе стороны - то есть возможность вызвать C++-код из скрипта, и скрипт из C++, с выниманием результатов его работы. 2. Возможность выполнять скрипт, когда его сурс в юникоде. Вообще анси не нужен - нужен только юникод. 3. Из тех скриптов, которые удовлетворяют первым двум пунктам, предпочтительнее тот, у кого выше перфоманс. Пока что я отсек следующее: 1. Lua всем хороша, в том числе и перфомансом, но она не умеет выполняться в юникоде. Это все портит. 2. Python имеет бустовый байндинг, что само по себе идеально, но все портит его идиотское правило вложенностей - через отступ. Некоторые скрипты будут храниться в XML с отступами, свойственными XML, что заставит выдумывать какие-то искусственные правила по "подгонке" питона в XML в нормальный вид. Короче - ну его нафиг этот питон. Кто что может посоветовать?
Советую взять питон и сделать соответствующие костыли для нормализации отступов. Всё равно ничего лучшего не найдешь же. UPD: Да, а перл смотрел? Чем не подошел, если смотрел?
neutronion Не надо так на перл ) на Си можно такую же чумату сотворить, тоже инопланетное чужеродное нечто из крякозябр. Как пишешь, то и получаешь.
shchetinin Мне нужно чтобы сервак из XML-я брал сурс скрипта и исполнял его. Это что, серваку придется компилятор вызывать?
shchetinin Чото я так подумал... возьмем склейку строк на php: $str .= 'abc'; А теперь представь, в какой адъ превратится тоже самое на пуре си. Объявить временный указатель, взять длину строки, выделить память, скопировать строку - все ж придется делать явно руками. Да потом еще и непонятно, кто эту память будет освобождать. А если выражение будет посложнее?
А в чем проблема хранить питоновский сорс в XML? в любом случае этот сорс из-за спецсимволов придется в заэскейпленном виде хранить, ну и пробелы в отсупах заэскейпятся. Вы ж этот сорс не в XML-файле будете править, а в отдельном редакторе.
И раз уж не править в нем, можно вообще наверное хранить сразу байтовый стринг выполняемого объекта - меньше времени на компиляцию будет, плюс гарантия того, что в конфиге лежит выполнябельный скрипт.
_DEN_ http://lua-users.org/wiki/UnicodeIdentifers http://lua-users.org/wiki/LuaUnicode http://www.lua.ru/forum/posts/list/109.page если уникод нужен в идентиферах, то в луа хэндврайтный парсер несложной структуры. пример настройки его понимания что есть буква, что есть цифра, что есть пробел по первой ссылке. для работы со строками как со строками есть пару либ (ссылки ниже). ну а сам совет можно дать только если услышать более подробно на что упор должен быть. если просто лишь бы интерпрер для конфигов, то его несожно и на колене за вечер написать. с ++ и прочим. (питон и перл не самые быстрые и не самые экономные к ресурсам. хотя, это важно только если важно)
Перл да, стремный язык Dmitry_Milk Таки в XML - нужно чтобы была возможность отредактировать скрипт в XML-е обычным фаром / нотпадом. neutronion Больной, примите лекарство. qqwe Я вот сейчас снова думаю про Lua - идентифаеры в юникоде не нужны. Может быть Lua и устроит, попробую еще раз все обдумать...
Pavia У меня нет на это времени. Точнее - тратить его на допиливание движка - это для меня слишком не рациональная его трата. Хотя, судя по твоей подписи, ты вряд ли меня поймешь
вы б написали требования ато так говорить не то чтобы непросто. например, если упор в скорость, то движка лучше лимбо я не встречал (жит уже есть для х86 точно. армовый жит слетает периодически приходится без жита на арме). тоже к аппетиту к ресурсам. многопоточность/модульность/сеть. уникод поддерживает. строгая типизация. классы, любимые шаблоны. наследования нет, зато есть модуля. встраивается легко, для расширения встроены спец инструменты. но. С, несколько отличающийся от С синтаксис (ближе к го), необходимость этот синтаксис выучить (совсем несложно, но всетаки), строгая типизация, непривычная для С-образных модульность и юних-образный подход к работе. например, чтоб вывести звук надо сделать что нибудь такое f := sys->open("/dev/audio", sys->OWRITE); sys->write(f, buffer_so_zvukom, len buffer_so_zvukom); а чтоб прочитать f := sys->open("/dev/audio", sys->OREAD); count := sys->read(f, buffer_so_zvukom, len buffer_so_zvukom);