Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

言語のデザイン #12

Open
nomaddo opened this issue Jan 10, 2017 · 1 comment
Open

言語のデザイン #12

nomaddo opened this issue Jan 10, 2017 · 1 comment

Comments

@nomaddo
Copy link
Collaborator

nomaddo commented Jan 10, 2017

少し言語のデザインが気になります。

  • nubは式志向の言語デザインだと思っていたのですが、 return式(でいいのでしょうか?)があります。
    式を評価するとそれが返るので不要な気がして、min-camlなどとくらべてなんだか全体の整合性が取れていないように思います。
  • READMEに書いてないのですが、ifは式のように思えます。
    しかし構文ではprint(if (1) { 1;} else { 2; });のようにパーサーの都合で書けないようです。
    いっそのこと宣言にしたほうが色々楽になるのではないかと思います。
    一方代入はlet a = 1; print(a=1)は許されます。

言語のデザインが統一されていないと、なかなかnub言語自体を理解するのがむつかしいので統一出来たらなぁと思います。

@kmizu
Copy link
Owner

kmizu commented Jan 10, 2017

nubは式志向の言語デザインだと思っていたのですが、 return式(でいいのでしょうか?)があります。

あとで式指向にした方がいいよなあと思って、結果としてreturnが残っているみたいな感じですが、returnを最初から入れる意味ないし、削除でも良さそうです(やりたい人はそれこそハンズオン中に拡張してもらうとして)

READMEに書いてないのですが、ifは式のように思えます。
しかし構文ではprint(if (1) { 1;} else { 2; });のようにパーサーの都合で書けないようです。

はい。おっしゃる通りです。一方で、

def f(x) {
  if(x) {
    1;
  } else {
    2;
  }
}

のように関数内トップレベルだとifを値を返すように使うことができて、割とテキトーなデザインをしたツケが回っている気がします。パーザーで print(if (1) { 1; } else {2: }) のように書けるようにするのは多少パーザ改変すればできるといえばできるのですが、構文定義がわかりにくくなるのでトレードオフだなーと思っています。楽な改変としては、ifは常に末尾にセミコロンを入れなければいけないとかですが、やや微妙です。

ともあれ、ちょっと考えが足りなかったと思うので別のIssueで設計を再整理させてください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants