5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

perlから実行ファイルを作りたい

1 :テスト担当者:2001/08/03(金) 19:34
perlで書かれたソースから、実行ファイルを作りたいです。
現在perlで動いている処理があるのですが、動作が遅く、
高速化したいと考えています。
でもお客さんの期限が短く、Cとかで書き直す時間がありません。

とりあえず perlcc の存在を知り、試していますが、
実行ファイルは作られるものの、現在正しく動いてくれません。
また、ネットを探していると、
「perlcc使ってもあまり速くならないこともある」ということを
複数のページで見つけました。

perlcc のほかに、perlで書かれたものから実行ファイルを生成
してくれるものをご存知の方は教えてください。

また、perlの処理の高速化についてもヒントとかあれば教えてほしいです。

なお、OS は Linux(intel)です。

#UNIX板の話題かな?

2 :デフォルトの名無しさん:2001/08/03(金) 20:12
chmod +x

3 :あくまで憶測:2001/08/03(金) 20:17
perlccするだけで高速になる?遅くなりそう。

4 :3:2001/08/03(金) 20:21
あ、1でがいしゅつか。スマソスマソ。

5 :デフォルトの名無しさん:2001/08/03(金) 20:26
>>1
プロファイラを使ってボトルネックを探せ。
そこの処理を最適化せよ。それでも遅いならCで拡張せよ。

6 :デフォルトの名無しさん:2001/08/03(金) 22:28
Windowsならperl2exeやSOSを使う手があるな。
Linuxならchmod +xしてPerlのパスを合わしておけばいいだけじゃん。

7 :テスト担当者:2001/08/03(金) 22:41
進展がありました。
先ほどまでの状況では、perlccして実行ファイルは作られるものの、
実行すると

panic: mapstart at /usr/lib/perl5/5.6.0/File/Basename.pm line 220.

となってエラーが出ていました。
実際に perlプログラム内で、自プログラム名を得るために
File::Basename を使っていたのですが、ここで詰まっているみたいです。
perlccするときに、いろいろエラーが出たので

========================
No definition for sub Fcntl::LOC_SH
とかがだーっと...
========================

モジュール類が見つけられないかなと思っていたのですが、
自プログラムを得るのははっきり言って固定文字列だし、1箇所しか
使ってないので、とりあえずハードコーディングしてみたら、
作られた実行ファイルがきちんと動作しました!!
上記の No definition も出まくっているのですが、
perlプログラム内で使っているモジュール類もうまく機能している
模様です。

とりあえず速度は体感してわかるほど、速くなっています。

# time ./myProg -v
myProg.pl version is 3.0.1
0.31user 0.05system 0:00.36elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (565major+202minor)pagefaults 0swaps

# time ./myProg.pl -v
myProg.pl version is 3.0.1
1.01user 0.07system 0:01.09elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (333major+352minor)pagefaults 0swaps

バージョン表示だけさせる処理をさせるとこんなかんじ。
つーか time コマンドの見方教えて....

別の処理をかますと、なんかCPU使用率が小さいような気がすることを示す
結果が出ました。

# time cat testdata | ./myProg
0.01user 0.01system 0:00.04elapsed 45%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (104major+15minor)pagefaults 0swaps

# time cat testdata | ./myProg.pl
0.01user 0.01system 0:00.01elapsed 142%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (104major+15minor)pagefaults 0swaps

あ、でもこれって cat コマンドの時間だけしか調べてないのかも....
いずれにせよ、なんか速いです。

現在、よりちゃんとした性能評価、結合テストの再テストを行っています。

8 :テスト担当者:2001/08/03(金) 22:41
>>6
Linuxならchmod +xしてPerlのパスを合わしておけばいいだけじゃん。

そういうわけじゃなくて、インタプリタとして実行時に構文チェックとか
させるのではなく、コンパイル済みにしたいから実行ファイルをつくりたい、
というわけなのです。

9 :デフォルトの名無しさん:2001/08/03(金) 22:59
C言語に移植すればいいじゃん。

10 :デフォルトの名無しさん:2001/08/03(金) 23:06
PerlスクリプトのOPコードへのコンパイルにかかる時間なんて、そんなに気にするほど長くないと思うがなあ。
高速化したければ、perl -d:DProf script_name.pl でプロファイルを取ってボトルネックになっている箇所を
部分的にCで、XS, Swig, Inline::C とかを利用して書き直すのが一番良いんじゃないかな。

11 :テスト担当者:2001/08/03(金) 23:09
>C言語に移植すればいいじゃん。

まぁそうなんですが、1にも書いてあるとおり、それだと
期限に間に合わないのです....
あと規模もでかいし、文字列をMIMEエンコードとかしてるんだけど、
perlだと超楽なのにCだとちょっとめんどうだし。
もっともCのそういう関数のサンプルは転がってますが。

というわけで5時間の格闘でだいぶ速くなったのですが、
Cで書き直したらもっと速くなるかもしれん....

12 :デフォルトの名無しさん:2001/08/04(土) 02:10
>>11
そういうときこそ、Javaで書き直せばいいと思うよ。

13 :デフォルトの名無しさん:2001/08/04(土) 08:08
>>12
それこそ、1の要求に沿わないのではないか?

14 :デフォルトの名無しさん:2001/08/04(土) 11:41
便乗質問でスミマセンが、perlからWindowsのDLLにする方法とかないんですかねえ?
exeでもいいですが。

相手のPCにActivePerl等がインストールされていない状況で、VCとかからPerlを利用したいんですが。

やっぱり移植するしかないのかな…。

15 :デフォルトの名無しさん:2001/08/04(土) 19:37
>>14
perl2exeで検索。シェアだが。

16 :デフォルトの名無しさん:2001/08/04(土) 23:13
>>15
サンクス。こんなのがあったんですね。
シェアウェアなのが残念。

17 :デフォルトの名無しさん:2001/08/04(土) 23:30
Perl For DotNet という手もあるがなあ.........。
http://aspn.activestate.com/ASPN/Downloads/PerlNET/

18 :☆〜(σ σ):01/09/25 13:59
そんな方法があったのね・・・
ためになりました。

7 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)