発表中にも言ったし、以前色々tweetしていたりもするんですが、本業での方が、コード量多かったり、時期がはやくてcompilerやlibraryが安定してなかったりで、色々辛かったりその分面白い話もあったんですが、とにかく具体的なそれなりな大規模な事例発表?ができたのは良かったですね。
続きを読むScala 3のmatch typeでcompile timeにString literalをparseして評価する
Scala 3のmatch typeで何かのparserでも書くか?と思ったけど、コンパイル時にリテラルのStringを、型情報というか分解した場合の値情報?を、保ったままの分解が単純には出来そうにはないというか…
— Kenji Yoshida (@xuwei_k) February 28, 2021
あるいは一旦CharのHListにしたいんだけど、何か方法あるのかな
https://t.co/sNupBRy3rV
— Kenji Yoshida (@xuwei_k) 2022年2月28日
type Substringが増えてるからいける…?
できました。
続きを読むunused-codeという未使用コードの検知、削除のsbt-plugin & scalafix rule作ってリリースした
アイデアというか初期実装は、1年近く前に遡るのですが、それをしっかり作り直して整理してリリースしました。
https://github.com/xuwei-k/unused-code
まだまだ追加したい機能や改善点などありますが、初期versionでも、結構しっかり作ったつもりなので(?)割と既に実用的なはずなので、試してみてのフィードバックお待ちしています。
続きを読むscalafixのSyntacticRuleで、project内でグローバルな未使用コード検出君(class, trait, object, method)を作っている。
— Kenji Yoshida (@xuwei_k) March 18, 2021
大まかな原理として、すべてのNameを集計、保存しておいて、1箇所しか出現しないものを検出(多少その後特殊処理する)、という力技で、まぁまぁ実用的なものが出来つつある
自分が出したpull reqがconflictしていたら通知するGitHub Action君
というのを作った。
仕事で自分が関わっている特定のリポジトリでは、以前からそういうの作ってbotがpull reqに直接コメントするようにしている。(自分のものだけではなく、そのリポジトリのpull req全てに対して)
そうではなく、自分が出したOSS含めた任意のpull reqでconflictしていたら通知欲しいので、作った。
https://github.com/xuwei-k/cron/commit/17c9c731593ce5de9178fabdb26c088631d74e74
通知先はとりあえずslackにしたが、ここはメールでもなんでも、好きものでいいと思う。
自分のJavaScriptの能力はゴミなので、明らかにリファクタ出来そうだけれど、とりあえず動いたので一旦妥協した。
改変して使う際は q
のauthor部分は、直接埋め込んであるけれど、自分のgithubのidに変えてください。
on: schedule: - cron: '0 1 * * *' workflow_dispatch: jobs: check-conflict: timeout-minutes: 5 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - run: npm install @actions/core - uses: actions/github-script@v5 id: conflict_pull_requests with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const script = require(`${process.env.GITHUB_WORKSPACE}/cron.js`) console.log(script({github, context})) - uses: slackapi/slack-github-action@v1.16.0 with: payload: "{\"text\":\"${{ steps.conflict_pull_requests.outputs.value }}\"}" env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
const core = require(`${process.env.GITHUB_WORKSPACE}/node_modules/@actions/core`); module.exports = ({github, context}) => { (async () => { // https://octokit.github.io/rest.js/v18#search-issues-and-pull-requests const pulls = await github.rest.search.issuesAndPullRequests({ q: "is:open+is:pr+author:xuwei-k+archived:false", per_page: 100 }); const conflicts = []; for (const pull of pulls.data.items) { console.log(pull.url); const pull_req = await github.request(`GET ${pull.pull_request.url}`) if (pull_req.data.mergeable === false) { console.log(pull_req.data.mergeable); conflicts.push(pull.html_url); } } console.log(conflicts); if (conflicts.length == 0) { core.setOutput('value', 'There is no conflict pull requests😀'); } else { core.setOutput('value', 'conflict pull requests\\n' + conflicts.join("\\n")); } })(); };
2021年の最新技術を使った場合のScalaのコンパイル速度
ここでいう最新技術とは以下です。
- JDK8や11よりも、17の方が速い?
- M1 Macが速い?(2021年最新のM1 Maxではなく、2020のMacbook Pro 13インチのM1です・・・。M1 Max欲しい!!! => 最後に追記したぞ)
- Scala 2より3の方が速い?
自分の最近の経験上、それらが速いはず?なので。
上記は、全部場合による(projectによる)かもしれないし、あまり変わらないパターンも含まれているかもしれませんが、とりあえず一部(Scala 2自体のcompile)を除いて、上記の条件でコンパイル速度を計測してみたら、 数年前の感覚と比較して結構速い感じがあったので、それの計測結果の共有です。
続きを読むScala 2のJDK17対応状況
最新情報は以下の公式の情報をご覧ください。で終わるのですが、これ書いている2021年9月現在の情報を簡単にまとめておきます(ただのtweet貼り付け)
- https://github.com/scala/bug/issues?q=label%3Ajdk17 公式のJDK17関連のbug
- https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html 公式のJDKとの互換解説のページ