Script.NET o S# es un lenguaje de metaprogramación que proporciona funcionalidad de scripting en aplicaciones Microsoft .NET , permitiendo la ejecución en tiempo de ejecución de funcionalidades personalizadas, similar a VBA en aplicaciones Microsoft Office . La sintaxis de Script.NET es similar a la de JavaScript . Está diseñado para ser un lenguaje de scripting sencillo y eficiente que permite personalizar aplicaciones .NET. El lenguaje cuenta con un intérprete en tiempo de ejecución y se ejecuta sin generar ensamblados adicionales en memoria.
Script.NET es un proyecto de código abierto.
Características de metaprogramación
Script.NET cuenta con un operador de comillas especial <[ programa ]> que devuelve el AST de un programa dado. Además, se puede acceder al AST del programa actual mediante el objeto prog .
Aquí tienes un ejemplo:
//Crea un AST para MessageBox.Show('Hola'); program ast = < [ MessageBox . Show ( 'Hola' ); ] > ; //Agrega este AST al final del programa actual prog . AppendAst ( ast );El operador <[ ... ]> y los objetos prog permiten a Script.NET generar nuevos scripts o modificar los existentes en tiempo de ejecución.
Objetos generalizados
Script.NET incluye el llamado "Mutantic Framework", que introduce un tipo especial de objetos "meta" para controlar objetos de cualquier tipo. Está compuesto por un conjunto de clases, sobre las cuales se encuentra la clase "DataMutant". Esta implementa varios principios de objetos mutantes:
Definición
Un Mutante es un objeto especial que puede tener todas las propiedades (campos, métodos, etc.) y puede convertirse a cualquier tipo (o asignarse a un objeto de cualquier tipo). La semántica de dicha conversión (o asignación) es pragmáticamente condicional.
Existe un operador especial := llamado asignación mutante o generalizada. Su propósito es asignar valores de campos DataMutant a campos correspondientes de un objeto de cualquier tipo.
Ejemplo . Creación y uso de MObject:
// Crear objeto Data Mutant mobj = [ Text -> 'Hola desde Mutant' ]; // Establecer campos adicionales mobj {{ No es un error tipográfico | .}} Top = 0 ; mobj {{ No es un error tipográfico | .}} Left = 0 ; // Establecer los campos correspondientes del objeto Windows Form // (Asignación Mutant) form := mobj ;Ejemplos
Hola Mundo
MessageBox.Show ( ' ¡Hola!' ) ;Ordenación de burbuja sin función de salida
a = [ 17 , 0 , 5 , 3 , 1 , 2 , 55 ]; para ( i = 0 ; i < a . Length ; i = i + 1 ) para ( j = i + 1 ; j < a . Length ; j = j + 1 ) si ( a [ i ] > a [ j ] ) { temp = a [ i ]; a [ i ] = a [ j ]; a [ j ] = temp ; }s = 'Resultados:' ; para ( i = 0 ; i < a . Length ; i ++ ) s = s + ',' + a [ i ];MessageBox.Show ( s ) ;Lector RSS
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 ) ;Pila
La pila está limitada a 20 elementos mediante la función de diseño por contrato.
function Push ( item ) [ //Límite a 10 elementos pre ( me {{ No es un error tipográfico | .}} Count < 10 ); post (); invariant (); ] { //me es un objeto mutado, //pila en este caso me . Push ( item ); }función Pop () [ // Comprobar si está vacío hardik pre ( me {{ No es un error tipográfico | .}} Count > 0 ); post (); invariant (); ] { return me . Pop (); }pila = nueva pila <| int |> ();//Crear mutante hardik //1. Establecer funciones, sobrescribir stack{{No es un error tipográfico|.}}Push mObject = [ Push -> Push , PopCheck -> Pop ]; //2. Capturar objeto mObject . Mutate ( stack );para ( i = 0 ; i < 5 ; i ++ ) mObject . Push ( i );Consola.WriteLine ( ( string ) mObject.PopCheck ( ) ) ;Véase también
- L Sharp: lenguaje de scripting similar a Lisp para .NET
- Boo : un lenguaje similar a Python para la plataforma .NET.
- IronPython : una implementación de Python para la plataforma .NET, similar a Jython .
- Nemerle : un lenguaje de alto nivel para la plataforma .NET.
Enlaces externos
- Último lanzamiento
- Página principal de Script.NET
- Ejemplos de código archivados el 7 de diciembre de 2007 en Wayback Machine.
- Lenguajes de programación .NET