[완료] 펄 스크립트 컴파일하기

amorette의 이미지

파이썬에서 .py 를 .pyc 파일로 컴파일하는 것과 같이 하고 싶습니다.

우선 perlcc 는 이에 반해 아예 C 언어로 컴파일 하는 것이고,
제대로 작동도 안하고 어느 이상 버전부터는 아예 지원을 안합니다.

게다가 perl/lib 폴더를 열어보면 B 라는 폴더는 있는데,
B::Bytecode 모듈은 없습니다. (이것도 지원이 안되는 것처럼 보입니다 ver:5.10)

특히 펄은 빠르게 하기 위해서 꼭 바이트코드로 바꾸는 것 보다는
더 최적화된 코드를 작성하는게 중요하다고 합니다.

노력은 하지만 이 부분을 고려해서 작성하더라도,
처음 시작하는 저로써는 아직 한계가 있을테니, (또 컴파일은 손쉽게 할 수 있을테니)
컴파일 된 코드를 사용하고 싶습니다. (CGI에 쓸겁니다)

저로써는 이해가 정말 안가는 것이,
Perl 은 파싱하면서 곧장 실행하는 것이 아니라,
우선 전체를 컴파일하고 실행한다고 배웠습니다.

그렇다면 분명 컴파일이 그리 어려운 문제도 아닐뿐더러,
자주 실행될 스크립트를 실행할때마다 컴파일하는 것은 너무 비효율적인 것처럼 보입니다.

제가 무언가 잘못 알고 있는 것인가요?

한 말씀 부탁드립니다..

aero의 이미지

>우선 perlcc 는 이에 반해 아예 C 언어로 컴파일 하는 것이고,
>제대로 작동도 안하고 어느 이상 버전부터는 아예 지원을 안합니다.
>
>게다가 perl/lib 폴더를 열어보면 B 라는 폴더는 있는데,
>B::Bytecode 모듈은 없습니다. (이것도 지원이 안되는 것처럼 보입니다 ver:5.10)

Perl 5.10 버젼이 되면서 완벽하지 않은 상태로 오래동안 코어에 포함되었던 이 부분을 뺐습니다.
참고:
http://search.cpan.org/~rgarcia/perl-5.10.0/pod/perl5100delta.pod#Removal_of_the_bytecode_compiler_and_of_perlcc

>특히 펄은 빠르게 하기 위해서 꼭 바이트코드로 바꾸는 것 보다는
>더 최적화된 코드를 작성하는게 중요하다고 합니다.

>노력은 하지만 이 부분을 고려해서 작성하더라도,
>처음 시작하는 저로써는 아직 한계가 있을테니, (또 컴파일은 손쉽게 할 수 있을테니)
>컴파일 된 코드를 사용하고 싶습니다. (CGI에 쓸겁니다)

컴파일 된 코드가 초기 로딩과 실행시에는 어느정도 이득이 있지만 이미 메모리에 올라간 이후의 실행속도에는
영향을 미치지 않습니다. CGI로 사용해서 자주 실행되어야 한다면 단순한 CGI보다 mod_perl, FastCGI등
매번 호출시마다 처음부터 프로그램을 실행하지 않는 구조로 만드는시는게 좋을 것 같네요. 요즘의
규모있는 서비스에서 단순 CGI를 사용하는 곳은 없습니다. Perl도 이제는 Catalyst, Jifty 같은 프레임웍
기반의 웹개발이 대세입니다.

>저로써는 이해가 정말 안가는 것이,
>Perl 은 파싱하면서 곧장 실행하는 것이 아니라,
>우선 전체를 컴파일하고 실행한다고 배웠습니다.
>
>그렇다면 분명 컴파일이 그리 어려운 문제도 아닐뿐더러,
>자주 실행될 스크립트를 실행할때마다 컴파일하는 것은 너무 비효율적인 것처럼 보입니다.

Perl은 스크립트가 실행되면 컴파일해서 Op-tree를 만들고 이것을 Perl 자체 VM위에서 돌립니다.
문제는 컴파일된 Op-tree를 어떤 바이너리 상태의 파일로 dump하는 것이 생각만큼 쉬운 작업이 아니기 때문에
(이것을 하는 것이 B::Bytecode 모듈이라고 합니다.) 개발이 지지부진한 상태로 Perl 코어에 완전하지 않은
상태로 포함되어 왔고 얼마전 릴리즈된 5.10버젼에서는 일단 빼자고 결정된 것입니다.
이것은 현재 따로 별개의 모듈로 분리되어 계속 개발 되고 있고. 이런 것들이 현실적으로는 생각하는 만큼
Perl의 성능을 마법처럼 올려주고 하는 것도 아니라서 급하게 생각하고 있지 않는 것 같습니다.

참고:
http://use.perl.org/articles/08/02/02/1934206.shtml
http://www.faqs.org/docs/perl5int/compiler.html
http://oreilly.com/catalog/pperl3/chapter/ch18.html

amorette의 이미지

평소에 Perl 공부를 시작하면서
aero님께서 작성하신 블로그와 문서들이 많은 도움이 되었습니다.
특히 파이썬과 비교해서 oop 설명하신 것이..(http://kldp.org/node/77924)

프레임웍 기반이라.. 저에게는 많이 생소한데 자세히 알아봐야겠습니다. :)
Catalyst 홈페이지가 초보인 저로써는 보기 쉽게 되어 있네요..

코드가 길어질수록 속도가 느려지고 해결하기가 참 쉽지가 않은데..

php로 했어야 했나 하는 생각도 들었습니다, 음.... 하다보면 길이 보이겠죠..
우선 말씀해주신 데로 FastCGI 도 시도해야겠습니다.

B::Bytecode 는 우선 잊어버리는게 좋겠군요..

JEEN의 이미지

IRC #perl-kr, irc.freenode.org 로 들어오시면 됩니다. :-)
여기오시면 카탈리스트로 일하시는 분도 계시고,
카탈리스트로 일 저지르려는 분도 계시고,
카탈리스트 설치만 해봤다라는 분도 계십니다.
뭐 주로 된 얘기는 펄입니다. :-)
http://doc.perl.kr/twiki/bin/view/Wiki/WebIRC
여기로도 들어오실 수 있습니다. :-)
_______
use perl;

use perl;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.