Wren est un langage de script assez simple, basé sur des classes et destiné à être embarqué dans des applications (notamment des jeux vidéos). J'avais envie d'essayer ce langage depuis un moment, je me suis dit qu'il fallait participer à la hype du moment.
Donc, suite au portage de TapTempo en divers langage: Rust, Ada, JavaScript, Perl, Python 2.7, Bash, Perl6 Haskell et PWA, voici la version en Wren.
import "io" for Stdin, Stdout
class TapTempo {
construct new() {
_sampleSize = 5
_resetTime = 5.0
_precision = 0
_hitTimePoints = []
}
computeBpm(currentTime, lastTime, occurenceCount) {
if (occurenceCount == 0) {
occurenceCount = 1
}
var elapsedTime = currentTime - lastTime
System.print("elapsedTime: %(elapsedTime)")
var meanTime = elapsedTime / occurenceCount
var bpm = 60.0 / meanTime
return bpm
}
isResetTimeElapsed(currentTime, lastTime) {
var elapsedTime = currentTime - lastTime
return elapsedTime > _resetTime
}
run() {
System.print("Hit enter key for each beat (q to quit).")
var shouldContinue = true
while (shouldContinue) {
var i = "q"
while (i.count != 0) {
i = Stdin.readLine()
if (i == "q") {
shouldContinue = false
System.print("Bye Bye!")
break
}
}
if (shouldContinue) {
var currentTime = System.clock
System.print("currentTime %(currentTime) %(System.clock)")
if (_hitTimePoints.count > 0 && isResetTimeElapsed(currentTime, _hitTimePoints[_hitTimePoints.count - 1])) {
_hitTimePoints.clear()
}
_hitTimePoints.add(currentTime)
if (_hitTimePoints.count > 1) {
System.write("\r")
var bpm = computeBpm(_hitTimePoints[_hitTimePoints.count - 1], _hitTimePoints[0], _hitTimePoints.count - 1)
System.write("Tempo: %(bpm.round) bpm\t")
} else {
System.write("\r")
System.write("[Hit enter key one more time to start bpm computation...]")
}
Stdout.flush()
while (_hitTimePoints.count > _sampleSize) {
_hitTimePoints.removeAt(0)
}
}
}
}
}
var tapTempo = TapTempo.new()
tapTempo.run()
À noter que cette version peut donner des résultats bizarres. En effet, System.clock
est basé sur clock(3)
qui fournit le temps CPU, et pas le temps global. Donc quand on a un gros processus qui tourne et qui bouffe le CPU, on peut avoir des temps fourni par cet appel qui ne correspondent pas vraiment à ce qu'on recherche. Mais dans l'idée, le code est juste et essaie de se rapprocher le plus possible de l'original, la gestion des options en moins.
# Deviner l’intérêt du langage
Posté par Thomas Douillard . Évalué à 6.
Ou essayer. Parce qu’à la lecture de ce simple helloworld, pas simple de deviner une quelconque spécificité par rapport aux autres.
C’est assez lisible, comparable à du lua dans la même niche. Au delà de ça, difficile de dire quoi que ce soit :) Il y a un intérêt au delà du fait que ça semble être populaire ?
[^] # Re: Deviner l’intérêt du langage
Posté par rewind (Mastodon) . Évalué à 10.
Je ne suis même pas sûr que ça soit si populaire que ça. En effet, ça se place sur la même niche que Lua, mais c'est plus orienté objet que Lua. C'est une alternative intéressante, à mon avis, pour ceux qui cherchent un langage à embarquer facilement et avec une syntaxe simple. Et le code est suffisamment clair pour pouvoir être adapté s'il le faut. Maintenant, en dehors de ça, je dirais que c'est une question de goût et de couleur.
L'auteur est très prolifique, c'est déjà son deuxième langage (son premier était à base de prototype), et il en a un troisième pour faire des expérimentations. Il a aussi écrit le livre Game programming patterns qui est plutôt bien fait. Et il est en train d'écrire un autre bouquin Crafting interpreters qui donne envie.
Donc, voilà, ça permet de faire un peu de pub pour ce langage et cet auteur.
# le comique
Posté par tfeserver tfe (site web personnel) . Évalué à -10.
de répetition, ça lasse.
[^] # Re: le comique
Posté par Leniwce . Évalué à -10. Dernière modification le 02 mars 2018 à 12:59.
Bim -4 ! Tu les a bien mérité tiens ! Tu n'as pas ta brosse a carresser dans le sens du poil ?
attention chérie ça va moinsser
# Portage du vendredi
Posté par napster2core . Évalué à 7.
A quand un portage en brainfuck ou Ook ? Un vendredi ça serait parfait :P
Si tu ne sais pas demande, si tu sais partage !
[^] # Re: Portage du vendredi
Posté par Guillaum (site web personnel) . Évalué à 4.
J'ai commencé mais je suis rattrapé par la vraie vie ;)
[^] # Re: Portage du vendredi
Posté par rewind (Mastodon) . Évalué à 4.
J'y ai pensé mais j'ai vite abandonné. Celui qui réussira aura toute ma considération.
[^] # Re: Portage du vendredi
Posté par barmic . Évalué à 3.
C'est plus une version malbolge qui m'amuserait :)
[^] # Re: Portage du vendredi
Posté par Meku (site web personnel) . Évalué à 2.
Y'a eu PHP déjà ce vendredi.
# Lourd
Posté par TeChn4K . Évalué à -10.
Vous pouvez nous faire ça dans un seul billet svp ? Parce que si vous comptez nous faire 4000 articles pour les 4000 languages existants ça va être lourd. Merci
[^] # Re: Lourd
Posté par rewind (Mastodon) . Évalué à 10.
[^] # Re: Lourd
Posté par Blackknight (site web personnel, Mastodon) . Évalué à 7.
Et finalement, ceux-ci sont moins bien notés que les journaux moins techniques (cf. on m'a coupé la fibre, journal intéressant au demeurant) alros que finalement, on parle de logiciel libre.
[^] # Moi j'aime bien
Posté par aiolos . Évalué à 10.
Continuez svp !
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 7.
Ce commentaire a été supprimé par l’équipe de modération.
# Types
Posté par mzf (site web personnel) . Évalué à 2.
Merci pour ce portage, j'aime bien l'idée de découvrir des langages de niche !
Question pour la définition des types des variables, je ne vois pas de déclaration en dehors du constructeur :
Est-ce que le type est déduit automatiquement, comme dans les langages de script ?
[^] # Re: Types
Posté par Thomas Douillard . Évalué à 3.
Dans les langages à typage dynamique tu veux dire ? Le type n’est pas déduit (dans le sens de l’inférence de types en tout cas), il est donné par le type de la valeur affectée lors de l’utilisation de la variable par l’interpréteur.
Après la construction d’un objet « TapTempo », _sampleSize à la valeur qui correspond au littéral « 5 », qui est probablement un entier. Mais si c’est dynamique on peut affecter une valeur de n’importe quelle autre type plus loin dans le programme, et la seule manière de savoir ce qu’il y a dedans qui marchera à tout les coups c’est de tester ça à l’exécution.
[^] # Re: Types
Posté par rewind (Mastodon) . Évalué à 4.
En fait, tous les nombres sont des réels en Wren. J'ai fait une différence mais au final toutes ces variables ont le type Num.
[^] # Re: Types
Posté par mzf (site web personnel) . Évalué à 1.
Merci pour cette précision.
Ouille :-)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.