26 août 2018

Perl 6 n’est pas le successeur de Perl 5.

Perl 6 n’est pas le successeur de Perl 5. Qu’on se le dire !

Habituellement quand on incrémente le numéro de version c’est qu’il y a d’importantes nouveautés  mais la compatibilité ascendante est préservée. C’est le cas pour tous les langages honnêtes que je connais  C, C++, Java, JavaScript, Python, Pascal, PHP, Fortran, Cobol etc…

Mais le code source Perl 5 ne s’exécute pas sous Perl 6. Un seul exemple :
if(a==0){ ... }
 ne marche pas en Perl 6 à cause de l’absence d’espace entre if et la parenthèse ouvrante.

Quelques autres exemples :
  • En Perl 6 on écrit %liste<key> = 0; mais en  Perl 5 on écrit $liste{key} = 0; Notez bien les deux différences.
  • En Perl 6 l’opérateur de correspondance est ~~ en Perl 5 c’est =~
  • En Perl 6 l’operateur de concaténation est le tilde (~) en Perl 5 c’est le point (.)
  • L’operateur << devient +<
  • for devient loop, eval devient try.
  • ect ect ect La liste des differences est très longue.
En fait il y a autant de ressemblances entre C++ et Java qu’entre Perl 5 et Perl 6 : On reconnait des points communs de syntaxe, on distingue certains concepts communs mais ce n’est pas la même chose.

Alors pourquoi pas un autre nom que Perl 6 ?

Je pense que les langages étant tellement nombreux actuellement, qu’un nouveau nom passerait totalement inaperçu. Il est très difficile de se faire une place entre le C# de Microsoft, le Go de Google, le Swift d’Apple sans oublier les vénérables PHP, Python, Java, C/C++. En gardant le nom Perl ils espèrent garder l’attention de la communauté Perl 5 et essayer de la convertir à Perl 6. Pour le moment ça ne marche pas. (à mon avis ça ne marchera jamais), il y a même des tensions entre les deux communautés. Il y a même des tensions à l’intérieur de Perl 6 entre Parrot (une des machine virtuelle supportant Perl 6) et Rakudo (le compilateur Perl 6 le plus connu).

Le plus stupide dans cette dénomination c'est que Perl 5 ne peut pas passer à la version suivante car il y aurait confusion entre le Perl 6/dromadaire et le Perl 6/papillon.
Perl 6/papillon, va rester à la version 6 pour toujours ?

J’ai commencé à apprendre tout en utilisant de manière professionnelle Perl 5, et exclusivement Perl 5. Eh bien je pense que connaitre Perl 5 n’est pas un avantage décisif dans l’apprentissage de Perl 6. J’ai beaucoup perdu de temps en cherchant des ponts entre les deux soi-disant versions de Perl. En fait j’aurais gagné beaucoup de temps si j’étais parti dans l’optique d’apprendre un nouveau langage (un de plus !)

Note : Les performances ne sont pas (encore) au rendez-vous. On nous répète que le langage est jeune mais que ça va venir, qu'il y a des optimisation possibles. Mais on nous répète cela depuis 2015...

Packages

Si vous trouvez que votre distribution n'est pas assez réactive aux mises à jour de Rakudo (ou que Rakudo fait trop souvent des mises à jour ...), vous pouvez ajouter le repository raduko-pkg et bénéficier des mises à jour au fil de l'eau.


A suivre le blog de Jonathan Worthington, l’architecte de Rakudo (le compilateur Perl 6) et de MoarVM (la machine virtuelle de Perl 6)

Parodies




Software Collections - SCLs

Depuis 2013 Fedora propose le service en ligne COPR (Cool Other Package Repositories). Ce service permet  de gérer son propre dépôt, non pas chez soi, mais sur les serveurs de Fedora. Les packages de votre repo sont donc accessibles à tout le monde.

Sur la base de COPR est né SCLs (Software Collections) qui héberge des collections de packages pour Red Hat Enterprise Linux et son écosystème : Fedora, CentOS, et Scientific Linux.
Le principal but de ces collections est de proposer des versions récentes de certains logiciels incontournables (Apache, Git, Perl, Php, PostgreSQL...) plusieurs années avant qu’elles n’entrent officiellement dans les dépôts de ces distributions Linux.

Exemple : En Juillet 2018 la version la plus récente de Apache est 2.4.34
dans centos-sclo-rh on a 2.4.27 (Juillet 2017)
dans le dépôt de base de Centos 7.5 on a Apache 2.4.6 (Juillet 2013)

Pour installer le repository SCL :

# yum install centos-release-scl
Quels sont les repositories installés :

# yum repolist | grep scl
repo id                 repo name             status
centos-sclo-rh/x86_64   CentOS-7 - SCLo rh    7,984
centos-sclo-sclo/x86_64 CentOS-7 - SCLo sclo    767

On peut consulter la liste des packages proposés par SCL ici : https://www.softwarecollections.org/en/scls/
ou faire une requête avec yum
# yum --disablerepo='*' --enablerepo='centos-sclo*' list available

Exemple Installation de Apache 2.4.x
# yum install httpd24
# systemctl start  httpd24-httpd
# systemctl status httpd24-httpd
# systemctl enable httpd24-http

scl-utils

Quand on installe des packages venant de SCLs le package scl-utils est aussi automatiquement installé, ce qui installe la commande ‘scl’. Cette commande permet de gérer en parallèle la version installée depuis SCLs et la version officielle. En effet, pour éviter les conflits les logiciels installés puis SCLs s’installent dans /opt/rh/*.  La commande scl permet de passer d’un version à l’autre.

Si vous avez installé python37 depuis SCLs
# python –V
Python 2.7.5 
# scl enable python36 bash
# python -V 
Python 3.6.3
 on obtient une session bash avec python 3.6.3 actif
# exit
on est revenu a la session bash d'origine
# python –V
Python 2.7.5

Plus d'info: https://access.redhat.com/documentation/en-us/red_hat_software_collections/

11 avril 2018

Watch GIT


Voici un truc pour apprendre comment fonctionne GIT en interne.
git

Ouvrez une première console et exécutez la commande :

cd ~
watch -n 1 --color  tree -F -C -a repo
- tree affiche le contenu du repertoire repo (qui n'existe pas encore)
- watch execute tree toute les secondes.


Dans une deuxième console tapez les commandes:

cd ~
mkdir repo
cd repo
git init 
rm –rf .git/hooks
etc…

Vous avez pigez le truc! 
- Dans la première console vous visualisez l’activité du répertoire repo et de ses sous répertoires.
- Dans la deuxième console vous tapez des commandes git et observez dans la première console ce qui se passe dans repo/.git

On peut utiliser watch pour aussi visualiser en continue le résultat de git log et ainsi voir les branches se créer, fusionner, le déplacement de HEAD etc…

Watch est un formidable outil pédagogique pour analyser et comprendre le fonctionnement de GIT.

Démo avec l’arborescence de .git :



Démo avec l'historique de git :


Pour ce dernier exemple la commande watch est :

watch -n 1 --color git log --graph --pretty=format:\'%Cred%h%Creset -%C\(bold yellow\)%d%C\(white\) %s\' --abbrev-commit --all

Les escapes avec le \ sont nécessaires à cause de watch.