Server Script это режим когда script вклеен в текст например в HTML конструкциями типа
text <% script %> text. Такой скрипт работает в процессе формирования страницы.
В режиме Client Script в HTMLayout позволяет обрабатывать события DOM элементов
включая события от стандартных HWND controls.
3) Поддерживается interactive mode (-i switch).
4) Работает на всех платформах поддерживаемых HTMLayout ( сейчас это Windows 32/64 и Windows Mobile )
5) Компилируемый ( -c switch ) — исходник компилируется в bytecode и можно этот bytecode сохранить в файл (.jsb) и запустить в последствии.
Примеры в tiscript_demo.zip:
enumgen.jsp
— генератор "smart enum" для С++ — по дефиниции enum строит структуру с методами to_string и from_string. Server Script mode sample.
try.js
— try/catch/finally exception handling.
re.js
— regular expressions demo.
Здравствуйте, c-smile, Вы писали:
CS>Захотелось мне вот чтобы было нечто позволяющее по струкутре вида: CS>... CS>Подходов к автоматической генерации source code много.
CS>Философически подумалось мне что подход в стиле формирования PHP pages или ASP для этого тоже будет полезным и удобным.
CS>Написал вариацию ECMAScript и оформил ея в виде command line utility — эдакий local server pages engine.
Здесь есть две подзадачи:
1. Что описывать. Это исходные данные для генерации.
2. Чем генерировать. Тут от первой подзадачи жесткой зависимости нет.
У меня есть проект TreeDL, который позволяет описывать структуру деревьев
(изначально — abstract syntax tree) с типизированными узлами,
и определять операции над ними. Помимо языка описания есть инструмент,
который генерирует набор классов, соответствующих узлам, всяческие визитеры,
обходчики дерева и т.п. Конечно, есть возможность дописывать свои модули генерации,
в зависимости от потребностей. Сам инструмент исторически использует собственную библиотеку
кодогенерации (и пользователи отказываются переходить на что-то другое — почти все потребности
удовлетворены), но можно пользоваться любую template engine, которая умеет работать
с java beans — дерево входного текста само описано на TreDL, интерфейс хорошо описан и открыт
для плагинов.
Генератор сейчас есть для Java, в предыдущей версии был и для C#, дойдут руки — обновлю и его.
Инструмент использовался и используется в наших проектах по созданию спецификационных
расширений языка программирования (http://www.unitesk.com), достаточно стабилен, развивается.
Ну и конечно это open source (http://treedl.sf.net). Помимо самого инструмента
открыт, например, Java 5 frontend — парсер, который строит TreeDL дерево
и принтер, который обратно Java печатает.
Так что если надо для Java какую-то кодогенерацию сделать, или препроцессор умный
(например, пару statements добавить, которые можно в Java странслировать) —
большая часть работы уже сделана
Будет и semantic analyzer для этого дерева.
C# frontend в планах, но руки не доходят — парсер и дерево написаны, но надо адаптировать.
Ежели кому-то интересно адаптировать — могу выложить сырые версии.
adontz wrote: > Имею аналогичные идеи, только у меня не JavaScript, а C#. Если > одинаковая идея пришла двум разным людям, значит она полезная либо мы > курили одну траву
Пишу так же на Паскаль. Правда скрипты на Паскаль же. Лень (пока) делать
интерпретатор. Идея явно полезная.
Здравствуйте, c-smile, Вы писали:
CS>Примеры в tiscript_demo.zip: CS>enumgen.jsp CS>- генератор "smart enum" для С++ — по дефиниции enum строит структуру с методами to_string и from_string. Server Script mode sample. CS>try.js CS>- try/catch/finally exception handling. CS>re.js CS>- regular expressions demo.
Здравствуйте, all-x, Вы писали:
AX>Здравствуйте, c-smile, Вы писали:
CS>>Захотелось мне вот чтобы было нечто позволяющее по струкутре вида: CS>>... CS>>Подходов к автоматической генерации source code много.
CS>>Философически подумалось мне что подход в стиле формирования PHP pages или ASP для этого тоже будет полезным и удобным. CS>>Написал вариацию ECMAScript и оформил ея в виде command line utility — эдакий local server pages engine.
AX>Здесь есть две подзадачи: AX>1. Что описывать. Это исходные данные для генерации. AX>2. Чем генерировать. Тут от первой подзадачи жесткой зависимости нет.
...красота поскипана...
собственно моя идея про "Чем генерировать" как раз и заключается в
том что в качестве такого генератора выступает проверенный метод Server Pages.
Как один из подходов.
Технология то уже изъеденная. И каждый приличный боец нынче знаком с PHP, Perl, JavaScript со товарищи.
Как кстати такой метод генерации текста называется по науке?
Здравствуйте, raskin, Вы писали:
R>adontz wrote: >> Имею аналогичные идеи, только у меня не JavaScript, а C#. Если >> одинаковая идея пришла двум разным людям, значит она полезная либо мы >> курили одну траву
R>Пишу так же на Паскаль. Правда скрипты на Паскаль же. Лень (пока) делать R>интерпретатор. Идея явно полезная.
Ну дык какой-нибудь LUA приделать для этого и гори оно огнем...
c-smile wrote: >> > Имею аналогичные идеи, только у меня не JavaScript, а C#. Если >> > одинаковая идея пришла двум разным людям, значит она полезная либо мы >> > курили одну траву > > R>Пишу так же на Паскаль. Правда скрипты на Паскаль же. Лень (пока) делать > R>интерпретатор. Идея явно полезная. > > Ну дык какой-нибудь LUA приделать для этого и гори оно огнем...
Да ну его.. Если скрипты маленькие — оно и на компиляторе не тормозит. А
когда соберусь доделывать — то и интерпретатор Паскаль найду/напишу.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Подозреваю, что речь шла об использовании C# в качестве скриптового языка ("у меня не JavaScript, а C#") для препроцессирования C++.
Здравствуйте, IT, Вы писали:
IT>Вам, Рома, я могу только посоветовать учить мат. часть. IT>
IT>enum _
IT>{
IT> one = 1,
IT> two = 2,
IT> three = 3
IT>}
IT>static void Main()
IT>{
IT> Console.WriteLine(_.two.ToString());
IT> Console.WriteLine(Enum.Parse(typeof(_), "two"));
IT>}
IT>
Ну для примитивных задачек встроенные средства .Net действительно подходят. Только вот задачки в жизни бывают не только примитивные и встроенные средства быстро заканчиваются. Ну да ты наверное таких пока не решал
struct test
{
enum _
{
one = 1,
two = 2,
three = 3
};
static const char * to_string( n )
{
switch( n )
{
case 1: return"one";
case 2: return"two";
case 3: return"three";
default: return 0;
}
}
static int from_string( const char * str )
{
if( 0 == stricmp( str, "one" ) return 1;
if( 0 == stricmp( str, "two" ) return 2;
if( 0 == stricmp( str, "three" ) return 3;
return 0;
}
};
CS>Подходов к автоматической генерации source code много.
Это точно.
CS>Философически подумалось мне что подход в стиле формирования PHP pages или ASP для этого тоже будет полезным и удобным.
А мне Ruby
CS>Написал вариацию ECMAScript и оформил ея в виде command line utility — эдакий local server pages engine.
Я на Ruby (файл enumdef.rb):
module Enumdef_Impl
class Enum_Params
def initialize
@name = nil
@members = []
end
def name( a_name )
@name = a_name
end
def members( a_members )
@members = a_members
end
def generate_name
@name
end
def generate_enum_def
@members.collect { |m|
"#{m[ :name ]} = #{m[ :value ]}"
}.join( ",\n\t\t" )
end
def generate_to_string_cases
@members.collect { |m|
"case #{m[ :value ]}: return \"#{m[ :name ]}\""
}.join( ";\n\t\t\t" )
end
def generate_from_string_cases
@members.collect { |m|
"if( 0 == stricmp( str, \"#{m[ :name ]}\" ) return #{m[ :value ]}"
}.join( ";\n\t\t" )
end
end
end # module Enumdef_Impl
def enumdef( &cmd )
e = Enumdef_Impl::Enum_Params.new
e.instance_eval( &cmd )
puts <<VERBATIM
struct #{e.generate_name}
{
enum _
{
#{e.generate_enum_def}
};
static const char * to_string( n )
{
switch( n )
{
#{e.generate_to_string_cases};
default: return 0;
}
}
static int from_string( const char * str )
{
#{e.generate_from_string_cases};
return 0;
}
};
VERBATIM
end
CS>Вот и все собственно...
Аналогично...
Небольшой комментарий. Если запускать "ryby -renumdef <some-file.rb>", то можно обойтись без первой директивы require. Тогда получится чистая декларативность:
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Подозреваю, что речь шла об использовании C# в качестве скриптового языка ("у меня не JavaScript, а C#") для препроцессирования C++.
И в чём проблема?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Павел Кузнецов, Вы писали:
ПК>>Подозреваю, что речь шла об использовании C# в качестве скриптового языка ("у меня не JavaScript, а C#") для препроцессирования C++.
IT>И в чём проблема?
IT,
> ПК>Подозреваю, что речь шла об использовании C# в качестве скриптового языка ("у меня не JavaScript, а C#") для препроцессирования C++.
> И в чём проблема?
Здравствуйте, c-smile, Вы писали:
CS>Ruby хороший язык, Python тоже хороший
CS>Но мне как-то ближе кракозябры { и }
У каждого свои недостатки
CS>И на JavaScript есть ECMA стандарт....
Имхо, сейчас это вообще ничего не определяет. На Java вообще нет стандарта. Зато сама Java как стандарт. На C++ есть стандарт. При этом масса компиляторов, которые ему не соответствуют. Был когда-то стандарт объектных баз данных ODMG. Да сплыл.
На Ruby и Python стандарта нет, зато сами Ruby и Python есть на таком количестве платформ, что иным стандартам и не снилось.
Но это уже совсем другая история...
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
all-x,
AX>У меня есть проект TreeDL, который позволяет описывать структуру деревьев AX>(изначально — abstract syntax tree) с типизированными узлами, AX>и определять операции над ними.
Как это соотносится с R#? Твой проект и R# решают разные задачи или одну и ту же?
Здравствуйте, eao197, Вы писали:
E>На Ruby и Python стандарта нет, зато сами Ruby и Python есть на таком количестве платформ, что иным стандартам и не снилось.
E>Но это уже совсем другая история...
Про Python была такая история...
На вечеринке в ActiveState надравшись текиловки нашел благодатного
слушателя (он был тоже под текилой) и все ему как н духу рассказал шо я думаю про Питон
и почему пацаны должны юзать c-smile...
Оказалось это был сам Гвидо ( http://www.python.org/~guido/ )
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>all-x,
AX>>У меня есть проект TreeDL, который позволяет описывать структуру деревьев AX>>(изначально — abstract syntax tree) с типизированными узлами, AX>>и определять операции над ними.
LCR>Как это соотносится с R#? Твой проект и R# решают разные задачи или одну и ту же?
Скажем так, TreeDL можно было бы использовать при разработке R#.
R# похож на то, как я вижу toolkit для работы с языком программирования:
кроме компилятора, который генерирует жестко заданный код, желательно бы иметь доступ к парсеру и дереву абстрактного ситнаксиса, для того чтобы иметь возможность расишрять язык, реализовавыть дополнительные анализаторы и кодогенераторы.
TreeDL помогает писать такие toolkit'ы, задавая основную их часть — структуру дерева.
Здравствуйте, c-smile, Вы писали:
E>>На Ruby и Python стандарта нет, зато сами Ruby и Python есть на таком количестве платформ, что иным стандартам и не снилось.
E>>Но это уже совсем другая история...
CS>Про Python была такая история...
CS>На вечеринке в ActiveState надравшись текиловки нашел благодатного CS>слушателя (он был тоже под текилой) и все ему как н духу рассказал шо я думаю про Питон CS>и почему пацаны должны юзать c-smile... CS>Оказалось это был сам Гвидо ( http://www.python.org/~guido/ )
Ну, а он что?
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Штрафной изолятор, ночь. За стеной, позвякивая наручниками, бродит
Анаги. Опер Борташевич говорит мне:
— Конечно, всякое бывает. Люди нервные, эгоцентричны до предела...
Например? Раз мне голову на лесоповале хотели отпилить бензопилой "Дружба".
— И что? — спросил я.
— Ну, что... Бензопилу отобрал и морду набил.
— Ясно.
— С топором была история на пересылке.
— И что? Чем кончилась?
— Отнял топор, дал по роже...
— Понятно...
— Один чифирной меня с ножом прихватывал.
— Нож отобрали и в морду?
Борташевич внимательно посмотрел на меня, затем расстегнул гимнастерку.
Я увидел маленький, белый, леденящий душу шрам...
(c) Сергей Довлатов, "Зона"
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Led Zeppelin — Brown-Yr-Aur Stomp ]
Здравствуйте, VladD2, Вы писали:
CS>>А зачем он мне нужен?
VD>Чтобы не изобретать велосипеды.
10-15 лет назад каждый уважающий себя программист писал текстовый редактор и оконную библиотеку. Сегодня их место заменили система плагинов и генератор кода. Так что это не велосипед, просто время такое
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
не в тему > > Т.е. ты считаешь, что для такой задачи лучше городить свой огород?
Нет. Я считаю, что если нужен генератор, порождающий код на C++, то возможности C#, позволяющие на нем для этой задачи обходиться без генерации кода, здесь ничему не помогают.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
>> Т.е. ты считаешь, что для такой задачи лучше городить свой огород?
ПК>Нет. Я считаю, что если нужен генератор, порождающий код на C++, то возможности C#, позволяющие на нем для этой задачи обходиться без генерации кода, здесь ничему не помогают.
Ну и ладно
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Ну вяло отбивался ( лайма кончилась, а соль была )
типа "ну и что что на VB похож? зато отступы какие!".
А я ему "Мля, ну ты же вроде умный пацан..."
Ну и так далее.
Цитаты утрированы, но демонстрируют уровень аргументации.
Если я все помню правильно .
Но морды не били, это точно.
Здравствуйте, c-smile, Вы писали:
CS>>>А зачем он мне нужен?
VD>>Чтобы не изобретать велосипеды.
CS>по поводу велосипедов...
CS>Велосипеды — это нехилый бизнес. CS>А самый богатый челеовек планеты (IKEA owner) вообще CS>изобретает табуретки...
CS>Так чта мимо кассы твое заявление, Влад ...
Так может лучше переключить свое внимание с велосипедов на табуретки.
А вообще, те фотографии, которые ты привел, относятся скорее к усовершенствованию уже изобретенного велосипеда, чем к изобретению его заново.
dshe,
D>А вообще, те фотографии, которые ты привел, относятся скорее к усовершенствованию уже изобретенного велосипеда, чем к изобретению его заново.
Ну хорошо, а такой?
Здесь справедливость твоего утверждения будет сильно зависеть от того, как мы определим велосипед. Если мы к дельтаплану приделаем педали с винтом, будет ли это велосипедом?
Здравствуйте, dshe, Вы писали:
D>А вообще, те фотографии, которые ты привел, относятся скорее к усовершенствованию уже изобретенного велосипеда, чем к изобретению его заново.