|
Pages: [1]
|
 |
|
Author
|
Topic: Débutant en Rebol (Read 1748 times)
|
RebolBert
Guest
|
Bonjour,
Je ne suis qu'un débutant en Rebol, bien que je suive l'affaire :mellow: depuis plusieurs mois ...
Je viens du monde de Logo : UCBLogo, MSW & FMS-Logo, aUCBLogo, Elica Logo, Xlogo, et j'en passe ^_^ .
J'ai essayé Scheme puis Python et newLisp, et j'ai enfin découvert Rebol qui m'a quelque peu dérouté au début.
Notamment ces histoires de series! :huh:. Là, Rebol devient tout à coup plus complexe que ce qu'on imaginait au départ ...
Une variable à laquelle on affecte une "série" devient une référence à cette "valeur" et donc ne pointe plus directement sur la valeur sus-citée (veuillez m'arrêter si je me trompe). Du coup le comportement de Rebol change du tout au tout (c'est la manière dont je le ressens) et la variable devient plutôt une sorte d'index qu'il faut repositionner sans cesse lorsqu'on veut intervenir sur la série selon les méthodes habituelles, c'est-à-dire celles qu'on emploie habituellement, "logiquement" (?), dans d'autres langages.
D'accord j'ai bien compris qu'il y a là comme une Rebol-ution dans les conformisme ou l'establishment de la programmation. Ce qui m'a un peu ouvert les yeux c'est le fait qu'il ne fallait pas oublier de "copier" les valeurs de type serie! pour initialiser une variable : a: copy [] ; copie la valeur [] dans a alors que : a: [] ; fait juste référence à la valeur [] qui peut changer !
Bon tout cela pour dire, un peu confusément, que cet aspect de Rebol n'est évident ni pour un débutant, ni pour quelqu'un qui vient d'ailleurs (d'un autre "monde" de la programmation, bien sûr).
Actuellement, j'utilise encore Logo(s) et newLisp et j'hésite à m'investir dans Rebol car j'ai entendu (ou lu) qu'un Rebol nouveau va arriver avec quelques changements importants.
Qu'en est-il exactement ?
Veuillez m'excuser pour ce long discours, mais Rebol m'intéresse vraiment et je ne comprends pas tout ce qui se dit sur les forums anglophones.
-_-
|
|
|
|
« Last Edit: May 20, 2006, 12:14:39 PM by RebolBert »
|
Logged
|
|
|
|
|
reboltof
|
Tu as effectivement bien comprit le passage par réfèrence si caractéristique du REBOL: attribuer une serie! (c'est à dire: une string!, un block!, un email! mais pas un integer!, un tuple!, ...) à un mot revient à créer un pointeur sur la zone mémoire contenant cette série. Avec pour conséquence qu'une modification de la série modifie le contenu de tous les mots qui y font réfèrence! Exemple: >> a: "salut" == "salut" >> b: a == "salut" >> ? b B is a string of value: "salut" >> append a " toi !" == "salut toi !" >> ? b B is a string of value: "salut toi !" Ceci est un comportement voulu ! S'il n'est pas souhaité, il est très simple de "copier" la valeur": >> a: "salut" == "salut" >> b: copy a == "salut" >> append a " toi !" == "salut toi !" >> ? b B is a string of value: "salut" Quant au fameux "REBOL 3.0" dont tu parles, nous n'espérons pas voir sa venue à court terme ! Quoiqu'il en sois, il reposera sur les mêmes base que le REBOL actuel. tu ne perds donc rien en t'y initiant :mellow: Un dernier conseil: le forum francophone "officiel" est à l'adresse http://www.digicamsoft.com/cgi-bin/rebelBB.cgi . Tu y trouveras beaucoup plus rapidement des réponses à tes questions ! -REBOLtof
|
|
|
|
|
Logged
|
|
|
|
|
Philippe
|
Et j'ajoute si tu ne le connais pas encore qu'il existe un site contenant un paquet de docs en français sur REBOL, dont la traduction des notes de Carl sur REBOL 3.0, mais aussi plein d'autres choses, comme le manuel utilisateur. le site du RDP (Rebol Documentation Project) http://rebdocproj.org/===Philippe
|
|
|
|
|
Logged
|
===Philippe
|
|
|
RebolBert
Guest
|
^_^ Merci pour vos réponses.
Si je veux me mettre à Rebol, je crois qu'il faut vraiment que j'assimile ce concept de séries (quelques réflexes à acquérir !).
Bertrand.
|
|
|
|
|
Logged
|
|
|
|
RebolBert
Guest
|
Bon, j'avoue que j'ai encore du mal à me mettre à REBOL  ... Pourquoi ?  Voici quelques réflexions bien naïves de la part d'un candide (en informatique, en programmation et un peu en tout ) ; mais où pourrais-je m'exprimer ailleurs quant à ce sujet ? Donc voici les raisons qui me font encore hésiter à utiliser pleinement REBOL (plutôt qu'un autre langage): 1) REBOL est sur le point de changer (version 3.0) et cela doit inquiéter plus d'un débutant. Pourquoi s'y mettre maintenant alors que plus tard ou dans peu de temps il faudra peut-être tout recommencer ? 2) REBOL fait de jolies choses rapidement mais a quelques limites : on ne peut pas tou faire avec la version gratuite, lors de certains calculs on arrive souvent à l'erreur "math or number overflow", le VID est souple et facile à utiliser mais il montre vite quelques lacunes. 3) Les scripts REBOL ne sont vraiment pas trés lisibles à cause, sans doute, de la profusion de crochets un peu partout qui alourdissent le code. Je préfère encore les parenthèses de LISP ou SCHEME qui, au moins délimitent bien le code et distinguent le fonctions de leurs paramètres ou arguments. En REBOL on repère difficilement du premier coup les fonctions, les objets ou les variables. En cas de fonctions imbriquées, il est difficile de distinguer la fonction de ses arguments. 4) Les "séries" sont déroutantes avec leur variable qui voyage selon un index. Au bout d'un moment on ne sait plus où on est. Les "séries" doivent avoir une utilité certaine mais elles compliquent un peu le raisonnement pour des script simples. Cela a peut-être un rapport avec ces notions de variable "par valeur" ou "par référence" (excusez mon ignorance). Mais ne pourrait-on pas travailler par défaut "par valeur" ou au moins pour les petites "séries" et travailler de façon explicite "par référence" sur les grosses "séries" ou au moins sur certains types susceptibles de contenir de grandes quantités de données (tableaux, tables, etc.) ? 5) Le vocabulaire de REBOL est parfois un peu énigmatique. Il est difficile de comprendre le sens de certaines fonctions du premier coup, surtout pour un non anglophone. Par exemple, pourquoi 'either' et pas 'ifelse' qui se rapproche plus de 'if' ? Pourquoi tous ces raccourcis comme, par ex., pour les fonctions : 'does', 'func', 'function' ... pourquoi pas, plus simplement 'func' (ou autre) pour les trois styles de fonction avec des blocs vides ([]) là où il ne faut pas de paramètres ou de variables locales. Cela alourdit le lexique du langage et bloque l'usage de certains mots qui pourraient servir pour des variables. 6) Est-il nécessaire d'avoir autant de TYPES de données ? LOGO n'en a que 2 (les mots et les listes) et s'en sort trés bien pour un tas de choses avec plus ou moins de facilité que REBOL selon les domaines. Voilà, c'est tout et ça n'enlève pas que j'apprécie REBOL tant il s'apparente naturellement à d'autres langages que j'aime bien, sans trop les pratiquer pour certains, comme LISP ou SCHEME et LOGO.
|
|
|
|
|
Logged
|
|
|
|
|
Philippe
|
Salut,
Tout d'abord, faut se sentir libre. REBOL n'a pas la prétention d'être le langage TOTAL. Tu fais ce que tu veux.
1) Parce que REBOL ne va pas changer du tout au tout. Il sera plus modulaire, plus ouvert, donc si on ne maîtrise pas le coeur, difficile de suivre.
2) Exact. C'est un pb classique. La profusion des capacités Rebol fait que soit on répète/copie quelque chose d'existant ailleurs, et donc on est déçu. Soit on crée quelque chose de carrément nouveau et pratique, et là, c'est fun. C'est un langage pour créatifs.
3) Pas complétement d'accord. La lisibilité d'un script dépend : du langage mais aussi du programmeur. Lire un code C ou C++ c'est très ch.. par-rapport au REBOL. Mais le VB se lit a bien aussi, quand ce n'est pas trop gros. Entre deux scripts REBOL, suivant les styles des programmeurs, il va y avoir des codes très bien indentés, aérés, commentés ou du super-condensés et imbuvables. Lire du Dockimbel ou du Gregg Irwin, c'est presque un plaisir, on sent une pensée fluide, structurée. Lire d'autres codeurs, ce peut-être plus dur. Moi, je me relis bien. Mais est-ce que d'autres me relisent ? Carl a émis des Best Pratices, c'est quelque part dans la doc.
4) Rebol 3 contiendra bcp d'optimisation sur les séries. Je pense (mais c'est une interprétation perso) que Carl s'est interessé à la manière dont il pouvait gérer au mieux les flux réseau, pour fabriquer ses séries et également au parsing. Et là l'index est important, tout comme le style de données.
5) >>Le vocabulaire de REBOL est parfois un peu énigmatique. Il est difficile de comprendre le sens de certaines fonctions du premier coup, surtout pour un non anglophone. ?? Carl est super exigeant sur le nommage des mots REBOL. Là encore il propose des best practices. Either me parait plus explicite que ifelse qui est la concaténation de deux mots (la forme if-else est d'ailleurs abandonnée par RT.). Pour les fonctions, c'est plus sioux. La plupart des programmeurs utilisent func ou does. En fait toutes les fonctions reposent sur le prototype function! qui prend deux arguments : un bloc de specs = arguments + options et le corps (body). En gros, on retrouve body partout, mais les specs peuvent être absolument nulles [] : does (et on a là une procédure au sens VB), sans arguments, ne comprendre que des variables locales (has) sans arguments, ou comprendre les arguments + des variables locales déclarées explicitement comme cela, et on retrouve func.
6) Oui et non. Avoir des types de données différents permet une meilleur spécialisation. En avoir trop peut effectivement nuire. Un bon exemple est le tuple! qui gère indifféremment les adresses IP et les couleurs. Mais quel rapport entre des IPs et des couleurs ? Fonctionnellement, les deux sont distincts donc devraient mériter un datatype! ?? C'est l'usage d'un datatype qui lui donne son contexte, et une partie de son sens. Il y a nécessairement bcp de sens différents, donc besoin de plusieurs datatypes. Il existe d'ailleurs des pseudo-types en REBOL qui sont des familles regroupant par exemple toutes les formes de séries.
|
|
|
|
|
Logged
|
===Philippe
|
|
|
|
DideC
|
1) Rebol 3.0 sera une évolution de Rebol 2.0 . Ce ne sera pas un nouveau langage, tout comme la clio 4 est une évolution de la 3 : ça reste une petite voiture. Tu ne perd pas ton temps à apprendre le langage dans sa déclinaison actuelle, puisque 90% de ce que tu aura appri sera réutilisable tel quel. Néanmoins, il est probable qu'un dialecte comme VID soit remplacé par "autre chose" qui sera assez différent (quoique ?), mais là on parle de VID et non du langage Rebol : VID est un dialecte écrit en Rebol !! 2) Les limitations sont connues et souvent décriées (accès aux DLL, aux BDD, au cryptage évolué...), mais Rebol Technologie à choisi son modèle commercial ainsi, il faut faire avec. Pour ce qui est des maths, quels genre de calculs fais tu ? Les integer! sont en 32 bits, mais les decimal! sont larges et permettent de grand calculs. VID a été conçu pour permettre de faire ultra simplement des interfaces simple. Il est limité, trés limité, et il faut rapidement intégrer du code "View" dedans. Rebol 3.0 devrait proposé un dialecte d'interface repensé et relooké, en attendant, il y a l'alternative : Rebgui http://www.dobeash.com/rebgui.html3) La lisibilité du code dépend plus du programmeur que de la syntaxe du langage, en tout cas en Rebol. Certaines "optimisations" rendent parfois les choses difficiles à comprendre, mais j'ai constaté que les codes rebol les plus difficiles à lire était l'oeuvre de programmeur évoluant dans d'autres langages et voulant réutiliser leurs habitudes avec rebol. Très mauvaise idée !! Je code dans 5 langages différents, avec 5 présentations différentes (maj/min, indentation, choix des mots...). Les règles du guide du style dans le manuel : http://rebdocproj.org/article.php3?id_article=176#64) Désolé de te décevoir, mais les series! sont la base même du langage. D'accord j'ai bien compris qu'il y a là comme une Rebol-ution dans les conformisme ou l'establishment de la programmation. Ce qui m'a un peu ouvert les yeux c'est le fait qu'il ne fallait pas oublier de "copier" les valeurs de type serie! pour initialiser une variable : a: copy [] ; copie la valeur [] dans a alors que : a: [] ; fait juste référence à la valeur [] qui peut changer ! Bonne ouverture, mais as-tu compris le véritable pourquoi ? Un script est chargé par l'interpréteur et transformé en block! de symboles/valeurs qu'il va interpréter selon les règles du langage, tout comme le script en question va le faire avec un block! de données, selon les règles du programme que ce script est ! En ce sens, on peut presque dire que le langage Rebol est un dialecte interprété par DO, tout comme PARSE interprète son block! de règles, et SECURE et LAYOUT et... Autrement dit, un script Rebol ne devient un programme que lorsque l'interpréteur fait un 'do sur le block! de données que ce script devient lors de son chargement. Ce n'est plus un texte dans un fichier, mais un block! de block! et sous-block! parsemé de valeurs et symboles Donc la ligne a: [] est devenu dans l'interpréteur, un set-word! (a:) et un block! (vide) qui occupe son espace propre en mémoire. Lorsque l'interpréteur, passe OU REPASSE sur ces deux instructions, il ne fait que réaffecter au symbole 'a une position au début du block vide déjà existant, il n'en créé pas un autre (il est déjà là avant même que le programme commence). Cela démontre également une des particularité de Rebol par rapport à beaucoup de langages : il n'y a pas de variables !! Non, il n'y en a pas. Il n'y que des mots (word!) ou si tu préfère, des symboles, et des valeurs. Parfois, l'un est associé à l'autre, parfois un mot n'a pas de valeur, parfois une valeur n'est associé à aucun mot. Ceci étant admi, on comprend qu'une série! n'est qu'une suite de valeurs et qu'on peut avoir un/des symbole(s) qui indiquent un emplacement dans cette suite. Tout comme les pointeurs du langage C. L'utilisation des serie! n'est qu'une question de pratique et d'habitude. Je t'assure. Mais ne pourrait-on pas travailler par défaut "par valeur" ou au moins pour les petites "séries" et travailler de façon explicite "par référence" sur les grosses "séries" ou au moins sur certains types susceptibles de contenir de grandes quantités de données (tableaux, tables, etc.) ? Cela me semble pire que de travailler d'une façon unique quel que soit la taille : pas de question à se poser !! 5) Certe, pour un non anglophone, la quantité de mot présent est déroutante. Si j'étais prof d'info (c'est ce que mon dit les miens), je dirais que de toute façon on ne peut envisager de devenir programmeur que si on maitrise l'anglais technique : 90% des infos sur la programmation sont en anglais !! Je n'imagine même pas faire du développement en n'utilisant que des docs en français. C'est comme rouler en ferrari sur des chemins de terre : on passera jamais la troisième. Le choix des mots a été mûrement réfléchi. Là encore, on ne peut que s'y faire. Tout langage impose ses propres règles. Quand au foisonnement de "raccourcis" (comme 'func, 'does, 'has pour "make function!", voir "source func", "source does"...), ils sont là justement pour raccourcir, pour rendre un script plus petit, moins encombrant, moins lourd, donc plus rapide à charger ou télécharger. Rebol se veut léger et les scripts aussi. Après tout, on a bien un nombre conséquent de mots pour dire "verge" ou "toilette". Cela prend une place folle dans le dico (de français ou d'argo) mais personne ne semble songer à les supprimer du langage ;-) Je m'étonne d'ailleurs de la contradiction entre ce point et ta remarque au point 3) !! Qu'est ce qui est le plus lisible ? une-action: does [print "coucou"] ; ou bien : une-action: make function! [] [] [print "coucou"]
6) Est-il nécessaire d'avoir autant de TYPES de données ? LOGO n'en a que 2 (les mots et les listes) et s'en sort trés bien pour un tas de choses avec plus ou moins de facilité que REBOL selon les domaines Relit cette phrase, tu répond toi même à la question !!!
|
|
|
|
|
Logged
|
|
|
|
RebolBert
Guest
|
Merci pour vos réponses j'ai constaté que les codes rebol les plus difficiles à lire était l'oeuvre de programmeur évoluant dans d'autres langages et voulant réutiliser leurs habitudes avec rebol. Très mauvaise idée !! Il est vrai que je garde sans doute certaines mauvaises habitudes de mes expériences avec Scheme ou NewLisp mais j'ai beaucoup pratiqué Logo, comme on peut s'en appercevoir dans certain de mes messages, et la syntaxe de ce "langage" est trés proche de celle de Rebol. Donc pas trop de difficultés pour moi. J'ai essayé aussi pendant un temps Python qui est, de par sa nature, plus exigeant au niveau de l'écriture; moins souple dans sa syntaxe il est difficile de le rendre illisible. Rebol offre plus de liberté, tant mieux ! Chacun peut assumer la responsabilité d'être ou de pas être ... compris (telle est la question)  Si j'étais prof d'info (c'est ce que mon dit les miens), je dirais que de toute façon on ne peut envisager de devenir programmeur que si on maitrise l'anglais technique : 90% des infos sur la programmation sont en anglais !! Je n'imagine même pas faire du développement en n'utilisant que des docs en français. Là ça se discute. Le langage informatique peut être en anglais mais imposer la documentation systématiquemant en anglais devient de l'impérialisme linguistique, voire culturel. D'autre part on pourrait trés bien envisager un langage qui soit multilingue. Jusqu'à présent seul Logo l'a fait, à ma connaissance (voir par ici pour exemple) avec traducteur de procédures , et ça fonctionne. Qu'est ce qui est le plus lisible ?
une-action: does [print "coucou"] ; ou bien : une-action: make function! [] [] [print "coucou"] Je dirais que la première est la plus pratique et la plus rapide à écrire mais que la deuxième est plus facilement repérable en tant que fonction au sein d'un large script, donc finalement plus lisible. Les abréviations sont utiles au moment du développement du programme ou pour tester en mode interactif mais, personnellement je pense qu'au moment de l'écriture finale du script il est intéressant d'avoir quelques exigences au niveau du style, un peu comme quand on relis un texte que l'on a écrit et que l'on corrige les fautes d'orthographe et de style. Mais cela est une remarque toute personnelle (à chacun ses petites manies)  Est-il nécessaire d'avoir autant de TYPES de données ? LOGO n'en a que 2 (les mots et les listes) et s'en sort trés bien pour un tas de choses avec plus ou moins de facilité que REBOL selon les domaines Relit cette phrase, tu répond toi même à la question !!! Je me suis apperçu, en recherchant (naïvement) LE langage "universel" que chaque langage, même si certains sont quand même trés "généraliste" (all purpose - in english in the text), a ses propre spécificités : - Logo pour le traitement des mots et des listes, et, contrairement à ce qu'on croit, accessoirement pour le graphisme "polaire" (la fameuse tortue graphique), mais aussi, et surtout au début, pour le pilotage d'appareillage (dont cette fameuse tortue robot cette fois-ci) - Rebol pour la communication et,sans doute, plein d'autres choses que je n'ai pas encore découvertes ou explorer - etc., Ce que je voulais dire, c'est que pour Rebol la donnée de base semble être le bloc (block!) mais aussi le mot. Des déclinaisons de ces deux là auraient peut-être suffit, mais là, je m'avance beaucoup trop car je ne suis pas du tout spécialiste en la matière et je ne comprends pas toutes les subtilités de la programmation. C'est pourquoi d'ailleurs j'ai bien vite abandoné Lisp et Scheme pour me tourner vers des "choses" plus abordables comme Logo, Rebol et, événtuellement Python (quoi que!). Désolé de te décevoir, mais les series! sont la base même du langage.(...) L'utilisation des serie! n'est qu'une question de pratique et d'habitude. Je t'assure.
Je viens de comprendre cela entre temps en relisant et en expérimentant quelques trucs. C'est vrai qu'il faut se défaire de quelques raisonnements pour en comprendre d'autres. Pour comprendre et utiliser Rebol, il vaut mieux déposer ses bagages et partir à l'aventure. Quelquechose me dit qu'on ne risque pas de le regretter... ... c'est pourquoi je vous remercie encore d'avoir eu la patience de lire avec attention mes interrogations et d'y avoir donné des réponses claires et concrètes. A bientôt
|
|
|
|
|
Logged
|
|
|
|
|
DideC
|
Je suis très heureux de pouvoir t'aider à découvrir un peu plus ce langage que j'appréci particulièrement. Là ça se discute. Le langage informatique peut être en anglais mais imposer la documentation systématiquemant en anglais devient de l'impérialisme linguistique, voire culturel. Je ne parle pas d'imposer quoique ce soit au niveau de la doc. Mais il faut bien reconnaitre que la majorité des documentations sont an anglais. Je regardais hier la doc de l'API de googleCalendar : c'est en anglais ! Pour avoir des docs en français, il faut que quelqu'un se donne la peine de les traduires. C'est d'ailleurs le cas pour la doc sur Rebol et on ne remerciera jamais assez Philippe pour le travail qu'il a fait dans ce domaine. D'autre part on pourrait trés bien envisager un langage qui soit multilingue. Jusqu'à présent seul Logo l'a fait, à ma connaissance (voir par ici pour exemple) avec traducteur de procédures , et ça fonctionne. Pour info, je connais un langage bilingue : le W-langage de Windev. Toutes les instructions peuvent s'écrire en français ou en anglais (indifféremment et mélangé). C'est agréable de pouvoir "coder en français"  [OT] Ce matin, j'ai ajouté à un programme Rebol (permettant de consulter la table Client d'une base Oracle) une fonctionnalité permettant d'afficher dans GoogleMap le plan d'accès du client sélectionné. Ca ne prenait qu'une ligne en prototype et seulement 5 pour étoffer la fonctionnalité (filtrage de quelques parasites dans l'adresse). Rebol me plait toujours autant  [/OT]
|
|
|
|
|
Logged
|
|
|
|
|
|
Pages: [1]
|
|
|
 |
News: 01-09-08 Alpha version of REBOL 3 has been released!
2167 Posts in 560 Topics by 1219 Members
Latest Member: JetsGuttjeors
|