21 KiB
用語辞典
記号
!
プロシージャ、または可変型であることを示すために識別子の末尾に付与するマーカー。 または、可変化演算子。
#
$
%
&
' (single quote)
()
*
+
,
−
->
.
/
:
::
;
<
<:
<<
<=
=
==
=>
>
>>
>=
?
@
[]
\
^
^^
_
``
{:}
{=}
|
||
~
A
[algebraic type]
[And]
[and]
[assert]
[attribute]
B
[Base]
[Bool]
C
[Class]
D
Deprecated
[distinct]
E
[enum type]
[Eq]
[Erg]
2022年に発表された静的型付けプログラミング言語であり、本ドキュメントで解説される対象である。開発者は「エルグ」(/ɝ́rug/
)と発音している。命名の由来はCGS単位系におけるエネルギーの単位である。
Pythonの資産を活用できる静的型付け言語として設計された。主にRustやHaskellなどの影響を受けている。
F
[for]
G
H
Haskell
1990年に登場した静的型付けプログラミング言語。純粋関数型プログラミング言語を標榜しており、非正格評価やモナドを特徴とする。Ergはその文法においてHaskellの影響を受けている。
High-order functions
I
[if]
[import]
[in]
[Int]
J
K
L
let-polymorphism -> [ランク1多相]
[log]
M
[match]
N
[Nat]
Never
Nim
Andreas Rumpf氏が設計した静的型付けプログラミング言語。主にC言語にトランスパイルされる。Ergのプロシージャや可変配列などの言語機能はNimからの影響を受けている(プロシージャは元々Pascalの機能である)。
None
[Not]
[not]
O
[Option]
[Or]
[or]
[Ord]
P
panic
print!
[Python]
Guido van Rossum氏が設計したプログラミング言語。学術計算分野を中心に世界中で広く使われている。ErgはPythonの資産を活用している。
Q
R
Ruby
Yukihiro Matsumoto(まつもとゆきひろ)/Matz氏が設計したプログラミング言語。Ergと同じく、純粋なオブジェクト指向プログラミング言語として設計された。文法面ではそれほど影響を受けていないが、ErgはMatz氏の命名哲学に則って命名された。
Rust
Graydon Hoare氏が設計した静的型付けプログラミング言語。強い型システムを持ち、高度な抽象化機能と高い実行性能を両立させるシステムプログラミング言語である。ErgはRustを用いて実装されており、その影響も強く受けている。
ref
ref!
[Result]
[rootobj]
S
self
Self
side-effect
[Str]
T
Trait
[True]
[Type]
[type]
U
V
W
[while!]
X
Y
Z
あ行
[アサーション]
コード中である条件が成立しているか(典型的には実行時に)調べること。assert
関数などを使用して行う。
sum = !0
for! 0..10, i =>
sum.add! i
assert sum == 55
値オブジェクト
Ergにおいては、基本オブジェクトと同等。コンパイル時に評価でき、自明な比較方法を持つ。
アタッチメントパッチ
トレイトに標準の実装を与えるパッチ。
アドホック多相 -> オーバーロードの禁止
いわゆるオーバーロードによる多相。
アトリビュート -> [属性]
x.y
という識別子におけるy
の部分。
アリティ
演算子がいくつのオペランドを取るか。
依存型
値(慣用的には、型ではない)を引数にとる型。例として、Array(T, N)
は第二引数にNat
型の値を受け取る依存型である。
イミュータブル -> [不変]
対象が変更されないことを示す。 他の言語では変数にもイミュータブル/ミュータブル性があるが、Ergでは変数はすべてイミュータブル。
引数(いんすう) -> [引数(ひきすう)]
インスタンス
クラスによって作られたオブジェクト。クラス型の要素。
インスタントブロック
x =
y = f(a)
z = g(b, c)
y + z
インタープリタ
プログラムを実行するプログラム。 ErgはコードをPythonバイトコードに変換してPythonインタープリタ(CPython)に実行させる。
インデックス
x[i]
という形式、またはそれにおけるi
の部分。x
をIndexableオブジェクトという。
インデント
スペースに寄って文を右に寄せること。字下げ。 Ergはインデントによってブロックを表現する。これをオフサイドルールという。
エイリアス
別名のこと。
エラー
仕様で定められた異常状態。
- [エラーハンドリング]
演算子
オペランドに演算を適用するオブジェクト。またはそのオブジェクトを示す記号。
- [演算子の結合強度]
オーバーライド
サブクラスでスーパークラスのメソッドを上書きすること。
Ergではオーバーライドの際Override
デコレータを付けなくてはならない。
オーバーロードの禁止
オフサイドルール -> インデント
[オブジェクト]
Ergにおける計算の対象。式の評価された結果。
- オブジェクト指向
プログラムをオブジェクトの組み合わせとして表現するプログラミングパラダイム。 クラスからオブジェクトを生成するクラスベースのオブジェクト指向と、(プロトタイプ)オブジェクトからオブジェクトを生成するプロトタイプベースのオブジェクト指向がある。Ergはクラスベースであるが、開発初期はプロトタイプベースの性質も持っていた。
オペランド -> 被演算子
オペレーター -> 演算子
か行
カインド
いわゆる型の型。
[可視性]
識別子が外部(スコープ外、または別モジュール、別パッケージ)から参照可能であるかという性質。
[型]
項をグルーピングするオブジェクト。
[ガード]
カプセル化
実装詳細を隠蔽すること。
[可変]
イミュータブルでないこと。
- [可変オブジェクト]
- [可変型]
- [可変参照]
- [可変配列]
- [可変長引数]
関数
副作用のないサブルーチン。
プログラムをデータと関数の組み合わせとして表現するプログラミングパラダイム。
副作用の分離やデータの不変性を強制することで、プログラムの正しさを保証する。
Ergはこれらを強制しないが、使用時にマーカー(!
)を付けさせることで意識させるというスタイルを取る。
基底型
記名的
対称の構造ではなく名前によって区別すること。
キャプチャ -> [クロージャ]
[共変]
Ergにおいては、T <: U
のときK(T) <: K(U)
ならばK
は共変であるという。
[キーワード引数]
関数呼び出しf(k: v)
の形式におけるk
のこと。実引数を順番ではなく仮引数名で指定できる。
空集合 -> [{}]
区間
- 区間型
- 区間演算子
組み込み
Erg標準APIのうち、.erファイル内で実装されていないAPI。
クラス
継承機能を持つ構造体・抽象データ型。Ergにおいては記名的サブタイピング、およびオーバーライドを実現するための型である。 他の言語ではモジュールや型の責務を担う場合もあるが、Ergにおいては、モジュールはモジュールオブジェクト、型は型オブジェクトがその責務を担う。
[クロージャ]
[グローバル変数]
[クローン]
継承
あるクラスを上位集合としたクラスを定義すること。 継承元のクラスはスーパークラス、継承先のクラスはサブクラスと呼ばれる。 サブクラスはスーパークラスの機能をすべて持つ。
項
式のうち、型式でないもの(e.g. 1+1
, ["a", "b"]
, print! x
, not Int
, [Str; 2]
)。
高階
[公開変数]
[構造的部分型]
後方参照 -> [前方参照]
[コピー]
コメント
コレクション
コロン -> [:]
コンストラクタ
コンテナ
コンパイラ
ソースコードをより低レベルの別表現(バイナリ、バイトコードなど)に変換するプログラム。ErgはErgコードをPythonバイトコード(ないしPythonコード)に変換するコンパイラである。
コンパイル時計算
コンマ -> [,]
さ行
再帰
自身を参照すること。
- 再帰型
- 再帰関数
サブスクリプト -> [インデックス]
サブタイピング多相
サブタイピングによる多相。サブタイピングとは、型において集合の包含関係に対応するものである。
サブルーチン
処理をモジュール化したオブジェクト。Ergでは関数、プロシージャ、およびメソッドの総称。
参照
- 参照オブジェクト
- 参照カウント(RC)
- 参照等価性 -> 副作用
式
構文要素のうち、評価・束縛(代入)可能なもの。Ergにおいてはほとんどすべての構文要素が式だが、例えば=
は特殊形式と呼ばれ、式ではない(x = 1
は式である)。
識別子
シグネチャ
サブルーチンを区別する構文要素。関数かプロシージャか・サブルーチン名・引数の数/名前/型など。Ergでは戻り値の型もシグネチャに含むとしている(これによりサブルーチン型=シグネチャの型表現となる)。
- 型シグネチャ
辞書
[自然数] -> [Nat]
順序や個数を表す数の集合。型としてはNat
に相当する。0を含まない流儀もあるがErgでは専ら含み、含まないものは正数(Positive number)と呼称する。正数の型はPos
がそれに相当する。
ジェネリクス -> [全称型]
ジェネレータ
[射影型]
型T
に対しT.X
またはT::X
の形式で表される型。例えばAdd(Int).Output
などが射影型であり、これはInt
に等しい。
借用 -> 参照
可変型の変数を一時的に参照すること。借用は値の所有権を移動させない。Ergにおいては引数の渡し方としてのみ借用が存在する。
シャドーイング
ある変数に対し、内側のスコープで同名の変数を定義してその参照を上書きすること。
種 -> カインド
おおまかには型の型。
[集合] -> [セット]
ErgにおいてはSetオブジェクトのこと。
述語
- [述語関数]
Bool型を返す関数。
条件分岐
[所有権]
オブジェクトのユニーク性に関する概念。 オブジェクトの所有権を持つ場合、オブジェクトの可変参照を取ることができる。
真偽型 -> [Bool]
シングルトン
インスタンスを一つしか生成できないクラスから生成されたインスタンス。また、クラスのインスタンスが1つしか生成されないことを保証するデザインパターンのこと。
[シンボル] -> 識別子
- [シンボル化]
スクリプト
Ergプログラムが記述されたファイル。
スコープ
変数管理における単位。外側のスコープでは内側のスコープに存在する変数を参照できない。 また、スコープを抜けたときに、参照カウントが0であるオブジェクトは解放される。
スプレッド演算子 -> [展開代入]
スライス
x[a..b]
の形式で生成される、配列の部分列を表すオブジェクト。
制御文字
[整数] -> [Int]
自然数に負数を合わせた集合。
セット
セミコロン -> [;]
宣言
変数を明示的に型付けること。
全称
- 全称型 -> 多相型
- 閉じた全称型
- 開いた全称型
- 全称関数 -> 多相関数
- 全称量化
前置演算子
∘x
の形式で適用される演算子∘
。
相互再帰
添字 -> [インデックス]
[属性]
- [属性的部分型]
た行
代数
- 代数演算型
- 代数的データ型
代入
多重
- 多重継承
- 多重代入
- 多重定義 -> [オーバーロードの禁止]
多相
- 多相型
- 多相関数
多態 -> [ポリモーフィズム]
ダックタイピング
タプル
単相
- 単相化
- 単相型
- 単相関数
[遅延初期化]
抽出代入
抽象構文木 -> [AST]
中置演算子
x∘y
の形式で適用される演算子∘
。
定数
イミュータブルでコンパイル時評価可能な代数。
[定義]
変数に対応するオブジェクトを割り当てること。
提供属性
APIとして利用可能な属性。特に、トレイトによって自動実装された属性。
[適用]
関数オブジェクトに引数を渡して評価結果を得ること。
デコレータ
@deco
f x = ...
という糖衣構文、またはdeco
のこと。_f x = ...; f = deco _f
とおよそ等しい。deco
自体は単なる高階サブルーチンにすぎない。
デストラクタ
オブジェクトが破棄されるときに呼ばれるメソッド。
手続き -> プロシージャ
サブルーチンのうち、可変状態を読み書きするもの。 プロシージャは呼出順序によってプログラムの実行結果が変わりうるという説明がなされることがあるが、これは可換性のことを言っているならば誤りである。 例えば関数のサブタイプである演算子は一般に可換でない。
デフォルト引数
仮引数にデフォルトの値を指定することで、呼び出しの際に実引数の指定を省略できる機能。
展開
- [展開演算子]
- [展開代入]
特殊形式
型システムの埒外にあるため、変数に束縛したり実引数に渡したりできない文法要素。=
, match
など。
匿名関数 -> 無名関数
無名関数演算子->
によって生成される関数オブジェクト。名前を定義せずに使える。
ドット演算子(.
) -> [属性参照]
トップ
- トップ型 -> [Structural Object]
- トップクラス -> [Object]
トレイト
な行
内包表記
中置(なかおき)演算子 -> [中置(ちゅうち)演算子]
[名前空間]
は行
配列
派生型
パターン(マッチ)
パッケージ
ハッシュマップ -> 辞書
パッチ
パブリック変数 -> 公開変数
パラメーター -> 引数
パラメトリック多相
反変
比較
- [比較演算子]
- [比較可能型]
非公開変数
標準
- 標準出力
- 標準入力
- 標準ライブラリ
副作用
コードが外部の可変状態を読み書きする/しないこと。
複素数 -> [Complex]
[浮動小数点数] -> [Float]
プライベート変数 -> [非公開変数]
ブール代数 -> [Bool]
プロシージャ
引数
部分型付け -> [サブタイピング]
[不変]
Ergにおいては、オブジェクトがその内容を変えないこと。
- [不変オブジェクト]
- [不変型]
- [不変参照]
篩型
既存の型に述語式の形で制約を課した型。{I: Int | I <= 10}
(10より小さいInt型)など、よりきめ細かい指定ができる。
Ergは篩型をサポートしている。
[ブロック]
分解代入
変数
ボトム
- ボトム型 -> [{}]
- ボトムクラス -> [Never]
[ポリモーフィズム]
ま行
前置(まえおき)演算子 -> 前置(ぜんち)演算子
マーカー型
無名関数
ミュータブル -> [可変性]
[ムーブ]
メソッド
メタキャラクタ
モジュール
[文字列] -> [Str]
戻り値
や行
幽霊型
要求属性
[要素]
[呼び出し]
ら行
[ライブラリ]
ラムダ式 -> 無名関数
ランク
リテラル
量化
レイアウト
列挙型
レコード
- [レコード型]
- レコード多相 -> [列多相]