2009-11-25 7 views

Répondre

14

Bien qu'il soit possible de tout emballer dans un seul fichier EXE, vous n'allez pas vous passer d'une exécution Erlang. Les langages dynamiques comme Erlang ne peuvent pas vraiment être compilés en code x86 natif, par exemple, en raison de leur nature. Il doit y avoir un interprète quelque part.

Il est possible de trouver un schéma qui regroupe l'interpréteur et tous les fichiers BEAM en un seul fichier EXE que vous pouvez double-cliquer et exécuter directement, mais c'est probablement plus de travail que vous ne le souhaitiez. Je l'ai déjà vu faire auparavant, mais il y a rarement une bonne raison de le faire, donc je ne vais pas me donner la peine d'entrer dans les détails sur les techniques ici. Au lieu de cela, je suggère que vous utilisiez la même technique que celle utilisée pour les programmes py2exe et py2app de Python pour créer des exécutables Windows et Mac OS X, respectivement. Ces programmes chargent le module principal du programme dans un interpréteur Python, déterminent les autres modules dont il a besoin en utilisant les mécanismes de réflexion intégrés au langage, puis écrivent tous ces modules compilés avec une copie de l'interpréteur et un petit programme wrapper lance le module principal du programme avec l'interprète. Le répertoire contenant ces fichiers est alors un environnement autonome, ayant tout le nécessaire pour exécuter le programme. La seule différence dans le cas Erlang est que python.exe devient erl.exe, et * .pyc devient * .beam. L'idée de base est toujours la même.

Vous pouvez simplifier ceci si vous n'en avez pas besoin pour travailler avec n'importe quel programme Erlang arbitraire, mais seulement le vôtre. Dans ce cas, il vous suffit de copier l'interpréteur Erlang et tous les fichiers .beam qui composent votre programme dans un seul répertoire. Vous pouvez faire cette partie du Makefile de votre programme, par exemple. Vous pouvez ensuite utiliser votre méthode de création setup.exe ou MSI préférée pour créer un package distribuable qui installe cette collection de fichiers dans c:\Program Files\MyProgram sur le système de l'utilisateur final et crée un raccourci pour "erl mainmodule.beam" dans leur menu Démarrer . L'utilisateur final ne se soucie pas que dans le cadre du programme, ils obtiennent également une copie d'Erlang. C'est un détail d'implémentation.

+9

Je viens de faire un petit coup de hache à ce sujet, et il semble que vous pouvez obtenir le temps d'exécution Erlang à moins de 2 Mo. Tout ce dont vous avez besoin est un sous-ensemble des fichiers dans le répertoire erts-VERSION/bin sous le répertoire dans lequel vous avez installé Erlang. J'ai quelque chose qui semble fonctionner en utilisant uniquement beam.smp.dll, epmd.exe, erl.exe, erl. ini, erlexec.dll, erlsrv.exe et heart.exe. Certains d'entre eux semblent optionnels. Je ne suis pas sûr comment casher est d'expédier seulement beam.smp.dll et non beam.dll, ou vice versa; vous pourriez vraiment avoir besoin des deux. Cela vous prend jusqu'à 3 Mo non compressé. Minuscule, ces jours-ci. –

+1

Est-ce que Riak n'est pas une application? – CMCDragonkai