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
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
public class HelloWorld {
public String toString() { return "Hello World!"; }
}
puis au top-level:
new HelloWorld().toString()
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é"  |
MrFlow | Pas utilisable |
Arrêt de l'exécution avec Stop | OK |
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 |
Stepper | IMHO très difficile. Cf. Beginning Student |
Check Syntax | Faisable |
Recherche dans l'aide spécialisée | Faisable |
Coloration syntaxique | En cours |
Indentation | En cours |
Test Coverage | ? |
Test Suite | ? |
Profiler | ? |
Hyperliens dans les exceptions | ? |
Mise à jour de la liste de fonctions du fichier courant | ? |
Icone au chargement | OK [code à intégrer] |
Editeur de texte | OK [code à documenter] |
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.
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