2023 03 28 - qnighy/umo GitHub Wiki

近況

特に進捗はない。

セミコロンについて

セミコロンは概して邪魔なのでユーザー体験のためにはなるべく無くしたい。しかしセミコロンを無くすには以下のような課題がある:

  • 改行にまつわる構文的な曖昧性が生じ、その解決のために文法定義が複雑になる。
    • 特にRustのマクロ呼び出しのように、遅延パースされるような要素が出てきた場合には話が非常にややこしくなる
  • 「値を持つブロック文」との相性が悪い

後者に関してはいくつかの解決策が考えられる。ひとつは値を持つブロック式と値を持たないブロック文を別の構文にしてしまう方法で、 (...){...} をそれに割り当てるという手がある。この場合、 if ... { ... } のかわりに if ... ( ... ) を使おうとしたときの曖昧性が厳しい。なお、 {...} にも構文的曖昧性があり、Rustではifの条件位置での { は肯定節としての解釈を優先するようになっている。

それ以外の方法としては、末尾の文に対して2種類の書き方を提供するというものが考えられる:

  • 値を持たせないときはセミコロンを明示し foo; とする
  • 値を持たせないときは続く文で明示的にvoidを返却する
  • 値を持たせるときは専用の制御構文を使い conclude foo; などとする
    • 関数やループではなく直上のブロックに復帰したいので、 returnbreak とは別の構文が必要

このあたりの選択肢をどうするかは悩み中。