Skip to topic | Skip to bottom
Home
Minfo03
Minfo03.IntegrationDrSchemer1.17 - 31 May 2004 - 18:51 - SylvainBeuclertopic end

Start of topic | Skip to actions

Intégration de langages dans DrScheme

Langages existants

  • PLT Algol60:
    • proof of concept de Matthew Flatt.
    • Le top-level ne prend que des programmes complets (avec begin ... end).
  • PLT ProfessorJ:
    • 4 niveaux de langages (3 dans la 206p1, il manque le niveau "full").
    • Coloration syntaxique dédiée. Pas d'indentation. Check Syntax partiel. Test Suite?
    • Implémentation du langage Java, sans API. Pour les E/S, utiliser le top-level.
    • Destiné à l'*enseignement* (cf. HtDP).
    • Choix des niveaux de languages: ProfessorJ: A Gradual Intro to Java through Language Levels par Kathryn E Gray et Matthew Flatt: http://www.cs.utah.edu/%7Ekathyg/oopsla03-edsymp-gray.pdf
  • PLT Spy (Python-in-Scheme)
    • Description sur http://plt-spy.sourceforge.net/documentation.html
    • Code sur le CVS de sf.net/projects/plt-spy
    • Check Syntax (et Test Coverage?) au point
    • Installer ce module dans collects/python et PLT Scheme depuis les sources dans ~/plt. Puis aller dans python/c et taper make.
  • FatherTime
    • Inspiré par le travail sur la Programmtion Fonctionnelle Réactive de la communauté Haskell
    • "Scheme plus signals": en fait, il s'agit plutôt d'un ensemble de fonctions utilisables directement dans MzScheme qu'un nouveau langage.
    • Permet un résultat qui change en fonction du temps. A essayer (cf. ci-dessous)
    • Ajoute une icone au chargement.
  • Dromedary
    • Sous-ensemble de O'Caml
    • Je n'ai pas trouvé d'adresse officielle, ni de doc!
    • 3 niveaux de langage
    • Intégration du Check Syntax

HelloWorld

Par la suite, en lisant le fameux chatel-pivoteau, j'ai trouvée cette sympathique adresse plus complète: http://www.bagley.org/~doug/shootout/bench/hello/

Algol60

begin
  prints(`Hello, World!')
end

ProfessorJ

public class HelloWorld {
   public String toString() { return "Hello World!"; }
}
puis au top-level: new HelloWorld().toString()

FrTime

A essayer: seconds Cela affiche le Unix timestamp et ça le met à jour!

Avec variante:

(define (iota n)
 (define (iter i acc)
   (if (< i 0)
       acc
       (iter (- i 1) (cons i acc))))
 (iter (- n 1) '()))
(iota (modulo seconds 10))

Sinon c'est (require mzschme)(display "Hello, World")(newline) ou encore "Hello, World"

D'autres de chez PLT:

(map (lambda (x) (zero? (modulo seconds x))) '(2 3 5 7 11 13 17))
(map (lambda (i) (modulo seconds (+ i 1))) '(0 1 2 3 4 5 6 7 8 9))
(require (rename mzscheme quotient quotient))
(map (lambda (x) (modulo (lift #t quotient seconds (expt 2 x)) 2))
     '(0 1 2 3 4 5 6 7 ))

Python:

print "Hello, World!\n" (bof)

Dromedary

print_endline "Hello, world";;

Attentes pour SpécialK

Les principaux outils que proposent DrScheme sont:

Outil "Implémentabilité"
Editeur de texte OK [code à documenter]
Arrêt de l'exécution avec Stop OK
Coloration syntaxique En cours
Indentation En cours
Check Syntax Faisable
Test Coverage ?
Test Suite ?
Profiler ?
MrFlow Pas utilisable
Icone au chargement OK [code à intégrer]
Recherche dans l'aide spécialisée Faisable
Stepper IMHO très difficile. Cf. Beginning Student
Hyperliens dans les exceptions ?
Inclusion de doc.txt dans la liste OK
Inclusion dans la liste des logiciels installés OK
Inclusion de la doc la liste des manuels installés OK
Mise à jour de la liste de fonctions du fichier courant ?

Implémentation

Voir aussi la PagePersoJulienCharles.

Plusieurs notions sont en jeu: les modules (organisation et description du groupe de code), les units (signature?) et l'API d'extension de DrScheme. La plupart des possibilités d'intégrations mentionnées plus haut sont elle-mêmes des tools DrScheme, ce qui un peu contradictoire.

Prérequis: une unit pour l'outil

Cette unit va permettre de faire le lien avec DrScheme et enregistrer des procédures de lancement au démarrage.

Une unit minimale devrait ressembler à ceci:

(module tool mzscheme
  (require (lib "tool.ss" "drscheme")
           (lib "unitsig.ss"))

  (provide tool@)

  (define tool@
    (unit/sig drscheme:tool-exports^
      (import drscheme:tool^)
      (define (phase1)
        (void))
      (define (phase2)
        (void)))))

Icone au démarrage + Inclusion dans About

Utiliser un truc du genre:

(define tools '(("tool.ss")))
(define tool-names '("SpécialK"))
(define tool-icons '(("Kicone.png" "specialk")))
(define tool-urls '("http://www.specialk-language.org"))
dans le info.ss.

Après avoir créé une unit tool dans tool.ss.

L'icône apparaît au chargement de DrScheme, dans l'outil de bug report, et dans la boîte de dialogue About où elle est accompagnée du nom de l'outil avec un éventuel hyperlien.

MrFlow

Cet outil est Coming soon depuis un paquet de temps, donc on ne peut pas encore l'utiliser.

Inclusion de doc.txt dans la liste

Tous les doc.txt à la racine d'une collection sont pris en compte et listés dans la page "Installed Manuals" du HelpDesk? dans la section Doc.txt.

Inclusion dans la liste des logiciels installés

Le info.ss à la racine d'une collection est lu au démarrage et permet de définir le nom et une description de la collection dans la section "Installed Components" du HelpDesk?.

Inclusion de la doc la liste des manuels installés

Dans la section Others automatiquement et uniquement. L'inclusions dans Languages est malheureusement codée en dur (collects/help/private/docpos.ss).
to top


You are here: Minfo03 > TerRo1 > PagePersoSylvainBeucler > IntegrationDrScheme

to top

Copyright © 1999-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback