Sather
Sather es un lenguaje de programación orientado a objetos. Se originó alrededor de 1990 en el Instituto Internacional de Ciencias de la Computación (ICSI) en la Universidad de California, Berkeley, desarrollado por un equipo internacional dirigido por Steve Omohundro. Admite recolección de basura y genéricos por subtipos.
Originalmente, se basó en Eiffel, pero ha divergido y ahora incluye varias funciones de programación funcional.
El nombre está inspirado en Eiffel; la Torre Sather es un hito reconocible en Berkeley, que lleva el nombre de Jane Krom Sather, la viuda de Peder Sather, quien donó grandes sumas a la fundación de la universidad.
Sather también se inspira en otros lenguajes y paradigmas de programación: iteradores, diseño por contrato, clases abstractas, herencia múltiple, funciones anónimas, sobrecarga de operadores, sistema de tipo contravariante.
La implementación original de Berkeley (la última versión estable 1.1 se lanzó en 1995, ya no se mantiene) ha sido adoptada por la Free Software Foundation, por lo que se convirtió en GNU Sather. La última versión estable de GNU (1.2.3) se lanzó en julio de 2007 y el software actualmente no recibe mantenimiento. Hubo varias otras variantes: Sather-K de la Universidad de Karlsruhe; Sather-W de la Universidad de Waikato (implementación de Sather versión 1.3); Peter Naulls' puerto de ICSI Sather 1.1 a RISC OS; y pSather, una versión paralela de ICSI Sather que aborda arquitecturas multiprocesador de acceso a memoria no uniforme pero presenta un modelo de memoria compartida al programador.
El antiguo compilador ICSI Sather (ahora GNU Sather) se implementa como un compilador de C, es decir, el compilador no genera código de objeto o de máquina, sino que toma el código fuente de Sather y genera el código fuente de C como lenguaje intermedio. La optimización se deja al compilador de C.
El compilador GNU Sather, escrito en el mismo Sather, tiene licencia doble bajo GNU GPL & LGPL.
Hola mundo
clase HELLO_WORLD es principal es #Fuera.+"Hola Mundo"; final; final;
Algunos comentarios:
- Los nombres de clase son TODOS CAPS; esto no es sólo una convención sino que es aplicado por el compilador.
- El método llamado
main
es el punto de entrada para la ejecución. Puede pertenecer a cualquier clase, pero si esto es diferente deMAIN
, debe especificarse como una opción de compilador. #
es el símbolo del constructor: Llama a lacreate
método de la clase cuyo nombre sigue al operador. En este ejemplo, se utiliza para instantánear elOUT
clase, que es la clase para la salida estándar.- El
+
operador ha sido sobrecargado por la clase para anexar la cadena pasada como argumento a la corriente. - Operadores como
+
son azúcar sintáctica para llamadas de método convencionales:a + b
standsa.plus(b)
. Las convenciones habituales de precedencia aritmética se utilizan para resolver el orden de convocatoria de métodos en fórmulas complejas.
Ejemplo de iteradores
Este programa imprime números del 1 al 10.
clase MAIN es principal es bucle i := 1.arriba!()10); #Fuera. + i + "n"; final; final; final;
La construcción loop
... end
es el medio preferido para definir bucles, aunque while
y repeat
-hasta
también están disponibles. Dentro de la construcción, se pueden usar uno o más iteradores. Los nombres de los iteradores siempre terminan con un signo de exclamación. (Esta convención la aplica el compilador). upto!
es un método de la clase INT
que acepta un argumento once
, lo que significa que su valor ganó&# 39;t cambia a medida que el iterador produce. upto!
podría implementarse en la clase INT
con un código similar al siguiente.
arriba!()una vez m:INT):SAME es i: INT := auto; - inicializar i al valor de sí mismo, -- ese es el entero del que se llama este método bucle si i■m entonces Renuncio; ... dejar el bucle cuando vaya más allá de m final; rendimiento i; - si no usas el valor de retorno y quédate en el bucle i := i + 1; - y aumento final; final;
La información de tipo para las variables se denota mediante la sintaxis de sufijo variable:CLASS
. El tipo a menudo se puede inferir y, por lo tanto, la información de escritura es opcional, como en anInteger::=1
. SAME
es una pseudoclase que hace referencia a la clase actual.
Contenido relacionado
Experto en Sistemas
Conjunto de protocolos de internet
KDE