最小限の開発アプローチに従うプログラミング言語はありますか?


26

言語が商用ソフトウェアと同じと見なされる場合、新しいリリースを正当化するために常に新しい機能を追加する必要が常にあることがわかります。

バージョン1.0が最終バージョンである言語は存在しますか、または存在しますか?もちろん、バグ修正はこれを免除されますが、機能セットは常に同じままですか?

この方法では、言語のすべての機能がうまく適合し、後方互換性のために廃止された機能がまだ残っているという事実の後にボルトで固定されているようには見えません。

いくつかの学術言語はこのようなものだと思いますか?しかし、この考えに従って商業的に成功した言語はありますか?付属のライブラリも新しい機能を無料で入手できますが、言語は常に一定です。

私が挙げることができる一例は、私がよく使用するお気に入りの言語C#の1つです。リリースごとにますます多くの機能が追加されています。これらを活用するには、些細な概念を取り上げてそれらを組み合わせてより複雑な問題を簡単に解決するのではなく、実際のタスクを手元に落とし、これらの学習にかなりの時間を費やさなければなりません。

だから私は、すべてが一貫し、理にかなっており、可能な限り直交するミニマリストのアプローチを探していると思います。


7
ほとんどの開発者の作業分野は、効果的な方法で問題を解決することです。有効性には、常に新しいことを学ぶことが必要です。新しい言語機能、新しいフレームワーク、新しいツールがより効果的に開発されています。それらを学ぶことで、実際にあなたの仕事に集中しています。
アルセニムルゼンコ

4
プログラミングをする人が必ずしもフルタイムのプログラマーであるとは限りません。これは、他の多くの職業の単なる別のツールです。
ジョーンベンジ

4
そして、再び、誰もあなたに何かを学ぶことを強制しません。C#1.0が要件を解決する場合、必要のないものを学ぶのに時間を無駄にしないでください。
アルセニムルゼンコ

11
質問は正当だと思います:なぜKISSとYAGNIの原則をソフトウェアのアーティファクトに適用し、プログラミング言語には適用しないのですか?言語に十分なコア機能がある場合、さらなる開発は主にマーケティング(企業に顧客を維持するための機能を言語に詰め込ませる他の言語との競合)によるものです(IMHO)。
ジョルジオ

2
@MainMa:「効果を上げるには、常に新しいことを学ぶ必要があります。」:機能が多すぎる複雑なプログラミング言語は、効果を高めるのではなく低下させる可能性があります。たとえば、チームでは、言語のさまざまなサブセットを使用するさまざまな開発者につながり、コードレビュー、バグ修正、およびメンテナンスの効率を低下させる可能性があります。
ジョルジオ

回答:


32

Lisp、Smalltalk。偶然にも、これらは全体の中で最高の言語でもあります。

LispとSmalltalkはどちらも強力な統一メタファーを中心に構築された言語です。Lispの比phorは「すべてがリストであり、このリストはデータとコードの両方を(関数として)表す」です。Smalltalkの比phorは、「すべてがオブジェクトです。動作を呼び出す唯一の方法は、メッセージをオブジェクトに渡すことです」です。これらの比phorにより、言語は安定し、最小限で強力になります。残りはライブラリにあります。

すべての非最小(「肥大化した」)言語で「制御構造」と呼ばれるものは、ここのライブラリの一部です(例:condlispの関数; ifTrue:/ ifFalse:Smalltalkのメッセージファミリは両方とも条件付き、他の言語にはifキーワードがあります)。

Lisp / Smalltalkは、パラダイムのほぼ最小の実施形態であり、それ以上のものではないことがわかります(Lisp:関数型プログラミング; Smalltalk:オブジェクト指向プログラミング)。


4
優れたLisp実装はCと競合でき、優れたSmalltalk実装はC ++と競合できます。地球上で最速のオラクルのHotSopt JVMであるHeck Smalltalk VMであり、最適化のために静的な型情報さえ使用しません。
ヨルグWミットタグ


9
この答えは小さすぎて建設的ではありません。詳細または裏付けとなる証拠がない。
ジミーホファ

2
-1 Lisp? LISP?マジ?1970年代のLISP戦争の後、LISPユニティ、そして最後に Common Lispを繰り返し試みましたか?いいえ、LISPでさえ1.0で「完了」しませんでした。
ロスパターソン

1
あなたは非常に重要なアイデアを指摘したと思います:言語は、1つ(または少数)の強力で統一されたメタファーを中心に構築する必要があります。一部の言語の複雑さは、部分的にこのような比partiallyがないためだと思います。これらの言語は、基礎となる統一されたビューを持たないため、新しい機能を組み込むことで成長し続けます。
ジョルジオ

6

植字システムであるTeXは、バージョン3以降非常に安定しています。

バージョン3以降、TeXは、バージョン番号が漸近的にπに近づくように、10進数の末尾に追加の数字を追加することで更新が示されている特異なバージョン番号付けシステムを使用しています。これは、TeXが非常に安定しており、マイナーアップデートのみが予想されるという事実を反映しています。TeXの現在のバージョンは3.1415926です。バージョン3.0以降はデザインが凍結され、新しい機能や基本的な変更は追加されないため、すべての新しいバージョンにはバグ修正のみが含まれます。Donald Knuth自身がTeXを改善できる可能性のあるいくつかの領域を提案しましたが、彼は、新しい機能を導入するよりも、現在および将来同じ出力を生成する変更されていないシステムを持つことが重要であると固く信じていることを示しました。このため、彼は「

「それで、すべてが一貫していて、理にかなっていて、可能な限り直交するミニマリストのアプローチを探していると思います。」声明、しかしそれはあなたの他の基準のほとんどを満たします。


6

CとFortranは、思い浮かぶ言語です。これらは非常に安定しており、構文は簡単に頭の中に収まります。自分で悪いコードを書く以外に、これらの言語を使用するときのサプライズはほとんどありません。しかし、私はそれらを迅速なアプリケーション開発のための優れた言語として保持しません。

私は、言語に少し時間をかけると、表現力を維持しながら仕事がかなり簡単になり、コードが複雑にならない機能を備えた言語の急速な進歩を好みます。


1
Cのミニマルなデザインに同意します。この言語が長年にわたって更新されたとしても、その言語の基本的なデザインとプログラミングモデルは依然として認識可能です(他の言語は5〜10年ごとに革命を起こします)。もちろん、Cは特定のアプリケーションドメイン(デスクトップアプリケーション、Webアプリケーションなど)で他の言語に置き換えられているため、以前は汎用言語ではありませんでした。
ジョルジオ

@Giorgio:すべてではありません。最小のもの(私が言ったようなもの)はそうではありません。Smalltalkの構文は、Squeakによって持ち込まれたものを除いて、Smalltalkの構文に変更はありませんでした。中括弧で計算された配列です。ライブラリは、コア(BehaviorおよびCollection階層)でも非常に安定しています。私には、C89、C99、その他すべてでCの安定性がはるかに低いようです。
ハービー

1
@herby:あなたはおそらく、Smalltalkのような他の言語がCよりも安定していることは正しいでしょう。しかし、Cの基本的なプログラミングモデルは、たとえば20年前と同じです。他の言語には大きな変化があります。したがって、Cが最も安定した言語であるとは言いませんが、IMOは他の多くの主流言語よりもはるかに安定しています。
ジョルジオ

6

他の人はすでにLispを言っているので、私はForthを育てなければなりません。実装は非常に簡単であり、言語のルールに従うのは簡単です。

「単語」の辞書を備えたスタックベースの言語です。継承機能を使用して、言語を簡単に拡張できます。

カメのグラフィックの非常に簡潔な例:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

次に、それを実行すると以下: squiral -50 50 g 20 0 do 100 f 21 t loop ;が得られます:

スパイラル

このMicrosoft従業員のブログの功績です。


1
これはどのように再び支持されましたか?Forthは良い候補かもしれませんが、与えられた例は実行可能な回線ノイズよりもはるかに優れていません。PLTが簡潔さを重視する理由の代表的な例は、専門家が実際に必要とするものに反することです。
Telastyn

4
@Telastynそれは彼の質問ではありませんでした。
オースティンヘンリー

4

Lispについて言及しましたが、私が知っている最もミニマルな言語はschemeです。大学のコースでそれを理解するのに苦労しました。しかし、それはプログラミングについての私の考え方を変え、そしてそれは非常に最小限です。構文全体としては、括弧()とスペースが最小限です。

言語の変化だけのようなプリミティブに変換することを決定した+define組み込みコマンドに(といくつかの他を)。つまり、起動時に使用できますが、実行時に再定義できます。


2

そもそもミニマリストになるように設計されたTcl

そこからページhttp://www.tcl.tk/about/features.htmlについて、その特徴の1つは、習得が非常に簡単であり、カジュアルなプログラマーまたはプログラマー以外でも使用できることです。


3
これは私には正確に聞こえますが、サポート情報や詳細のない単一行の回答は質が低すぎて誰にとっても役に立ちません。いくつかの良い詳細を追加してください(要約のないリンクだけでなく)、私から賛成票をもらいます
ジミーホファ

わかりました、閉じられた質問のために、しかし、どれだけの努力の価値がわからないのでしょうか
エグリアン

1
運が良ければ、投票から再開されます。いい質問ですね。コミュニティによってすぐに再オープンされない場合は、Metaに投稿して再オープンを試みます。
ジミーホファ

私は同意し、私は私が仕事を降りたらポストにもっと追加する予定、私は、関連リンクを見つけることで任意の迅速な運を持っていないです
Egryan

「TCL言語のケーススタディ」、「Tcl:埋め込み可能なコマンド言語」、およびtcl.tk/about/history.htmlで googleを検索します -それらはいくつかの重要なポイントを与えます。しかし、彼らがOPの望みを裏付けているかどうかはわかりません-TCLは元の1.0から拡張されているようです(wiki.tcl.tk/1721を参照)

2

難解な 1回限りの言語以外での開始は望ましいものではないため、比較的変更されていない言語はほとんどありません(Befungeで意味のある何かを書きたくありません(元の1.0から変更されていますが)リリース))。

新しいことを何も学ぶ必要がないという欲求を満たす可能性が最も高い言語は、他のプログラム間の「接着」に特化した言語です。jclbashなどの言語。単純なスクリプト言語もこれに該当する可能性があります-awkはリーダーの1つです。

この領域を離れると、開発が行われます。言語またはフレームワークのいずれか。状況によっては、フレームワークの一部をすばやく取得せずに言語用にコーディングすることは「困難」です。

多くの言語には、ある程度の下位互換性があります。おそらくお勧めできませんが、Java 1.4を今でも作成できます。人々がJava 1.4用に書いているフレームワークは、言語よりも速く変化しています。20年または40年で変更されていない言語仕様については、f77およびf90コンパイラを見つけることができます。C、Objective C、C ++は、言語の古い仕様に合わせてコーディングできます。新しい仕様がリリースされたり、新しいフレームワークが公開されているため、コードを更新し続ける必要はありません。

一部の言語には、言語自体が必要な処理を実行するのに十分なほど強力であるため、かなり長い歴史があります。Lispは、この分野の最有力候補です。Forthは「あまり変化していない」領域にも該当します。

より伝統的なスクリプト言語に進むには、TCL、Perl、Pythonを見てください。何らかの理由で人気急上昇を経験している「流行」の領域にあるものを避けてください(ルビーとジャバスクリプト、私はあなたを見ています)。TCL は長年にわたって変化していますが、その目標の1つは、設計の一貫性を維持することです。最新のPerlとPythonはどちらもデザインに一貫性がありますが、確かに新しい機能は使いこなすことができます(ただし、使用する必要ありません)。


2

Pythonは、設計目標の1つとしてミニマリズムを備えた言語の合理的な候補だと思います。これは、コアコンセプトの比較的少数の周りに基づき、およびバージョン3は、とりわけ、にしようとしています言語を少し簡略化することにより、削除するいくつかの機能を。

(確かに、それはバージョン1から変わらなかった機能セットと同じではありませんが、言語作成者はいつでもバージョン1を呼び出すことができるので、言語を評価するのはかなりarbitrary意的な方法だと思います。)


2012年12月の回答日には無料パスが与えられます。それ以降、Python 3として知られる極悪非道があり、C ++に匹敵するゴミの山を追加する一方で、実際には単純さを排除しているためです。これは、コンピューティングで最も無関係なアドオンの言語の1つです。
トーマスブラウン

-1

「ミニマリスト」設計アプローチはTclによって例示されると思います。例として、{catch}コマンドを{return -code n}値とともに使用して、想像力が想像できる制御構造を実装できます。Perlは{switch}-(そのPerlではなく)これまで必要だった)。また、Dodekalogue http://wiki.tcl.tk/10259がTclの文法を完全にカバーしていることがわかります。残りは、使用したいプログラミングパラダイムが何であれ、この文法で表現できます。


これだけでポイントが作られたとで説明を繰り返す答えは 2年前の投稿
GNAT

元の投稿を参照すると、直交性=履歴(C言語のファミリー)と最近の言語間の同化のみが言えると思います。OS言語全体で、一般化されたMVC Webフレームワーク、コルーチン、&cへのすべての言語のアプローチを見てきました。その傾向以外に、C11にクロージャーが追加されたことと、今後のJavaラムダ(どちらもOSの「スクリプト」言語の開発を反映している)に注目することができます。
user132043
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.