Je compile tu compiles

Tags:: php :: java :: linux :: perl :: pyhon

Lorsque l'on travaille sur Linux ou Unix en général, on aime utiliser des scripts pour travailler rapidement sur certaines tâches d'administration ou de développement. Mais ces langages de scripts sont de plus en plus utilisés pour développer de vraies applications complexes et complètes. Lorsque la limite de l'interpréteur entre en jeux (PHP, Perl, Python) et ce malgré leur optimisations qui rendent très rapide l'exécution, on est en droit de vouloir compiler un programme en binaire natif.

D'autres langages comme Java utilisent des VM ou Virtual Machine, comprenez "machine virtuelle". Cela est certes très portable mais beaucoup se plaignent de lenteurs et surtout d'être esclave de la VM.

Justement, j'utilise au moins deux langages qui sont soit interprété soit compilé pour une VM, j'ai nommé PHP et Java. Les deux langages ont un compilateur. Cela implique donc que ces langages peuvent bénéficier de compilation en binaire natif avec tout ce que cela comporte. Performance, portage mais compilation collé à l'architecture.

En effet, un programme compilé sur Linux ne fonctionnera pas sur Windows et inversement. Il faudra dans tous les cas recompiler les sources pour en faire un binaire compatible pour la plateforme cible.

Cela n'enlève rien au charme de la compilation. Commençons par Java.

Java compilé avec GCJ

Java fonctionne essentiellement avec des classes. Alors que vous compiliez avec javac vos fichier .java vers des .class et que vous demandiez ensuite à Java de les exécuter, ici vous aller faire un binaire natif avec GCJ.

Imaginons une classe simple:


class Hello {
    public static void main (String argv[]){
        System.out.println("Hello you")
    }
}
 

Ce fichier nommé "hello.java" contient une classe "Hello" et une méthode "main" qui peut servir de fonction principale. Il suffit de dire à gcj quel est la classe à utiliser en principal:


gcj --main=Hello hello.java -o test
 

Cela génère un exécutable nommé "test" qui peut être directement exécuté. Ce binaire est lié à la librairie libgcj. Sachez que GCJ arrive avec un sdk assez important, GNUClasspath, qui peut vous permettre d'aller assez loin.

GCJ sait utiliser des .class déjà compilé pour java, et inversement il sait utiliser des .class pour se lier à votre application.

PHP compilé avec PCC

Roadsend PCC est un compilateur PHP extrêmement bien fait. Il permet de créer des biniares natifs mais aussi des FastCGI ou des microserveurs. Notes que je serai présent au JDLL à Lyon le 17 octobre pour présenter une conférence sur ce sujet.

PCC est compatible (sur Linux/Unix) PHP 5, et PHP 4 sur Windows... un nouveau projet du même auteur est en train de voir le jour: Raven ou RPHP. C'est un compilateur développé en C/C++ au lieu de Scheme pour Roadsend PCC.

La compilation est simple comme bonjour:


pcc fichier.php -o exectuable
 

Cela génère le binaire "executable".

Attention

Pour les deux solutions que je vous propose, ce sont des implémentations différentes. Cela signifie que la langage est le même mais le fonctionnement peut différer. Je tiens vraiment à ce que vous compreniez cela. En effet, par exemple pour PHP, les extensions du moteur Zend n'existent pas. De ce fait certaine extensions ont été réécrites, d'autres sont absentes car illogiques pour un binaire (par exemple APC).

Et les autres ?

Python, Perl ? oui on peut ou on pouvait compiler... mais les solutions ont soit disparut, soit ne proposent pas un réel intérêt.

Je prend l'exemple de Perl. Le module "B" permettait de créer un ELF ou directement du C... mais pour la version 5.10 de perl ce module est cassé.

Python bénéficiait de Py2exe sur Windows, ou CX_Freeze sur Linux et Windows... Seulement la seule chose que cx_Freeze fait est de paqueter votre application avec les librairies + la librairie Python. Il n'y a pas d'intérêt à part pour la distribution de votre application.

Python 2.6 voit un bytecompiler apparaitre, mais toujours pas de sortie ELF en place. Mais comme dirait l'autre: laissons les scripts être des scripts :) même si je suis partisan de la compilation PHP, Java, Perl... etc :)

Sources
Utilisez le code barre pour ouvrir le ticket dans votre mobile:
This ticket on you mobile
1 Dimanche 26 Juillet 2009 02:40:52, Amos Wenger

>> pcc fichier.php -o exectuable

Un exec "tuable", vraiment?

;) article très intéressant, sinon, keep up the good job!

Ajouter un commentaire
Veuillez répondre à la question suivante : Tapez "clap" sans guillemets dans le champs suivant

Trackbacks

Pour ajouter un trackback (retrolien) sur ce ticket, utilisez cette adresse: http://www.metal3d.org/index.php/trackback/default/tb?id=blog%2F219

Tags

Blog Copix Communication PC Config Fedora Vidéo Humour Autre Web Materiel Informatique PHP Développement Mootools HTML Linux WEB IE CSS Vista Microsoft Sympa XHTML Quizz Widget Klik CWE Voeux Bonne année Musique CCRMA Son Audio MAO Reconnaissance vocale Windows Mac Compiz MacOS Mysql Sun Base de données BD Screenlets Screenlet RPM compiz Ubuntu Live FireFox Derambarsh Facebook media informations Sécurité javascript SSH Commande Marketing concours ipod wii QT Trooltech Nokia Libre Logiciels GPL Attali Gnome Dock Compiler Bench undelete reiserfs recovery recover Thread Serveur Optimisation Server Apache Album RSS Flash Air XML Firefox Blender Opensource Orange Internet LiveBox Animaux Droits Logiciels Libres Google Loi RBS netcat Bash Téléphone Spam 3D NIDIA Standards Widgets Merise UML Streaming Developpement Perl MySQL Firewall Parfeu Bayes Novell Réseau Python LVS Salon FTP Dedibox Chrome Administration IRC Gentoo troll video Nouveauté Finance Etudiant spéctacle OpenOffice Javascript Java Info Eclpise ATI design mootools KDE Bureau Design GNU C Pages Jaunes Fun Bijoux Art mail Admin vmware fedora linux VirtualBox VMWare Qemu KVM vim Grep Fglrx Webkit GTK google web JQuery Coup de gueule coup de gueule Lois SVG Raycaster Canvas Hadopi Desktop Jeux Les Sims développement astuces Screen firefox Mobile Safaru Wine bash commande astuce Wave ooc C++ C# Netbook Hercules Bureautique Twitter Safari W3C chrome kazehakaze midori navigateur gecko webkit Links Liens Pyhon Nouvelles Metal Perso Conférence JDLL PCC Roadsend OOC News Acteur Cinéma Chanteur Seven windows orthographe pcc php jdll Slide Application mysql Html twitter python screen curses SVN Android Gphone iPhone OpenGL MindMap Projet Javascrtip Ajax Guitare Tab Tablature JSON firebug Chromium Iphone Titanium music sound android ogg ogv streaming Arkyne svn subversion gnome VLC Tv encoder ffmpeg Cryptage apple microsoft HTML5 Max Apple code youtube quvi git uzbl webgl chromium

  Catalogue professionnel de musique libre


  • twitter entries...
follow me on Twitter

Valid XHTML 1.0 Strict

tumblr visitor