Scolring

Download Scol Voy@ger

  • Increase font size
  • Default font size
  • Decrease font size
Scolring

Create PDF Email Print

Qu'est ce que le langage SCOL ?

Author:
iri
Date added:
Friday, 19 September 2008
Last revised:
Sunday, 22 February 2009

Answer

Scol est un langage de script, fonctionnel, typé, asynchrone et de haut niveau initié par Sylvain Huet en 1996, libéré en mars 2003 (licence de type BSD modifiée) et désormais maintenu par la communauté Scol représentée par le Scolring.

  • Script

    Scol crée lui aussi une machine virtuelle (anciennement "USM" pour Universal Machine of Scol) pour chaque programme lancé, une machine virtuelle primaire nommée "ScolEngine" ou "Superviseur" est leur mère.
    De fait, le code source d'un programme écrit en Scol est compilé à la volée avant chaque exécution, comme du Python ou du Java.
    Chaque programme Scol contient un script lanceur listant les packages à charger et compiler en vue de l'exécution. Les packages sont des fichiers de type texte, possédant généralement l'extension 'pkg', contenant le code écrit en scol devant être compilé et exécuté. Ces fichiers peuvent être cryptés et/ou compressés et donc décryptés et/ou décompressés à la volée par la VM créée.

  • Fonctionnel

    Dérivant d'OCaml, il s'agit d'un langage essentiellement fonctionnel : quelque soit le nombre d'entrée d'une fonction, celle-ci ne retourne en sortie toujours qu'une seule et unique valeur, éventuellement sous la forme d'un tuple. De même, l'usage de la récursivité est fondamental : une fonction peut être appellée dans sa propre définition et son résultat intermédiaire passé en argument, offrant, entre autres, une optimisation mémoire et un code compact. Enfin, la présence habituelle dans un langage de ce type d'un Garbage Collector (GC) pour gérer dynamiquement la mémoire simplifie considérablement le travail de développement.

    Du point de vue du code source, les objets manipulés (variables, types, communication, ...) sont reconnus et traités comme des fonctions.

    Cette large orientation fonctionnelle permet aussi l'emploi de listes extensibles et l'usage courant de fonctions comme argument d'une autre fonction ou encore retourner une fonction en résultat. Cet usage est plus connu sous le nom de callback.

    Il faut néanmoins noter que Scol admet l'emploi de rares instructions purement impératives, de façon directe telles que 'mutate', 'set_nth_char' ou de façon indirecte (effets de bord) telle que 'set', par exemple.

  • Typé

    Scol est un langage typé acceptant le polymorphisme (jusqu'à un certain point) : une même fonction peut prendre des arguments de type différents selon les appels. Il n'y a cependant pas de "surcharge des opérateurs" : les opérateurs sur les chaînes, les entiers et les flottants sont différents.
    Ce polymorphisme est notamment limité par les différences syntaxique entre les chaînes (string) et les autres types. On le remarque très vite avec les opérateurs : si l'expression A == B est correcte (retourne un résultat tel qu'attendu) pour tous les types simples, s'il s'agit d'une chaine ou d'un flottant le programme s'arrêtera. Comparer deux chaînes doit être effectué via 'strcmp' (qui est une fonction comme '==').

    Le typage en Scol est essentiellement dynamique impliquant un typage implicite (le développeur n'a pas besoin de l'écrire ce qui est un avantage). C'est surtout vrai pour les fonctions et les variables de portée limitée. Pour les variables de portées générales ou les fonctions de communications notamment, le typage est explicite. Il est enfin possible de construire ses propres types et de les utiliser comme les types standard. De façon générale, si le compilateur ne parvient pas à reconnaître le type d'un élément du code chargé, la compilation s'arrêtera immédiatement. On peut enfin charger, compiler et exécuter du code pendant la phase d'exécution d'un code précédent.

  • Asynchrone

    Scol permett au programme de se dérouler même si des fonctions potentiellement bloquantes sont utilisées. C'est le cas notamment des fonctions réseau. La fonction de création d'un canal ou d'envoi d'une requête vers un serveur distant n'attend pas la fin de la compilation dans le nouveau canal ou la réponse du serveur.
    Ces fonctions retournent un objet sur lequel on applique des 'callbacks' appellées automatiquement au moment opportun (par exemple lorsque le serveur répond à ue requête http).

  • Haut niveau

    Comme on l'a vu, il n'est pas nécessaire de contrôler les process de bas niveau, Scol s'en charge en toute transparence. Le code devient plus naturel et le développeur se concentre davantage sur les actions que sur un environnement de contrôles et de pointeurs.
Le code source de Scol est écrit en C / C++. Il est disponible sur le Scolring, dans la rubrique "Téléchargements".

Comparatif Scol / C :

Scol n'a pas la prétention d'avoir la même célébrité que le C, cependant au vu de cette popularité, il est plus facilement comparable.

Scol est plus facile à apprendre / à maîtriser que le C : il est de haut niveau et le plus gros du travail est réalisé par la VM, là où le programmeur C doit tout écrire.
Mais Scol permet au novice de se motiver plus facilement. En effet, il visualise très rapidement le résultat de son code : d'une part la compilation est automatique, il n'a pas à connaître au préalable les innombrables options d'un compilateur tel que "gcc" et la compilation stoppe à la première erreur rencontrée (un peu similaire en cela à Python par exemple), le novice n'est pas noyé sous un flot d'erreurs et de warnings dont même les experts du C ont parfois du mal à suivre. D'autre part le débutant n'a pas à fournir à chaque nouvel essai des efforts sur la compilation, il voit le résultat immédiatement.

Scol, en tant que langage fonctionnel et de haut niveau, donne un code lisible facilement. Le développeur Scol se concentre sur l'algorithme et l'essence de son programme. De plus, il n'est pas occupé à gérer les éventuelles erreurs retournées de bas niveau ou les allocations mémoire. C'est particulièrement net dans l'aspect fonctionnel du langage : Scol incite à coder une fonction pour une tâche sans se soucier de tout ce qui est sous-jacent.

Cette facilité se retrouve en terme de productivité : essayer un code est très simple et très rapide, sans outil extérieur (pas d'appel à un compilateur externe et lancer l'exécutable résultant).On se concentre très vite sur l'amélioration et la correction du code et moins sur le "comment je vais coder telle tâche".

De plus, le code Scol en lui-même est multi-plateforme.

Inversement, le haut niveau empêche un programme Scol d'atteindre un réglage fin et/ou une optimisation fine avec le système, le développeur doit s'en remettre aux capacités de la VM. De même, le développeur doit avoir confiance en la fiabilité de la VM puisque tout le travail sous-jacent est effectué par cette dernière ; cette confiance étant à double tranchant, le programmeur peut omettre de tester suffisamment les retours de fonction ou les divers input, pouvant provoquer par là une faille dans la sécurité de l'application (au sens de fiabilité). Mais ceci n'est pas exclusif à Scol !

Le développeur ne peut pas ajouter facilement une interface qui lui manquerait avec le système. A minima, il ne peut utiliser que l'environnement dit minimal c'est-à-dire issu directement de la VM. Heureusement, Scol est déjà bien rempli !

Enfin, la phase de compilation avant toute exécution ralentit le lancement d'une application, comme c'est le cas de tous les langages de script et nécessite donc l'installation et l'usage d'un "plugin" (ou "distribution").

 

Comparatif Scol / Python :

Voici deux langages de script, Python étant un langage impératif, à l'instar du C. Python est extraordinairement modulaire, là où Scol est essentiellement compact : pour exécuter un code Python, la VMP ne charge que les modules définis alors que la VM Scol se chargera en entier quel que soit le script lancé.
Cela donne un langage Python très flexible mais en contre partie il est difficile de tous les connaître et de choisir les plus fiables / optimisés selon la tâche à accomplir. En Scol, il y a rarement deux fonctions qui font la même chose ! On se mémorise le langage plus rapidement.

Comme Python, lorsque le programme bugue, Scol affiche la pile des fonctions déjà compilées (crash à la compilation)  ou déjà exécutées (crash à l'exécution) avec un message spécifique indiquant la ligne et le fichier incriminés.

Si Python autorise l'inclusion d'items de programmation fonctionnels, Scol a lui aussi quelques passerelles impératives, comme on l'a vu plus haut.

Tous les deux sont des langages fortement multi-plateforme, polyvalent, gratuit et open source.

Contrairement à Python où elle est fondamentale, Scol n'est pas sensible à l'indentation du code : celle-ci n'a aucune importance. Scol utilise tout un ensemble de mot-clés, à mi-chemin entre le C et le Pascal par exemple.
Scol n'intègre pas non plus des fonctions intégrées et automatiser de gestion de documentation directe du code source.

Python est généralement polymorphique que Scol, emploie un typage fortement dynamique et gère de façon parfaitement générique les exceptions.

Enfin, Python est considérablement plus riche et variés dans ses utilisations mais Scol permet d'arriver simplement et rapidement à concevoir des applications spécifiques !

Category