El Sather es un orientado al objeto que programa la lengua del . Originó circa el 1990 en el instituto de informática internacional en la Universidad de California, Berkeley, desarrollado por un equipo internacional llevado por el Steve Omohundro . Apoya la colección de basura y los productos genéricos por los subtipos .
Original, fue basado en el Eiffel, pero ha divergido, y ahora incluye varias características de la programación funcional . Es probablemente el mejor verlo como lengua orientada al objeto, con muchas ideas prestadas de Eiffel. Incluso el nombre es inspirado por Eiffel; la torre de Sather es una señal reconocible en Berkeley. Sather también toma la inspiración de otros lenguajes de programación y paradigmas: Diseño de Iterators por el contrato, herencia múltiple, el sobrecargar de operador anónimo de las funciones, tipo contravariant sistema de las clases abstractas . Algunas de estas características normalmente se encuentran solamente en lenguajes el de programación funcional.
La puesta en práctica de Berkeley de la original ahora es mantenida por mucha gente, no toda en Berkeley, y ha sido adoptada por el Free Software Foundation GNU por lo tanto que se convierte Sather. Hay por lo menos dos otras puestas en práctica: Sather-K de la universidad de Karlsruhe, y Sather-W de la universidad de Waikato .
Se ejecuta el recopilador anterior del sather de ICSI (ahora GNU Sather) pues un recopilador al C, es decir, el recopilador no hace salir el objeto o el código de la máquina, sino toma el código fuente de Sather y genera código fuente de C como lengua intermedia . La optimización está al lado del compilador C, el código de Sather se realiza a menudo mejor que el código correspondiente C++, y el código generado de C se puede optimizar siempre a mano.
El recopilador del GNU Sather, escrito en Sather sí mismo, es el autorizado dual bajo el GLP del GNU y LGPL .
la clase HELLO_WORLD es la cañería es #OUT+" Hola mundo \ n" ; extremo; extremo;
Algunas observaciones: Este programa imprime números a partir de la 1 a 10. La construcción de ¡hasta que! (una vez m: Internacional): IGUAL es i: Internacional: = uno mismo; -- inicializar i al valor del uno mismo, de que es el número entero cuyo se llama este método lazo si i>m entonces parado -- dejar el lazo cuando i va más allá de m extremo; producción i; -- uso otro i como valor de vuelta y estancia en el lazo i: = i + 1; -- e incremento extremo; extremo; El tipo información para las variables es denotado por un sintaxis del posfijo
Los nombres de clase son TODOS LOS CASQUILLOS; esto es no sólo una convención pero es hecha cumplir por el recopilador.
El método llamado main es el punto de entrada para la ejecución. Puede pertenecer a cualquier clase, pero si esto es diferente de MAIN, debe ser especificado como opción del recopilador.
# es el símbolo del constructor, llamando el método create de la clase correspondiente; aquí se utiliza para ejemplificar la clase de OUT, que es realmente stdout.
Han sobrecargado al operador de + aquí para colocarse para la corriente añade.
Los operadores tales como + son azúcar sintáctico para las llamadas convencional-nombradas del método: el a + b representa a. Utilizan a las convenciones aritméticas generalmente de la precedencia para resolver la orden de llamada de métodos en fórmulas complejas.
La disposición del programa, evocadora del linaje de Eiffel de Sather, permite pre- y poste-condiciones, no demostrado aquí. Ejemplo de iterators
la CAÑERÍA de la clase es la cañería es lazo i: ¡= 1.upto! (10); #OUT + i + " \ n" ; extremo; extremo; extremo; loop… end es los medios preferred de definir lazos (aunque while y repeat-until están también disponibles). Dentro de la construcción, uno o más iterators pueden ser utilizados. Iterator nombra siempre el extremo con una marca de exclamación (al recopilador hace cumplir a esta convención). ¡upto! es un método de la clase INT del número entero que acepta una discusión de once, significando que su valor no cambiará como el iterator rinde. ¡upto! se podía ejecutar en la clase de INT como esto: variable: CLASS. El tipo puede ser deducido a menudo y la información que mecanografía es así opcional, como en anInteger:: =1. SAME es una pseudo-clase de la conveniencia que refiere a la clase actual.
Random links: Maya (ilusión) | Condado de Lorenzo, Indiana | Bagnell, Missouri | Director auxiliar | Monty Stratton