Personal tools

PythonのコードをJavaScriptにコンバートするpy2js

by ats posted at 2008-03-11 10:13 last modified 2008-03-12 00:26

 PythonのコードをJavaScriptにコンバートできるモジュールを発見したのでちょっと使ってみた。Pythonのバイトコードコンパイラが出力するASTツリーからJavaScriptを生成している。これまでも,簡単な文字列置換を使ってPythonのコードをJavaScriptにコンバートする試みはいつくかあった(CrackAJAXとか)けど,こちらの方が汎用性が高いし,将来性がある気がする。はまらなそう,という意味で。

こういう仕組みを使うと,Webブラウザ上で実行するような簡単なコードを含めて,ロジックをPythonだけで書けるようになりそう。JavsScriptは良い言語だと思うけど,ずっとPythonを使っている方が気分がいいし,言語の切り替えが少ない方が開発効率も高くなるはずだ。テンプレートエンジンやサーバ側で自動的に変換してくれようにすると素敵だ:-)。

簡単なサンプルを作ってみた。cgi-binというディレクトリを作って,py2js というファイルを設置して,以下のソースを実行権限つきでjstest.pyとして設置。その後,一つ上のディレクトリに移ってPythonのインタラクティブモードから「import CGIHTTPServer;  CGIHTTPServer.test()」としたあと,「http://127.0.0.1:8000/cgi-bin/jstest.py」をブラウザで開く。フォームにPythonのコードを打ち込んでPostすると,JavaScriptに変換して実行してくれる。

#!/usr/local/bin/python

import cgi
from py2js import compilefile

html_body = """
<html>
  <body>
  <script type="text/javascript">
<!--
  %s
-->
  </script>
  <form method="POST" action="/cgi-bin/jstest.py">
    <textarea name="jscode" cols="40" rows="10">%s</textarea><br />
    <input type="submit" />
  </form>
  </body>
</html>"""

form=cgi.FieldStorage()
f=open('./tmp.js', 'w')
f.write(form.getvalue('jscode', ''))
f.close()
compilefile('./tmp.js', './tmpout.js')
jscode=open('./tmpout.js').read()

print "Content-type: text/html;charset=utf-8\n"
print html_body % (jscode, form.getvalue('jscode', ''))

Pythonのプログラムでは,range()のような組み込み関数をよく使うわけだけど,現状のpy2jsではdictとintしか実装されていない。JavaScript側でPythonの組み込み関数が使えるようになると,この手のモジュールはずっと便利になる。mochikitがPythonのグローパル関数を実装していたはずなので,持ってきたりすると幸せになれると思う。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/converting-python-code-to-javascipt-code/tbping

Re:PythonのコードをJavaScriptにコンバートするpy2js

Posted by takano32 at 2008-03-12 13:39
お。おもしろいですねぇ。
Wikiみたいにみなが書き換え可能なプログラミングのスペースなんかが作れそうな気がしますね。
プレビューで実行結果を見て、サブミットするとWiki自体の挙動が変化したりw

Re:PythonのコードをJavaScriptにコンバートするpy2js

Posted by ats at 2008-03-14 19:59
>takano32
そういうインターフェースを公開するといろいろと困るかもしれませんが,開発用にそういう環境があると便利でしょうね:-)

Pylonsのインタラクティブデバッグみたいに,Pythonでコードを書くとJSに変換されて非同期で画面が書き換わったりすると,開発がしやすくなるかもしれません

http://wiki.pylonshq.com/pages/viewpage.action?pageId=11174193
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
コメントスパム避けのための認証文字列です

Captcha Image

Pythonな求人
r = urlopen("http://www.webcore.co.jp/recruit")
About this blog
■Author


atsこと柴田淳です。この記事を読んでいただくと,技術者としての人となりを分かってもらえるかも。
Webcore株式会社 代表取締役
Plone上で動く,オープンソースのBlog Product - COREBlog2を使って運用しています。

最近書いた原稿
Python 3.0 Hacks 第6回 Pythonicな文字列フォーマットforamat()メソッド 2009-03-30
言語としての一貫性を重視したPython 3の進化 2009-02-20
Python 3が後方互換性を捨てても求めたもの 2009-02-02
Python 3.0 Hacks : 第0回 Pythonの2008-2009 2009-01-01
柴田 淳のコーディング天国 - 貧弱環境プログラミングのススメ 2008-09-03
 
最近書いた本,Mook
みんなのPython 改訂版
Python使いはもちろん,プログラミングの初心者から,他言語からの移行組までご好評いただいているPythonの定番入門書の第2版です。Python 3.0を含む最新の情報について加筆を行い,より読みやすいように構成を大幅に見直しました。第一版をお持ちの方にもお役立ていただける内容になっています。
みんなのPython Webアプリ編
Pythonの基礎から,Webアプリやフレームワークの仕組みまで,つまることなく一気に学べる書籍です。「みんなのPython」と一緒に読んでください:-)。
 

Powered by Plone, the Open Source Content Management System