Skip to content

Instantly share code, notes, and snippets.

@bromne
Last active September 18, 2017 03:19
Show Gist options
  • Select an option

  • Save bromne/67c81843f60bbbf5774f243696ef8f23 to your computer and use it in GitHub Desktop.

Select an option

Save bromne/67c81843f60bbbf5774f243696ef8f23 to your computer and use it in GitHub Desktop.
Concept of the new language

新しい言語

**新しい言語(仮称)**のコンセプトです。

パラダイム

  • 静的型つけ: 型の整合性は実行前に完全に検証される
  • クラスベースオブジェクト指向 + 関数型: グローバルな関数よりもobject.method(...)という書き方を優先する,高階関数を多用する
  • 高級: 典型的な表現は簡単な書き方で記述できる
  • 空値安全: 空値(null)の存在は隠ぺいされる

機能と特徴

かっこ内は その項目の由来として代表的な言語。

型としての機能

  • 組(Python): 複数の型を並列に並べた型
  • Optional(Scala): 値があるかないかを抽象的に表現する型
  • Either(Haskell): 二者択一の型
  • 関数型: パラメータと戻り値の型が表現される特殊な型、C#のdelegateに相当する

言語的機能

  • 拡張メソッド(C#): 既に定義されている型に、見かけ上 メソッドを追加する
  • インデクサ(C#): 任意のオブジェクトに、配列のようにアクセスできる
  • 演算子多重定義
  • static クラス(C#): インスタンス化できないクラス
  • 構造体: データ表現のための型、プロパティを記述すればコンストラクタと Builder が自動的に定義される
  • アクセサ(C#): メソッドを、見かけ上 プロパティのように扱う
  • ?? 演算子(C#): Optional の値の有無で値を決定する。Optional.orのシンタックスシュガー
  • パラメータ化多重定義(C#)
  • region ディレクティブ(C#): コードの階層構造を記述し、IDEにおけるコードの読みやすさを向上する
  • 束縛〔let〕: Java のローカル final 変数に相当(ただし、イミュータブルな型でないと成りたたない)
  • mutable: 変化しうる型
  • 列挙型メソッド(Java): 列挙型にメソッドを定義できる
  • switch式(LISP)
  • スマートデリゲーション: 完全に実装された型を用いて自動的に委譲を実現する
  • コンテキスト(Perl): あらかじめ定義しておくことで、文脈に応じて式の型が自動的に変化する(例: Integer foo = "42"
  • null がない: 値がないことは Optional で表現される
  • 型のデフォルト値: 型のデフォルト値を定義できる(たとえば、 Integer のデフォルト値は 0。)。empty キーワードで自動的に取得される。
  • empty キーワード: デフォルト値を表現するキーワード(例: Integer foo = empty で 0 が代入される)
  • デフォルトパラメータ: メソッドのパラメータに初期値を定義できる
  • 名前つきパラメータ: メソッド呼び出し時、値を適用するパラメータを名前で指定できる

文法的特徴

  • コロン(:)による継承,コンストラクタのオーバライド(C#)
  • 広範囲可視性指定(Ruby): 複数のメソッドの可視性をまとめて指定できる
  • 典型的な総称型の簡易記述: リスト,マップ,OptionalEither,組のような典型的な総称型は、簡単な書き方で記述できる
  • 関数式〔ラムダ式,無名関数〕
  • 空パラメータ関数式: パラメータが空の関数式は簡単な書き方で記述できる
  • リスト式(JavaScript)
  • マップ式(JavaScript)
  • 正規表現リテラル
  • ヒアドキュメント

一般的機能

  • 名前空間によって型を扱う
  • アノテーション: 型やメソッドに高度な情報を付加する
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment