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) de 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 basaba en Eiffel , pero se ha divergido y ahora incluye varias características de programación funcional .
El nombre está inspirado en Eiffel; la Torre Sather es un hito reconocible en Berkeley, llamado así en honor a 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 tipos contravariantes .
La implementación original de Berkeley (la última versión estable 1.1 se publicó en 1995, ya no se mantiene [2] ) 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 publicó en julio de 2007 [3] y el software actualmente no se mantiene. Hubo otras variantes: Sather-K de la Universidad de Karlsruhe ; [4] [5] Sather-W de la Universidad de Waikato [6] (implementación de la versión 1.3 de Sather); el puerto de Peter Naulls de ICSI Sather 1.1 a RISC OS ; [7] y pSather, [8] [9] una versión paralela de ICSI Sather que aborda arquitecturas multiprocesador de acceso a memoria no uniforme pero que presenta un modelo de memoria compartida al programador.
El antiguo compilador ICSI Sather (ahora GNU Sather) está implementado como un compilador de C , es decir, el compilador no genera código objeto o de máquina , sino que toma el código fuente de Sather y genera código fuente de C como lenguaje intermedio . La optimización queda en manos del compilador de C.
El compilador GNU Sather, escrito en el mismo Sather, tiene licencia dual GNU GPL y LGPL .
La clase HOLA_MUNDO es principal es # OUT + "Hola mundo\n" ; fin ; fin ;
Algunas observaciones:
main
es el punto de entrada para la ejecución. Puede pertenecer a cualquier clase, pero si esta es diferente de MAIN
, debe especificarse como una opción del compilador.#
es el símbolo del constructor: llama al create
método de la clase cuyo nombre sigue al operador. En este ejemplo, se utiliza para crear una instancia de la OUT
clase, que es la clase para la salida estándar .+
clase ha sobrecargado al operador para agregar la cadena pasada como argumento a la secuencia.+
son una sintaxis simplificada para las llamadas a métodos con nombres convencionales: a + b
significa a.plus(b)
. Las convenciones de precedencia aritmética habituales se utilizan para resolver el orden de llamada de los métodos en fórmulas complejas.Este programa imprime números del 1 al 10.
La clase PRINCIPAL es principal es bucle i := 1. hasta ! ( 10 ); # FUERA + i + "\n" ; fin ; fin ; fin ;
El constructo loop
... end
es el medio preferido para definir bucles, aunque también están disponibles while
y repeat
- until
. Dentro del constructo, se pueden utilizar 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 INT
clase que acepta un once
argumento, lo que significa que su valor no cambiará cuando el iterador ceda. upto!
podría implementarse en la INT
clase con un código similar al siguiente.
hasta ! ( una vez m : INT ): MISMO es i : INT := self ; -- inicializa i al valor de self, -- que es el entero del cual se llama este método loop si i > m entonces quit ; -- sale del bucle cuando i va más allá de m end ; yield i ; -- de lo contrario usa i como valor de retorno y permanece en el bucle i := i + 1 ; -- e incrementa end ; end ;
La información de tipo de las variables se indica mediante la sintaxis de sufijo variable:CLASS
. El tipo se puede inferir a menudo y, por lo tanto, la información de tipado es opcional, como en anInteger::=1
. SAME
es una pseudoclase que hace referencia a la clase actual.
{{cite web}}
: Falta o está vacío |title=
( ayuda ){{cite web}}
: CS1 maint: bot: estado de URL original desconocido ( enlace )