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 liderado por Steve Omohundro . Admite recolección de basura y genéricos por subtipos .
Originalmente, se basaba en Eiffel , pero ha evolucionado y ahora incluye varias características de programación funcional .
El nombre está inspirado en Eiffel; la Torre Sather es un monumento emblemático de 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 tipos contravariante .
La implementación original de Berkeley (la última versión estable 1.1 se publicó en 1995 y ya no recibe mantenimiento [ 2 ] ) ha sido adoptada por la Free Software Foundation, convirtiéndose así 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 recibe mantenimiento. Hubo varias otras variantes: Sather-K de la Universidad de Karlsruhe ; [ 4 ] [ 5 ] Sather-W de la Universidad de Waikato [ 6 ] (implementación de Sather versión 1.3); 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) se implementa como un compilador de C ; es decir, no genera código objeto ni código máquina , sino que toma el código fuente de Sather y genera código fuente de C como lenguaje intermedio . La optimización se deja al compilador de C.
El compilador GNU Sather, escrito en el propio Sather, tiene una doble licencia : GNU GPL y LGPL .
Hola Mundo
La clase HELLO_WORLD esprincipal es# SALIDA + "Hola Mundo\n" ;fin ;fin ;Algunas observaciones:
- Los nombres de las clases se escriben completamente en mayúsculas; esto no es solo una convención, sino que el compilador lo impone.
- El método llamado
maines el punto de entrada para la ejecución. Puede pertenecer a cualquier clase, pero si es diferente deMAIN, debe especificarse como una opción del compilador. #es el símbolo del constructor: llama alcreatemétodo de la clase cuyo nombre sigue al operador. En este ejemplo, se utiliza para instanciar laOUTclase, que es la clase para la salida estándar .- La
+clase ha sobrecargado el operador para que añada la cadena pasada como argumento al flujo. - Operadores como
+son azúcar sintáctico para llamadas a métodos con nombres convencionales:a + brepresentaa.plus(b). Se utilizan las convenciones de precedencia aritmética habituales para resolver el orden de llamada de los métodos en fórmulas complejas.
Ejemplo de iteradores
Este programa imprime los números del 1 al 10.
La clase PRINCIPAL esprincipal esbuclei := 1. hasta ! ( 10 );# SALIDA + i + "\n" ;fin ;fin ;fin ;La construcción loop... es el medio preferido para definir bucles, aunque también están disponibles y - . Dentro de la construcción, se puede usar uno o más iteradores. Los nombres de los iteradores siempre terminan con un signo de exclamación. (Esta convención la impone el compilador). es un método de la clase que acepta un argumento, lo que significa que su valor no cambiará cuando el iterador devuelva un valor. podría implementarse en la clase con un código similar al siguiente.endwhilerepeatuntilupto!INTonceupto!INT
hasta ! ( una vez m : INT ): IGUAL es i : INT := self ; -- inicializa i al valor de self, -- es decir, el entero del que se llama este método loop if i > m then quit ; -- sale del bucle cuando i supera 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 para las variables se denota mediante la sintaxis posfija variable:CLASS. El tipo a menudo se puede inferir y, por lo tanto, la información de tipado es opcional, como en anInteger::=1. SAMEes una pseudoclase que hace referencia a la clase actual.
Referencias
- ↑ https://directory.fsf.org/wiki/sather .
{{cite web}}: Falta o está vacío|title=( ayuda ) - ↑ "Planes futuros del ICSI Sather" . Archivado del original el 5 de febrero de 2012. Consultado el 2 de marzo de 2012 .
- ↑ "Descargas de GNU Sather" . Archivado del original el 5 de abril de 2012. Consultado el 2 de marzo de 2012 .
- ↑ Página del proyecto Sather-K (archivo del año 2001)
- ↑ "Descarga de Sather-K 0.9, versión del año 1994" . Archivado del original el 29/04/2024 . Consultado el 02/03/2012 .
- ↑ Página del proyecto Sather-W 1.3 (enlace archivado del año 2002)
- ↑ La versión de Peter Naulls ya no está disponible en la web.
- ↑ "Descripción de pSather" . Archivado del original el 5 de febrero de 2012. Consultado el 2 de marzo de 2012 .
- ↑ "descarga de pSather" . Archivado del original el 6 de julio de 2017. Consultado el 11 de octubre de 2021 .
Enlaces externos
Página principal de Sather . Archivada del original el 25 de marzo de 2024. Consultada el 16 de enero de 2025 .
- Lenguajes de programación basados en clases
- Software del Proyecto GNU
