Bazelで使われている、Pythonサブセット方言的な言語。goとかrustの実装もあるらしい。
bazelのコードを持ってきて上記ディレクトリ下で.javaでwcしたら21835行だって。なかなか小さいね。
ライセンスはbazelと同じだろうから、Apache 2.0か。いいね。
starlarkフォルダ下を持ってくればAndroidで動くのかしら?ちょっと実験。 タグ 6.0.0-pre.20211019.1 を持ってきて試してみる。
src/main/java/netの下をそのまま何も考えずに適当なAndroidプロジェクトのsrc下にコピーしてみる。
なんか動かしてみよう。 それっぽいクラスを探してgrepしてたら、test下にExamples.javaがあるな。これのevalExprを真似してみよう。
なんかImmutableListが無いとか言われるな。namespaceはcom.google.common.collectの下か。 Guavaか?
google/guava: Google core libraries for Java
を見て、以下を加えてみる。
implementation("com.google.guava:guava:31.0.1-android")
次はcom.google.auto.value.AutoValueが無いとか言われた。
auto/index.md at master · google/auto
ここを参考に
api "com.google.auto.value:auto-value-annotations:${autoValueVersion}"
annotationProcessor "com.google.auto.value:auto-value:${autoValueVersion}"
と書いてみた。ちなみにautoValueVersionは1.8.2にした。
今度はjavax.annotation.processingが無いと言われる。
pengrad/jdk9-deps: Build Android and Dagger with JDK9+
これか?以下を追加。
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
変わらず。そういう問題じゃないらしい。 なんかこれいるのか?独自のannotation processorっぽいが、これって第三者がJavaのクラス作ってstarlarkから触る為のものではなかろうか。 という事でとりあえずファイルの拡張子を.txtに変更して無視する。
次はImmutableList.toImmutableList()
が無いと言われる。stream APIって奴か。Androidではこの辺どうなっているんだろう。
でも使っているところ、単にexceptionのメッセージ作るだけだな。これなら適当にでっちあげればいい気もする。
Collectors.toList()
に置き換え。
これで動いた。
Files API回りでOreoからのものを使っているっぽいのでminSDKを26にあげる。 手元のタブレットはNなので動かないが、タブレットで使いたい訳じゃないからいいか。
Add **
power operator · Issue #190 · bazelbuild/starlark
電卓の用途にはいまいちだな。ちょっといじって足せるか調べてみよう。
parseBinOpExpressionのあたりか。STAR_STARというトークン自体はあるので、precedanceに足してこの辺いじればいけるか?
added .star to extensions by dainikkal · Pull Request #128 · bazelbuild/vscode-bazel