yhara.jp

Recent Posts

処理系ミートアップ #3

2021-06-27
Event

定期ミートアップ 第3回 - prog-lang-sys-ja

最近やったこと

  • BiwaScheme (Scheme in JS)リリース準備
  • 準備を始めるとついでにこれも入れようかな…となりがち
  • 需要があればまたそのうち

Shiika

  • 書きやすさ重視の静的言語
  • enumの実装を進めた
enum Maybe<V>
  case Some<V>(value: V)
  case None
end
Some = Maybe::Some
None = Maybe::None
a = Some<Int>.new(1)
b = None
f = fn(x: Maybe<Int>) { x }
f(a)
f(b)
# TODO: unless a.value == 1; puts "ng Some#value"; end

残作業

  • 継承を禁止
  • アクセサを生やす
    • 書き換えを許すか?(Haskell: 許さない, Rust: 許す)
    • 案 明示したものだけ更新を許す
enum Foo
  case Bar(x: Int, var y: Int)
end
b = Foo::Bar.new(0, 0)
b.x += 1 # NG
b.y += 1 # OK

次の作業

パターンマッチ

  • これがないとenum型をまともに使えない
  • 実装方法は?

案a

  • クラスにid(1,2,3,...)を振り、それをインスタンスに入れる
  • パッケージシステムとの兼ね合い
    • パッケージ側も1から採番したら被るよね

案b

  • 文字列で比較する
  • 遅そう…、

案c

  • Shiikaでは各クラスにつき1つの「クラスオブジェクト」が生成される
  • ということはクラスオブジェクトのアドレスをidがわりに使えるのでは
    • @"::String" = external global %"Meta:String"*

フィードバック

  • 全体でユニークである必要はなく、あるenum内でcase達に1,2,3...を振れば充分なのでは
    • なるほど
  • ただ将来的に1.classとかを実装したいんですよね
  • caseに数値が振ってあったほうが網羅性チェックの実装時に便利かも?

More posts

Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy