Xeebi

home categories feeds

PythonJS を使い始めたい

いわゆる AltJS, languages that compile into javascript というのはたくさんある. 僕自身はあまり大規模な javascript を書くこともないし,そもそも javascript を触り始めたのが2月ほどまえという状況なので基本的に必要性を感じていないのだが, python (の superset や subset) で書けるとなるとなかなか魅力を感じる.世の中の多くの人は windows 使いだったりもするから, javascript って見せびらかしやすいしね(?)

…というわけで, Python から javascript をかけるタイプのやつをちょっと調べてみるなどしていた. Javascriptを書きたくないヒトのためのPythonScript というまんまなスライドがあり, 比較した表みたいなの もある.

pyjs はこの辺りではかなり著名のようで, “development platform” を名乗る通りわりと色々ついてそう. 便利そうなのだが最後の release が 2012 年で github の最新 commit が build:error のままなのはどうなのか(?)

brython は javascript で python のコードをパースしてアレするみたいな方向性で, ソースを見るとそのまま python (3!) コードが書かれている.扱いやすそうだけど,そこは明らかに不要なオーバーヘッドがあるよなぁみたいな感じがある. javascript での python 実装という点で言えば skulpt というプロジェクトも以前に発見していた.

PythonJS は python のコードを javascript (や lua や coffeescript) に変換するようなやつらしく,速度も結構いい感じに 確保してるっぽい.っぽい,のだが,star 数やコミットの活発さの割に 情報量が えらく少なく て,まとまったドキュメンテーションの類もないっぽくてかなり困惑している. そもそも気分的に requirejs に依存してる感じっぽくて,--no-wrapper 付けないとそれでハマる とかそういうアレだったり(リンク先見るまで気づかなかった,ありがとうございます!),--no-wrapper つけても requirejs の不在が原因とも見えるエラーが出たり, あるいはひょっとして jquery にも部分的に依存している?うーん.

一番シンプルな (print("hello, world!") だけ) のは通ったけど,

#!/usr/bin/env translator.py --no-wrapper > a.js
import time

def append_to_container():
    container = document.getElementById('container')
    container.innerHTML += "FOO<br>"

def main():
    container = document.getElementById('container')
    container.innerHTML = "FOO"
    for i in range(10):
        time.sleep(1)
        append_to_container()

みたいなのは通らなくて,僕のセットアップがうまく行ってないのか,上記のスクリプトに問題があるのか, まあ流石にそれはないと思うけどバグがあるのかなんなのか,辺りが全然把握できない.旧称がPythonScript だった可能性が高いのだけど, 現在の pythonjs のところから全然飛べないしなんとも微妙な感じ.うーーーーーーむ….

雰囲気的には pythonjs 自体がそんなに変な/微妙な/薄いプロジェクトということはないはずっぽいので,まあ僕がなにかを掴みそこねてるんだとおもうんだが, とりあえずは一旦放置で (brython 試してもいいかもしれないが) そのうちまた立ち返る感じ,かなぁ….それなりに時間使ったので若干憔悴している.