Les IO j’ai à peu près compris (j’espère), mais je n’en suis pas là. J’ai lu Tutorial Haskell pour le développeur C et j’ai lu un peu plus de la moitié de Apprendre Haskell vous fera le plus grand bien ! j’ai fini le chapitre 9. Mais c’est dense, il me faut un peu de temps pour croire comprendre les concepts… je dois parfois relire plusieurs fois. Et j’ai surement oublié des trucs lus par manque de pratique.
// includes …intmain(){autosquare=[](autox){returnx*x;};autotwice=[](autox,autof){returnf(x)+f(x);};std::cout<<twice(5,square)<<std::endl;std::cout<<twice(5.1,square)<<std::endl;return0;}
Le but étant de vérifier comment il instancie les différentes versions en fonction des types.
Compilation :
$ g++ -std=c++11 main.cpp
main.cpp: In function'int main()':
main.cpp:29:25: error: parameter declared 'auto'
auto square=[](auto x){return x * x;};
^
main.cpp: In lambda function:
main.cpp:29:37: error: 'x' was not declared in this scope
auto square=[](auto x){return x * x;};
^
main.cpp: In function'int main()':
main.cpp:30:24: error: parameter declared 'auto'
auto twice=[](auto x, auto f){return f(x) + f(x);};
^
main.cpp:30:32: error: parameter declared 'auto'
auto twice=[](auto x, auto f){return f(x) + f(x);};
^
…
Je ne suis pas un pro du C++11, quelqu’un pourrait m’expliquer ?
template<classT>Ttwice(constT&x,T(*f)(constT&)){returnf(x)+f(x);}template<classT>Tsquare(constT&x){returnx*x;}intmain(){twice(5,square);// Évalué à 50twice(5.0,square);// Évalué à 50.0return0;}
Je n’ai pas essayé à faire une lambda template. Les objets de type T pouvant devenir gros, j’ai décidé de passer les paramètres par référence, pour préciser au compilateur que l’objet ne serait pas modifié, j’ai ajouté const. Ce que je n’ai pas fait sur le premier exemple avec des paramètres par copie.
Les déclarations de type ne sont pas nécessaire, mais permette de garantir que la fonction prend un type numérique et retourne le même type. Fonctionne avec Int, Integer, Float, etc.
à part les extrémistes, il n'y a personne de "divisé".
Ouai, alors là, tu m’insultes… je suis dubitatif sur le projet en lui même pour différentes raisons, mais me traiter d’extrémiste, je trouve que tu y vas un peu fort.
Il semble confortable pour les « fan » de traité ceux qui ne suivent la sainte parole aveuglément de les traiter d’intégriste…
J’aurais tendance à dire qu’il faut regarder le pour et le contre. Mais c’est parce que je suis intégriste !
C'est quand la dernière fois que t'as eu une carte Ethernet qui ne fonctionnait pas directement
Pour moi, c’est quand j’ai passé ma femme sous GNU/Linux… carte mère qui fume, changement en urgence, elle avait un truc à faire pour le lendemain. Après les x redémarrage, pas de carte réseau, ni d’USB pour transférer les drivers depuis mon PC. Donc switch sous GNU/Linux.
C’est ce que fait img.linuxfr.org, si l’image disparait, elle reste dans le cache du site pour toujours. Si elle est modifiée, alors, la nouvelle apparaitra.
C’est ce que m’avait répondu quelqu’un sur un commentaire il y a un moment… je n’arrive pas à remettre la main dessus.
Je ne suis pas sûr de bien comprendre, donc je vais éviter de m'énerver, parce que mon incompréhension vient peut-être simplement du fait que tu ne sais pas t'exprimer de manière construite, mais… si je lis ce que j'ai cité, j'en déduis que tu crois qu'on ne peut
* ni ajouter de breakpoint à la volée
* ni modifier de variable à la volée
* ni faire du pas-à-pas
Non, ce n'est ni ce que j'ai dit, ni ce que je crois.
Dans quel monde tu vis ?
Dans un monde où les bancs industriels coûte cher, ils sont donc partagés. Donc quand tu as une après midi sur le banc pour faire tes tests, tu y restes coûte que coûte. Si tu trouves un bug rapidement à 14h30. Tu as deux choix, soit tu corrigse et recompiles, mais le temps de recompilation (4h) me donnera un nouvel essai dans, heu ben demain en fait. Sauf que le lendemain, je n'ai pas de créneau avant 16h.
Pour optimiser mon temps sur le banc, je recommence en « corrigeant » le bug dans le débugger. A ce point, j'ai deux choix, soit je contourne le bug à chaque fois manuellement (avec une interface graphique), avec gdb, je peux scripter cette partie et gagner du temps.
Il est possible qu'une bonne interface graphique de debug permette de scripter, mais je n'en connais pas.
Est-ce qu'avec ton gdb tu peux exprimer une condition pour activer ou non un breakpoint (genre "arrête-toi ici seulement si ceci et cela" en ayant accès à toute l'expressivité de groovy et même ta logique métier) ?
Oui.
Est-ce que tu peux sélectionner une ligne de ton programme et cliquer/taper le raccourci clavier "j'ai pas mis de breakpoint mais relance le flot d'exécution jusqu'à cette ligne peu importe ce qu'il se passe" ?
Je ne suis pas sûr de comprendre le « peu importe ce qu'il se passe ».
Est-ce que tu peux abandonner le contexte courant ("drop frame" dans IntelliJ, désolé flemme de chercher mieux) en revenant au début de ta méthode et en remettant tout le contexte (variables, paramètres, etc.) dans l'état où il était au début histoire de revoir ce qu'il se passe ?
Je ne sais pas le faire, mais il me semble que gdb sait faire depuis quelques versions.
Moi j’ai eu des cas, ou tu as du matériel de test pendant 4h. Tu trouves un premier bug, mais si on le corrige, il y a 5h de recompilation… donc, pouvoir scripter un test, ajouter un breakpoint, modifier une variable avancer de 5 instructions, remodifier une variable, pour enfin être prêt à trouver un deuxième bug… et bien je suis content que gdb soit en ligne de commande, qu’on puisse lui passer des scripts, etc.
Après, pour des softs avec IHM, un débogueur en IHM aussi peut suffire.
Tu sais, dans l’industrie, j’ai des clients qui nous demande encore visual 6… alors tu sais…
Pour ton information, kdevelop, qtcreator, emacs sont très bien, font de la très bonne complétion. Kdev te propose même les inclusions. Visual a aussi pas mal progressé que ce soit au niveau du compilateur comme de l’IDE… mais personnellement, pour faire des remplacements, compilation… je préfère une ligne de commande. C’est juste une question de gout et d’habitude.
À la maison, firefox 24.5.0 ça marche. Avec konqueror 4.12.5 j’ai un souci de css… les trois colonnes se trouvent les unes à la suite des autres verticalement.
Sinon, je trouve que c’est une belle IHM locale, mieux que gitk.
J'ai dû mal comprendre le problème initial, car pour moi on parlait de la longueur du nom du répertoire ou du fichier. Pas de la profondeur de la récursivité (--depth).
Pub pour une agence de référencement sur le web… Je suis allé voir sans suivre le lien posté. Ce que je trouve amusant, c'est de venir sur linuxfr pour être référencé alors que ce devrait-être leur métier ;-)
Le mur est venu dans un second temps. Au départ, c'est l'URSS qui demande aux alliés d'ouvrir un front à l'ouest. Ensuite, lors de la capitulation de l'Allemagne et du partage les Russes ont gardé les territoires conquit. Le mur a été construit plus tard car Berlin était devenu un passage facile pour fuir le bloc Soviétique.
Comme le montre la colorisation bash de linuxfr. Dans ce cas, comme la variable pid ne contiendra jamais d'espace, il n'y a pas de risque. Mais dans d'autre cas, ça risque de merder.
Je vais supposer que pidcontient une chaîne avec espace (ou séparateur contenue dans la variable IFS)
$ name="$(cat "/proc/${pid}/comm")"# Ligne initiale$ name=$(cat /proc/1 2/comm)#bash élimine le premier étage de guillemet et la variable.
Ensuite, il évalue la commande cat avec ses deux arguments : /proc/1 et 2/comm.
ce que tu voulais faire :
$ name="$(cat \"/proc/${pid}/comm\")"$ name=$(cat "/proc/1 2/comm")#bash élimine les guillemet et interprête \" en ".
Là, bash évalue ensuite cat avec 1 argument /proc/1 2/comm.
J'ai gardé ton exemple, qui n'est pas pertinent pour les espaces puisque les pid ne contiennent jamais d'espace. Néanmoins, lorsque l'on parse des éléments dans des répertoires cela arrive.
Le problème de passer par /proc c'est que entre un ls /proc pour avoir la liste des process et l'ouverture du fichier /proc/xxx/comm certains process ont eu le temps de mourir. Alors que la sortie de ps est plus simple à gérer.
$ ps | grep <nomDeMonAppli>
Un man ps montre que l'on peut décider de ce que ps affiche (sections : PROCESS SELECTION BY LIST et OUTPUT FORMAT CONTROL). Je pense que aujourd'hui beaucoup de gens font d'abord une recherche sur le net et tombe sur des exemples basic sans jamais lire le man.
Et même en le faisant cela n'empêcherait pas certaines incompatibilités. Mettons que sur ma machine, ma carte graphique requiert des drivers recents qui eux ont besoin de biblothèques récentes (libY.so). Mettons également que je souhaite faire tourner une application OpenGL vieille de 10 ans ne fonctionnant qu'avec une version précise (et ancienne) de cette même libY.so . Il n'est pas possible (tout au moins avec le chargeur dynamique GNU) de charger en mémoire deux versions d'une même bibliothèque avec même nom de fichier et même SONAME.
Si tu peux. La bibliothèque standard sur ton PC est dans /lib ou /usr/lib. Il suffit de lancer ton appli vieille de 10 ans dans un environnement avec un LD_LIBRARY_PATH qui contient le chemin de ta libY.so vieille avant celle libY.so de ton /lib .
La CSS que j'ai limite la largeur de la partie centrale… Pour pas avoir des lignes trop longue. Et du coup, il y a des retour à la ligne avant la fin des lignes… et je ne dois pas être le seul puisque j'utilise la CSS par défaut.
[^] # Re: simple ?
Posté par Anthony Jaguenaud . En réponse au journal Rust en version 0.12. Évalué à 3.
Les IO j’ai à peu près compris (j’espère), mais je n’en suis pas là. J’ai lu Tutorial Haskell pour le développeur C et j’ai lu un peu plus de la moitié de Apprendre Haskell vous fera le plus grand bien ! j’ai fini le chapitre 9. Mais c’est dense, il me faut un peu de temps pour
croirecomprendre les concepts… je dois parfois relire plusieurs fois. Et j’ai surement oublié des trucs lus par manque de pratique.[^] # Re: simple ?
Posté par Anthony Jaguenaud . En réponse au journal Rust en version 0.12. Évalué à 2.
Est-on obligé d’écrire :
<int>
ou le compilateur peut-il le déduire seul ?[^] # Re: simple ?
Posté par Anthony Jaguenaud . En réponse au journal Rust en version 0.12. Évalué à 2.
Bon, j’ai essayé ce code :
Le but étant de vérifier comment il instancie les différentes versions en fonction des types.
Compilation :
Je ne suis pas un pro du C++11, quelqu’un pourrait m’expliquer ?
[^] # Re: simple ?
Posté par Anthony Jaguenaud . En réponse au journal Rust en version 0.12. Évalué à 2.
Je croyais qu’il fallait éviter les monades si possible pour faire du « pur »…
Sinon, pour square, quitte à définir la fonction sans paramètre, j’aurais écrit :
Quand à ton deuxième code, j’ai du mal à comprendre l’avantage à part rendre obscur une fonction simple.
[^] # Re: simple ?
Posté par Anthony Jaguenaud . En réponse au journal Rust en version 0.12. Évalué à 2.
J’ai bien aimé la blague ;-) donc en C++ :
Avec des types génériques :
Je n’ai pas essayé à faire une lambda template. Les objets de type T pouvant devenir gros, j’ai décidé de passer les paramètres par référence, pour préciser au compilateur que l’objet ne serait pas modifié, j’ai ajouté const. Ce que je n’ai pas fait sur le premier exemple avec des paramètres par copie.
[^] # Re: simple ?
Posté par Anthony Jaguenaud . En réponse au journal Rust en version 0.12. Évalué à 5.
En haskell :
Dans ghci :
Les déclarations de type ne sont pas nécessaire, mais permette de garantir que la fonction prend un type numérique et retourne le même type. Fonctionne avec
Int
,Integer
,Float
, etc.[^] # Re: un message de lennart
Posté par Anthony Jaguenaud . En réponse à la dépêche systemd versions 212 à 215. Évalué à 3.
Ouai, alors là, tu m’insultes… je suis dubitatif sur le projet en lui même pour différentes raisons, mais me traiter d’extrémiste, je trouve que tu y vas un peu fort.
Il semble confortable pour les « fan » de traité ceux qui ne suivent la sainte parole aveuglément de les traiter d’intégriste…
J’aurais tendance à dire qu’il faut regarder le pour et le contre. Mais c’est parce que je suis intégriste !
[^] # Re: Bureau
Posté par Anthony Jaguenaud . En réponse au journal Pourquoi le prochain windows sera "Windows 10" et pas "Windows 9". Évalué à 2.
Pour moi, c’est quand j’ai passé ma femme sous GNU/Linux… carte mère qui fume, changement en urgence, elle avait un truc à faire pour le lendemain. Après les x redémarrage, pas de carte réseau, ni d’USB pour transférer les drivers depuis mon PC. Donc switch sous GNU/Linux.
# img.linuxfr.org
Posté par Anthony Jaguenaud . En réponse à l’entrée du suivi Héberger les images des news (et éventuellement journal). Évalué à 3 (+0/-0).
C’est ce que fait img.linuxfr.org, si l’image disparait, elle reste dans le cache du site pour toujours. Si elle est modifiée, alors, la nouvelle apparaitra.
C’est ce que m’avait répondu quelqu’un sur un commentaire il y a un moment… je n’arrive pas à remettre la main dessus.
[^] # Re: smart pointer
Posté par Anthony Jaguenaud . En réponse au journal Retour aux sources. Évalué à 5.
Non, ce n'est ni ce que j'ai dit, ni ce que je crois.
Dans un monde où les bancs industriels coûte cher, ils sont donc partagés. Donc quand tu as une après midi sur le banc pour faire tes tests, tu y restes coûte que coûte. Si tu trouves un bug rapidement à 14h30. Tu as deux choix, soit tu corrigse et recompiles, mais le temps de recompilation (4h) me donnera un nouvel essai dans, heu ben demain en fait. Sauf que le lendemain, je n'ai pas de créneau avant 16h.
Pour optimiser mon temps sur le banc, je recommence en « corrigeant » le bug dans le débugger. A ce point, j'ai deux choix, soit je contourne le bug à chaque fois manuellement (avec une interface graphique), avec gdb, je peux scripter cette partie et gagner du temps.
Il est possible qu'une bonne interface graphique de debug permette de scripter, mais je n'en connais pas.
Oui.
Je ne suis pas sûr de comprendre le « peu importe ce qu'il se passe ».
Je ne sais pas le faire, mais il me semble que gdb sait faire depuis quelques versions.
[^] # Re: smart pointer
Posté par Anthony Jaguenaud . En réponse au journal Retour aux sources. Évalué à 2.
Moi j’ai eu des cas, ou tu as du matériel de test pendant 4h. Tu trouves un premier bug, mais si on le corrige, il y a 5h de recompilation… donc, pouvoir scripter un test, ajouter un breakpoint, modifier une variable avancer de 5 instructions, remodifier une variable, pour enfin être prêt à trouver un deuxième bug… et bien je suis content que gdb soit en ligne de commande, qu’on puisse lui passer des scripts, etc.
Après, pour des softs avec IHM, un débogueur en IHM aussi peut suffire.
[^] # Re: smart pointer
Posté par Anthony Jaguenaud . En réponse au journal Retour aux sources. Évalué à 3.
Tu sais, dans l’industrie, j’ai des clients qui nous demande encore visual 6… alors tu sais…
Pour ton information, kdevelop, qtcreator, emacs sont très bien, font de la très bonne complétion. Kdev te propose même les inclusions. Visual a aussi pas mal progressé que ce soit au niveau du compilateur comme de l’IDE… mais personnellement, pour faire des remplacements, compilation… je préfère une ligne de commande. C’est juste une question de gout et d’habitude.
[^] # Re: Bug ? JQuery ?
Posté par Anthony Jaguenaud . En réponse au journal git-webui : une interface web pour vos repos git. Évalué à 2.
À la maison, firefox 24.5.0 ça marche. Avec konqueror 4.12.5 j’ai un souci de css… les trois colonnes se trouvent les unes à la suite des autres verticalement.
Sinon, je trouve que c’est une belle IHM locale, mieux que gitk.
# Bug ? JQuery ?
Posté par Anthony Jaguenaud . En réponse au journal git-webui : une interface web pour vos repos git. Évalué à 2.
Bonjour,
Sur une debian stable sous kde, il démarre konqueror et j’obtiens les erreurs suivantes :
Erreur : http://localhost:8000/js/jquery.min.js : TypeError: Attempt to use a non-function object or a value as a function.
Erreur : http://localhost:8000/js/bootstrap.min.js : Error: Bootstrap's JavaScript requires jQuery
Erreur : http://localhost:8000/js/git-webui.js : ReferenceError: Can't find variable: $
Je me dis qu’il y a peut-être une dépendance silencieuse à JQuery ?
[^] # Re: Trop de fork
Posté par Anthony Jaguenaud . En réponse au message Script Bash, tronquer noms de fichiers pour eCryptFS. Évalué à 3.
J'ai dû mal comprendre le problème initial, car pour moi on parlait de la longueur du nom du répertoire ou du fichier. Pas de la profondeur de la récursivité (
--depth
).[^] # Re: Trop de fork
Posté par Anthony Jaguenaud . En réponse au message Script Bash, tronquer noms de fichiers pour eCryptFS. Évalué à 3. Dernière modification le 16 septembre 2014 à 15:49.
A vu de nez, j'aurai écrit
te donnera la liste des noms de fichiers répertoire compris. Tu mets ça dans un
for
puis tu calcule la longueur du nom.[^] # Re: Je suis perdu
Posté par Anthony Jaguenaud . En réponse à la dépêche FreeBSD 9.3 sort des cartons. Évalué à 4.
Pub pour une agence de référencement sur le web… Je suis allé voir sans suivre le lien posté. Ce que je trouve amusant, c'est de venir sur linuxfr pour être référencé alors que ce devrait-être leur métier ;-)
# Usage
Posté par Anthony Jaguenaud . En réponse au journal Linux, c'est déjà demain - écran tactile. Évalué à 4.
Pour l'usage, mais ça date d'un peu avant windows 8, pour une application qui ne supporte pas le tactile…
Jouer a Starcraft 1 avec wine et un écran tactile…
[^] # Re: Tu ferais quoi toi?
Posté par Anthony Jaguenaud . En réponse au journal La France bientôt chassée du podium mondial des vendeurs d'armes ?. Évalué à 3.
Le mur est venu dans un second temps. Au départ, c'est l'URSS qui demande aux alliés d'ouvrir un front à l'ouest. Ensuite, lors de la capitulation de l'Allemagne et du partage les Russes ont gardé les territoires conquit. Le mur a été construit plus tard car Berlin était devenu un passage facile pour fuir le bloc Soviétique.
[^] # Re: Intéressant tes critiques sur le shell
Posté par Anthony Jaguenaud . En réponse au journal Sur systemd, btrfs & co. Évalué à 2.
Tu as parfaitement raison. Pour tenter de reprendre le dessus, je dirais juste que ça embrouille un peu ta syntaxe avec plein de guillemet. ;-)
A ma décharge, j'étais au boulot sans machine Linux pour tester :-p
Et lire, c'est que j'ai proposé donne deux arguments…
Je te prie d'accepter mes plus plates excuses.
[^] # Re: Intéressant tes critiques sur le shell
Posté par Anthony Jaguenaud . En réponse au journal Sur systemd, btrfs & co. Évalué à 2.
Tes guillemets sont mal placés.
Comme le montre la colorisation bash de linuxfr. Dans ce cas, comme la variable
pid
ne contiendra jamais d'espace, il n'y a pas de risque. Mais dans d'autre cas, ça risque de merder.Je vais supposer que
pid
contient une chaîne avec espace (ou séparateur contenue dans la variableIFS
)Ensuite, il évalue la commande
cat
avec ses deux arguments :/proc/1
et2/comm
.ce que tu voulais faire :
Là,
bash
évalue ensuitecat
avec 1 argument/proc/1 2/comm
.J'ai gardé ton exemple, qui n'est pas pertinent pour les espaces puisque les pid ne contiennent jamais d'espace. Néanmoins, lorsque l'on parse des éléments dans des répertoires cela arrive.
[^] # Re: Intéressant tes critiques sur le shell
Posté par Anthony Jaguenaud . En réponse au journal Sur systemd, btrfs & co. Évalué à 10.
Le problème de passer par
/proc
c'est que entre un ls /proc pour avoir la liste des process et l'ouverture du fichier/proc/xxx/comm
certains process ont eu le temps de mourir. Alors que la sortie de ps est plus simple à gérer.Un
man ps
montre que l'on peut décider de ce que ps affiche (sections : PROCESS SELECTION BY LIST et OUTPUT FORMAT CONTROL). Je pense que aujourd'hui beaucoup de gens font d'abord une recherche sur le net et tombe sur des exemples basic sans jamais lire le man.[^] # Re: De la dureté des diamants ou l'importance de la spécification d'interfaces.
Posté par Anthony Jaguenaud . En réponse au journal Marque page sur l'unification possible des systèmes Linux. Évalué à 7.
Si tu peux. La bibliothèque standard sur ton PC est dans /lib ou /usr/lib. Il suffit de lancer ton appli vieille de 10 ans dans un environnement avec un LD_LIBRARY_PATH qui contient le chemin de ta libY.so vieille avant celle libY.so de ton /lib .
L'OS n'a aucun mal à avoir plusieurs version de la même lib en RAM.
[^] # Re: Retour en bios
Posté par Anthony Jaguenaud . En réponse au journal UEFI, je chie ton nom. Évalué à 6.
La CSS que j'ai limite la largeur de la partie centrale… Pour pas avoir des lignes trop longue. Et du coup, il y a des retour à la ligne avant la fin des lignes… et je ne dois pas être le seul puisque j'utilise la CSS par défaut.
[^] # Re: Retour en bios
Posté par Anthony Jaguenaud . En réponse au journal UEFI, je chie ton nom. Évalué à 8.
Ton schéma est très bien, j'ai dû le copier dans un éditeur de texte… à cause de la CSS.