Skip to content

Instantly share code, notes, and snippets.

@nanase
Last active September 20, 2015 12:36
Show Gist options
  • Save nanase/792bfbbb0de859972501 to your computer and use it in GitHub Desktop.
Save nanase/792bfbbb0de859972501 to your computer and use it in GitHub Desktop.
Lury 0.1 リリースノート

Lury 0.1 リリースノート

Lury 0.1 実装

Lury 最初のリリース (プロトタイプ版) のため、Lury 構想まとめ に記述されている機能の実装はごく僅かです。

言語基盤の実装

  • Lury Specification 0.1 の一部に対応しています(< 0.1)。
  • 字句解析器
    • 将来バージョンとの前方互換のため、Lury 構想まとめ で取り扱う全てのキーワード、リテラルや記号をトークンとして認識しています。従って 0.1 で意味のないトークンも多く存在しています。
  • 構文解析器
  • 実行エンジン
    • 試作のため AST を直接巡回して実行しています。

言語機能の実装

  • リテラル
    • nil
    • 整数リテラル (Integer型)
    • 実数リテラル (Real型)
    • 虚数リテラル (Complex型)
    • ブールリテラル (Boolean型)
    • 文字列リテラル (String型)
  • 演算式
    • ドット演算子 .
    • 前置インクリメント、後置インクリメント ++
    • 前置デクリメント、後置デクリメント --
    • 関数呼び出し (...)
    • 冪乗演算子 **
    • 符号演算子 + -
    • ビット否定演算子 ~
    • 乗算演算子 *
    • 除算演算子 / //
    • 余剰演算子 %
    • 加算演算子 +
    • 減算演算子 -
    • 結合演算子 ~
    • 算術シフト演算子 << >>
    • ビット演算子 & ^ |
    • 比較演算子 < > <= >= == !=
    • 論理演算子 ! not && and || or
    • 条件演算子 ? : if...else
    • 代入演算子 = **= *= /= //= %= += -= ~= <<= >>= &= ^= |=
  • 単純文
    • pass 文
    • 式文
    • return 文
    • break 文
    • continue 文
  • 複合文
    • if 文
    • while 文
    • function 文 (関数定義, Function型)
  • 組み込み関数
    • println
    • print

文法は用意されているが機能が実装されていないもの

  • class 文 (クラス定義)
  • import 文
  • 同一性判定演算子 is !is
    • 以上は Lury Specification 0.2 以降で規定するデータモデル確立後に実装予定。
  • コンマ演算子
    • Lury Specification 0.2 以降で規定するタプルとコンテナに絡むため見送り。
  • 名前付き実引数

Lury 0.1 の特徴

他の 多くの 言語とは異なる特徴をピックアップしています。

オフサイドルール

Python と同様にオフサイドルールによって制御構造を記述します。インデントは半角スペース、タブなどが使えます。0.1 では全角スペースに対応していません。

def test(foo):
	if foo > 30:
		println('foo は 30 よりも大きい')
	elif foo > 20:
		println('foo は 20 よりも大きい')
	else:
		println('foo は 20 以下')

test(40)

コメントは #

Python と同様に # でコメントを記述できます。ただし、独自に ### で複数行コメントが記述できます。

# これがコメント行
a = b = c = 10

###
	複数行に渡るコメントは # を3つ書く。
###

# 推奨はしないがこのようなコメントも可能
println(a, ### b, ### c)

while 文の else 節

Python と同様に while 文に else 節を記述できます。while 文の条件が false となってループを抜ける場合に実行されます。returnbreak で途中脱出した場合は実行されません。

関数定義の仮引数リストの括弧省略

関数が仮引数を一つも取らない場合は括弧を省略できます。

def test:
	println('hello!')

test()

関数呼び出しの実引数リストの括弧省略

関数呼び出しが実引数を一つも取らない場合は括弧を省略できます。しかし関数そのものにアクセス(参照)したい場合は ref というキーワードを使って明示的に参照しなければなりません。

実際の ref は左辺値に直接的に参照するキーワードであり、関数オブジェクト以外でも使用できます。

def test:
	println('hello!')

a = ref test
a 				# ここで hello! が出力される

アンダースコア区切り数値リテラル

D言語と同様に、アンダースコア _ を使って数値リテラルを区切ることができます。

dec = 1_000_000
hex = 0xffff_00ff
oct = 0o755_644
bin = 0b0010_1100

Lury 0.1 でのテクニック

クロージャ

Lury ではクロージャを作成できます。

def createCounter:
	c = 0
	def runner:
		println(++c)

	return ref runner

a = createCounter
b = createCounter

a 					# 1
a 					# 2
a 					# 3
b 					# 1

絵文字識別子

識別子には一部の絵文字を使用できます。矢印など、一部の絵文字には対応していません。

🐬 = 'Lury'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment