Sortie de LLVM, Clang, lld, lldb 8.0.0

Posté par  (site web personnel) . Édité par Ontologia, Benoît Sibaud, Sylvestre Ledru, bubar🦥, Davy Defaud, palm123 et Bruno Michel. Modéré par patrick_g. Licence CC By‑SA.
Étiquettes :
35
21
mar.
2019
C et C++

Après cinq versions candidates, l’étiquette finale a été apposée sur la branche 8.0.0 de la famille LLVM.

Cette dépêche reprend les points importants des notes de sortie associées. C’est une sélection totalement biaisée, libre à vous de lire les journaux des modifications respectifs pour avoir tous les détails !

Journal Écrire pour mieux finir

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
21
20
mar.
2019

Demat'iNal,

Il y a un peu moins de trois ans, je commençais à coucher sur le clavier (oui parce que coucher sur le papier, ça me fait bizarre) le résultats de mes pérégrinations autour du compilateur pythran sur pythran-stories.

Et hier, alors que je postais un article sur l'analyse de use-def chains pour Python à l'aide du paquet beniget, un sentiment de complétude a surgi inopinément, à la manière d'un pokemon sauvage surgissant des fourrés. Et chose curieuse (…)

Journal Bootstrap Binary seed

60
4
fév.
2019

Demat'iNal,

J'ai été frappé (ouille) par cet exposé au FOSDEM 2019.
Le sujet sous-jacent était « comment arriver à un compilateur C » à partir de… source. Et il est vrai que jamais je ne m'étais posé la question sous cet angle : arriver à faire qu'un compilateur pour un langage X soit écrit dans ce même langage X suppose… que l'on ait déjà un compilateur pour X. Ce problème se gérant soit par la disponibilité d'un autre compilateur, soit (…)

Journal Pythreries - Perl ou Python?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
22
6
jan.
2019

Demat' iNal

Au hasard d'un nouveau projet autour de l'analyse du langage Python, j'ai découvert quelques détails du langage Python que l'on peut résumer en cette simple ligne:

def _(*,_=...): [...]

outre l'aspect très perlesque de cette ligne, elle illustre plusieurs détails cocasses :

  1. Il est possible de réutiliser le nom de la fonction dans un de ces arguments, et c'est l'argument qui a la priorité

  2. C'était la première fois que je (…)

Journal Carnet de route - taume 0

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
7
30
nov.
2018

Notes et découvertes faites lors de mes voyages informatiques

Vérifier si deux énoncés parmi N (N >= 2) sont vrais, en Python

sum(map(bool, l)) > 1

Je n'ai pas trouvé de one-liner satisfaisant qui s'arrête dès que la condition est vérifiée :-/

Spécialiser une fonction C(11) pour un type donné

Pour vérifier qu'on n'a pas un niveau de pointeur en trop :

void dump_ptr(void* ptr) { printf("%p",
(…)

Journal Conversion entre pointeurs de fonctions incompatibles

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
14
7
nov.
2018

Posons nous dans le cas suivant (oui ça commence direct)

int strange_apply(int (*f)(int) {

    return reinterpret_cast<(int(*)(int, int)>(f)(1, 2);

}

Ce code compile avec un warning depuis le dernier gcc, et c'est bien car c'est en fait un undefined behavior (cast entre types de fonctions incompatibles dans le cas présent).

Et pourtant on voit pas mal de code (…)

Journal Pythran - 0.9.0 - kozhamzer

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
24
7
nov.
2018

Petite mise en bouche en alexandrin pour annoncer une nouvelle version de Pythran, compilateur pour le Python scientifique.

L'automne arrive, avec son lot de feuilles mortes
Pythran jamais ne dérive, il fallait qu'il sorte
Pas de grande nouveauté, juste le nécessaire
Tout est vectorisé, vraiment il faut le faire !

Le logiciel est comme toujours disponible sur pypi, anaconda et Github.

Comme annoncé dans les vers ci-dessus, la grande nouveauté vient du passage de boost.simd à xsimd (…)

Journal Mémorisation partielle de fonction constexpr

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
23
25
sept.
2018

Demat'inal,

Dans la lignée des expériences C++ que j'essaie de partager ici, je vous soumets ce bout de code qui m'a bien amusé :

template<class F, class T, T... Vs>
struct memoized {
    auto operator()(T v) const
    {
        static constexpr frozen::map<T, decltype(F{}(v)), sizeof...(Vs)> cached = {{Vs, F{}(Vs)}...};
        auto where = cached.
(…)

Journal Pythran - 0.8.7

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
20
17
sept.
2018

Demat'i-nal,

La mouture 0.8.7, tendrement nommée skol-loarn de Pythran, est de sortie. Rappelons que Pythran est un compilateur dédié au calcul scientifique pour Python. Il s'installe avec pip ou conda et nécessite juste un compilateur C++ qui parle le dialecte c++11 sur l'hôte. Car oui, Pythran fait partie de cette ignoble lignée des transpileurs…

Quelques liens utiles :

Journal Une structure partiellement constante en C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
27
6
juil.
2018

Hop, quelques réflexions sur un langage non réflexif.

Si on veut un tableau de taille statique, on peut utiliser depuis C++11 la classe std::array<T, N>.

std::array<long, 5> my_array{{1, 2, 3, 5, 8}};

Si on veut forcer ce tableau à ne contenir que des constantes utilisables à compile-time, on a la possibilité de marquer cette déclaration constexpr.

constexpr std::array<long, 5
(…)

Journal Pythran, en plein délire

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
50
23
mai
2018

Cher journal, je dois te confesser que j'ai déclenché quelque chose dont j'ai un peu honte.

Tu te souviens bien sûr de Pythran, ce compilateur pour noyau scientifiques écrit en Python, et de ce petit détail d'implémentation qui veut que le compilateur commence par transformer les fonctions Python en fonctions C++ template (a.k.a. transformer du code Python en meta-programme C++ pour faire stylé voire pédant).

Un choix de design a été de faire en sorte que ces fonctions ne (…)

Journal Pythran 0.8.5 - de l'intérêt des compilateurs

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
35
24
avr.
2018

Demat' Nal

Pythran, compilateur pour un sous ensemble du langage Python dédié au calcul scientifique, en est à sa version 0.8.5.

En guise d'exemple, il permet de transformer un code source comme celui là :

#pythran export weights(uint8[:,:])
#runas import numpy as np; x = np.arange(10, dtype=np.uint8).reshape(5,2); weights(x)

import numpy as np
def weights(input_data, threshold=0.3):
    n_seq, length = input_data.shape
    weights = np.zeros(n_seq, dtype=
(…)

Journal Pixel Art et C++14

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
22
3
avr.
2018

Petit délire illustrant l'usage de constexpr et de la biliothèsque frozen.

Première étape : faire un dessin en pixel art, par exemple:

  constexpr unsigned char bytes[] = "   ###              ###   "
                                    "  ##### ########## #####  "
                                    " #######          ####### "
                                    " ####                #### "
                                    " ###                  ### "
                                    "  #                    #  "
                                    "  #                    #  "
                                    " #    ###        ###    # "
                                    " #   #####      #####   # "
                                    " #  #### #      # ####  # "
                                    " #
(…)

Journal Obfusque ton code avec C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
16
mar.
2018

Cher Nuit-Nal,

toi qui aime le C++11, tu as peut-être déjà essayé de concaténer des chaînes constantes, suivant ce scénario là :

struct Some {
    static constexpr char Name[] = "Mr Popo";
};

char const *escape() {
    auto dogs = cats("hey, ",  Some::Name, " what's up?");
    return dogs;
}

int main() {
  char const* concat = escape();
  puts(concat);

  return 0;
}

(…)

Journal Jouons avec le ``switch`` et C++17

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
27
5
mar.
2018

Et non, ceci n'est pas un journal sur la switch, juste un partage rapide et amusé d'une version alambiquée mais qui fait tourner la tête (comme beaucoup de choses sortant d'un alambic, n'est ce pas ?):

template<unsigned N>
__attribute__((noinline)) void stuff()  {}

// manual switch
void manual_switch(int i) {
    switch(i) {
        case 0: return stuff<0>();
        case 1: return stuff<1>
(…)