# Squeak

Squeak est une implémentation libre du langage de programmation Smalltalk.

## Introduction

Squeak est un environnement de programmation dynamique, conçu à l'origine pour des applications éducatives. C'est une implémentation performante du langage Smalltalk, basée sur une machine virtuelle écrite en large partie en Smalltalk elle-même.
Squeak est issu de travaux menés d'abord au Xerox PARC, puis chez Apple puis enfin chez Disney Interactive par une équipe constituée autour de Dan Ingals et Alan Kay.
Initialement conçu à l'adresse de publics jeunes ou novices en informatique, il est aujourd'hui l'objet de plusieurs contributions qui dépassent le cadre de l'éducation à proprement parler. On peut citer, parmi d'autres, Croquet, un projet d'environnement 3D complet ou encore Kedama, un outil de simulation multi-agent.

## Squeak et l'éducation

Squeak est l'héritier du Logo dans l'approche qu'il propose de l'interaction informatique-éducation. Il s'inscrit dans les cadres théoriques de la psychologie du développement et des idées de psychologues tels que Baldwin, Piaget ou Vygotski. C'est un environnement informatique de type micromonde.
Alan Kay, l'un des pères fondateurs de Squeak, concepteur du Dynabook, emboîte ainsi le pas à Papert et Minsky pour proposer un environnement de programmation à destination des enfants : l'idée de cet outil est d'offrir un grand espace de liberté, facilement accessible, et dans lequel les enfants pourront exprimer leurs idées et en explorer les conséquences (voir aussi constructivisme, théorie de l'activité).
L'un des aspects particuliers à l'environnement Squeak est le concept d'E-Toys, une concrétisation, sous forme de dessins que l'on crée soi-même, de la notion d'objet.
Squeak a été retenu pour faire partie du projet One Laptop per Child.

## Aspects techniques

Squeak est entièrement programmé en Squeak, dialecte de Smalltalk. La machine virtuelle sous-jacente est écrite en Slang (un sous-ensemble moins orienté objet de Smalltalk) puis traduite en C par un programme Squeak et compilée pour la plate-forme ciblée.
Dans Squeak, on trouve une implémentation de Morphic, la structure architecturale graphique de manipulation directe d'objets du langage de programmation Self. Morphic est une alternative à l'interface « Model View Controller » (MVC) traditionnelle de Smalltalk-80, qui reste cependant disponible dans Squeak.
D'autre part, Squeak est orienté multimédia. Il intègre lecteurs de formats wav, mp3, flash, prend en charge le midi, la synthèse sonore et vocale, les API 2D et 3D, reconnaissance de caractères, mais gère également le réseau : serveur et navigateur web, prise en charge du format XML, lecteur de mail, etc.
Basé sur un mécanisme de machine virtuelle, Squeak a été porté sur de nombreuses plateformes. Ainsi, il est disponible sur GNU/Linux, Microsoft Windows, BSD, Apple Mac OS X, BeOS, AmigaOS, ainsi que sur certains assistants personnels.

## Environnement de développement

Squeak propose un environnement de développement qui comporte des outils similaires à ceux que l'on retrouve dans tous les environnements Smalltalk (inspecteur d'objets, navigateurs de classes, outils de refactorisation), mais dont certains sont plus originaux :
* Refactoring Browser : permet de visualiser facilement tout le code source de Squeak rangé en paquets, classes, protocoles et méthodes. Il possède des fonctions pour les transformations de code :
** Renommage d'une classe, d'une méthode ou d'une variable automatiquement répercutée sur toutes les occurrences du nom de cette classe dans le code source.
** Création en un clic des accesseurs à l'ajout d'une variable d'instance.
** Extraction d'une partie d'une méthode dans une autre méthode (factorisation du code).
* Method Finder : permet de retrouver une méthode dans tout le code en lui donnant une liste de paramètres (ordre non nécessaire) et un résultat attendu. Exemples :
    MethodFinder methodFor: #( ('Squeak is a programming environment' 6) 'Squeak')
    Résultat retourné :
    '(data1 truncateTo: data2) '
    → Il faut donc utiliser la méthode truncateTo: pour avoir le début d'une chaîne de caractères.
    MethodFinder methodFor: #( #(#(4 2 3 1)) #(1 2 3 4))
    Résultat retourné :
    '(data1 asSortedArray) (data1 sort) '
    → Il existe donc deux méthodes pour trier un tableau.
* Workspace : permet de s'entraîner en tapant des commandes Smalltalk et en voyant immédiatement leurs résultats.
* Navigateur pour les tests unitaires, navigateur pour la gestion de version des paquets, etc.