先日、Kotiln勉強会というものに行って来ました。まあ、自分の発表は拙作kollectionライブラリの発表という割とどうでもいいものでしたが、それはそうとKotlinエバンジェリストたろーさんがClass Delegationという機能について紹介していました。 speakerdec…
今回のリリースでは、不変キューを追加しました。 github.com これは各操作の償却計算量が定数時間のキューで、非償却計算量で定数時間にはなっていないので改良が必要なのですが、とりあえず実装が手っ取り早かったのでまずはこちらを実装しました。リアル…
そろそろ新しい言語に触れないとなあということでこれまでちらっと見たことがあったプログラミング言語Nim index - Nim Programming Language を触ってみることに決定。(1)とついていますが、これで飽きてやめるかもしれませんが悪しからず。 Python風味のイ…
このネタは parser.connpass.com でToshihiro Kogaさんに教えてもらったもので、私のオリジナルではないのですが、ちょっとおもしろいので貼ってみます。 まず、非負整数nについて、1の出現数によってエンコードします。 0 = 1 = 1 2 = 11 3 = 111 4 = 1111 …
という至極当然のことを改めて言っておきたいです。 たとえば、自分は今はScalaをメイン言語として使っていて、Javaの色々な部分がイケてないなーと感じることは多々あり、時折ディスることもありますが、Javaユーザを見下したりしたことはないと思っていま…
リテラル Byte Short Int Long Float Double Boolean Unit String 演算 加減乗除、比較、論理演算、などなど。異なる数値型の暗黙変換は禁止(Int + LongなどはNG) リスト [ [1 2 3] [4 5 6] [7 8 9] ] こんな風に、改行だけでなく空白がセパレータになるこ…
明日(6/11(土))に、こういう勉強会があるのですが、 xbase.connpass.com きょんさんから、出演依頼があったのと、これからあちこちでなんか発表したいなーという気分があったので発表することにしました。 タイトルは「私のプログラミング言語の学び方」です…
タイトルは、斜め読み論文紹介ですが、 togetter.com ↑の辺の企画の亜種だと思ってください。気が向いたらときどき書いていこうと思います。第一回は、From APIs to Languages: Generalising Method Namesです*1。 唐突ですが、Smalltalkという言語がありま…
Scalaには中置パターン(infix pattern)と呼ばれる機能があります。これは単純にいうと、 case class ~[A, B](a: A, b: B) のようにして定義したケースクラスに対して*1、 scala> val ab = new ~(1, "FOO") ab: ~[Int,String] = ~(1,FOO) scala> val a ~ b …
昨日、Amazon Prime Nowの存在を知り、送料を余計に支払えば1時間以内、無料枠でも2時間以内に注文した品を届けてくれるサービスであることを知った(該当エリアに住んでいることが条件。また、専用のPrime Nowアプリで注文する必要がある)。注文できる品物…
タイトルの通りです。JavaScriptに関しては多少は知っていますが、知識が全然アップデートされていないので、この機会に再入門してみることにしました。以下はpackage.jsonなんかBabel関連で試行錯誤したので、結構変な構成になっているかも。 { "name": "es…
kmizu.hatenablog.com についての補足的なエントリです。scala-nativeのサンプルプログラムsmallpt.scalaは __stderrpを使っていますが、Linux系には存在しないので、リンク時にこけてしまいます。 これを修正するには、smallpt.scalaとstdlib.scalaの__stde…
Scala Nativeなのかscala-nativeなのか迷ったのですが、今後はリポジトリ名のscala-nativeに統一しようかと思います。さて、タイトルについてですが、そのまんまです。 サンプルコードは以下: gist.github.com 通常のJVM上でのScalaでは、末尾呼び出しが自…
Scala Nativeはscalaのコードを(LLVMのIRを経由して)ネイティブコードにコンパイルするAOTコンパイラ(Ahead Of Time Compiler)です。その存在については、少し前にサイトができていたことで一部で話題になっていましたが、Scala Days 2016 NYCにて正式に…
リストベースの集合であるKListSet リストベースのマップであるKListMap 遅延評価を提供するKLazy のサポートを追加しました。また、必要になった時点で、KListにもメソッドを随時継ぎ足していってます。詳細についてはREADMEを参照ください。 github.com
Kotlinにはrun というメソッドがstdlibにあります。これ、定義をみると、 @kotlin.internal.InlineOnly public inline fun <R> run(block: () -> R): R = block() 引数で渡された0引数ラムダ式(とKotlinの用語法に従っておく)をそのまま呼び出すだけというも</r>…
ScalaのString(正確にはStringOps)にはstripMarginというメソッドがあります。これは、主に複数行文字列に使われる機能で、たとえば、 """|class Hello { | |}""".stripMargin のようにすると、 res0: String = class Hello { } という文字列が得られ、行頭…
ちょっと前から少しずつ作っていたのですが、最低限の機能はそろったので公開してみることにしました。Kotlinの標準ライブラリのコレクションは読み取り専用ビューは提供してくれるものの、不変コレクションがないのが不満だったので作ってみようというのが…
Scala 2.12.0-M4はまだ正式リリースはされていませんが、既に各種バイナリはpublishされており、sbtに次のようにscalaVersionを書いてあげればふつうに使うことができます。 scalaVersion := "2.12.0-M4" さて、Scala 2.12の一つの目玉がSAM Type(Single Abs…
GitBookは、色々な電子フォーマットで出力するドキュメントのためのツールです。 github.com GitBookは紹介記事がたくさんあると思うので、説明は割愛しますが、このツール、主な記述言語としてMarkdownを採用しています。Markdown自体は色々な独自拡張があ…
今回のおもな変更点は、 Fix bug of + combinator. · kmizu/macro_peg@187e448 · GitHub Generalize evalCC combinator. · kmizu/macro_peg@fd4525f · GitHub です。一点目は、まだそんなバグが残ってたのか…と自分に呆れるばかりです。二点目は、evalCCの型…
先日の、Scala勉強会第170回 in 本郷 : サブテーマ「Scalaの言語仕様」 rpscala.doorkeeper.jp でScalaの言語仕様について解説していたときの反応をみて、どうも、自分のプログラミング言語の把握の仕方はあまり一般的ではないのではということを考えました…
Scala勉強会第170回 in 本郷 rpscala.doorkeeper.jp は、サブテーマ「Scalaの言語仕様」であったため、久々に熱弁をふるったところ、特に、メソッドや関数の仕様や区別に関して疑問に思った方が多かったらしく、質問も多かったので、Q&A形式でまとめておきま…
ほぼタイトルの通りです。先日導入した、Macro PEG + 後方参照の拡張を利用することで、変数宣言のテーブルのようなものを構文解析時に作り出すことができるようになったので、それを利用することで、変数宣言をみるたびごとに、table | varibleのようにして…
Kotlinには所謂smart castと呼ばれる(公式ドキュメントがそう称している)機能があります。 たとえば以下のように、ifの条件式でnullチェックをすることにより、その中ではnot-nullableな型として扱うことができます。 gist.github.com ただし、一般的に、…
github.com 今回のリリースでは、いわゆる後方参照と呼ばれる拡張をパーザコンビネータに導入してみました。 Introduce backreference as `evalCC` method. · kmizu/macro_peg@91154c8 · GitHub このコミットです。 使い方は gist.github.com こんな感じです…
実はリリースしてから、Kotlinのパーザコンビネータライブラリがあることに気づいたのですが、まあ、どうせexperimentalだし、自分ならではの独自路線歩みたいし、気にしないでいくことにしました。 最低限の使い方は、 github.com に書いておきましたので、…
Kotlinでは、一つの式からなる関数は fun add(x: Int, y: Int): Int = x + y のように明示的なreturnを必要としません。次のように複数の式からなる関数定義ではreturnが必須となります。 fun printAndAdd(x: Int, y: Int): Int { val k = x + y println(k) …
先日、MiMaの紹介のために、 kmizu.hatenablog.com を書きましたが、それの続編みたいな何か。基本的なことだと思うのですが、色々なScalaプロジェクトがバイナリ非互換な変更の元になる行為を意図せず行っている気がするので、啓蒙のために書いてみることに…
MiMaは主にScalaライブラリ(Scala本体を含む)のバイナリ非互換な変更をチェックしてくれるライブラリです(おそらくバイトコードレベルの検査なので、Javaプロジェクトでもチェックできると思うのですが試していない)。 元々の経緯としては、Scala 2.9以…