Tutoriel Red - Red/System
PierreCh30-Apr-2013/12:37:36+2:00
Hardi petit, comme on dit par ici, et rédigeons donc un tuto. Je vous préviens d'emblée, je n'ai encore jamais réussi qu'à compiler la séquence de tests en Red, donc on aura besoin du soutien de gens compétents pour faire un tuto qui rime à quelque chose!


Commençons par le tout début:

Alors voilà: vous avez entendu parler de Rebol depuis longtemps, comme un langage Rebolutionnaire. Vous avez aussi entendu parler du langage Red, qui reprendrait la syntaxe de Rebol, conçu d'emblée de manière ouverte (libre, open source), qui progresse aujourd'hui (ces lignes s'écrivent au printemps 2013) à grande vitesse.
Intrigué, émoustillé, vous voulez vous engouffrer, tester Red.


Mais voilà, comment faire?
jocko30-Apr-2013/13:10:13+2:00
supposons que vous être sous Windows, et que vous avez déjà installé Rebol sur votre machine :

Dans un premier temps, étudions red/system :

- chargez Red-Red/System et installez le dans un répertoire de votre choix.
- créez tout de suite un répertoire "mes-progs", au même niveau que red-master, pour éviter la tentation de simplement compiler les exemples ...
- créez dans ce répertoire votre premier programme:

Red/System [
	Title:   "mon premier programme"
	Author:  "moi"
	File: 	 %hello-1.reds
]
print "hello, world !" 


compilez:

 do/args %../Red-master/red-system/rsc.r  "%hello-1.reds"


L'exécutable se trouve dans Red-master\red-system\builds.

Le système a compilé un exécutable Dos. Ouvrir une console, et taper "hello-1". Voilà, content ?
jocko30-Apr-2013/13:16:39+2:00
Toujours sous Windows:

Red/system permet d'utiliser des librairies dynamiques.
Votre deuxième programme :

Red/System [
	Title:   "hello"
	Author:  "moi"
	File: 	 %hello-2.reds
]

; --- lib imports -----

#import [
	"user32.dll" stdcall [
		MessageBox: "MessageBoxA" [
			handle		[integer!] ;__in_opt  HWND hWnd,
			text		[c-string!] ;__in_opt  LPCTSTR lpText,
			title		[c-string!] ; __in_opt  LPCTSTR lpCaption,
			type 		[integer!]	; __in      UINT uType
		return:	[integer!]
		]
  	]
]

alert: func [txt [c-string!] return: [integer!]][
	MessageBox 0 txt "alert" 48 
	]
	
confirm: func [txt [c-string!] return: [integer!] /local rep [integer!]][
	rep: MessageBox 0 txt "confirm" 4 
	if rep = 6 [rep: 1]  ; sinon rep = 7
	rep
]

rep: 0

until [
	alert "hello, world !"
	rep: confirm "quitter ?"	
	rep = 1
] 


compilez, dégustez
  do/args %../Red-master/red-system/rsc.r  "%hello-2.reds" 


La console est gênante ici. Nous allons générer maintenant un exécutable windows :

  do/args %../Red-master/red-system/rsc.r "-t Windows %hello-2.reds" 


On peut le lancer directement en cliquant dessus ...
C'est mieux, comme ça ...
PierreCh30-Apr-2013/15:46:16+2:00
Super, Jocko, merci!
Je m'en suis trouvé coupé dans mon élan: j'allais commencer par la récupération de Red sur git. Pagrave!
jocko30-Apr-2013/16:10:13+2:00
Que ça ne t'empêche pas de le faire, on remettra tout dans le bon ordre. D'autres contributions seront les bienvenues (linux, macosx ...)
PierreCh30-Apr-2013/16:31:24+2:00
Oui, toutafé.

Je fais pour le côté GNU/Linux.
PierreCh30-Apr-2013/21:24:58+2:00
Dans le coin supérieur droit de la page http://www.red-lang.org/ , un bandeau rouge oblique invite à forker.

Suivons ce conseil avisé, qui consiste à récupérer le code source de Red. Soit on suit le lien, soit, en ligne de commande:

  # pierre@autan: ~$        < 2013_04_30__18_37_46 >
git clone https://github.com/dockimbel/Red.git
Cloning into Red...
remote: Counting objects: 13260, done.
remote: Compressing objects: 100% (6701/6701), done.
remote: Total 13260 (delta 6654), reused 13106 (delta 6510)
Receiving objects: 100% (13260/13260), 6.03 MiB | 215 KiB/s, done.
Resolving deltas: 100% (6654/6654), done.



Un répertoire Red a été créé dans le répertoire courant.

Il faut maintenant un exécutable Rebol pour permettre la compilation de Red; je prends ici un Rebol/view 2 pour Linux x86 Libc6, je désarchive le tarball, et je copie l'exécutable là où il convient pour Red:

# pierre@autan: ~$ < 2013_04_30__18_37_46 >
wget http://www.rebol.com/downloads/v278/rebol-view-278-4-2.tar.gz
--2013-04-30 21:17:15-- http://www.rebol.com/downloads/v278/rebol-view-278-4-2.tar.gz
Résolution de www.rebol.com... 205.134.252.23
Connexion vers www.rebol.com|205.134.252.23|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 653165 (638K) [application/x-gzip]
Sauvegarde en : «rebol-view-278-4-2.tar.gz»

100%[======================================>] 653,165 168K/s ds 4.2s

2013-04-30 21:17:20 (151 KB/s) - «rebol-view-278-4-2.tar.gz» sauvegardé [653165/653165]

  # pierre@autan: ~$        < 2013_04_30__18_37_46 >
tar zxf rebol-view-278-4-2.tar.gz

  # pierre@autan: ~$        < 2013_04_30__18_37_46 >
cp releases/rebol-view/rebol Red/red-system/r
rsc.r    runtime/ 

  # pierre@autan: ~$        < 2013_04_30__18_37_46 >
cp releases/rebol-view/rebol Red/red-system/
PierreCh30-Apr-2013/21:27:45+2:00
Et mince, loupé une balise... :-s

Jocko, quand je gitte, tout atterrit dans Red, et non pas dans Red-master: est-ce là une particularité d'un OS par rapport à un autre (j'en doute un peu, normalement git doit être très cross-plate-forme, ce me semble?).
ldci30-Apr-2013/22:02:15+2:00
Git marche aussi avec OSX et atterrit également dans /Users/~/Red
A +
Jocko30-Apr-2013/23:02:24+2:00
J'ai chargé le zip, je n'ai pas gitté
jocko1-May-2013/8:51:47+2:00
Sous windows, l'usage de git est moins systématique que sous linux. On installe souvent à partir d'un zip.
Dans le fichier zip, il y a l'arborescence suivante :
Red-master
    /red
    /red-system
    /docs
    /quick-test    

quelle est l'arborescence dans Git ?
PierreCh1-May-2013/12:36:58+2:00
Une fois gitté, dans un GNU/Linux Debian stable (mais je pense que ça doit valoir pour tous les OS, du moment qu'on gitte), voilà ce que ça donne:
  # pierre@autan: ~$        < 2013_05_01__12_25_21 >
tree Red/ -d
Red/
├── docs
├── quick-test
│   └── tests
├── red
│   ├── runtime
│   │   ├── datatypes
│   │   └── platform
│   ├── tests
│   │   └── source
│   │       ├── compiler
│   │       ├── runtime
│   │       └── units
│   └── utils
└── red-system
    ├── formats
    ├── library
    │   ├── curses
    │   │   └── examples
    │   └── zlib
    │       └── examples
    ├── runtime
    ├── targets
    ├── tests
    │   └── source
    │       ├── compiler
    │       ├── runtime
    │       └── units
    └── utils

28 directories



Je pense qu'il vaut mieux conseiller de gitter plutôt que de prendre un .zip: le gros avantage est qu'il n'y a qu'un
git pull

à faire pour récupérer tout de suite toutes les mises à jour, propres, dans le répertoire.

Au lieu d'avoir à tout retélécharger le .zip, le dézipper dans un répertoire nouveau en renommant l'ancien, ou bien le dézipper dans l'ancien répertoire, mais d'éventuels anciens fichiers obsolètes pourront y subsister, semant confusion et aberrations... Bref, le bazar si l'on n'y prête garde.

Peut-être devrait-on diriger les windowsiens, qui sont à notre époque peu enclins à utiliser la noble ligne de commande, vers l'utilisation d'un client graphique pour git? qgit ou gitk ne sont pas mal du tout, trouve-je.
PierreCh1-May-2013/12:47:39+2:00
Je trouve un poil incohérent qu'en partant du même URL https://github.com/dockimbel/Red/ , le lien vers le .zip et celui vers le git ne donne pas la même arborescence. Seul le nom du répertoire varie (je viens de vérifier à coup de diff, ce qui m'a rasséréné).
Ce n'est certes là qu'un détail, peut-être suis-je là trop pointilleux, mais bon, je pense que ce serait de bon aloi que tout cela soit cohérent, avec un seul nom répertoire, peu importe son nom, quelle que soit la méthode.
jocko1-May-2013/13:53:16+2:00
Je pense que ça n'a pas beaucoup d'importance, et qu'il n'est pas souhaitable d'imposer une méthode de chargement : par exemple, je travaille sur plusieurs machines, et ce répertoire est quelquefois sur une clé, quelquefois sur une machine ...
Mais j'imagine que le zip est généré automatiquement ... une incohérence de git ?
PierreCh1-May-2013/15:02:25+2:00
Possiblement, oui.

Reprenons paisiblement, comme si de rien n'était.

Je fais un bête symlink de mon côté, ainsi, tout sera cohérent entre windoziens et linuxiens. Ou, plus précisément, entre zippeurs et gitteurs.

  # pierre@autan: ~$        < 2013_05_01__15_02_03 >
ln -s Red/ Red-master
DocKimbel2-May-2013/1:58+2:00
Pour la différence de nommage entre les répertoires racines suivant la méthode d'accès: c'est fait automatiquement par Github afin d'indiquer la branche d'origine de l'archive (master en l'occurence). Il suffit de renommer Red-master/ en Red/ après avoir dézippé.
Jocko2-May-2013/8:58:54+2:00
Ok, on fait comme ça .
PierreCh3-May-2013/23:21:46+2:00
Pour faire le pendant de chez windows, je cherchais une bibkiothèque dynamique à appeler (user32 le fait pas trop chez les pingouins), et je me remémore de la mention de bindings faits par Kaj (?) entre Red et GTK+.

Après un petit coup de main de l'ami Google, je tombe en effet par là:
http://red.esperconsultancy.nl/Red-GTK/dir?ci=42c4f12ae1b2a28c&name=examples

Tout cela me semble follement excitant, non?
Il me tarde demain, sur un vrai ordi pour voir ce que ça donne.
PierreCh4-May-2013/8:36:13+2:00
Pour faire le pendant de chez windows, je cherchais une bibkiothèque dynamique à appeler (user32 le fait pas trop chez les pingouins), et je me remémore de la mention de bindings faits par Kaj (?) entre Red et GTK+.

Après un petit coup de main de l'ami Google, je tombe en effet par là:
http://red.esperconsultancy.nl/Red-GTK/dir?ci=42c4f12ae1b2a28c&name=examples

Tout cela me semble follement excitant, non?
Il me tarde demain, sur un vrai ordi pour voir ce que ça donne.
PierreCh4-May-2013/11:10:25+2:00
(pourquoi le double post??)

Rhopunaise, encore un outil à appréhender: fossil... Heureusement qu'il a un nom ingouglable mais sympa, au vu de mon taff...
Allez, je RTFMe...
DocKimbel4-May-2013/22:25:35+2:00
Le binding était listé sur la page Contribution de red-lang.org: http://www.red-lang.org/p/contributions.html

Ce n'est pas utile d'apprendre Fossil, il suffit simplement de cliquer sur le dernier "commit" et d'aller chercher l'archive sous forme de ZIP, exemple: http://red.esperconsultancy.nl/Red-GTK/info/42c4f12ae1
jocko5-May-2013/8:34:23+2:00
attention, dans ce genre de tuturial, les premières étapes doivent être minimales. Pourquoi ne pas utiliser quelque chose comme xmessage qui de demande pas d'installation supplémentaire ?
PierreCh12-May-2013/18:47:17+2:00
Purée, ça fait au moins 3 messages que je mets ici et qui disparaissent! Hm!
PierreCh12-May-2013/18:55:45+2:00
Bon, je tente de me remémorer et de remettre ça:
Jocko: je trouvais aussi que commencer les hostilités par des appels à des bibliothèques était un peu "brutal". Mais bon, on pourra toujours re-ordonner cela plus tard.
Doc: trop tard, j'avais appris le strict nécessaire de fossil pour m'en sortir en moins de 10 minutes.

Doc: il était question d'un endroit où mettre le tuto, sur (j'ai oublié...) le github de Red? ou le site http://www.red-lang.org/ ?
Jocko13-May-2013/9:55:14+2:00
Dans mon esprit, il s'agissait simplement d'un tuto sur la compilation de red/system et de red, pas d'un tuto sur le langage. C'est pourquoi j'avais pris ces deux exemples de création d'un exe DOS et d'un exe Windows.
PierreCh13-May-2013/10:47:51+2:00
D'accord, je comprends mieux. De mon côté, je voyais plus ça comme un tutoriel pour le nouvel arrivant qui a entendu parler de Red / Red/system, mais qui ne sais pas trop par quel bout prendre la chose.

Ce qui est, j'avoue, assez mon cas...

Donc ça aurait été un tuto prenant la main pour se compiler des exemples en Red, utiliser la console interactive (le REPL, acronyme peu parlant, trouve-je), piger les concepts où l'on compile soit au départ, soit à la volée, etc. Je subodore la grande puissance de ce concept, mais voilà, j'ai pas encore réussi à le mettre en œuvre, ni ai-je trouvé une doc claire. Donc, comme le disait si justement Doc, je fais l'égoïste, et je me l'écris, la doc en question.
PierreCh13-May-2013/11:02:55+2:00
C'était bien par là qu'on pouvait mettre le tuto:
https://github.com/dockimbel/Red/wiki
?
PierreCh13-May-2013/12:42:42+2:00
Oui (cf. autre fil de discussion).
J'ai édité une nouvelle page:
https://github.com/dockimbel/Red/wiki/Red-tutorial-for-newcomers---French-version
PierreCh13-May-2013/16:33:08+2:00
(bizarre, j'avais répondu, il y a quelques jours, mais ce n'est pas passé, apparemment)

Doc: trop tard, j'avais déjà appris Fossil; enfin, juste les commandes nécessaires pour récupérer et mettre à jour le dépôt. Ce qui ne m'a guère pris plus de 5 minutes.

Jocko: en effet, je trouvais que pour un tuto, ça commençait assez fort, avec l'utilisation de librairies dynamiques!

Mais je pense que ces passages, on les mettra un peu plus bas.
DocKimbel14-May-2013/10:30:37+2:00
Pierre, j'ai ajouté une mention "Auteur:" sous le titre et corrigé une faute d'orthographe.

Merci à tout ceux qui créent de nouvelles pages dans le wiki de systématiquement indiquer l'auteur d'origine de cette manière.
PierreCh14-May-2013/14:42:16+2:00
Au quai; mais ce Sidi, je voyais plutôt ça comme un boulot collaboratif, donc je vais plutôt ajouter QuiDeDroits.
jocko21-May-2013/4:30:33+2:00
J'ai ajouté au tutorial un paragraphe de programmes Red, des "hello, world!" sous Dos, et sous windows (avec des MessageBox, genre alert et confirm)

https://github.com/dockimbel/Red/wiki/Red-tutorial-for-newcomers---French-version

Merci à Doc de corriger les erreurs d'interprétation !

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2