2009-08-12 33 views
8

Estoy estudiando Smalltalk en este momento. Se ve muy similar a Python (en realidad, lo contrario, python es muy similar a Smalltalk), así que me preguntaba, como entusiasta de Python, si realmente vale la pena estudiarlo.¿Diferencias entre Smalltalk y python?

Aparte de la transmisión de mensajes, ¿cuáles son otras diferencias conceptuales notables entre Smalltalk y python que podrían permitirme ver nuevos horizontes de programación?

+0

Pregunta de Offtopic: ¿Qué usas para ejecutar smalltalk? Lo único que encontré hace años fue un chirrido que no me gustó demasiado. ¿Qué estás usando para aprender? – OscarRyz

+0

Acabo de instalar squeak, pero también hay GNU smalltalk. Lamentablemente necesito el fink para este último, y soy perezoso para instalar Fink en mi vieja computadora portátil. –

Respuesta

17

En Python, las construcciones "básicas" como if/else, los operadores booleanos en cortocircuito y los bucles son parte del lenguaje en sí. En Smalltalk, todos son solo mensajes. En ese sentido, mientras Python y Smalltalk acuerdan que "todo es un objeto", Smalltalk va más allá en el sentido de que "todo es un mensaje".

[EDITAR] Algunos ejemplos.

comunicado

condicional en Smalltalk:

((x > y) and: [x > z]) 
    ifTrue: [ ... ] 
    ifFalse: [ ... ] 

Nota cómo and: no es sólo un mensaje en Boolean (a su vez produce como resultado de paso de mensajes >-x), y el segundo argumento de and: es una expresión normal , pero un bloque, lo que permite la evaluación perezosa (es decir, cortocircuito). Esto produce otro objeto Boolean, que también admite el mensaje ifTrue:ifFalse:, tomando dos bloques más (es decir, lambdas) como argumentos y ejecutándose uno u otro dependiendo del valor de Boolean.

+6

todo-es-un-mutable-todo meta-locura ... Me gusta mucho. –

+2

oh ... esto es genial. Entonces, ¿un if es un mensaje para un bloque de código? alucinante ... –

+0

Mire la investigación de puntos de vista ... que hará volar su mente. –

7

Smalltalk históricamente ha tenido un increíble IDE integrado. He perdido este IDE en muchos idiomas.

Smalltalk también tiene la hermosa propiedad de que normalmente se encuentra en un sistema vivo. Comienzas limpio y comienzas a modificar cosas. Esto es básicamente un sistema de almacenamiento persistente de objetos. Dicho esto, esto es bueno y malo. Lo que ejecuta es parte de su sistema y parte de lo que envía. El sistema se puede configurar bastante bien antes de ser distribuido. El inconveniente es que el sistema tiene todo lo que ejecuta como parte de lo que envía. Debe tener un embalaje muy cuidadoso para la redistribución.

Ahora, dicho esto, ha pasado un tiempo desde que trabajé con Smalltalk (aproximadamente 20 años). Sí, lo sé, momentos divertidos para los que hacen las matemáticas. Smalltalk es un lenguaje agradable, divertido de programar, divertido de aprender, pero me ha resultado un poco difícil enviar cosas.

Disfruta jugando con él si lo haces. He estado jugando con Python y me encanta.

Jacob

+0

El IDE se ve bastante lindo de hecho. Ahora si pudiera ver algún código ... sería aún mejor ... –

2

El aspecto lingüístico a menudo no es tan importante, y muchos idiomas son bastante repetitiva ,

Por lo que veo, Python y Smalltalk comparten ideales programación orientada a objetos ... pero son muy diferentes en su implementación y el poder en la interfaz de idioma presentada.

el valor real viene en lo que los sutiles diferencias en la sintaxis permite en términos de aplicación . Eche un vistazo a Self y otros lenguajes meta pesado.

Mire más allá de la sintaxis y la semántica inmediata a lo que las diferencias sutiles le permiten a la implementación.

Por ejemplo:

Todo en Smalltalk-80 está disponible para su modificación desde dentro de un programa en ejecución

Qué diferencias entre Python y Smalltalk permiten más profundo maniplation si las hay? ¿Cómo el lenguaje permite la implementación del compilador/tiempo de ejecución?

9

Como alguien nuevo en smalltalk, las dos cosas que realmente me llaman la atención son el sistema basado en imágenes, y esa reflexión está en todas partes. Estos dos hechos simples parecen dar lugar a todo lo demás fresco en el sistema:

  • La imagen significa que usted hace todo mediante la manipulación de objetos, incluyendo escribir y compilar código
  • reflexión le permite inspeccionar el estado de cualquier objeto. Dado que las clases son objetos y sus fuentes son objetos, puede inspeccionar y manipular el código
  • Tiene acceso al contexto de ejecución actual, por lo que puede echar un vistazo a la pila y, a partir de ahí, el código compilado y la fuente de ese código y así sucesivamente
  • La pila es un objeto, por lo que puede guardarla y luego reanudarla más adelante. Bingo, continuaciones!

Todas las aperturas superiores a reunirse en forma interesante:

  • El navegador le permite explorar el origen de literalmente todo, incluyendo la máquina virtual en Squeak
  • Se pueden realizar cambios que afectan a su programa en vivo, por lo que no hay necesidad de reiniciar y navegar hasta lo que sea que esté trabajando en
  • Mejor aún, cuando su programa arroja una excepción, puede depurar el código en vivo. Arreglas el error, actualizas el estado si se vuelve inconsistente y luego haces que tu programa continúe.
  • El navegador le dirá si cree que ha cometido un error tipográfico
  • Es absurdamente fácil navegar por la jerarquía de clases, o averiguar a qué mensajes responde un objeto, o qué código envía un mensaje determinado, o qué objetos puede recibir un mensaje dado
  • puede inspeccionar y manipular el estado de cualquier objeto en el sistema
  • puede hacer dos objetos cambian literalmente se convierte en lugares con :, que le permiten hacer cosas locas como talón de cualquier objeto y luego, sin hacer nada, extraerlo de otra parte si se envía un mensaje.

El sistema de imagen y la reflexión han hecho todas estas cosas perfectamente naturales y normales para un Smalltalker durante unos treinta años.

1

El lenguaje Smalltalk en sí mismo es muy importante. Comprende un pequeño conjunto de potentes características ortogonales que hacen que el lenguaje sea altamente extensible. Como dice Alan Lovejoy: "Smalltalk también es divertido porque definir y usar lenguajes de dominio específicos no es una idea de último momento, es la única manera en que funciona Smalltalk". La notación del lenguaje es críticamente importante porque: "Las diferencias en el poder expresivo de la notación de programación utilizada sí importan". Para más información, lea el artículo completo here.

Cuestiones relacionadas