LINUX.ORG.RU
 

NanoCL 0.0.1


0

0

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

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

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


[#]  

Re: NanoCL 0.0.1

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

*** ()
[#]  
bioreactor

Re: NanoCL 0.0.1

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

*** ()
[#]  

Re: NanoCL 0.0.1

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

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

* ()
[#] Ответ на: Re: NanoCL 0.0.1 от bioreactor 26.09.2009 2:15:23  

Re: NanoCL 0.0.1

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

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

* ()
[#]  

Re: NanoCL 0.0.1

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

***** ()
[#] Ответ на: Re: NanoCL 0.0.1 от yk4ever 26.09.2009 2:16:02  

Re: NanoCL 0.0.1

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

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

***** ()
[#] Ответ на: Re: NanoCL 0.0.1 от yk4ever 26.09.2009 2:16:02  

Re: NanoCL 0.0.1

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

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

***** ()
[#]  

Re: NanoCL 0.0.1

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

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

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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от yk4ever 26.09.2009 2:16:02  

Re: NanoCL 0.0.1

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

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

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


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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от yk4ever 26.09.2009 2:17:10  
bioreactor

Re: NanoCL 0.0.1

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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от bioreactor 26.09.2009 2:33:27  
Linfan

Re: NanoCL 0.0.1

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

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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от yk4ever 26.09.2009 2:16:02  
thrall

Re: NanoCL 0.0.1

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

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

()
[#]  

сипэпэ рулез

#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 26.09.2009 3:37:11  

Re: сипэпэ рулез

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

*** ()
[#]  

Re: NanoCL 0.0.1

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

anonymous ()
[#]  
mv

Re: NanoCL 0.0.1

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

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

***** ()
[#]  

Re: NanoCL 0.0.1

lua или ficl, лучше второе. велисапеды не нужны :)

anonymous ()
[#] Ответ на: Re: NanoCL 0.0.1 от anonymous 26.09.2009 4:24:48  

Re: NanoCL 0.0.1

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

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

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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от naryl 26.09.2009 4:31:00  

Re: NanoCL 0.0.1

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

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

anonymous ()
[#]  

Re: NanoCL 0.0.1

Quake C капец?

**** ()
[#] Ответ на: Re: NanoCL 0.0.1 от naryl 26.09.2009 2:30:20  

Re: NanoCL 0.0.1

naryl> в 250kb

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

**** ()
[#]  

Re: NanoCL 0.0.1

та ну, закопать

* ()
[#]  

Re: NanoCL 0.0.1

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

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

()
[#]  
fk0

Re: NanoCL 0.0.1

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

()
[#] Ответ на: Re: NanoCL 0.0.1 от yk4ever 26.09.2009 2:16:02  

Re: NanoCL 0.0.1

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

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

* ()
[#] Ответ на: Re: NanoCL 0.0.1 от yk4ever 26.09.2009 2:16:02  

Re: NanoCL 0.0.1

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

fixed

* ()
[#] Ответ на: Re: NanoCL 0.0.1 от naryl 26.09.2009 2:32:08  

Re: NanoCL 0.0.1

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

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

anonymous ()
[#] Ответ на: Re: NanoCL 0.0.1 от anonymous 26.09.2009 14:21:54  
Gukl

Re: NanoCL 0.0.1

Этот проще все равно.

** ()
[#] Ответ на: Re: NanoCL 0.0.1 от anonymous 26.09.2009 14:21:54  

Re: NanoCL 0.0.1

В Doom 3 вроде как Lua используется.

**** ()
[#] Ответ на: Re: NanoCL 0.0.1 от Quasar 26.09.2009 14:51:41  

Re: NanoCL 0.0.1

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

**** ()
[#] Ответ на: Re: NanoCL 0.0.1 от anonymous 26.09.2009 14:21:54  
Reset

Re: NanoCL 0.0.1

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

***** ()
[#] Ответ на: Re: NanoCL 0.0.1 от bioreactor 26.09.2009 2:15:23  
Reset

Re: NanoCL 0.0.1

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

***** ()
[#] Ответ на: Re: NanoCL 0.0.1 от Reset 26.09.2009 15:08:29  
plambir

Re: NanoCL 0.0.1

>>-----Цитата---->>

Питон очень гемморойно встраивать.

<<-----Цитата----<<

Ну у C++ есть boost для этих целей.

()
[#] Ответ на: Re: NanoCL 0.0.1 от plambir 26.09.2009 15:24:41  
Reset

Re: NanoCL 0.0.1

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

***** ()
[#]  
fractaler

Re: NanoCL 0.0.1

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

**** ()
[#]  

Re: NanoCL 0.0.1

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

"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 существует чтобы обрабатывать простые команды, понятные людям без многолетнего опыта в программировании. Основные сценари использования: конфигурационные файлы, игровые консоли и макросы.

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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от naryl 26.09.2009 18:00:44  
Reset

Re: NanoCL 0.0.1

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

***** ()
[#] Ответ на: Re: NanoCL 0.0.1 от Reset 26.09.2009 18:54:05  

Re: NanoCL 0.0.1

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

*** ()
[#]  

Re: NanoCL 0.0.1

Ох уж эти велосипедостроители... Лучше бы 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 ()
[#] Ответ на: Re: NanoCL 0.0.1 от thrall 26.09.2009 3:25:29  

Re: NanoCL 0.0.1

> +1 к Lua

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

anonymous ()
[#]  

Re: NanoCL 0.0.1

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

anonymous ()
[#] Ответ на: Re: NanoCL 0.0.1 от naryl 26.09.2009 2:30:20  
KRoN73

Re: NanoCL 0.0.1

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

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

***** ()
[#] Ответ на: Re: NanoCL 0.0.1 от naryl 26.09.2009 18:00:44  
kod-x

Re: NanoCL 0.0.1

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

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

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

()
[#] Ответ на: Re: NanoCL 0.0.1 от kod-x 26.09.2009 20:05:47  

Re: NanoCL 0.0.1

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

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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от KRoN73 26.09.2009 20:00:00  
theos

Re: NanoCL 0.0.1

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

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

*** ()
[#]  
Keloraen

Re: NanoCL 0.0.1

Подожду пока не выйдет версия 1.0 А то текущая что-то не внушает.

()
[#] Ответ на: Re: NanoCL 0.0.1 от Keloraen 27.09.2009 0:25:51  

Re: NanoCL 0.0.1

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

*** ()
[#] Ответ на: Re: NanoCL 0.0.1 от naryl 26.09.2009 18:00:44  

Re: NanoCL 0.0.1

> И кто-нибудь видел как TCL встраивается в приложения?

Ну посмотри на pidgin или xchat

anonymous ()