RandomThoughts

RandomThoughts

Starlark

Contents:
  1. jarは無いらしい
  2. Androidでビルドしてみる
  3. powerが無い

Bazelで使われている、Pythonサブセット方言的な言語。goとかrustの実装もあるらしい。

bazelのコードを持ってきて上記ディレクトリ下で.javaでwcしたら21835行だって。なかなか小さいね。

ライセンスはbazelと同じだろうから、Apache 2.0か。いいね。

jarは無いらしい

Androidでビルドしてみる

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なので動かないが、タブレットで使いたい訳じゃないからいいか。

powerが無い

Add ** power operator · Issue #190 · bazelbuild/starlark

電卓の用途にはいまいちだな。ちょっといじって足せるか調べてみよう。

parseBinOpExpressionのあたりか。STAR_STARというトークン自体はあるので、precedanceに足してこの辺いじればいけるか?

拡張子は.starか

added .star to extensions by dainikkal · Pull Request #128 · bazelbuild/vscode-bazel