30

les closures dans Java, c'est en cours de discussion: http://www.javac.info/closures-v05.html
Sinon y'a scala qui en fait: http://www.scala-lang.org/intro/traits.html (faudra vraiment que je l'essaye celui la un jour, il a l'air sexy)

Et à propos d'application lourde basé sur html + js + css: http://joost.com (c'est le xulrunner de mozilla)
Et aussi j'aime bien http://fluidapp.com/ (http://labs.mozilla.com/2007/10/prism/ pour les non-mac). GMail est pour moi une application lourde tongue

Sinon à propos de la rapidité de js, de part ses fonctionnalités et les nombreuses indirections, ca pourra jamais être aussi rapide que du java. De la même manière que du Java ne pourra jamais être aussi rapide que du C. Mais c'est vrai que le plus important dans l'histoire, c'est la vm. Il n'y a qu'à voir le language ruby: un programme ruby est plus rapide sur une jvm que sur les vm standards ruby.

31

les closures, ça doit arriver bientôt aussi en PHP ; c'est prévu pour PHP 5.3, qui a passé l'étape de feature freeze aujourd'hui (pour la rfc, cf : http://wiki.php.net/rfc/closures )
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

32

heu du JS interperté dans un VM en bytecode pourrais bien arriver en terme de vitesse a qq chose de grossierement similiaire au Java et n'importe quel autre language fonctionnant dans une VM
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

33

oui, la différence de vitesse sera peut-être pas majeure, mais elle ne peut que exister. Toute structure de données en Java est fixée à la compilation, pas en JS (c'est le seul intéret pour moi de js d'ailleurs tongue). Donc l'accès à une propriété ou une fonction d'un object en Java va se faire avec un simple offset, alors que le js faudra qu'il fasse une sorte de lookup dans une map.

34

onur (./29) :
Je pense que tu as mal appri le javascript. Pourquoi tu n'utilisais pas les classes? C'est pas parce qu'il n'y a pas de mot clé class qu'il n'y a pas d'objet. On peut tout à fait faire du modulaire en js, meme dans la version 1.5.

Je sais qu'on peut. Ce qui me dérange moi c'est qu'avec cette approche "tout dynamique" tu n'as aucune aide du compilateur pour détecter des erreurs. C'est pas gênant pour les petits projets, mais dès que tu veux faire plus, c'est très vite embêtant. J'ai pas envie de passer mon temps à tester tous les chemins d'exécution de mes programmes pour être sûr que j'ai pas mis un objet Foo à la place d'un objet Bar. smile

Avec haXe je suis plus confiant : le typage à l'exécution reste dynamique donc tu peux faire un peu ce que tu veux en terme de manipulations, introspections, closure, etc. mais le compilateur et son inférence de type permettent de détecter la plupart des erreurs de typage à la compilation.
So much code to write, so little time.

35

Bah sur des gros projets faut se mettre des conventions et si tu développes de facon modulaire, tu n'as pas de probleme (tu peux tester chacun de tes "modules")

sinon le typage tout dynamique n'est pas vraiment "grave". En fait, il m'a fallu un peu d'expérience dans les deux et je me suis rendu compte de ça:

Dans les langages compilés, la compilation nous sauve que des erreurs avec les variables typés statiquement, les autres sont à la merci des casts dynamiques qu'on met dans tous les sens. Or, les variables typés statiquement ne constituent pas vraiment un danger, un int, on sait qu'on va l'utiliser comme un int: qu'on le déclare avec int ou avec var. Et le polymorphisme reste avec autant de danger, donc finalement on a l'impression qu'on perd bcp avec l'absence de types statiques mais en fait pas tant que ça.

Sans parler du fait qu'un VM optimise mieux les cas de polymorphisme grâce à son JIT-compiler.

nitro > je vais regarder haXe là. ca m'intrigue wink
Tout ce qui passe pas par le port 80, c'est de la triche.

36

onur (./35) :
à la merci des casts dynamiques qu'on met dans tous les sens

heu... je crois que je sais où tu peux commencer à chercher l'origine de tes problèmes grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

37

quels problèmes?
Tout ce qui passe pas par le port 80, c'est de la triche.

38

le fait que la compilation ne t'aide pas tant que ça à détecter tes erreurs à cause de casts dynamiques que tu mettrais dans tous les sens (enfin de façon plus générale, tous les problèmes qui peuvent être liés à l'utilisation intensive de casts dynamiques, mais je t'invite à aller lire les topics qui parlent déjà de ce sujet pour ne pas avoir à tout recopier)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

39

Ouais enfin les templates, ca existait pas en java il y a encore quelques années... donc faire/utiliser une liste chainée un peu générique, c'était pas un cadeau.
Sinon, globalement : même si c'est compilé, on n'est pas à l'abri des erreurs à l'execution (ça on le savait) mais on est obligé d'en tenir compte à l'écriture du programme (d'où l'existence des exceptions etc.). Y a pas une fossé entre un prog écrit en C++ et un prog écrit en langage dynamique où on fait (un peu plus) attention.
Tout ce qui passe pas par le port 80, c'est de la triche.

40

onur (./39) :
Ouais enfin les templates, ca existait pas en java il y a encore quelques années... donc faire/utiliser une liste chainée un peu générique, c'était pas un cadeau.

Je n'avais même pas pensé au Java à vrai dire, mais l'absence de templates qui oblige à utiliser des dynamic casts c'est un manque du langage, pas un problème lié aux langages typés à la compilation. Pour rappel, quand tu utilises un cast dynamique, c'est que tu en es arrivé à un point de ton code où tu as perdu l'information sur la nature de ce que tu manipules : sauf exceptions, c'est une erreur de conception.
Sinon, globalement : même si c'est compilé, on n'est pas à l'abri des erreurs à l'execution (ça on le savait) mais on est obligé d'en tenir compte à l'écriture du programme (d'où l'existence des exceptions etc.). Y a pas une fossé entre un prog écrit en C++ et un prog écrit en langage dynamique où on fait (un peu plus) attention.

Je ne suis pas du tout d'accord avec ce que j'ai compris de ces affirmations, mais peut-être que j'ai mal interprété ; tu peux détailler ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

41

Perso je n'ai pas eu à faire à des casts dynamiques dans mes progs C++ (cf le code d'ETP qui est public maintenant), je parle de ça parce que j'en vois tout le temps dans les codes des autres et sur internet. Et ça, je trouve ça plus moche que quand on code avec un langage typé dynamiquement.
Zephyr (./40) :
Je ne suis pas du tout d'accord avec ce que j'ai compris de ces affirmations, mais peut-être que j'ai mal interprété ; tu peux détailler ?


Ce que je dis, c'est que meme quand c'est du compilé, on est amené à vérifier si le pointeur est null, si le fichier qu'on écrit est bien généré, et vérifier d'autres aléas de ce genre. Et c'est pareil en JS: quand c'est critique, on hésite pas à ajouter une vérification typeof(x)=="number"
Tout ce qui passe pas par le port 80, c'est de la triche.

42

sick

c'est vraiment pas de la programmation propre je trouve

43

Non ca l'est pas, et on le fait pas. Quand on sait ce qu'on écrit comme programme, on n'a pas besoin de ce genre de vérification (sauf éventuellement pour le début, on met (alert(typeof(x))...

(enfin là je parle de l'exemple de vérifier typeof(...))
Tout ce qui passe pas par le port 80, c'est de la triche.

44

sick c'est encore plus sale le débogage à coup d'alert pour moi!

Non, vraiment, je peux pas blairer le JS. Pour moi c'est anti rentable, à chaque fois que je l'ai touché j'y ai perdu du temps sans réaliser ce que je voulais vraiment.

45

onur (./41) :
Perso je n'ai pas eu à faire à des casts dynamiques dans mes progs C++ (cf le code d'ETP qui est public maintenant), je parle de ça parce que j'en vois tout le temps dans les codes des autres et sur internet.

Et alors, si tu trouves un mauvais code dans un langage c'est que le langage est pourri ? Que les gens codent n'importe comment, c'est un autre problème et ça les regarde, mais je ne vois pas trop en quoi ça appuie ton ./35
Ce que je dis, c'est que meme quand c'est du compilé, on est amené à vérifier si le pointeur est null, si le fichier qu'on écrit est bien généré, et vérifier d'autres aléas de ce genre. Et c'est pareil en JS: quand c'est critique, on hésite pas à ajouter une vérification typeof(x)=="number"

Oui mais ce genre de vérifications, on s'en tape quand même deux fois plus en JS où tout est autorisé que dans un langage plus strict où une bonne partie des vérifications "basiques" (types & co) n'ont pas à être effectuées puisque le compilateur s'en charge.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

46

squalyl (./44) :
c'est encore plus sale le débogage à coup d'alert pour moi!

Avec des outils adaptés, on peut executer pas à pas aussi et lire la valeur actuelle des variables.
Zephyr (./45) :
Oui mais ce genre de vérifications, on s'en tape quand même deux fois plus en JS où tout est autorisé que dans un langage plus strict où une bonne partie des vérifications "basiques" (types & co) n'ont pas à être effectuées puisque le compilateur s'en charge.


Non pas "deux" fois plus. Normalement, quand tu as bien "designé" ton projet comme tu dis, en C++ ou autre tu as plus besoin de cast dynamique et en js, tu n'as plus besoin de ce genre de survérification.
Tout ce qui passe pas par le port 80, c'est de la triche.

47

squalyl (./44) :
sick c'est encore plus sale le débogage à coup d'alert pour moi!

Non, vraiment, je peux pas blairer le JS. Pour moi c'est anti rentable, à chaque fois que je l'ai touché j'y ai perdu du temps sans réaliser ce que je voulais vraiment.

Heureusement qu'il y a de vrai débugguer pour le JS...
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

48

ah ué? jamais trouvé de truc qui me plaise pour ma part.

49

je sais que visual studio le fait avec IE/FF. Mais bon, faut l'avoir quoi.
Tout ce qui passe pas par le port 80, c'est de la triche.

50

squalyl (./48) :
ah ué? jamais trouvé de truc qui me plaise pour ma part.

FireBug pour Fx, Safari en inclu un de base, Visual studio (san garantie) et j'en passe d'autres sous linux
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

51

onur (./46) :
Non pas "deux" fois plus. Normalement, quand tu as bien "designé" ton projet comme tu dis, en C++ ou autre tu as plus besoin de cast dynamique et en js, tu n'as plus besoin de ce genre de survérification.

Ah ok je viens de comprendre ce que tu voulais dire. Alors oui effectivement si tu es vraiment extrêmement rigoureux, a priori il n'y a pas besoin non plus en JS de multiplier les vérifications. En pratique (et je pense que c'est dans ce sens que nitro en parlait), ça devient probablement très difficile sur des gros projets.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

52

Zephyr (./40) :
Je n'avais même pas pensé au Java à vrai dire, mais l'absence de templates qui oblige à utiliser des dynamic casts c'est un manque du langage, pas un problème lié aux langages typés à la compilation. Pour rappel, quand tu utilises un cast dynamique, c'est que tu en es arrivé à un point de ton code où tu as perdu l'information sur la nature de ce que tu manipules : sauf exceptions, c'est une erreur de conception.


pencil Et bon dieu que c'est dur à faire comprendre!

53

Zephyr (./51) :
onur (./46) :
Non pas "deux" fois plus. Normalement, quand tu as bien "designé" ton projet comme tu dis, en C++ ou autre tu as plus besoin de cast dynamique et en js, tu n'as plus besoin de ce genre de survérification.

Ah ok je viens de comprendre ce que tu voulais dire. Alors oui effectivement si tu es vraiment extrêmement rigoureux, a priori il n'y a pas besoin non plus en JS de multiplier les vérifications. En pratique (et je pense que c'est dans ce sens que nitro en parlait), ça devient probablement très difficile sur des gros projets.

et y'en a même qui vont encore faire des tests unitaires, des tes fonctionnels pour encore vérifier une fois que ce qu'ils ont codé est bon.
Ca me rappelle une discussion sur ce même débat, typé vs dynamique. L'un remarquait qu'il passait son temps à faire des tests unitaires (il aimait presque faire ca .... hum ). Et il trouvait qu'en fait le typage l'emmerdait car si il avait un pb de structure de données, ses tests unitaires le détecteraient. Moi je préfère typer et faire moins de test unitaire. Et même typer c'est aussi quelques fois documenter. tongue

54

Bon, pour répondre au sujet initiale :

Le JavaScript est un langage que je ne connais vraiment pas bien (et ça me manque, mais il est très difficile d'avoir de vrais formations correctes à ce niveau).
Visuellement, je n'accroche pas. Mais, là aussi, c'est probablement parce que je le vois dans des usages liés aux applications web, où on fait du JS un peu en vrac, sans se soucier de la lisibilité du code (mais il n'empêche que j'ai quand même plus de mal à lire un programme fait en JS qu'en Java, par exemple).

C'est à peu près tout ce que j'ai à dire sur la question cheeky
avatar

55

- les formations pour apprendre un language... je suis vraiment dubitatif, se plonger dedans et y passer des heures oki plutot
- JS est carrement moins verbeux que Java, donc ca peut etre moins facile a lire ouep, mais c'est comme tout, ca depend avant tout du dev qui a fait le source

moi je trouve le js joli smile

56

Rien de tel que de lire la spec pour apprendre un langage embarrassed (et je suis sérieux... enfin bon ok pas tout de suite tout de suite, faut déjà coder deux-trois petits trucs à partir d'exemples ou tutos, mais bon si on veut vraiment savoir utiliser le langage ^^)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

57

En fait, c'est aussi et surtout parce que je n'ai jamais eu de projet nécessitant vraiment beaucoup de js... donc jamais de vraie motivation pour m'y mettre.
avatar

58

hibou (./53) :
Moi je préfère typer et faire moins de test unitaire.

Et moi je préfère typer et faire aucun test unitaire. gni
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

59

et corriger les bugs uniquement après que les utilisateurs se soient plains? gni

60

Même pas besoin. Kevin ne fait pas de bug, Il ne fait que des features incomprises gni
avatar