自作プログラミング言語 lury
TRANSCRIPT
自作プログラミング言語 Lury
七瀬 (@nanasetomona)
dendai sie; Talk Live! vol.5 2014/11/29
自己紹介
•山本 裕二郎 (HN: 七瀬 ともな)
• 長野県出身
• 信州大学 大学院 理工学系研究科 修士1年
• @nanasetomona
• https://github.com/nanase
すべての始まり
• 8月末、 こんなつぶやきが…
ぱらつり氏 (@paralleltree)
すべての始まり
(ぱらつり氏はメモ帳に強い情熱を持つことで有名)
すべての始まり
何かが始まった
•周囲で新言語の議論が沸騰 ▫ 主に Twitter / Gitter / Slack 上
•数週間後、いくつかの言語の案が残った
触発された言語たち
• notepad-ruby ▫ github.com/PaLTree/notepad-ruby
▫ 制作: kb10uy氏 (@kb10uy)
• Karaffe (notepad-java) ▫ github.com/nokok/Karaffe
▫ 制作: noko氏 (@noko_k)
• 七瀬による C# での実装 (Notepad-Lang-CS)
新しい言語?
• Lury ▫ github.com/nanase/lury
▫七瀬による C# での実装
▫由来は瑠璃色から
▫動的型付け言語
▫ C# + Python + D言語のいいとこ取り
目指すべきゴール
•楽しい言語
•読みやすい言語
•書きやすい言語
楽しいプログラム
読みやすいプログラム
書きやすいプログラム
≠
≠
「メモ帳でも書きやすい」は比喩表現じゃない
どんな言語?
• Python に C# と D の機能を追加 ▫ その他の言語の良い所も
• インデントでブロック表現 (オフサイドルール)
•オブジェクト指向
•プロパティ (C# から)
•契約と単体テスト (D から)
クラス
# 挨拶して寝るだけの人間クラス
class Person:
def greet(name):
println "Hello #{name}!"
def sleep():
println 'Zzz...'
クラス
# 挨拶して寝るだけの人間クラス
class Person:
def greet(name):
println "Hello #{name}!"
def sleep():
println 'Zzz...'
式の埋め込み (Rubyより)
表示して改行
プロパティとコンストラクタ
class Person:
# 年齢
property age (get, private set)
# コンストラクタ
def this(age):
this.age = age
プロパティとコンストラクタ
class Person:
# 年齢
property age (get, private set)
# コンストラクタ
def this(age):
this.age = age
自動実装プロパティ (C# より)
コンストラクタはthis (D より)
契約
class Person:
# 年齢
property age (get, private set):
in:
assert(value >= 0)
契約: 事前条件 (D より)
年齢だから0以上の数値
単体テスト
class Person:
...
unittest:
age = 18
p = new Person(age)
assert(p.age == age)
assert(fail(new Person(-3)))
単体テスト (D より)
失敗を期待している
構想は混沌
•ダックタイピング? インタフェース? ▫契約との相性は?
•例外送出とassertの分別
• クラス不変条件の問題
• None? null? nil?
まだまだ始まったばかり
•他の言語の勉強になる
• 「あったらいいな」の思考が楽しい
•構想段階、実装はない
•実装時の足回りを整備中
コメント募集中
•要望、質問など…
• @nanasetomona
• github.com/nanase/lury
(おまけ)GitでHubHub
6月28日
(おまけ)GitでHubHub
10月28日