LINUX.ORG.RU

NanoCL 0.0.1

 , ,


0

0

NanoCL - простой командный язык с синтаксисом основанным на TCL. NanoCL разрабатывался для использования в качестве скриптового языка, формата конфигурационных файлов и для реализации интерактивной консоли в играх.

Главными достоинствами являются простейший синтаксис, небольшой размер (250kb) и удобный интерфейс к C++.

>>> Подробности

★★★★★

Проверено: hibou ()

Лицензия - X11 aka MIT.

naryl ★★★★★
() автор топика

А зачем он? Питон повсеместен и прост. Почему каждому хочется самоутвердится написав свой язык и плеер?

bioreactor ★★★★★
()

Бритва Оккама велит нам использовать Lua.

Тикель слишком заумен и медлителен для эмбедности.

yk4ever
()
Ответ на: комментарий от bioreactor

> Питон повсеместен и прост.

Питон чудесен, но у него довольно большой рантайм. Эмбед - это всё-таки немножко не его.

yk4ever
()

Чувствую себя тормозом. Чем это отличается от линковки с libtcl? Да, современные libtcl, смотрю, несколько потолстели, но раньше они были весьма небольшими.

Casus ★★★★★
()
Ответ на: комментарий от yk4ever

> Тикель слишком заумен и медлителен для эмбедности.

Для конфигов?

Casus ★★★★★
()
Ответ на: комментарий от yk4ever

> Тикель слишком заумен и медлителен для эмбедности.

Тикель прост как три копейки. Каждый раз, когда мне надо что-то на нём написать, раз в несколько лет, вспоминаю его за полчаса. Там где он медлителен, речи о его использовании, я так понимаю, и не идёт, ттолько там, где он подходит. Да и медлительность у него в реализации да в рантайме, потенциально он может быть очень быстрым.

Casus ★★★★★
()

в 250kb ни питон ни tcl не влезет.

Нужно было разработать простой язык для игровой консоли (типа той, что появляется в Nexuiz при нажатии ~) и автор решил сделать его отдельной либой. ИМХО ни питон ни полноценный tcl для этой цели не подходят.

В большинстве случаев разработчик *каждой* игры делает свой велосипед. Возможно когда-нибудь все консоли будут на NanoCL. =)

naryl ★★★★★
() автор топика
Ответ на: комментарий от yk4ever

> Бритва Оккама велит нам использовать Lua.

Lua самое близкое к тому, что было нужно, но синтаксис не слишком подходит для консоли.

> Тикель слишком заумен и медлителен для эмбедности.


Тикль заумен? Проще синтаксиса я не встречал, а семантика у NanoCL далеко не так заумна.

naryl ★★★★★
() автор топика
Ответ на: комментарий от bioreactor

>а чем не устраивает просто какой нибудь bash скриптинг. Еще проще, и ничего не требует

:) Тут уже дело вкуса. bash и tclsh - одного поля ягоды.

Linfan ★★★★★
()
Ответ на: комментарий от yk4ever

+1 к Lua, прекрасно подходит для

>использования в качестве скриптового языка, формата конфигурационных файлов и для реализации интерактивной консоли в играх

thrall
()

сипэпэ рулез

#define CALL_0(fname, f) \
if (args.size() != 0) \
return call_args_error(vm, fname, 0, args.size()); \
result = f(); \
return true;

#define CALL_1(fname, f) \
if (args.size() != 1) \
return call_args_error(vm, fname, 1, args.size()); \
result = f(args.front()); \
return true;

#define CALL_v1(fname, f, v) \
if (args.size() != 0) \
return call_args_error(vm, fname, 1, args.size()); \
result = v; \
f(args.front()); \
return true;

#define CALL_2(fname, f) \
if (args.size() != 2) \
return call_args_error(vm, fname, 2, args.size()); \
result = f(args.front(), args.back()); \
return true;

#define IFCALL_0(fname, f) if (func == fname) { CALL_0(fname, f) }
#define IFCALL_1(fname, f) if (func == fname) { CALL_1(fname, f) }
#define IFCALL_v1(fname, f, v) if (func == fname) { CALL_v1(fname, f, v) }
#define IFCALL_2(fname, f) if (func == fname) { CALL_2(fname, f) }

anonymous
()
Ответ на: сипэпэ рулез от anonymous

Автор принял к сведению и признал, что это ужасно. ;)

naryl ★★★★★
() автор топика

Фига себе, небольшой размер. Полноценный newlisp занимает столько. А для тикля есть и ещё более мелкие реализации: http://wiki.tcl.tk/17975 .

anonymous
()

> удобный интерфейс к C++

Некоторые проекты, например, ZeroMQ переделывают "удобный" интерфейс с C++ на C, ибо ваять для каждого языка враппер из крестов в Си не очень было прикольно...

mv ★★★★★
()
Ответ на: комментарий от anonymous

> lua или ficl, лучше второе

И кто же из них будет естественно смотреться в консоли? Здесь нужен командный язык.

Кстати, что есть ficl и где найти примеры кода на нём?

naryl ★★★★★
() автор топика
Ответ на: комментарий от naryl

боюсь сморозить старую шутку, но в гугле забанили? :) http://ficl.sourceforge.net/ по факту, фикл - это форт. удобная эмбеддед реализация. в консоли смотрится естественно в силу родовых последствий.

а насчет велосипедов - прошу списать на позднее время. еще один эмбеддейбл язык - хорошо. правда, лучше бы биндинги к сям - к плюсам само нарастет.

anonymous
()
Ответ на: комментарий от naryl

naryl> в 250kb

УЖАС!!!! 250Kb - для embed? Не жирно ли будет? Бэйсик вот в 16Kb ещё как умещался... Да целые ОС в такой объём ОЗУ умещались!

Quasar ★★★★★
()

ruby.exe + dll помню под винду весил 800 килобайт. Если речь идёт о игре, то мегабайт не существенно. Под конфиги ruby неплохо приспосабливается благодаря всяким method_missing (например http://rspec.info/)

Хотя в таких вещах я думаю лучше использовать javascript в виду его большой распространенности, простоты и наличию замыканий.

future-of-the-lor
()

250кб??? Туда полноценный тикль впихивается. Очередное нана-технологие...

fk0
()
Ответ на: комментарий от yk4ever

>Тикель слишком заумен и медлителен для эмбедности.

Эмбедность не терпит тормоз^Wскриптовые языки.

gogi
()
Ответ на: комментарий от naryl

>>>Lua самое близкое к тому, что было нужно, но синтаксис не слишком подходит для консоли.

сэр, вы с дубу на кактус? про WoW ни разу не слышал? а про то какой там скриптовый язык и какие народ там навороты сам пишет? а про балдурс гейт и все прочии биоваре ниразу не в курсе? и это только те игры, которые вспоминаются лично мне быстрее всего.

anonymous
()
Ответ на: комментарий от Quasar

Хотя я может с какой-то игрой перепутал, но скрипты ИИ где-то на lua написаны были.

Quasar ★★★★★
()
Ответ на: комментарий от anonymous

думаю человек имеет ввиду, что когда наимаешь '~' и видишь консоль в игре, то не совсем удобно там писать на lua, так как после каждой команды надо ставить круглые скобки, чтоб она начала выполняться

Reset ★★★★★
()
Ответ на: комментарий от bioreactor

Питон очень гемморойно встраивать. Портянки с таблицами указателей писать, всякие инциализаторы и прочий гемморой. Да, конечно для этого придумали всякие sip'ы, но они не сильно упрощают жизнь. Еще в случае с питоном очень сложно прыгать с языка на язык в процессе выполнения кода.

Reset ★★★★★
()
Ответ на: комментарий от plambir

Не знаю как там в бусте сделано. А в sip (http://www.riverbankcomputing.co.uk/software/sip/intro) это выглядит так -- пишешь "хидера" на языке похожем на C++, на основании их и реальных h'ников sip делает код для создания python модулей. Но как я уже говорил, сильно это жизнь не упрощает.

Reset ★★★★★
()

Срочно претендовать на тендеры и госзаказ. С таким названием выигрыш обеспечен!

fractaler ★★★★★
()

Коммент лично от автора:

«Hi,

Смотрю у вас прекрасно получается отбивать охоту работать над опенсурсными проектами. Вы критикуете код, который даже не видели. На sourceforge было всего два скачивания.

Я согласен с анонимусом, что тот код нечитаемый и должен быть исправлен. Но все остальные говорят: есть Lua, есть Python, есть TCL... Guys! WTF? Когда вы последний раз игрались со стеками Lua? Разве Python похож на командный язык? И кто-нибудь видел как TCL встраивается в приложения?

Мне нужен был простой командный язык и я его сделал. Вот пример загрузки простого конфигурационного файла:

vm = new ncl::VM();

// add corelibs to VM
ncl::ncl_corelibs(vm);

// execute config file
if (!ncl::executeFile(vm, "config.ncl")) {
	std::cerr<<"Failed to load configuration file.\n";
	std::cerr<<vm->getError().toString()<<"\n";
	delete vm;
	return 1;
}

// load config options
std::string host = ncl::get(vm, "host", "www.google.com");
std::string port = ncl::get(vm, "port", "80");
std::string uri = ncl::get(vm, "uri", "/");
std::string useragent = ncl::get(vm, "useragent", "me");

На каком из упомянутых выше языков можно сделать проще? Даже используя другие скриптовые языки со SWIG или другими автоматическими генераторами биндингов?

Кроме того, embeddable != romable. Вы можете статически скомпоновать интерпретатор без нескольких мегабайт скорее всего бесполезных библиотек. Например XMLSP (также написан не C++ и STL) достаточно маленький и я включаю его исходник в свои проекты вместо библиотек, возможно NanoCL слишком велик для этого но вы можете себе представить несколько мегабайт исходников в своём проекте?

NanoCL не предназначался для написания скриптов игровой логики. Для этого лучше используйте Lua (или Python, AngelScript, TCL или что там вам нравится) NanoCL существует чтобы обрабатывать простые команды, понятные людям без многолетнего опыта в программировании. Основные сценари использования: конфигурационные файлы, игровые консоли и макросы.

Ожидаю конструктивную критику.»

naryl ★★★★★
() автор топика
Ответ на: комментарий от naryl

Для такого функционала проще будет написать парсер ini файлов на std::map. Тем более непонятно что стоит за get ? В либу встроена спец функция для конфигов? На liblua обертка в 5 строк пишется и получаем такой же функционал.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Это из util.hpp. Получение переменной из VM с заданным значением по умолчанию.

naryl ★★★★★
() автор топика

Ох уж эти велосипедостроители... Лучше бы jim взялся допиливать.

Jim is an opensource small footprint implementation of the Tcl programming language. It implements a large subset of Tcl and adds new features like references with garbage collection, closures, built-in Object Oriented Programming system, Functional Programming commands, First class arrays. All this with a binary size of about 85kb (that can be reduced further excluding some non-vital commands, and commands not available in Tcl itself).

anonymous
()
Ответ на: комментарий от thrall

> +1 к Lua

Жутко неудобный синтаксис для командного языка. Хуже только у пистона пожалуй. И семантика для встраивания неудобная. Короче, сплошное недоразумение, а не язык. Единственное преимущество - шустрый интерпретатор. То что его везде суют, это не показатель. Просто похоже суровые игроделы не осиливают синтаксис тикля, не говоря уж про лисп. Мозги от сиплюсплюса костенеют что ли...

anonymous
()

Кстати, название неоднозначное. У меня первая мысль была: Nano Common Lisp?!

anonymous
()
Ответ на: комментарий от naryl

Если для конфигов так надо парсер, то давно есть libconfig(http://www.hyperrealm.com/libconfig/)
Удобна и проста, весит 38Кб, новая версия умеет инклюды.

Может быть тем, кому по душе TCL NanoCL подойдет, для других уже есть решение, вполне себе.

А уж если встраивать скриптовый язык в свой проект, то это Lua, ничего лучше пока нет(имхо). Те-же vm-ы, тот-же оверхед. И конфиги он хорошо парсит.

kod-x
()
Ответ на: комментарий от kod-x

> Если для конфигов так надо парсер, то давно есть libconfig

libconfig для других конфигов. NanoCL используется для обработки конфигов вроде autoexec.cfg всевозможных игр основанных на Quake. Например таких, как к nexuiz: http://pastey.net/125785

naryl ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

> Зато Форт-система влезает в этот объём раз 10.

Только прочитав текст поста угадал кто это =)

theos ★★★
()
Ответ на: комментарий от Keloraen

(А ведь я предлагал назвать её хотя бы 0.1)

naryl ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.