7
votes

Comment se comparent SmallTalk (Pharo par exemple) à Python?

J'ai vu des comparaisons entre smalltalk et rubis d'une part et rubis et python de l'autre, mais pas entre python et smalltalk . J'aimerais surtout savoir quelles sont les différences fondamentales de la mise en œuvre, de la syntaxe, de l'extensibilité et de la philosophie.

par exemple, Python ne semble pas avoir des métaclasses. Smalltalk n'a pas de concept de générateurs. Et bien que les deux soient dites dynamiquement, je pense que Python ne fait pas d'expédition de méthode dynamique. Est-ce correct?


1 commentaires

"J'aimerais particulièrement savoir quelles sont les différences fondamentales de la mise en œuvre, de la syntaxe, de l'extensibilité et de la philosophie." Eh bien, c'est à peu près tout. Donc, le seul moyen de répondre à cette question est de vous enseigner à la fois des langues. :-)


5 Réponses :


1
votes

Selon page Wikipedia sur la méthode dynamique Dispatch:

Mise en œuvre SmallTalk

SmallTalk utilise un message basé sur le type Dispatchers. Chaque instance a un seul Type dont la définition contient le méthodes. Quand une instance reçoit un message, le répartiteur regarde la méthode correspondante dans le Carte de messages à la méthode pour le type et puis invoque la méthode. [...]

Beaucoup d'autres dactylographiés dynamiquement langues, y compris python , rubis, Objective-C et groovy approches.

L'emphase a ajouté et un paragraphe snipé. Donc, au moins cette partie semble être similaire entre les deux langues.


0 commentaires


7
votes

Python a certainement des métaclasses.

SmallTalk a des caractéristiques inhabituelles:

  • a une syntaxe assez simple et seulement environ 6 (!) Mots-clés. Tout le reste (y compris la définition de nouvelles classes) est accompli par des méthodes d'appel (envoyant des messages en Smalltalk). Cela vous permet de créer des DSL dans la langue.
  • En SmallTalk, vous ne stockez pas les fichiers source, mais vous avez plutôt une grosse image mémoire et vous le modifiez à la volée. Vous pouvez également modifier la plupart des Smalltalk lui-même (et éventuellement le casser;)

0 commentaires

9
votes

Par exemple, Python ne semble pas avoir des métaclasses. p>

Il suffit de générer une nouvelle métaclasse pour chaque classe: elle utilise la même métaclasse que la classe parente, ou type code> par défaut. La philosophie de design de Python, alias "le zen de python", peut être traitée en faisant importer ce code> à une invite d'interprète interactive; Le point applicable ici est le second ", explicite est meilleur que implicite." p>

dans Python 2.x, vous spécifiez une métaclasse personnalisée avec la syntaxe suivante: p> xxx Pré>

dans Python 3.x, plus élégamment, vous utilisez la syntaxe de l'argument nommée: p> xxx pré>

smalltalk n'a pas Concept de générateurs. P> blockQuote>

Les générateurs de Python sont des fonctions de première classe (typiquement autonomes) et SmallTalk n'a pas le concept de fonctions "autonomes" - il a des méthodes à l'intérieur de classes. Mais cela a certainement des itérateurs - comme des classes, bien sûr: p> xxx pré>

puisque SmallTalk dispose de "blocs de code" de première classe (Ruby les a pris de cela), vous accomplissez l'itération , comme d'autres "structures de contrôle", en envoyant un bloc de code à une méthode appropriée, et si vous le souhaitez, vous pouvez le faire directement avec la collection (penser Sélectionnez: CODE>): P>

themethod = myobject.bah
for i in range(10):
  themethod()


0 commentaires