Articulo de referencia

Ardilla (lenguaje de programación)

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 b...

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

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

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

  1. "squirrel/HISTORY en master - albertodemichelis/squirrel - GitHub" .
  2. Wiki para desarrolladores de MirthKit archivada el 11 de febrero de 2014 en Wayback Machine
  3. 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.
  4. "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 .
  5. "L4D2 Vscripts - Comunidad de desarrolladores de Valve" . developer.valvesoftware.com . Consultado el 6 de julio de 2018 .
  6. 1 2 "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  7. "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  8. "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  9. "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  10. "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  11. "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  12. 1 2 3 4 5 6 7 "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  13. 1 2 "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  14. "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  15. "Squirrel - El lenguaje de programación" . squirrel-lang.org . Consultado el 8 de junio de 2026 .
  16. "Guía de programación de Electric Imp" . electricimp.com .
  17. 1 2 3 4 5 6 7 "VScript" . valvesoftware.com . 2014-08-20 . Consultado el 2015-01-17 .
  18. "th155-decomp" . GitHub . Consultado el 19 de octubre de 2020 .
  19. Gothic 2 Online
  20. "iv-multiplayer.com" . www.iv-multiplayer.com . Archivado del original el 7 de junio de 2012. Consultado el 6 de julio de 2018 .
  21. "Libertad desatada" . Consultado el 4 de diciembre de 2019 .
  22. "m2-multiplayer.com" . www.m2-multiplayer.com . Archivado del original el 2 de enero de 2013. Consultado el 6 de julio de 2018 .
  23. "undernightinbirth" . GitHub . Consultado el 18 de agosto de 2024 .
  24. "AI:Página principal - OpenTTD" . wiki.openttd.org . Consultado el 6 de julio de 2018 .
  25. "Heated Metal" . Github . Consultado el 9 de enero de 2026 .
  26. "Simutrans-Squirrel-API: Página principal" . dwachs.github.io . Consultado el 6 de julio de 2018 .
  27. "The VG Resource Wiki" . wiki.vg-resource.com . Consultado el 4 de septiembre de 2021 .
  28. "Se ha lanzado una actualización de Team Fortress 2" . Consultado el 17 de enero de 2026 .
  29. "Motor de blogs de Thimbleweed Park" . blog.thimbleweedpark.com . Consultado el 6 de julio de 2018 .
  30. "NewDark 1.25: ¿Script de ardilla?" . ttlg.com . 2017-03-20 . Consultado el 2019-12-25 .
  31. Vice City Multijugador
  32. "¡Bienvenido al sitio web de VC-MP!" . Archivado del original el 5 de abril de 2006. Recuperado el 4 de mayo de 2014 .
  33. "undernightinbirth" . GitHub . Consultado el 18 de agosto de 2024 .
  34. "El lenguaje de programación Squirrel" . SourceForge . Consultado el 6 de julio de 2018 .
  35. "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 .
  36. "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 .
  • Sitio web oficialEdita esto en Wikidata
  • Documento de ardilla