Script.NET
Script.NET | |
---|---|
Тип | Язык программирования |
Разработчик | Майкрософт |
Операционные системы | Windows 98 или старше |
Последняя версия | Версия 1.0 (17 декабря 2007) |
Лицензия | LGPL |
Сайт | protsyk.com/scriptdotnet |
Script.NET (или S#) — это скриптовый язык с JavaScript-подобным синтаксисом и возможностью метапрограммирования для .NET Framework. Позволяет создавать программируемые расширяемые приложения.
Script.NET — свободно распространяемый продукт.
Метапрограммирование
[править | править код]Script.NET обладает возможностью метапрограммирования и рефлексии. Это дает возможность писать программы, способные изменять свой код в режиме выполнения. Такое поведение полезно в частности в агенто-ориентированных системах, эволюционных системах и системах искусственного интеллекта.
Механизм контрактов
[править | править код]Механизм контрактов языка позволяет задавать условия на выполнение функций. То есть условия, которые должны удовлетворяться перед непосредственным вызовом функции, после её выполнения, и т. д. Контракты в форме пред- и пост- условий позволяют сделать код более понятным, избегать типичных ошибок.
Рассмотрим пример реализации защищённого стека:
function Push(item)
[
//Ограничим количество элементов коллекции до 10
pre(me.Count < 10 );
post();
invariant();
]
{
//Вызываем метод оригинального объекта
me.Push(item);
}
function Pop()
[//Проверка на пустоту
pre(me.Count > 0);
post();
invariant();
]
{
return me.Pop();
}
stack = new Stack<|int|>();
//Создаем МОбъект
//1. Устанавливаем перехваты для функций
mObject=[Push->Push,PopCheck->Pop];
//2. Выбираем объект к вызовы функций которого
// будут перехватываться
mObject.Mutate(stack);
//В данном случае все сработает нормально
//если установить значение счётчика больше 10
//пользователь получит уведомление о нарушении пред-условия
for (i=0; i<5; i++)
mObject.Push(i);
//Вызов защищённой версии функции
Console.WriteLine((string)mObject.PopCheck());
В данном примере показывается возможность декорирования существующих объектов для внедрения контрактов и других аспектов. Так, существующий класс Stack<int> ограничивается по объёму до 10 элементов.
Примеры
[править | править код] MessageBox.Show('Hello World!');
a=[17, 0, 5, 3,1, 2, 55];
for (i=0; i < a.Length; i=i+1)
for (j=i+1; j < a.Length; j=j+1)
if (a[i] > a[j] )
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
s = 'Results:';
for (i=0; i < a.Length; i++)
s = s + ',' + a[i];
MessageBox.Show(s);
a = new XmlDocument();
a.Load('http://www.codeplex.com/scriptdotnet/Project/ProjectRss.aspx');
MessageBox.Show('CodePlex Script.NET RSS::');
foreach (n in a.SelectNodes('/rss/channel/item/title'))
MessageBox.Show(n.InnerText);
Похожие скриптовые языки
[править | править код]- L Sharp.NET — реализация листа для .NET
- Boo — скриптовый язык, с Python-подобным синтаксисом
- IronPython — реализация языка Python для .NET
Ссылки
[править | править код]В статье есть список источников, но не хватает сносок. |