41

私は最近Factorを調べましたが、スタックの概念に基づいた言語を持つというアイデアは非常に興味深いものです。(これがスタック指向言語との初めての出会いでした。) しかし、そのようなパラダイムの実際的な利点は見当たりません。私には、それは価値があるよりも面倒なことのように思えます. Factor や Forth などのスタック指向の言語を使用する理由は何ですか?


ツールやライブラリが利用できるかどうかなどの要素 (しゃれを許してください) は無視しています。私は言語パラダイム自体についてのみ質問しています。

4

5 に答える 5

31

スタックの向きは実装の詳細です。たとえば、Joy は書き換えを使用して実装できます - スタックはありません。これが、「連結」または「構成」と言う方が好きな理由です。引用符とコンビネータを使用すると、スタックについて考えずにコーディングできます。

ローカル変数や名前付き引数を使用せずに、純粋な構成で自分自身を表現することが重要です。構文上のオーバーヘッドがなく、非常に簡潔です。コンポジションを使用すると、冗長性を取り除き、コードを「代数的に」操作することが非常に簡単になります。それを本質まで煮詰めます。

このポイントフリー スタイルに夢中になると、他の言語の構成構文がほんのわずかでも (たとえドットであっても) イライラするようになります。連結言語では、空白が構成演算子です。

于 2012-09-13T15:27:40.253 に答える
10

これがあなたの質問に完全に答えるかどうかはわかりませんが、Factor は何よりもまず連結言語として記述されていることがわかります。たまたま、スタックベースの実行モデルもあります。残念ながら、これについて話している Slava のブログ投稿 (? それとも Factor Wiki ?) を見つけることができません。

連結モデルとは、基本的に、「コードの塊」を渡すことを意味し (とにかく、それがプログラミング方法です)、構成は連結のように見えます。カリー化のような操作も、スタックベースの言語で簡単に表現できます。スタックに何かを追加するコードを事前に作成するだけだからです。少なくともFactorでは、これは という言葉で表現されていcurryます。これにより、高次プログラミングがはるかに簡単になり、シーケンスのマッピングは最終的に「それを行うための明白な方法」になります。私は Lisp 出身で、Factor でプログラミングした後、Lisp のような「明白なこと」ができないことに驚きましたbi。物事の表現方法は本当に変わります。

ちなみに、スタック操作全体にこだわりすぎない方が賢明です。locals語彙 (ここで説明: http://docs.factorcode.org/content/article-locals.html )を使用すると、物事をシャッフルすることを心配する必要はありません。多くの場合、ローカル変数を使用せずに物事を表現するための巧妙な方法がありますが、私はそれを 2 番目に行う傾向があります。

于 2011-04-08T12:05:51.910 に答える
7

スタックベースの言語が開発されている重要な理由の 1 つは、そのセマンティクスのミニマリズムにより、インタープリターとコンパイラーの実装が簡単になり、最適化が可能になるためです。

したがって、このようなパラダイムの実用的な利点の 1 つは、愛好家がより複雑なものやパラダイムをその上に簡単に構築できることです。

もう 1 つの例として、Scheme プログラミング言語があります。最小限の構文とセマンティクス、簡単な実装、そしてたくさんの楽しみです。

于 2011-04-11T19:05:35.050 に答える
3

一部の人々にとっては、他のパラダイムよりもスタックの管理の観点から考える方が簡単です。少なくとも、スタックベースの言語でハッキングを行うと、一般的にスタックを管理する能力が向上します。

余談ですが、ハンドヘルド電卓の初期には、逆ポーランド記法と呼ばれるものを使用していました。これは、非常に単純なスタックベースの接尾辞表記であり、メモリ効率が非常に高いものです。それを効率的に使用することを学ぶ人々は、代数計算よりもそれを好む傾向があります。

于 2011-04-08T03:22:39.203 に答える