kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Klassic言語の開発状況

リテラル

  • Byte
  • Short
  • Int
  • Long
  • Float
  • Double
  • Boolean
  • Unit
  • String

演算

加減乗除、比較、論理演算、などなど。異なる数値型の暗黙変換は禁止(Int + LongなどはNG)

リスト

[ [1 2 3]
  [4 5 6]
  [7 8 9]
]

こんな風に、改行だけでなく空白がセパレータになることもできる(実験的文法)。

無名関数

val add = (x, y) => x + y

関数定義

def add(x, y) = x + y

while式

while(condition) expression

foreach式

  • 今のところiterator()メソッドを持っているオブジェクトすべてに適用できる
foreach(var in expression) expression

if式

if(condition) thenClause else elseClause

ヒアドキュメント

println("#{<<TAG1 + 1} #{<<TAG2 + 2} #{<<TAG3 + 3}")
tag1
TAG1
tag2
TAG2
tag3
TAG3

ヒア式

  • ヒアドキュメント実装の副産物として生まれた
println(<<$EXP1 * <<$EXP2); //(1 + 2) * (3 + 4) → 21
1 + 2
EXP1
3 + 4
EXP2

String Interpolation

  • ${}じゃなくて#{}な辺りはRuby風味。
val x = 10
val y = 20
println("x = #{x}, y = #{y}")
println("x + y = #{x + y}")

オブジェクト生成とかメソッド呼び出しとかJava FFIとか

val list = new java.util.ArrayList
list.add(1)
list.add(2)
println(list)
val buffer = new java.lang.StringBuffer
buffer.append("A").append("B").append("C")
println(buffer)
println([
  "FOO"
  "BAR"
  "BAZ"
])
println("FOO".substring(0, 1))

型チェック

  • 実装始めたばっかり
  • ごく基本的な型チェックが動く
{ val i = 1;
  i } // 型はInt
val a = 1
val b: Long = a //NG。IntからLongへの暗黙変換は許されない
b

クラスシステム(Klass System)

  • 未実装。
  • サブタイピングはオプショナルにしたい

ほとんどメモ書きですが…。