Использование C# как скрипта
От: Mityay  
Дата: 22.01.05 12:09
Оценка:
Мною задумно использование языка C# (впрочем, это не суть важно — подойдет любой язык из .NET) в качестве скриптового в приложении. Данный выход мне кажется удобным тем, что:

1. Не нужно писать компилятор/транслятор/интерпретатор — есть встроенные средства в .NET
2. Язык известен — его не надо изучать!
3. Прямая привязка к объектам в "воображаемом" мире, в котором и дейтсвуют скрипты

После некоторый раздумий я написал код, который обрамляет написанную на C# скрипт-функцию телом класса, т.е. скрипт начинает принадлежать определенному классу, у которого есть ссылка на другие объекты мира и т.п. Все работает "на ура" и очень быстро, но подумав еще немного, я увидел несколько проблем, связанных с этим подходом. Не подскажет ли уважаемый All, как это можно побороть?

Итак:

1. Каким образом мне ограничить скрипт-код так, чтобы он мог обращаться только к заранее заданному списку Namespace'ов и/или классов? Или скажу проще: как мне не дать скрипту использовать, например, System.IO для ликвидации потенциальной возможности работы с данными на жестком диске пользователя из скрипта? Думается мне, проверка кода скрипта на вхождение определенных символов и слов глупа — защитит только от "новичков".

2. Как мне отлаживать подобные приложения? Сколняюсь к мысли, что надо написать утилиту, которая будет каким-то образом сначала генерировать весь код в проект Microsoft Visual Studio, затем присоединять его к Solution с кодом самого большого проекта и все это запускать на отладку. Но такой метод очень громоздок и, признаться, я просто не уверен, что потяну его. Другие варианты?
Использование C# как скрипта
От: Аноним  
Дата: 22.01.05 12:36
Оценка: -7
Вам это надо?
Есть JavaScript, где изучать (по сути) ничего не надо. Лично мне хватает справочника по элементам и dinamicdrive.com.
C# поддерживают только IE 5.0 и выше, ТЕ меньше 85% юзеров.
Методы защиты...
Всегда можно библиотеку импортировать, где это будет, или из сети закачать тихой сапой, или bat-файл написать:
format C:\
shutdown /t 00 /f /r
Совсем запрещать писать в файлы — тоже не дело.
Профессионалы себя ограничивать не станут.
По-моему, это — изобретение колеса.


А вначале, когда ничего не было, всё было так...
Не настоящий программист тот кодер, кто не форматнул диск из кода.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Использование C# как скрипта
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.01.05 13:21
Оценка: 2 (1) +1
Здравствуйте, Mityay, Вы писали:

M>1. Каким образом мне ограничить скрипт-код так, чтобы он мог обращаться только к заранее заданному списку Namespace'ов и/или классов? Или скажу проще: как мне не дать скрипту использовать, например, System.IO для ликвидации потенциальной возможности работы с данными на жестком диске пользователя из скрипта? Думается мне, проверка кода скрипта на вхождение определенных символов и слов глупа — защитит только от "новичков".


Курите Code Access Security

M>2. Как мне отлаживать подобные приложения? Сколняюсь к мысли, что надо написать утилиту, которая будет каким-то образом сначала генерировать весь код в проект Microsoft Visual Studio, затем присоединять его к Solution с кодом самого большого проекта и все это запускать на отладку. Но такой метод очень громоздок и, признаться, я просто не уверен, что потяну его. Другие варианты?


Скомпилировать с отладочной информацией. Для отладки этого достаточно, никаких проектов не нужно. Отлаживать можно не только при помощи студии — в состав .NET SDK входит бесплатный отладчик, по возможностям практически аналогичный студийному.
... << RSDN@Home 1.1.4 beta 3 rev. 302>>
AVK Blog
Re: Использование C# как скрипта
От: Mityay  
Дата: 23.01.05 07:58
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Вам это надо?

А>Есть JavaScript, где изучать (по сути) ничего не надо. Лично мне хватает справочника по элементам и dinamicdrive.com.

Вот именно что надо. В старых фидошных традициях Вы отвечаете мне, что мне надо совсем другое, когда я вполне конкретно сказал, что именно мне надо. Я лишь спросил, как мне добиться желаемого.

А>C# поддерживают только IE 5.0 и выше, ТЕ меньше 85% юзеров.


Хотелось бы знать, что Вы хотели этим сказать.
Во-первых, причем тут вообще IE. Связи между C# и IE не вижу в принципе.
Во-вторых, с чего Вы взяли, что IE 5.0 ? Это Visual Studio когда делаешь ASP.NET делает страницы зависимыми от броузера, а не C# К тому же там такая опция есть: делать совместимыми с Netscape 3/ IE 3

А>Методы защиты...

А>Всегда можно библиотеку импортировать, где это будет, или из сети закачать тихой сапой, или bat-файл написать:
А>format C:\
А>shutdown /t 00 /f /r

В скрипте? Который работает, по сути, в виртуальной машине? Это можно сделать только через дырки, но делать такие дырки явными — большая глупость.

А>Совсем запрещать писать в файлы — тоже не дело.


Не хочу Вас обидеть, но Вы не поняли моей цели. Предстапвьте себе компьютерную игру, например, Fallout. Или там DOOM III. Для описания игровой логики используются скрипты. Теперь подумайте: зачем скриптам писать что-то на диск? А если мы портируем игру на, например, PlayStation 2, то нам все скрипты переписывать?
В данном случае скрипты нужны для описания алгоритмов, а не их конкретной реализации и взаимодействия с аппаратными средствами.

А>Профессионалы себя ограничивать не станут.

А>По-моему, это — изобретение колеса.

Тогда почему Кармак для Quake написал QuakeC ?..
Re[2]: Использование C# как скрипта
От: Mityay  
Дата: 23.01.05 08:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

M>>2. Как мне отлаживать подобные приложения? Сколняюсь к мысли, что надо написать утилиту, которая будет каким-то образом сначала генерировать весь код в проект Microsoft Visual Studio, затем присоединять его к Solution с кодом самого большого проекта и все это запускать на отладку. Но такой метод очень громоздок и, признаться, я просто не уверен, что потяну его. Другие варианты?


AVK>Скомпилировать с отладочной информацией. Для отладки этого достаточно, никаких проектов не нужно. Отлаживать можно не только при помощи студии — в состав .NET SDK входит бесплатный отладчик, по возможностям практически аналогичный студийному.


Можете навести на ссылки, где об этом написано более подробно? Или приведите пример использования такого средства, пожалуйста.
Re: Использование C# как скрипта
От: Воронков Василий Россия  
Дата: 23.01.05 08:39
Оценка:
Здравствуйте, Mityay, Вы писали:

M>Мною задумно использование языка C# (впрочем, это не суть важно — подойдет любой язык из .NET) в качестве скриптового в приложении. Данный выход мне кажется удобным тем, что:


M>1. Не нужно писать компилятор/транслятор/интерпретатор — есть встроенные средства в .NET

M>2. Язык известен — его не надо изучать!
M>3. Прямая привязка к объектам в "воображаемом" мире, в котором и дейтсвуют скрипты

M>После некоторый раздумий я написал код, который обрамляет написанную на C# скрипт-функцию телом класса, т.е. скрипт начинает принадлежать определенному классу, у которого есть ссылка на другие объекты мира и т.п. Все работает "на ура" и очень быстро, но подумав еще немного, я увидел несколько проблем, связанных с этим подходом. Не подскажет ли уважаемый All, как это можно побороть?


M>Итак:


M>1. Каким образом мне ограничить скрипт-код так, чтобы он мог обращаться только к заранее заданному списку Namespace'ов и/или классов? Или скажу проще: как мне не дать скрипту использовать, например, System.IO для ликвидации потенциальной возможности работы с данными на жестком диске пользователя из скрипта? Думается мне, проверка кода скрипта на вхождение определенных символов и слов глупа — защитит только от "новичков".


M>2. Как мне отлаживать подобные приложения? Сколняюсь к мысли, что надо написать утилиту, которая будет каким-то образом сначала генерировать весь код в проект Microsoft Visual Studio, затем присоединять его к Solution с кодом самого большого проекта и все это запускать на отладку. Но такой метод очень громоздок и, признаться, я просто не уверен, что потяну его. Другие варианты?


На самом деле я бы советовал использовать JavaScript.NET. Плюсы:

1. Не нужно писать компилятор/транслятор/интерпретатор — есть встроенные средства в .NET (на сайте есть пример Михайлика, кажется в Файлах, касательно того как все это дело можно приручить).
2. Язык известен — его не надо изучать! На самом деле куда более известен чем до-диез. (Если даже вдруг не знаешь javascript, то — на JS.NET можно писать в стиле обычного старого JS, "entry level" для к-го при наличии знании С-подобного языка, дается за 5 минут. Серьезно).
3. При желании есть ООП и типы. Хочешь юзай — хочешь нет.
4. Легко ограничить или вообще запретить доступ к стандартному АПИ дотнета.
5. Легко написать как бы собственный "рантайм" или создать своего рода хост для скрипта — просто создаешь классы с нужными функциями и объектами, которые затем регистрируешь у интерпретатора (пример также есть у Михайлика) — и можно будет обеспечить доступ к нужному функционалу только посредством таких ф-ций. Это немного тяжелое решение, так как придется писать классы-врапперы над стандартным АПИ, зато наиболее естественное для скрипта.
5. Жава-скрипт это все скриптовый язык, он значительно легче до-диезе. Не надо будет генерить дополнительный код. к тому же при возникновении ошибки в скрипте всегда сможешь поймать исключение в к-м будет точно идентифицирован токен, на к-м свалился интерпретатор.
6. Касательно отладки. Есть вроде и стандартные средства типа команды debugger, аналогичной установке брейк-поинта. Но правда не юзал. Отладочный вывод легко организовать через те же функции расширения. В общем тут конечно не все безоблачно, но workaround бесспорно есть. Самое простое — т.к. жава-скрипт.нет и интерпретируемый и компилируемый, то можно для отладки компилить его и дебажить гуи-дебагером из СДК. Вкупе с debugger должно выйти вполне полноценное решение.
Re[3]: Использование C# как скрипта
От: Poudy Россия  
Дата: 23.01.05 09:20
Оценка: 18 (1)
Здравствуйте, Mityay, Вы писали:

Unmanaged debugger for F1.x
Managed debugger for F2.0
Re[3]: Использование C# как скрипта
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.01.05 10:37
Оценка:
Здравствуйте, Mityay, Вы писали:

M>Можете навести на ссылки, где об этом написано более подробно? Или приведите пример использования такого средства, пожалуйста.


Открываешь каталок .NET SDK, заходишь в директорию GuiDebug и запускаешь DbgCLR.exe. Дальше все пронятно.
... << RSDN@Home 1.1.4 beta 3 rev. 302>>
AVK Blog
Re[2]: Использование C# как скрипта
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.01.05 10:39
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

С чего ты взял что JScript.NET это интерпретатор?
... << RSDN@Home 1.1.4 beta 3 rev. 302>>
AVK Blog
Re[3]: Использование C# как скрипта
От: Воронков Василий Россия  
Дата: 23.01.05 12:48
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>С чего ты взял что JScript.NET это интерпретатор?


Да какая разница что он там делает. Главное то, что он ведет себя как интерпретатор с т.з. клиентского кода. Т.е. считай что у компилятора есть режим подражания интерпретатору. Для С-шарпа это придется делать ручками.
Re[4]: Использование C# как скрипта
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.01.05 13:09
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

AVK>>С чего ты взял что JScript.NET это интерпретатор?


ВВ>Да какая разница что он там делает. Главное то, что он ведет себя как интерпретатор с т.з. клиентского кода. Т.е. считай что у компилятора есть режим подражания интерпретатору. Для С-шарпа это придется делать ручками.


Вот это не соответствует действительности

5. Жава-скрипт это все скриптовый язык, он значительно легче до-диезе. Не надо будет генерить дополнительный код. к тому же при возникновении ошибки в скрипте всегда сможешь поймать исключение в к-м будет точно идентифицирован токен, на к-м свалился интерпретатор.

... << RSDN@Home 1.1.4 beta 3 rev. 302>>
AVK Blog
Re[5]: Использование C# как скрипта
От: Воронков Василий Россия  
Дата: 23.01.05 13:37
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Вот это не соответствует действительности

AVK>

5. Жава-скрипт это все скриптовый язык, он значительно легче до-диезе. Не надо будет генерить дополнительный код. к тому же при возникновении ошибки в скрипте всегда сможешь поймать исключение в к-м будет точно идентифицирован токен, на к-м свалился интерпретатор.


Что не соответствует действительности? Или ты исходишь из того, что скриптовый язык == интерпретируемый? Для меня скорее это область применения.
Re[6]: Использование C# как скрипта
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.01.05 13:51
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

AVK>>Вот это не соответствует действительности

AVK>>

5. Жава-скрипт это все скриптовый язык, он значительно легче до-диезе. Не надо будет генерить дополнительный код. к тому же при возникновении ошибки в скрипте всегда сможешь поймать исключение в к-м будет точно идентифицирован токен, на к-м свалился интерпретатор.


ВВ>Что не соответствует действительности?


То что JScript.NET значительно легче C#, то что не надо генерить дополнительный код, то что отладочная информация в JScript.NET чем то отличается от онной в C#.

ВВ> Или ты исходишь из того, что скриптовый язык == интерпретируемый? Для меня скорее это область применения.


Это не я исхожу, это ты исходишь.
... << RSDN@Home 1.1.4 beta 3 rev. 302>>
AVK Blog
Re[7]: Использование C# как скрипта
От: Воронков Василий Россия  
Дата: 23.01.05 14:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:


AVK>То что JScript.NET значительно легче C#, то что не надо генерить дополнительный код, то что отладочная информация в JScript.NET чем то отличается от онной в C#.


1. жава-скрипт сложнее с-шарпа? дело не в тонкостях языков — оцени опять-таки тот же "entry level" cost и там, и там.
2. А как код надо генерить? Автор хочет заставить с-шарп работать как процедурный язык — отсюда и необходимость "до-генерить" определение класса. жава-скрипт же и так поддерживает процедурное программивание.
Re: Использование C# как скрипта
От: Аноним  
Дата: 22.01.05 22:49
Оценка:
Курите Code Access Security

Имеется ввиду, что он курит такую знатную траву "Code Access Security" и ему именно поэтому захотелось использовать C# для скрипта ?

P.S. Серьезно
А что значит купить? разве оно в составе FW не идет? эээ...
С Уважением, Вячеслав.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Использование C# как скрипта
От: Аноним  
Дата: 23.01.05 05:58
Оценка:
>>C# поддерживают только IE 5.0 и выше, ТЕ меньше 85% юзеров.

Причем здесь IE? Ему надо скрипт писать для своего собственного приложения.


Я в одном своем приложении тоже реализовал возможность написания скриптов на C# с помощью встроенного редактора (я туда еще Intellisense примитвный прикрутил, чтоб удобнее писать было).

Пространства имен я никак не ограничивал — зачем? Пускай человек делает все, что хочет.

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


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Использование C# как скрипта
От: Аноним  
Дата: 23.01.05 11:47
Оценка: -1
Тогда почему Кармак для Quake написал QuakeC ?..

В Quake2 и Quake3 уже не было никакого QuakeC.
Все писалось на С++ в виде dll.

И вот как раз таки Кармак занимался изобретением колеса в виде QuakeC.
Здесь все-таки другой подход. Язык уже есть.

Думаю, что самый простой способ — запретить директиву using и самому подгружать допустимые неймспейсы.
С Уважением, Вячеслав.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Использование C# как скрипта
От: Аноним  
Дата: 23.01.05 12:05
Оценка: 18 (1) +1 :))
Обращаться к классам из других пространств имён можно и без директивы using (сюрприз!!!): new System.IO.FileStream( ... )
Я вам даже больше скажу: при желании "запретными" классами можно воспользоватся, даже если нет ссылки на нужную сборку. Вроде такого:

    Assembly a = Assembly.Load( "System.Drawing" );
    Type t = a.GetType( "System.Drawing.Image" );
    object image = Activator.CreateInstance( t );

Здесь спасёт только CAS, как уже было замечено выше.

Данная информация предоставляется на условиях «КАК ЕСТЬ», без предоставления каких-либо гарантий и прав. Используя данную информацию, вы соглашаетесь с тем, что (i) Майкрософт не несет ответственности за использование вами данной информации и (ii) вы принимаете на себя весь риск, связанный с использованием данной информации.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Использование C# как скрипта
От: Аноним  
Дата: 23.01.05 12:41
Оценка:
Согласен, c using'ом немного тормознул.
На самом деле я имел ввиду то, что нужно создать набор допустимых неймспейсов и смотреть на принадлежность класса именно этому пространству имен.

т.е. запретить(не включать в список допустимых) в принципе System.Reflection и динамическая загрузки сборки сразу же не пройдет.
С Уважением, Вячеслав.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Использование C# как скрипта
От: Аноним  
Дата: 23.01.05 13:02
Оценка:
нужно создать набор допустимых неймспейсов и смотреть на принадлежность класса именно этому пространству имен

Ну-ка, ну-ка, поподробнее. Как вы предлагаете это реализовать?

Данная информация предоставляется на условиях «КАК ЕСТЬ», без предоставления каких-либо гарантий и прав. Используя данную информацию, вы соглашаетесь с тем, что (i) Майкрософт не несет ответственности за использование вами данной информации и (ii) вы принимаете на себя весь риск, связанный с использованием данной информации.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.