120 likes | 248 Views
Javascript as Mini-lang on Perl. 김현승 @ 펄마니아. JavaScript. ECMA Script Web 이 성행하면서 자리를 확고히 함 AJAX 로 진화하면서 개발패러다임을 변화 익숙한 문법의 약형언어 인력 수급이 매우 쉽다. Perl 개발자의 고민. 유지보수인력 확보 어려움 사용자의 참여를 끌어들일때의 어려움 보안 문제 학습 문제. Perl 과 JavaScript 의 만남. Perl 로 핵심기능을 구현하고 , JavaScript 로 흐름을 제어한다.
E N D
Javascript as Mini-lang on Perl 김현승@펄마니아
JavaScript • ECMA Script • Web 이 성행하면서 자리를 확고히 함 • AJAX 로 진화하면서 개발패러다임을 변화 • 익숙한 문법의 약형언어 • 인력 수급이 매우 쉽다
Perl 개발자의 고민 • 유지보수인력 확보 어려움 • 사용자의 참여를 끌어들일때의 어려움 • 보안 문제 • 학습 문제
Perl과 JavaScript의 만남 • Perl로 핵심기능을 구현하고, • JavaScript로 흐름을 제어한다.
Perl과 JavaScript의 만남 • Perl로 핵심기능을 구현하고, 빨리 만들고, • JavaScript로 흐름을 제어한다. 누구나 사용한다.
Spider Monkey • FireFox에 사용되는 JavaScript Engine • Math, Array 같은 것은 있다. • Document, Event 같은 것은 없다.
구조 Real World Perl World JavaScript::SpiderMonkey::eval(“JavaScript CODE”) JavaScript World JavaScript CODE sub print() BIND Print() shell MAKE PerlObject “PerlObject” sub get_hello_string() BIND .GetHelloString()
#1. 바인딩할 함수의 정의 #!/usr/bin/perl useJavaScript::SpiderMonkey; # perl로 함수 구현. subhello_perl# hello perl을 리턴하는 함수 { return 'Hello Perl'; } sub_print # 쉘에 글자 출력하는 함수. JS의 유일한 외부통로가 될것임 { print@_; }
#2. JS객체 생성 및 바인딩 my$js= JavaScript::SpiderMonkey->new(); $js->init(); # JavaScript 환경에 PerlObject를 생성한다. my$obj= $js->object_by_path( "PerlObject“ ); # PerlObject에 hello_perl함수를 HelloPerl()로 바인딩한다. $js->function_set( "HelloPerl" , \&hello_perl, $obj); # inline 으로 Print 함수를 선언한다. $js->function_set( "Print" , \&_print );
#3. 자바스크립트 eval # 자바스크립트 작성 $JS = <<END_OF_JS; // here is JavaScript world var hello = PerlObject.HelloPerl(); // perl의 scalar 를 그대로 받는다. hello = hello + " in JavaScript world!!\\n"; // scalar 를 가공하고 Print(hello); // 외부세계로 보낸다. END_OF_JS # 자바스크립트로 제어 시작 $js->eval( $JS );
#4. 실행 [실행결과] $ perl sample.pl Hello Perl in JavaScript world!! $
Mini-Lang 으로써의 가능성 • JavaScript 는 진입장벽이 높지 않다. • JavaScript 는 삼각함수, 정규표현식등을 사용할 수 있는 풍부한 Core를 가지고 있다. • 외부와 단절되어 안전하다. • 그래서 핵심코어와 비지니스로직을 분리하여, 항상 내가 나설 필요가 없다.