120

121

objective c ? grin
So much code to write, so little time.

122

ObjC, C#, Smalltalk et plein d'autres ^^
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.

123

C++ avec QObject. smile
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é

124

sick
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

125

126

Kevin Kofler (./123) :
C++ avec QObject. smile

Sauf que c'est du bricolage car non intégré nativement a language
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.

127

onur (./26) :
Et la puissance de ce truc c'est les closures: (qui pourraient exister dans les langages compilés, mais à part le C# j'en connais pas d'autres qui en ont)

Ça va encore te faire criser, mais bon, je peux pas m'en empêcher. Ce dont tu parles, ça existe depuis 50 ans smile Et dans un langage compilé tongue

Je pense que, si les différents types de langages de programmation et leurs paradigmes t'intéressent (et il y a de quoi, c'est passionnant!), tu gagnerais vraiment à te renseigner sur l'historique du domaine, qui est très fourni, ce qui te permettrait de te faire une vue d'ensemble de toutes les merveilles qui sont rendues possibles par un langage de programmation bien conçu, mais aussi de tous les inconvénients que chaque système apporte.
avatar
I'm on a boat motherfucker, don't you ever forget

128

hum j'ai pas vraiment lu le topic mais c'est sûr que les commentaires d'onur donnent l'impression qu'il apprécierait particulièrement le lisp ^^
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#

129

Rha du LISP sick (enfin surtout sick au "(" ")" cheeky)
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.

130

(est_p quel (problème le)) grin
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é

131

onur (./26) :
ce qui permet de faire une fonction capable de générer à la volée des fonctions de collision:

function createCollideFunction(low,high){
	return function(x){
		if (x>low && x<high) return true;
		return false;
	}
}

le jour où vous trouvez des langages qui font ça... (enfin y en a: python, LUA je pense, mais je veux dire le javascript joue dans la cour des grands)


Le C le peut:

#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>

int main (int argc, const char *argv[])
{
  bool (*createCollideFunction (int low, int high)) (int) {
      bool function (int x) {
        if (x>low && x<high)
          return true;
        return false;
      }
      return function;
  }

  int low = atoi (argv[1]);
  int high = atoi (argv[2]);

  bool (*f)(int) = createCollideFunction (low, high);

  int x = 3;

  printf ("collision = %d\n", f(x));
 return 0;
}

C'est juste la syntaxe qui est spéciale (et que c'est du GNU C 99 comme standard de langage).
dehors

132

onur (./26) :
function createCollideFunction(low,high){
	return function(x){
		if (x>low && x<high) return true;
		return false;
	}
}
tout ce code pour juste écrire l'équivalent de :
« let createCollideFunction low high x = x > low && x < high » ?

encore un langage excessivement verbeux tsss (enfin je suppose que le « if » inutile vient de toi et pas du langage, mais bon grin)
onur (./23) :
C'est clair que si on veut du typage fort et détecter un max d'erreur à la compilation, il faut choisir le C++
tu veux dire si on a uniquement le choix entre javascript et C++ c'est bien ça ? grin
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#

133

Godzil (./129) :
Rha du LISP sick (enfin surtout sick au "(" ")" cheeky)

au début le lisp ça s'écrivait comme ça : f1[g1[x; y]; z]. mais en fait les gens ont préféré les parenthèses, qui universalise complètement la notation. faut juste s'habituer un peu, c'est comme moi quand j'avais jamais fait de C, je trouvais les accolades moches. bon ben en fait on s'y fait au bout d'un moment, et c'est vraiment con de prendre ça comme argument crucial pour utiliser ou pas un langague.
Q: How can you tell when you've reached Lisp Enlightenment?A: The parentheses disappear.

More than anything else, I think it is the ability of Lisp programs to manipulate Lisp expressions that sets Lisp apart. And so no one who has not written a lot of macros is really in a position to compare Lisp to other languages. When I hear people complain about Lisp's parentheses, it sounds to my ears like someone saying: "I tried one of those bananas, which you say are so delicious. The white part was ok, but the yellow part was very tough and tasted awful."
avatar
I'm on a boat motherfucker, don't you ever forget

134

PpHd, il n'est pas valide, ton code. Ta fonction imbriquée est un objet local à même titre qu'une variable locale, donc tu retournes un pointeur vers une variable locale, ce qui va évidemment foirer quand tu utilises le pointeur après que la fonction dans laquelle la sous-fonction a été définie a retourné (ou si ça ne foire pas, c'est un pur coup de chance!), et cela même si la prise d'adresse est cachée par la conversion automatique fonction -> pointeur de fonction. Tu ne peux pas utiliser les fonctions imbriquées comme ça.
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é

135

Si je peux car je suis au sein d'une même fonction (main) : les nested function ne sont pas détruites avant la sortie de main tongue

136

137

dualmoo > j'ai jamais dit que le js était le seul à avoir des closures. Il me semble avoir dit aussi qu'il y avait des langages compilés qui en avaient (je sais que le C# en a en tout cas). Ce que je dis, c'est que le js a un ensemble de paradigmes et la plupart des gens (plutot sérieux, qui codent en C etc...) ne savent pas que le js a tout ca ou ne connaissent meme pas ces paradigmes.


pphd >sauf qu'en Js, l'utilité du code que j'ai posté c'est que t'es pas obligé de rester au sein d'une meme fonction...
sinon j'aurais fait une fonction comme variable locale...
function main(low,high){
	
	var f = function(x){ 
		if (x>low && x<high) return true; 
		return false; 
	} 
	
	printf(f(6));
}


Tout ce qui passe pas par le port 80, c'est de la triche.

138

ton if continue à me faire mal aux yeux cheeky
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#

139

toi aussi ? cheeky
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

140

oui c'est des détails tout ça... là on essaye de faire du lisible.
Tout ce qui passe pas par le port 80, c'est de la triche.

141

PpHd (./135) :
Si je peux car je suis au sein d'une même fonction (main) : les nested function ne sont pas détruites avant la sortie de main tongue

La fonction function est imbriquée à l'intérieur de createCollideFunction et utilise ses variables locales (les copies locales des arguments low et high), donc la fonction cesse d'être valide au retour de createCollideFunction.

Et j'ai testé ton exemple sous Fedora 8, il me donne une SIGILL à la ligne printf ("collision = %d\n", f(x));. Comme quoi ce que je dis n'est pas purement théorique.

Program received signal SIGILL, Illegal instruction.
0xbf8f9c16 in ?? ()
Missing separate debuginfos, use: debuginfo-install glibc.i686
(gdb) bt
#0  0xbf8f9c16 in ?? ()
#1  0x0804844b in main (argc=Cannot access memory at address 0x0
) at testnested.c:23
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é

142

je suis sur que ça marche sous debian embarrassed

143

On peut faire ce truc en C... en utilisant spidermonkey.

dehors
Tout ce qui passe pas par le port 80, c'est de la triche.

144

145

De toute facon, pour les closures, on s'en fou que la fonction soit locale ou pas, l'important c'est de pouvoir référencer une fonction via une variable locale. Donc il suffit de faire:
#include <stdbool.h> 
#include <stdlib.h> 
#include <stdio.h> 

int low;
int high;

int f(int x) {
 return (x>low && x<high);
}

int main (int argc, const char *argv[]) 
{ 
 
  low = atoi (argv[1]); 
  high = atoi (argv[2]); 
 
  int (*ptrFunc)(int) = &f;
 
  int x = 3; 
 
  printf ("collision = %d\n", (*ptrFunc)(x)); 
 return 0; 
} 

146

Marche pas, les variables globales n'existent qu'une seule fois, donc tu ne peux pas avoir 2 closures indépendantes à partir de la même fonction.
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é

147

et puis c'est ultra-gore
avatar
I'm on a boat motherfucker, don't you ever forget

148

Kevin Kofler (./146) :
Marche pas, les variables globales n'existent qu'une seule fois, donc tu ne peux pas avoir 2 closures indépendantes à partir de la même fonction.

cela n'a pas de sens, une fonction c'est stateless, une fonction ne s'instancie pas.
Le seul truc que je perds, c'est l'aspect local, mais avec une bonne convention de nommage, ca roule.
dualmoo (./147) :
et puis c'est ultra-gore

bof, c'est du C, tout est plus ou moins manuel tongue

149

Ça n'a pas de sens *en C* tu veux dire (et c'est bien ce que dit Kevin : tu ne peux pas vraiment faire des closures en C)

sinon dans l'absolu (et en particulier dans n'importe quel langage fonctionnel), bien sûr qu'une fonction peut s'instancier, il suffit pour ça qu'elle utilise des variables qui ne sont ni locales ni des paramètres (« variables libres ») : tu peux alors avoir une fermeture différente de la même fonction pour chaque valeur de ces variables, en fait c'est précisément ça que veut dire fermeture d'ailleurs ( http://en.wikipedia.org/wiki/Closure_(computer_science) )

Quant au fait qu'une fonction soit stateless ça n'est même pas forcément vrai en C, tu peux déclarer des variables locales en static ^^
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#

150

hibou > bah après si tu veux faire un truc thread-safe, bonjour ...
avatar
I'm on a boat motherfucker, don't you ever forget