プログラミング言語のデザイン
問うべき疑問
本当に新しい言語が必要か
その言語はなにをするのか
想定されるユーザーは誰か
どんな機能を採用するか
言語名は大事
呼びやすくて印象的なもの
ググラビティがあるもの
言語の特徴を端的に表現できれば尚良し
Rubyの話
Perlを参考に宝石から付けようとした
長いものが多くて良いのが見つからなkッタ
Coral(サンゴ)とRubyが最終的にに残った
短くて美しいRubyにした
コツ
既存の言語の問題を調査する
独自性の追求は限定する
入門者のつまずきの原因になる
基本的に保守的に、だが、保守的すぎると技術的に面白くない
客観的な視点
多くの人の意見をまとめすぎると、尖った物がなくなってしまう
各々のデザイン
式と文の区別の強さ
強い
Python
弱い
ない
Lisp
演算子
Swiftのreturnとセミコロンについて
以下のコードはreturn;となっていないので、bar()が返される
code:swift
func foo {
print(#function)
return
bar()
}
設計ポリシー
Ruby
簡易言語からの脱却
書きやすく、読みやすい
簡潔
今気づいたが、関数型言語(Haskell)って、「返り値は絶対に一つ」って制約があるのかmrsekut.icon
それのおかげでカリー化なり、関数合成などかうまくできている
いやまぁどの言語でもそうか
2値のものを「一つのタプル」と呼んだり「一つの配列」と呼べば返り値は一つか。
オブジェクト指向の継承をどうするか
単一継承
コードのコピペが増える
RubyではMixinを使うことで対策した
多重継承
気をつけないとクラスの継承関係が複雑になる
探索方法も様々
Python, CLOSなど
モジュール
Mix-inを強制する
2種類のクラスを用意する
1つは主たる継承をする通常のクラス
もう一つはMix-inとしてだけ使える特別なクラス
通常のようにインスタンスの作成不可
通常のクラスからの継承不可
多重継承の短所である複雑さを回避しつつ、Mixinの長所の恩恵を受けられる
似たような機能にSelf言語の、「mixin」、「trait」など コレクション型
コレクション型を実装するパターンは大きく分けて2種類
ぜんぶに配列を使う
さまざまなコレクションを配列の形式で扱っちゃう
異なる概念だが、同じインターフェースで扱える
「Array」とか「Set」とか内部的には異なる概念だが、同じインターフェースで便利に扱えるようになっている
変わった文法を採用すると後々に響く
それが言語の目玉なら良いけど。
イテレータ
C言語にはイテレータがないが、同じようなことをしようとすると
for文を使う
ループ変数や内部構造へのアクセスが隠蔽できない
関数ポインタを使う
隠蔽はできるが、変数などの受け渡しが面倒
Cにはクロージャがないので。
真偽値
0が偽、それ以外が真
falseとnilが偽
それ以外(0を含む)は真
0は数値型なのでboolとしては扱えない
コンパイルエラーになる
前置記法を採用している言語
後置記法を採用している言語
参考
ECMAのproposalとか読んでいきたい
参考になりそう
参考