Code Metaphor

Programming, Writing, Reading, Thoughts…

Lisphp: PHP로 구현한 Lisp 방언

PHP로 Lisp 방언을 구현했다. 이름은 Lisphp다. 사실 첫 동기는 내가 Lisp을 구현하면 얼마나 걸릴지 시간을 측정해보고 싶어서였는데, 예상보다는 조금 늦게 약 하루만에 기본적인 평가기(evaluator)를 구현했다. 그게 약 한달 전이고, 막상 거기까지 해놓으니 좀더 완성된 모습을 원하게 되어서 지금까지 회사일이 참 하기 싫을 때마다;;; 조금씩 커밋을 해서 꽤 많이 만들었다. 곧 첫번째 태깅을 할 생각이다.

현재의 프로젝트 목적은 배포되는 웹 애플리케이션이나 호스팅하는 웹 서비스의 스크립팅을 돕기 위함이고, 그래서 샌드박스도 구현했다. 기본적으로 두 가지 환경(environment)을 제공한다.

Lisphp_Environment::sandbox()
보안을 위해 PHP 코드를 만지거나 외부 IO 통신을 불가능하도록 런타임이 제한된 환경이다.
Lisphp_Environment::full()
PHP의 모든 함수를 use 매크로를 통해 가져다 쓸 수 있다.

use 매크로는 현재 함수와 클래스, 상수를 불러올 수 있게 만들었다. 클래스를 불러오면 정적 메서드도 함께 불러온다. 근데 아직 인스턴스 메서드를 가져오게 하진 않았다. 이것만 구현하면 Git 리파지토리에 첫번째 태깅을 할 생각이다.

(use strrev <PDO>)

(strrev "Hello!") #=> "!olleH"
(<PDO> "mysql:dbname=testdb;host=127.0.0.1" "dbuser" "dbpass")

자세한 설명은—사실 그리 자세히 써두진 않았지만—README.txt를 참고하면 된다. 마지막으로 웹에서 가지고 놀 수 있게 REPL도 만들어봤다. (커맨드라인 REPL은 리파지토리에 lis.php 파일로 제공된다.)

Try Lisphp!

아직 디자인을 하지 않아서 못생겼는데 기능은 잘 작동한다. 물론 이쪽은 샌드박스 환경이라 use 매크로는 쓰지 못한다. 소스 코드는 GitHub에서 MIT 라이센스로 배포하고 있다.

http://github.com/lunant/lisphp

This entry was posted on December 2, 2009 at 11:17 AM. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

3 Responses to “Lisphp: PHP로 구현한 Lisp 방언”

  1. 전선민 Says:

    ‘방언’ 은 뭘 말씀하시는 것인가요?

  2. 전선민 Says:

    ‘방언’ 이란게 뭘 뜻하시는 거죠?

  3. 홍민희 Says:

    ‘방언’ 이란게 뭘 뜻하시는 거죠?

    Lisp이라고 분류할 수 있는 언어들을 모두 Lisp 방언(dialects)이라고 합니다.

Powered by WordPress. Styled by Hong, MinHee. XML Feed, Comments XML Feed.