Bonjour à tous,
j'aimerais me remettre un peu à la programmation OCaml, et j'aimerais avoir quelques conseils.
-Quel IDE utiliser? J'ai toujours utilisé un éditeur de texte + console, mais je trouve pas ça très pratique, en particulier si on a un projet avec plusieurs fichiers. D'après mes recherches, il y a des plug-in Eclipse. Lequel me conseilleriez vous?
-Quelle lib utiliser pour faire du fenêtrage (Windows & linux) et du multimédia (jeux)?
Merci à vous.
Perso, j'utilise vim/gvim pour coder en Ocaml, accompagné d'un bon vieux Makefile (classique, pas un OcamlMakefile).
Pour les libs, tu as une liste (non exhaustive) sur :
http://caml.inria.fr/cgi-bin/hump.cgi
Le seul jeu que j'ai fais en ocaml reposait sur OcamlSdl, parce que la SDL c'est trop bien. ![]()
Pour des interfaces graphiques, tu as LablGTK2 par exemple.
J'utilise souvent des IDE pour coder dans divers langages, mais pour le Caml, je trouve que la structure du langage fait qu'on peut le plus souvent s'en passer et donc j'utilise soit vim soit gedit pour coder, avec un makefile gééraliste (codé maison, disponible là : http://svn.quare.fr/viewvc/projets/trunk/ocamlmk/OCaml.mk?view=co ).
Les plug-in eclipse n'était pas très au point (aucun des deux qui sont censé être avancés) lorsque je les ai testé pour la dernière fois il y a quelques mois, mais ils évoluent assez vite.
Pour les graphismes, lablgtk a très bonne réputation mais je ne m'en sers pas (mes interfaces en caml ne dépassent jamais le stade du module Graphics).
Merci pour vos réponses. Je vais essayer de me restreindre au module graphics, si ça ne suffit pas, je passerai à lablgtk.
Petite question, est que F# est semblable à OCaml niveau perf (car OCaml compilé a des perfs très respectables)?
J'ai un doute : le module Graphics fourninrait-il de quoi faire de "vraies" fenêtres avec un barre de titre et une barre de menu ?
Pour le F#, je n'en sais rien. Je n'ai jamais utilisé ce langage (et je n'ai aucune intention de le faire). Le compilateur ocamplopt atteint effectivement des performances très raisonnables.
Avec graphics, on fait:
Graphics.open_graph "foo:0";;
Ca ouvre une fenêtre de tracé. C'est une vrai fenêtre avec titre, mais pas de barre de menu.
Disons que niveau IDE et libs (.NET), F# est assez intéressant par rapport à OCaml.
F# est compilé aussi et est donc très rapide (plus que caml pour certaines construction et moins que caml pour d'autre).
Les archives de la liste de discussion ocaml (caml-list@yquem.inria.fr) regorgent de comparaisons entre les deux langages.
Pour graphics, il serait possible de "simuler" des menu, mais c'est probablement le moment où il faut passer à autre chose.
Bon, finalement je suis retourné sous linux avec gedit + script shell pour la compilation. Windows attendra.
Quelqu'un peut me dire la différence entre ocamlc et ocamlopt? Les 2 produisent du code natif non?
« + script shell pour la compilation. »
oh non ! pitié ! Non. ![]()
Utilise un Makefile pour ça, c'est nettement plus agréable. Si tu ne sais pas faire, redemande et je te filerai le mien.
Sinon, ocamlc produit du bytecode, et pas du code natif. Tu pourras voir que la première ligne du fichier produit est :
ocamlrun est lancé à l'exécution pour interpréter le bytecode contenu dans la suite du fichier.
ocamlopt quant à lui produit du code natif, ce qui est nettement plus rapide (d'un facteur allant de 5 à beaucoup je dirais).
Pour ocamlopt, bizarrement j'ai une erreur quand je fais "ocamlopt -o monprog monprog.ml". Je sais pas pourquoi, il faut que j'ajoute .opt à la fin de ocamlopt.
Pour le script shell, pourquoi c'est pas bien? Je ne sais pas utiliser les makefile (je sais, c'est la honte pour un informaticien lol), jusqu'à présent j'utilisais des IDE ou bien le makefile qu'on me fournissait.
ocamlopt.opt est une version compilé avec ocamlopt de ocamlopt, tandis que ocamlopt (pas .opt) est compilé avec ocamlc. Tu n'a probablement pas la version compilé avec ocamlc d'installé.
L'avantage du Makefile est que c'est prévu pour faire ce genre de chose et pas un script shell. Pour un tout petit projet, ce n'est pas un problème, mais très vite, le Makefile est bien plus simple à utiliser et efficace (ça prend en compte les dépendances, les fichiers qui doivent être reconstruit ou non, etc).
Isukthar : lorsque tu ajoutes un fichier .ml dans ton projet, tout ce que tu as à faire avec un Make c'est ajouter le nom du fichier au début du Makefile (et encore, avec un Makefile sophistiqué utilisant ocamldep, c'est même pas la peine.
). Par contre, si tu compiles via un script, le changement est plus gros.
De plus, le Makefile tu peux le réutiliser plus facilement qu'un script. Là encore, les changements sont assez mineurs d'un projet à l'autre.
Les Makefile sont plus compacts qu'un script (sauf pour les tous petits projets à 1-2 fichiers .ml
).
C'est plus facile (= habituel/naturel) pour autrui de compiler en faisant "make" qu'en cherchant un éventuel script à exécuter.
Enfin, et c'est sans doute le plus important : pour les gros projets, lancer relancer make suite à une modif ne provoquera pas la recompilation de tout le projet, mais seulement de ce qui est impacté par la modification. ocamlc/ocamlopt est assez rapide à compiler, donc ça ne se sent pas trop, mais quand c'est un gros projet c++, tu bénis make. ![]()
J'ai pris le fichier proposé par dnob700, mais après, je fais comment pour compiler?
J'ai mis le fichier dans mon projet, j'ai installé make, et donc je tape make et ça me dit que make n'est pas une commande.
Quelqu'un peut me guider? (je suis sous Windows là).
D'ailleurs, sous windows, j'ai une erreur quand je compile avec ocamlopt ou ocamlopt.opt. On me dit que le compilateur ne sait pas quoi faire de graphics.cma.
Sous windows, c'est le bordel (c'est rare que je dise ça, donc si possible, essayer de ne pas troller) pour compiler sans passer par un IDE car la notion de PATH est assez différente de sous linux.
Le mieux je crois c'est d'utiliser cygwin pour installer make et Cie (voir peut-être ocaml). Comme ça beaucoup de problème sont géré tout seul.
Sinon, pour utiliser mon Makefile avec un projet ocaml. Dans le cas le plus simple tu le copie juste sous le nom de "Makefile" dans ton projet avant de taper make et ça doit fonctionner (une fois que make est dans le PATH car tu passe par cygwin, si cette solution ne te vas pas, on pourra t'expliquer comment modifier ça sans utiliser cygwin, mais, à long terme, c'est plus fatiguant).
dnob700 : « car la notion de PATH est assez différente de sous linux. »
euh ? C'est pas juste des variables d'environnement qu'on modifie comme on veut dans les deux cas ?
« Le mieux je crois c'est d'utiliser cygwin »
aie… je vais demander à mes co-promo sous windows si je les croises sur le net, parce que je suis sûr qu'on peut se passer de (cette abomination suprême qu'est) cygwin.
Isukthar : Pour ocamlopt, il faut remplacer les .cma (libs contenant du bytecode) par des .cmxa (libs contenant du code natif). ![]()
Alors, on m'a répondu : "MinGW fait ça très bien."
J'ai donc rebooté sous Windows pour voir ça par moi-même.
J'ai installé le MinGW :
http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.4/MinGW-5.1.4.exe/download
Je l'ai installé dans C:\Program Files\MinGW\ (C:\MinGW par défaut, c'est complètement naze !). à un moment, j'ai coché "... make" en bas d'une longue liste.
Une fois l'installation finie, j'ai crée dans un dossier un hello.c et un Makefile basic. J'ai lancé une console "cmd" via win+r (s'il existe un raccourci pour lancer direct la console, je suis prenneur.
). Et pan, ça a échoué.
J'ai donc ajouté "C:\Program Files\MinGW\bin" dans mon Path :
1) win+e pour lancer l'explorateur de fichier.
2) clic droit sur "My computer"
"Properties"
onglet "Advanced"
Bouton "Environment variables" en bas à gauche (sous XP)
3) En bas, j'ai choisi Path et cliquer sur le bouton "Edit".
4) j'ai rajouté ";C:\Program Files\MinGW\bin" (sans les ") à la fin de Path.
5) j'ai tout fermé et je me suis relogué.
Une fois relogué, je me suis rendu compte que le make.exe s'appelait "mingw32-make.exe". Pour éviter les soucis, j'ai copié le fichier, puis je l'ai collé dans le même repertoire et j'ai renommé la copie "make.exe".
Nouvel essai : it works !
C'était pas si dur finalement. ![]()
J'ai suivi les instructions de Chris_27, et lorsque je fais make, j'ai les erreurs suivantes:
'cat' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
'gt' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
ocamlc -i -I /usr/local/lib/ocaml/3.11.0 lt; | cat > main.mli
'cat' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
make: *** [main.mli] Error 255
Ces commandes présentes dans le makefile de dnob700 n'existent pas sous windows?
Tu as un lien vers le makefile de dnob ?
Je pense que certaines choses sont mal passées (genre les > ça devait être des > à l'origine).
Sinon, les '| cat' ça doit pouvoir se changer en '-o'.
J'ai pris le lien donné plus haut. J'ai remplacé les > par > et < par <. Il me reste ça comme erreur:
Le chemin d'accès spécifié est introuvable.
ocamlopt -o main.opt -inline 10 -unsafe -noassert -w Ae -I /usr/local/lib/ocaml/
3.11.0 -ccopt -L/usr/local/lib/ocaml/3.11.0 -cc cc main.cmx
File "_none_", line 1, characters 0-1:
Error: No implementations provided for the following modules:
Graphics referenced from main.cmx
make: *** [main.opt] Error 2