J'avais fait cette lib pour répondre à un besoin personnel, et j'ai décidé de la publier même non finie au lieu de la laisser pourrir sur mon pc.
Pas mal de codebases n'autorisent pas C++20
C'est réellement pas mon problème. C++20 et C++23 apportent beaucoup de fonctionnalités très intéressante, je vois pas pourquoi je m'en priverais.
STL utilisée, et pour de mauvaises raisons en plus.
Tu as réussi a inférer mes raisons simplement en lisant le code ?
La raison c'est que je ne voulais aucune dépendance. Le langage de base me fournit tout ce dont j'ai besoin, je ne vois pas pourquoi j'irais chercher ailleurs.
Ce code utilise auto pour tout et n'importe quoi.
Oui, parce que l'inférence de type c'est bien.
Il y a des shared_ptr qui devraient vraiment être des unique_ptr, également.
Ca c'est le premier point ou je suis d'accord. Mais j'ai eu des problèmes avec unique_ptr:
std::initializer_list ne peut pas contenir de unique_ptr car quand on itère dessus, cela fait une copie
je ne peux pas initialiser un std::vector de unique_ptr pour la même raison, car le constructeur utilise std::initializer_list
Cela m'obligerait donc a créer le std::vector, faire des push_back avec std::move, et ensuite std::move le std::vector au constructeur qui en a besoin, chiant.
Alors oui, j'ai pris l'option de facilité, utiliser shared_ptr, ça marche bien.
aucun outil.
Libre à toi de faire une PR, c'est ça aussi l'opensource.
J'ai initialement choisi Hugo, mais parce que je ne pouvais pas lui filer ma propre grammaire TexMate pour coloriser le code Letlang, j'ai d'abord utilisé Shiki côté client (qui donc parse le code et ajoute le style CSS côté client), pour ensuite faire Gin qui utilise Shiki directement côté "serveur".
Quand je dis "la coloration se fait à la compilation" je parle de parser le bloc de code pour le transformer en <pre><code>...</code></pre> avec plein de <span style="...">...</span>. Bien évidemment le rendu final est fait par le navigateur.
Pas sur d'avoir compris la question, avec Gin, je fais la colorisation syntaxique à la compilation justement, la ou avec Hugo je devais le faire côté client.
En vertu de la bonne foie, ou dans cette phrase est il mentionné que Napoléon a été pillé ?
Il a été offert ok, mais bel est bien déplacé jusque Paris. Ou est l'énormité ici ? Ou est la justification pour tant d'aggressivité envers un commentaire explicitement humoristique ?
On a même le module dis qui ne semble pas utilisé par contre.
En regardant tout ça d'un peu plus près, cela me semble très spécifique à CPython. Quid de PyPy, Jython (JVM), et autres implémentations ?
Je n'irai pas jusqu'à dire que c'est un gros hack, car cela exploite les détails d'implémentations "interne" de CPython, mais je n'irai pas jusqu'à dire que c'est "prévu". C'est "permis" me semble un bon compromis.
En tout cas, si je comprends bien le code, il vont en chier pour assurer la compatibilité lors des montées de versions de l'implémentation, car rien ne garantie qu'elle ne bougera pas.
c for c in ... c'est une "expression générateur" en Python :
>>> (i for i in [])
<generator object <genexpr> at 0x…>
Donc select(c for c in ...) passe un objet de type générateur à la fonction select().
En survolant le code source, ils décompilent le code du générateur (la stdlib de Python fournit les outils pour faire cela) et ensuite réécrit l'AST pour recompiler ça en SQL.
Le générateur n'est jamais exécuté directement du coup.
Je trouve la gestion d'erreur de Go atroce, pour ne pas dire inexistante.
Le langage ne te force pas à la traiter, rien ne t'empêche d'écrire :
res,_:=foo()
Il peut quand même y avoir des données dans le résultat, même si err est nil :
funcfoo()(int,error){return42,errors.New("oops")}
Dans ce cas, on fait quoi de res ?
Il faut utiliser des modules tiers pour garder les informations qu'une stacktrace d'exception a par défaut, car :
res,err:=foo()iferr!=nil{returnwhatever,err}
Ici on pert complètement l'information, la bonne pratique c'est d'encapsuler l'erreur dans une nouvelle, en utilisant par exemple le module xerrors.
Le type error est concrètement juste une chaîne de caractères, sans module tiers tel que xerrors ou autre, impossible de déterminer le type de l'erreur, alors qu'avec une exception, on peut au moins faire du pattern matching sur son type.
Au final, je préfère un type monadique, comme std::expected<T, E> en C++ ou Result<T, E> en Rust.
Ici:
on a bien une valeur OU une erreur
on est obligé de traiter l'erreur
on peut faire du pattern matching sur le type de l'erreur et sa valeur
on sait quel type d'erreur une fonction peut retourner
Les exceptions pourraient être du sucre syntaxique pour un tel type monadique. D'ailleurs, l'opérateur ? en Rust ressemble beaucoup à ça :
fnfoo()-> Result<T,E1>{// ...}fnbar()-> Result<T,E2>{letval=foo()?;// si foo retourne Result::Err(E1),// alors bar retourne Result::Err(E2) a condition que E2 implémente From<E1>// si l'implémentation n'est pas trouvée --> erreur de compilation}
C'est tout de suite plus propre.
TL;DR: Les gens qui vantent les mérites de la gestion d'erreur en Go, je les comprends pas :(
le mode Vim dans Sublime Text, VS Code, et bien d'autres éditeurs de texte
D'ailleurs, durant mon adolescence, j'avais comme projet un navigateur internet basé sur Webkit avec l'interface de vimperator --> https://github.com/linkdd/cream-browser
Vim a eu un gros impact sur ma manière d'aborder l'édition de texte, encore aujourd'hui, sur VS Code, je refactor mon code à coup de Ctrl+Shift+H et de regex (ce qu'il y a de plus proche de :s). Jamais j'abandonnerai le comfort d'un éditeur avec le multi-curseur au minimum.
il ne fait que montrer que toi et/ou ton collègue ne connaissent pas les IDE graphiques
On s'en cogne non ?
On peut pas laisser les gens utiliser les outils qu'ils veulent, pour les raisons qu'ils veulent, sans devoir leur tomber sur la gueule à chaque fois qu'ils disent "j'aime ci, j'aime ça" ?
Le commentaire initial c'était : "je préfère vim à vscode que mes collègues utilisent" et "j'aime bien leur montrer comment je me sers de vim".
Et toi tu viens essayer de lui démontrer qu'il y connait rien car d'autres IDE peuvent faire le même taf. Oui d'autres peuvent le faire, et on s'en cogne royalement. Personne ne t'as rien demandé.
Les goûts et les couleurs, ça se discute pas. La discussion est complètement inutile et n'a rien à faire ici.
Un peu de respect pour les défunts, et arrêter de se crêper le chignon pour des conneries, ça serait un bon début.
Une série télescopique et une série géométrique divergente sont deux objets mathématiques bien différents, avec des opérations ayant des règles bien différentes.
Et si tu lis l'article que tu as toi même cité, tu verras qu'il en conclut que la valeur que l'on associe à cette série divergente est bien 1/2.
Donc tu peux me renvoyer le compliment autant que tu veux, mais soit tu n'as pas lu l'article Wikipédia, soit tu ne l'as pas compris.
[^] # Re: Bof
Posté par David Delassus (site web personnel) . En réponse au lien AI Toolkit, donnez un cerveau à vos NPCs, une librairie C++ header-only. Évalué à 5. Dernière modification le 11 janvier 2024 à 22:26.
J'avais fait cette lib pour répondre à un besoin personnel, et j'ai décidé de la publier même non finie au lieu de la laisser pourrir sur mon pc.
C'est réellement pas mon problème. C++20 et C++23 apportent beaucoup de fonctionnalités très intéressante, je vois pas pourquoi je m'en priverais.
Tu as réussi a inférer mes raisons simplement en lisant le code ?
La raison c'est que je ne voulais aucune dépendance. Le langage de base me fournit tout ce dont j'ai besoin, je ne vois pas pourquoi j'irais chercher ailleurs.
Oui, parce que l'inférence de type c'est bien.
Ca c'est le premier point ou je suis d'accord. Mais j'ai eu des problèmes avec unique_ptr:
Cela m'obligerait donc a créer le std::vector, faire des
push_back
avecstd::move
, et ensuite std::move le std::vector au constructeur qui en a besoin, chiant.Alors oui, j'ai pris l'option de facilité, utiliser shared_ptr, ça marche bien.
Libre à toi de faire une PR, c'est ça aussi l'opensource.
Et pour finir :
C'est bien, personne ne t'oblige à l'utiliser.
https://link-society.com - https://kubirds.com
[^] # Re: merci pour la découverte…
Posté par David Delassus (site web personnel) . En réponse au lien Encore un autre générateur de site statique, mais pour les développeurs de langage de programmation. Évalué à 2.
Ah oui je me suis peut être mal exprimé.
J'ai initialement choisi Hugo, mais parce que je ne pouvais pas lui filer ma propre grammaire TexMate pour coloriser le code Letlang, j'ai d'abord utilisé Shiki côté client (qui donc parse le code et ajoute le style CSS côté client), pour ensuite faire Gin qui utilise Shiki directement côté "serveur".
Quand je dis "la coloration se fait à la compilation" je parle de parser le bloc de code pour le transformer en
<pre><code>...</code></pre>
avec plein de<span style="...">...</span>
. Bien évidemment le rendu final est fait par le navigateur.https://link-society.com - https://kubirds.com
[^] # Re: sans tracker medium
Posté par David Delassus (site web personnel) . En réponse au lien Encore un autre générateur de site statique, mais pour les développeurs de langage de programmation. Évalué à 2.
En plus l'article est pas complet :(
https://link-society.com - https://kubirds.com
[^] # Re: merci pour la découverte…
Posté par David Delassus (site web personnel) . En réponse au lien Encore un autre générateur de site statique, mais pour les développeurs de langage de programmation. Évalué à 2.
Pas sur d'avoir compris la question, avec Gin, je fais la colorisation syntaxique à la compilation justement, la ou avec Hugo je devais le faire côté client.
https://link-society.com - https://kubirds.com
[^] # Re: sans tracker medium
Posté par David Delassus (site web personnel) . En réponse au lien Encore un autre générateur de site statique, mais pour les développeurs de langage de programmation. Évalué à 2.
C'est pas un tracker, c'est un token d'authent pour bypasser le paywall pour ceux qui ne sont pas membre sur Medium.
https://link-society.com - https://kubirds.com
# Openigiri
Posté par David Delassus (site web personnel) . En réponse au lien Nouveau fork d'outils Hashicorp: après OpenTofu pour Terraform, OpenBao pour Vault. Évalué à 4.
Puisqu'on fork les outils d'Hashicorp avec des noms de plats japonais, je propose de forker Consul avec le nom "Openigiri".
https://link-society.com - https://kubirds.com
[^] # Re: oui c'est la foire.
Posté par David Delassus (site web personnel) . En réponse à la dépêche L’installation et la distribution de paquets Python (1/4). Évalué à 5.
Dans l'espoir de pas la réinventer (la roue) :)
https://link-society.com - https://kubirds.com
[^] # Re: donc on doit utiliser quoi ?
Posté par David Delassus (site web personnel) . En réponse au lien .io considered harmful. Évalué à 1.
C'est vraiment de la mauvaise foi ça. Surtout après lecture des réponses suivantes.
https://link-society.com - https://kubirds.com
[^] # Re: donc on doit utiliser quoi ?
Posté par David Delassus (site web personnel) . En réponse au lien .io considered harmful. Évalué à 1.
On moinsse l'humour et on plussoie la condescendance maintenant sur LinuxFR ?
https://link-society.com - https://kubirds.com
[^] # Re: Précision
Posté par David Delassus (site web personnel) . En réponse au lien Face aux vols, le British Museum va numériser toutes ses collections pour un coût de 12,1 millions $. Évalué à 8. Dernière modification le 22 octobre 2023 à 20:59.
En vertu de la bonne foie, ou dans cette phrase est il mentionné que Napoléon a été pillé ?
Il a été offert ok, mais bel est bien déplacé jusque Paris. Ou est l'énormité ici ? Ou est la justification pour tant d'aggressivité envers un commentaire explicitement humoristique ?
https://link-society.com - https://kubirds.com
[^] # Re: Précision
Posté par David Delassus (site web personnel) . En réponse au lien Face aux vols, le British Museum va numériser toutes ses collections pour un coût de 12,1 millions $. Évalué à 10.
Pourquoi les pyramides sont en Egypte ?
…
…
…
Parce qu'il n'y a pas la place au British Museum.
https://link-society.com - https://kubirds.com
[^] # Re: Curieux
Posté par David Delassus (site web personnel) . En réponse au lien Pony is a Python ORM with beautiful query syntax. Évalué à 3.
On va dire que c'est permis par CPython :
decompile(x)
de ponyorm, notamment la ligne :codeobject = x.gi_frame.f_code
opcode
de CPythonast
de PythonOn a même le module
dis
qui ne semble pas utilisé par contre.En regardant tout ça d'un peu plus près, cela me semble très spécifique à CPython. Quid de PyPy, Jython (JVM), et autres implémentations ?
Je n'irai pas jusqu'à dire que c'est un gros hack, car cela exploite les détails d'implémentations "interne" de CPython, mais je n'irai pas jusqu'à dire que c'est "prévu". C'est "permis" me semble un bon compromis.
En tout cas, si je comprends bien le code, il vont en chier pour assurer la compatibilité lors des montées de versions de l'implémentation, car rien ne garantie qu'elle ne bougera pas.
https://link-society.com - https://kubirds.com
[^] # Re: Curieux
Posté par David Delassus (site web personnel) . En réponse au lien Pony is a Python ORM with beautiful query syntax. Évalué à 6. Dernière modification le 28 septembre 2023 à 17:02.
c for c in ...
c'est une "expression générateur" en Python :Donc
select(c for c in ...)
passe un objet de type générateur à la fonctionselect()
.En survolant le code source, ils décompilent le code du générateur (la stdlib de Python fournit les outils pour faire cela) et ensuite réécrit l'AST pour recompiler ça en SQL.
Le générateur n'est jamais exécuté directement du coup.
https://link-society.com - https://kubirds.com
[^] # Re: Une gestion d’erreur moderne ?
Posté par David Delassus (site web personnel) . En réponse à la dépêche À la découverte du langage V. Évalué à 3.
Et quelle est la différence entre panic/recover et des exceptions avec try/catch ?
https://link-society.com - https://kubirds.com
[^] # Re: Une gestion d’erreur moderne ?
Posté par David Delassus (site web personnel) . En réponse à la dépêche À la découverte du langage V. Évalué à 4.
My bad, je le savais en plus, mais j'ai vu tellement de codebases Go ou c'était juste des strings que j'ai fait un raccourci un peu trop rapide.
Oui car
unwrap
sur unResult::Err(E)
çapanic!
. Alors que ne pas faire deif err != nil
en Go, le programme continu comme si de rien n'était.Ben non :
La c'est pas explicite du tout.
Alors qu'en Rust :
En gros :
Chacun ses goûts. Pour ma part, je défend l'idée que "fournir un type/interface 'error'" ce n'est pas de la gestion d'erreur.
En fait, je ne vois même pas de différence avec le C dans ce cas là :
Au moins, la GLib (pas gnu libc, mais bien GLib de GTK), on a
GError
et compagnie :Verbeux, peu pratique, mais déjà un peu mieux qu'un int.
https://link-society.com - https://kubirds.com
[^] # Re: Une gestion d’erreur moderne ?
Posté par David Delassus (site web personnel) . En réponse à la dépêche À la découverte du langage V. Évalué à 8. Dernière modification le 06 septembre 2023 à 14:32.
Je trouve la gestion d'erreur de Go atroce, pour ne pas dire inexistante.
Le langage ne te force pas à la traiter, rien ne t'empêche d'écrire :
Il peut quand même y avoir des données dans le résultat, même si
err
estnil
:Dans ce cas, on fait quoi de
res
?Il faut utiliser des modules tiers pour garder les informations qu'une stacktrace d'exception a par défaut, car :
Ici on pert complètement l'information, la bonne pratique c'est d'encapsuler l'erreur dans une nouvelle, en utilisant par exemple le module
xerrors
.Le type
error
est concrètement juste une chaîne de caractères, sans module tiers tel quexerrors
ou autre, impossible de déterminer le type de l'erreur, alors qu'avec une exception, on peut au moins faire du pattern matching sur son type.Au final, je préfère un type monadique, comme
std::expected<T, E>
en C++ ouResult<T, E>
en Rust.Ici:
Les exceptions pourraient être du sucre syntaxique pour un tel type monadique. D'ailleurs, l'opérateur
?
en Rust ressemble beaucoup à ça :C'est tout de suite plus propre.
TL;DR: Les gens qui vantent les mérites de la gestion d'erreur en Go, je les comprends pas :(
https://link-society.com - https://kubirds.com
[^] # Re: L'histoire se répète
Posté par David Delassus (site web personnel) . En réponse au lien Flatpak is not the future et pourquoi l'auteur pense qu'on devrait développer pour GTK3 et pas GTK4. Évalué à 2.
J'adore le titre de l'article :
Comme si HTMX et Alpine.JS n'avaient pas besoin de JS.
https://link-society.com - https://kubirds.com
[^] # Re: L'histoire se répète
Posté par David Delassus (site web personnel) . En réponse au lien Flatpak is not the future et pourquoi l'auteur pense qu'on devrait développer pour GTK3 et pas GTK4. Évalué à 8.
Pour info, le module Python tkinter est inclus dans la librairie standard.
Quand j'ai besoin d'une GUI pour un script Python, c'est vers ce dernier que je m'oriente :)
https://link-society.com - https://kubirds.com
[^] # Re: L'histoire se répète
Posté par David Delassus (site web personnel) . En réponse au lien Flatpak is not the future et pourquoi l'auteur pense qu'on devrait développer pour GTK3 et pas GTK4. Évalué à 3.
C'est pour ça que je kiffe le Semantic Versionning.
Sinon, 10 ans, pour un dev JS c'est du LTS :)
https://link-society.com - https://kubirds.com
# L'histoire se répète
Posté par David Delassus (site web personnel) . En réponse au lien Flatpak is not the future et pourquoi l'auteur pense qu'on devrait développer pour GTK3 et pas GTK4. Évalué à 8.
Il y a 10 ans, on entendait les gens dire qu'il fallait développer pour GTK2 et pas GTK3.
Il y a 20 ans, on entendait les gens dire qu'il fallait développer pour GTK1 et pas GTK2.
Dans 10 ans, on entendra les gens dire qu'il faut développer pour GTK4 et pas GTK5.
https://link-society.com - https://kubirds.com
[^] # Re: Respect
Posté par David Delassus (site web personnel) . En réponse à la dépêche Décès de Bram Moolenaar, créateur de VIM. Évalué à 10.
https://link-society.com - https://kubirds.com
# Merci pour cette dépêche
Posté par David Delassus (site web personnel) . En réponse à la dépêche Décès de Bram Moolenaar, créateur de VIM. Évalué à 10.
Vim est vraiment un bel outil, même si je ne l'utilise plus, c'est selon moi un monument du logiciel libre.
Il en a inspiré beaucoup, dont :
D'ailleurs, durant mon adolescence, j'avais comme projet un navigateur internet basé sur Webkit avec l'interface de vimperator --> https://github.com/linkdd/cream-browser
Et j'en avais même parlé ici : https://linuxfr.org/tags/creambrowser/public
Vim a eu un gros impact sur ma manière d'aborder l'édition de texte, encore aujourd'hui, sur VS Code, je refactor mon code à coup de Ctrl+Shift+H et de regex (ce qu'il y a de plus proche de
:s
). Jamais j'abandonnerai le comfort d'un éditeur avec le multi-curseur au minimum.https://link-society.com - https://kubirds.com
[^] # Re: :wq!
Posté par David Delassus (site web personnel) . En réponse au lien Bram Moolenaar, auteur de vim, bronsonisé. Évalué à -2.
On s'en cogne non ?
On peut pas laisser les gens utiliser les outils qu'ils veulent, pour les raisons qu'ils veulent, sans devoir leur tomber sur la gueule à chaque fois qu'ils disent "j'aime ci, j'aime ça" ?
Le commentaire initial c'était : "je préfère vim à vscode que mes collègues utilisent" et "j'aime bien leur montrer comment je me sers de vim".
Et toi tu viens essayer de lui démontrer qu'il y connait rien car d'autres IDE peuvent faire le même taf. Oui d'autres peuvent le faire, et on s'en cogne royalement. Personne ne t'as rien demandé.
Les goûts et les couleurs, ça se discute pas. La discussion est complètement inutile et n'a rien à faire ici.
Un peu de respect pour les défunts, et arrêter de se crêper le chignon pour des conneries, ça serait un bon début.
https://link-society.com - https://kubirds.com
[^] # Re: :wq!
Posté par David Delassus (site web personnel) . En réponse au lien Bram Moolenaar, auteur de vim, bronsonisé. Évalué à -3.
Utilité de la réponse : 0/10.
https://link-society.com - https://kubirds.com
[^] # Re: J'ai lu que le titre mais...
Posté par David Delassus (site web personnel) . En réponse au lien Il y aurait de l'énergie dans le vide. Évalué à 6.
Une série télescopique et une série géométrique divergente sont deux objets mathématiques bien différents, avec des opérations ayant des règles bien différentes.
Et si tu lis l'article que tu as toi même cité, tu verras qu'il en conclut que la valeur que l'on associe à cette série divergente est bien 1/2.
Donc tu peux me renvoyer le compliment autant que tu veux, mais soit tu n'as pas lu l'article Wikipédia, soit tu ne l'as pas compris.
https://link-society.com - https://kubirds.com