Squirrel es un lenguaje de programación orientado a objetos e imperativo de alto nivel , diseñado para ser un lenguaje de scripting ligero que se ajusta al tamaño, el ancho de banda de memoria y los requisitos de tiempo real de aplicaciones como los videojuegos , lanzado el 6 de septiembre de 2003.
MirthKit, un sencillo conjunto de herramientas para crear y distribuir juegos 2D multiplataforma de código abierto, utiliza Squirrel como plataforma. [ 2 ] Code::Blocks lo utiliza ampliamente para la programación y también se usó en Final Fantasy Crystal Chronicles: My Life as a King . [ 3 ] [ 4 ] También se utiliza en Left 4 Dead 2 , Portal 2 , Team Fortress 2 , Thimbleweed Park y War Thunder para eventos programados y en NewDark , una actualización no oficial del motor de Thief 2: The Metal Age , para facilitar medios adicionales y simplificados de programación de eventos de misión, además de la programación en C habitual . [ 5 ]
Características del idioma
- Tipografía dinámica
- Delegación
- Clases , herencia
- Funciones de orden superior
- Generadores
- Hilos cooperativos ( coroutines )
- Recursión de cola
- Manejo de excepciones
- Gestión automática de memoria (principalmente conteo de referencias con recolector de basura de respaldo )
- Referencias débiles
- Tanto el compilador como la máquina virtual caben juntos en aproximadamente 7000 líneas de código C++.
- Soporte opcional para cadenas anchas UCS-2.
Estado de desarrollo
La versión 2.0 se publicó el 3 de abril de 2005. La versión estable actual es la 3.2, publicada el 10 de febrero de 2022. [ 6 ]
El proyecto puede compilarse y ejecutarse en Windows (x86 y x64), Linux, Illumos (x86 y x64), Android, iOS, macOS y FreeBSD. [ 7 ]
Se ha probado con los siguientes compiladores:
- Microsoft Visual C++ 6.0, 7.0, 7.1, 8.0, 9.0 y 10.0 (x86 y x64)
- MinGW gcc 3.2 (mingw especial 20020817-1)
- Cygwin gcc 3.2
- Linux gcc 3.x
- Linux gcc
- xIllumos
- xXCode 4
Valores y tipos de datos, estructura léxica
Si bien Squirrel es un lenguaje de tipado dinámico y las variables no tienen un tipo definido, diferentes operaciones pueden interpretar la variable como si contuviera un tipo. Los tipos básicos de Squirrel son entero, flotante, cadena, nulo, tabla, matriz, función, generador, clase, instancia, booleano, hilo y datos de usuario. [ 8 ]
Entero:
Un entero representa un número con signo de 32 bits (o superior): [ 9 ]
local a = 123 //decimal local b = 0x0012 //hexadecimal local c = 075 //octal [ 10 ]
Flotar:
Un float representa un número de punto flotante de 32 bits (o superior).
local a=1.0 local b=0.234
Cadena:
Las cadenas son una secuencia inmutable de caracteres. Para modificar una cadena es necesario crear una nueva. [ 11 ]
Las cadenas de Squirrel son similares a las cadenas en C o C++. Están delimitadas por comillas ( ") y pueden contener secuencias de escape ( \t, \a, \b, \n, \r, \v, \f, \\, \", \', \0, \x<hh>, \u<hhhh>y \U<hhhhhhhh>).
Las cadenas literales no interpretan las secuencias de escape. Comienzan @"y terminan con la comilla correspondiente. Además, pueden extenderse más allá de un salto de línea. En ese caso, incluyen cualquier espacio en blanco entre las comillas.
local a = "Soy una cadena maravillosa \n " // tiene un salto de línea al final de la cadena local x = @"Soy una cadena literal \n " // El \n es literal, similar a " \\ n" en una cadena normal.
Sin embargo, una comilla doble dentro de una cadena literal se reemplaza por una comilla simple: [ 6 ]
multilínea local = @" Esta es una cadena de varias líneas "Incorporará" todas las nuevas líneas. personajes
Nulo:
El valor nulo es un valor primitivo que representa una referencia nula, vacía o inexistente. El tipo Null tiene exactamente un valor, llamado nulo.
local a = nulo
Bool
Bool es un tipo de dato de doble valor (booleano). Sus literales son truey false. Un valor booleano expresa la validez de una condición (indica si la condición es verdadera o falsa).: [ 12 ]
local a = verdadero;
Mesa
Las tablas son contenedores asociativos implementados como un conjunto de pares clave/valor llamados ranuras.
local t={} prueba local= { a=10 b=función(a) { return a+1; } }Formación
Los arrays son secuencias simples de objetos. Su tamaño es dinámico y su índice siempre comienza desde 0.: [ 13 ]
local a = ["Soy","un","arreglo"] local b = [nulo] b[0] = a[2];
Función
Las funciones son similares a las de otros lenguajes tipo C, con algunas diferencias clave (véase más abajo).
Clase
Las clases son contenedores asociativos implementados como conjuntos de pares clave/valor. Se crean mediante una "expresión de clase" o una "declaración de clase". Los miembros de una clase pueden heredarse de otro objeto de clase en el momento de su creación. Tras la creación, se pueden añadir miembros hasta que se cree una instancia de la clase. [ 14 ]
Instancia de clase
Las instancias de clase se crean llamando a un objeto de clase . Las instancias, al igual que las tablas, se implementan como conjuntos de pares clave/valor. Los miembros de una instancia no se pueden agregar ni eliminar dinámicamente; sin embargo, el valor de los miembros sí se puede cambiar. [ 15 ]
Generador
Los generadores son funciones que pueden suspenderse con la instrucción 'yield' y reanudarse posteriormente (véase Generadores). [ 13 ]
Datos de usuario
Los objetos Userdata son bloques de memoria o punteros definidos por la aplicación anfitriona, pero almacenados dentro de variables de Squirrel (véase Userdata y UserPointers).
Hilo
Los hilos son objetos que representan un hilo de ejecución cooperativo, también conocidos como corrutinas.
Referencia débil
Las referencias débiles son objetos que apuntan a otro objeto (no escalar) pero no poseen una referencia fuerte a él. (Véase Referencias débiles). [ 12 ]
Las siguientes palabras están reservadas y no pueden utilizarse como identificadores: [ 12 ]
Los identificadores comienzan con un carácter alfabético o el símbolo '_' seguido de cualquier número de caracteres alfabéticos, '_' o dígitos ([0-9]). Squirrel es un lenguaje sensible a mayúsculas y minúsculas, lo que significa que la representación en minúscula y mayúscula del mismo carácter alfabético se consideran caracteres diferentes. Por ejemplo, "foo", "Foo" y "fOo" se tratan como 3 identificadores distintos. [ 12 ]
Squirrel reconoce los siguientes operadores:
En cuanto a los tokens significativos:
Un comentario es un texto que el compilador ignora, pero que resulta útil para los programadores. Los comentarios se utilizan normalmente para insertar anotaciones en el código. El compilador los trata como espacios en blanco. [ 12 ]
Un comentario puede consistir en /*caracteres (barra, asterisco), seguidos de cualquier secuencia de caracteres (incluyendo saltos de línea), seguidos de los */caracteres. Esta sintaxis es la misma que la de ANSI C: [ 12 ]
/* any text between will be ignored */
Squirrel acepta números enteros, números de punto flotante y cadenas literales.
Sintaxis
La sintaxis de squirrel es similar a C/C++/Java, etc., pero el lenguaje tiene una naturaleza muy dinámica como Python/Lua, etc. [ 12 ]
Factorial en ardilla
función local factorial ( x ) // Obtener la función factorial y luego obtener el valor x { if ( x <= 1 ) { // si x es menor que 1 return 1 ; // entonces el código simplemente devolverá 1 } else { // si eso no funciona return x * factorial ( x - 1 ); // entonces el código devolverá x veces factorial(x-1) } }Generadores
función no_un_generador_de_números_aleatorios ( max ) { local último = 42 ; local IM = 139968 ; local IA = 3877 ; local IC = 29573 ; for (;;) { // bucle infinito yield ( max * ( último = ( último * IA + IC ) % IM ) / IM ); } }local randtor = no_es_un_generador_de_números_aleatorios ( 100 );para ( local i = 0 ; i < 10 ; i += 1 ) imprimir ( ">" + resume randtor + "\n" );Clases y herencia
clase BaseVector { constructor (...) { if ( vargv . len () >= 3 ) { x = vargv [ 0 ]; y = vargv [ 1 ]; z = vargv [ 2 ]; } } x = 0 ; y = 0 ; z = 0 ; }clase Vector3 extiende BaseVector { función _add ( other ) { if ( other instanceof :: Vector3 ) return :: Vector3 ( x + other . x , y + other . y , z + other . z ); else throw "parámetro incorrecto" ; } función Print () { :: print ( x + "," + y + "," + z + "\n" ); } }local v0 = Vector3 ( 1 , 2 , 3 ) local v1 = Vector3 ( 11 , 12 , 13 ) local v2 = v0 + v1 ; v2 . Print ();Aplicaciones
Aplicaciones que utilizan Squirrel
- Code::Blocks , entorno de desarrollo integrado
- Enduro/X, servidor de aplicaciones en clúster
- Electric Imp, una plataforma IoT de extremo a extremo [ 16 ]
Juegos con ardillas
- Enjambre alienígena [ 17 ]
- Antinomia de flores comunes [ 18 ]
- Leyendas Apex
- Hermanos de batalla
- Contagio [ 17 ]
- Counter Strike: Global Offensive [ 17 ]
- CRSED: FOAD
- Final Fantasy Crystal Chronicles: Mi vida como rey [ 3 ]
- Gothic Online , [ 19 ] un mod para Gothic II
- GTA IV 's IV -MP [ 20 ]
- Left 4 Dead 2 [ 17 ]
- Libertad desatada [ 21 ]
- M2-Multijugador de Mafia II [ 22 ]
- Melty Blood: Tipo Lumina [ 23 ]
- Amanecer nuclear [ 17 ]
- OpenTTD [ 24 ]
- Portal 2 [ 17 ]
- Metal caliente de Rainbow Six Siege de Tom Clancy [ 25 ]
- Guerrero de las Sombras
- Simutrans [ 26 ]
- Sonic Unleashed (PS2/Wii) [ 27 ]
- SuperTux
- Team Fortress 2 [ 28 ]
- Parque Thimbleweed [ 29 ]
- Thief II (actualización no oficial del motor NewDark) [ 30 ]
- Titanfall [ 17 ]
- Vice City Multijugador , [ 31 ] un mod para Grand Theft Auto: Vice City [ 32 ]
- Bajo parto nocturno [ 33 ]
- Trueno de guerra
- Zero no Tsukaima - Maigo no Period a Ikusen no Symphony (PS2)
- Zero no Tsukaima - Muma ga Tsumugu Yokaze no Nocturne (PS2)
- Zero no Tsukaima - Shou-akuma a Harukaze no Concerto (PS2)
Historia
El lenguaje se hizo público en 2003 bajo la licencia zlib/libpng . [ 34 ] En noviembre de 2010, la licencia se cambió a la licencia MIT para permitir que el proyecto se alojara en Google Code . [ 35 ] [ 36 ] Es desarrollado y mantenido por Alberto Demichelis.
Véase también
Referencias
- ↑ "squirrel/HISTORY en master - albertodemichelis/squirrel - GitHub" .
- ↑ Wiki para desarrolladores de MirthKit archivada el 11 de febrero de 2014 en Wayback Machine
- 1 2 Brandon Boyer (21 de febrero de 2008). "Cobertura del evento Gamasutra - GDC 2008" . gamasutra.com . Gamasutra . Archivado del original el 9 de mayo de 2010.
- ↑ "Exclusiva: Detrás de escena del debut de Final Fantasy en WiiWare" . gamasutra.com . Gamasutra . 23 de junio de 2008. Archivado del original el 10 de noviembre de 2010. Consultado el 22 de septiembre de 2011 .
- ↑ "L4D2 Vscripts - Comunidad de desarrolladores de Valve" . developer.valvesoftware.com . Consultado el 6 de julio de 2018 .
- 1 2 "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- 1 2 3 4 5 6 7 "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- 1 2 "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
- ↑ "Guía de programación de Electric Imp" . electricimp.com .
- 1 2 3 4 5 6 7 "VScript" . valvesoftware.com . 2014-08-20 . Consultado el 2015-01-17 .
- ↑ "th155-decomp" . GitHub . Consultado el 19 de octubre de 2020 .
- ↑ Gothic 2 Online
- ↑ "iv-multiplayer.com" . www.iv-multiplayer.com . Archivado del original el 7 de junio de 2012. Consultado el 6 de julio de 2018 .
- ↑ "Libertad desatada" . Consultado el 4 de diciembre de 2019 .
- ↑ "m2-multiplayer.com" . www.m2-multiplayer.com . Archivado del original el 2 de enero de 2013. Consultado el 6 de julio de 2018 .
- ↑ "undernightinbirth" . GitHub . Consultado el 18 de agosto de 2024 .
- ↑ "AI:Página principal - OpenTTD" . wiki.openttd.org . Consultado el 6 de julio de 2018 .
- ↑ "Heated Metal" . Github . Consultado el 9 de enero de 2026 .
- ↑ "Simutrans-Squirrel-API: Página principal" . dwachs.github.io . Consultado el 6 de julio de 2018 .
- ↑ "The VG Resource Wiki" . wiki.vg-resource.com . Consultado el 4 de septiembre de 2021 .
- ↑ "Se ha lanzado una actualización de Team Fortress 2" . Consultado el 17 de enero de 2026 .
- ↑ "Motor de blogs de Thimbleweed Park" . blog.thimbleweedpark.com . Consultado el 6 de julio de 2018 .
- ↑ "NewDark 1.25: ¿Script de ardilla?" . ttlg.com . 2017-03-20 . Consultado el 2019-12-25 .
- ↑ Vice City Multijugador
- ↑ "¡Bienvenido al sitio web de VC-MP!" . Archivado del original el 5 de abril de 2006. Recuperado el 4 de mayo de 2014 .
- ↑ "undernightinbirth" . GitHub . Consultado el 18 de agosto de 2024 .
- ↑ "El lenguaje de programación Squirrel" . SourceForge . Consultado el 6 de julio de 2018 .
- ↑ "Transición a code.google.com y licencia MIT - El lenguaje - Squirrel - El lenguaje de programación" . forum.squirrel-lang.org . Consultado el 6 de julio de 2018 .
- ↑ "Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code" . code.google.com . Consultado el 6 de julio de 2018 .
Enlaces externos
- Software de 2003
- Software libre multiplataforma
- Bibliotecas informáticas gratuitas
- Software libre programado en C
- Lenguajes de programación orientados a objetos
- Lenguajes de programación procedimental
- Lenguajes de programación
- Lenguajes de programación creados en 2003
- Lenguajes de scripting
- Software que utiliza la licencia MIT.
