厳密なプログラミング言語とは、厳密な関数(パラメータが呼び出される前に完全に評価される必要がある関数)のみをユーザーが定義できるプログラミング言語です。厳密でないプログラミング言語では、ユーザーが厳密でない関数を定義できるため、遅延評価が許可される場合があります。 ほとんどの厳密でない言語では、非厳密性はデータ コンストラクターにまで及びます。
説明
厳密なプログラミング言語は、厳密なプログラミングパラダイムを採用したプログラミング言語であり、ユーザーは厳密な関数(パラメータが完全に評価されてからでないと呼び出されない関数)のみを定義できます。非厳密なプログラミング言語では、ユーザーは非厳密な関数を定義できるため、遅延評価が可能になります。[1]
非厳密性にはいくつかの欠点があり、それが広範囲にわたる採用を妨げている: [要出典]
- 式が評価されるかどうか、またいつ評価されるかが不確実であるため、非厳密な言語が有用であるためには、一般に純粋に関数型でなければなりません。
- 一般的に使用されているすべてのハードウェア アーキテクチャは厳密な言語用に最適化されているため、非厳密な言語用の最適なコンパイラは、厳密な言語用の最適なコンパイラよりも遅いコードを生成します。
- 非厳密なプログラムの空間計算量は理解および予測が困難です。
- 多くの厳密な言語では、マクロやサンクを使用することで、非厳密な関数のいくつかの利点を得ることができます。
厳密なプログラミング言語は、多くの場合、積極的な評価と関連付けられ、厳密でない言語は、遅延評価と関連付けられますが、それぞれの場合に他の評価戦略が可能です。 [引用が必要]「積極的なプログラミング言語」と「遅延プログラミング言語」という用語は、それぞれ「厳密なプログラミング言語」と「非厳密なプログラミング言語」の同義語としてよく使用されます。[引用が必要]
例
現在一般的に使用されているプログラミング言語はほぼすべて正格です。[要出典]例としては、C#、Java、Perl (すべてのバージョン、つまりバージョン 5 とバージョン 7 まで)、Python、[2] Ruby、Common Lisp、およびMLなどがあります。一部の正格なプログラミング言語には、遅延評価を模倣する機能が含まれています。[要説明] Raku (旧称 Perl 6) には遅延リストがあり、[3] Python にはジェネレータ関数があり、[4] Juliaは非正格な関数を構築するためのマクロシステムを提供し、[5] Schemeも同様です。
非厳密な言語の例としては、Haskell、R、Miranda、Cleanなどがある。[6]
拡大
ほとんどの非厳密言語では、非厳密性はデータ コンストラクタにまで及びます。これにより、概念的に無限のデータ構造 (すべての素数のリストなど) を、通常の有限のデータ構造と同じ方法で操作できます。また、チェスの完全なゲーム ツリーなど、非常に大きいが有限のデータ構造を使用することもできます。
引用
- ^ スコット2006、541ページ。
- ^ Lott, Steven (2015).関数型 Python プログラミング. バーミンガム、イギリス: Packt Publishing. p. 35. ISBN 978-1-78439-699-2Python
は厳密な評価に重点を置いています
- ^ 「Raku プログラミング/Lazy リストとフィード - Wikibooks、オープンな世界のためのオープンな本」。en.wikibooks.org 。2021 年 2 月 9 日閲覧。
- ^ Lott, Steven (2015).関数型 Python プログラミング. バーミンガム、イギリス: Packt Publishing. p. 35. ISBN 978-1-78439-699-2ジェネレータ関数
は非厳密です。[...] ジェネレータ関数を利用して遅延評価を作成できます。
- ^ Innes, Mike J. (2021-02-06)、MikeInnes/Lazy.jl 、 2021-02-09取得
- ^ クルーエット&ハル 1998年、25~26頁。
参考文献
- スコット、マイケル・リー(2006)[1999]、マクファデン、ネイト、他(編)、プログラミング言語語用論、第2巻、デニス・ペンローズ(第2 版)発行、サンフランシスコ:モーガン・カウフマン、ISBN 9780126339512、OCLC 551774322 、 2014年11月21日閲覧
- Cluet, Sophie; Hull, Rick; et al., eds. (1998) [1997], データベースプログラミング言語、コンピュータサイエンスの講義ノート、第1369巻、ベルリン、ハイデルベルク:Springer、ISBN 9783540648239、ISSN 0302-9743、OCLC 873553545 、2014年11月21日閲覧
