web-dev-qa-db-ja.com

科学的プログラミング言語はなぜ奇妙なのですか?

科学と工学での使用を意図したプログラミング言語は、汎用言語と比較して一貫して奇妙なようです。私の頭の上のいくつかの例:

  • Matlabでは、各関数を個別のファイルに配置する必要があります
  • Rでは、他のほとんどすべての言語で=とは対照的に、<-は代入演算子です。
  • Matlab、R、Juliaなどはすべて1インデックスです
  • Matlabはコメントに%を使用し、標準の#または//ではありません

もちろん、これらの言語にはすべて実際により自然な行列表記などの科学的アプリケーションでの使用を容易にするいくつかの設計機能があります。それでも、これらすべてが不可解にこれらの奇妙な選択をすべて行いますが、これは何も簡単ではなく、言語設計者が他の言語の99%が行うことを選択した場合に簡単に回避できたはずです。ベンダーロックインの理由は何ですか?幅広いソフトウェア開発コミュニティとの連絡がないのですか?他に何か?

私は this スレッドを読み、説明が満足できるものであるとは思いませんでした。 Rが科学的言語として設計されたからといって、規則を完全に無視してhadしたからといって、=の代わりに<-を使用する必要はありません。

9
haroba
  • さまざまな規則があります。数学、論理、応用科学における慣習、ITにおける慣習。最初のものははるかに古いです。
  • 科学言語は、ユーザーの生活をより便利にするために作られています。ユーザーは科学者と見なされ、実際に何か新しいことを学ぶ必要なく、アルゴリズムを時々実現したり、理論をチェックしたりできます。したがって、科学者向けの言語は、IT以外の標準に準拠している必要があります。 IT担当者向けではありません。彼らは他の基準に達しており、対象の聴覚のためにそれは良いです。優れたSW UIと言語はSW UIであるため、コーダーではなくユーザーのニーズに基づいて実行する必要があります。
  • 当社のIT標準は業界標準です。 ITは業界です。科学は産業ではありません。科学者たちはそれを誇りに思っています。そして、彼らはしぶしぶ私たちの慣習から彼らのものに何でも取り入れるでしょう。そして、彼らは標準をまったく好きではありません。そして、誰も外国の基準を好まない。したがって、誰かがIT基準を尊重する科学的言語を作成する場合、客観的により便利であったとしても、対象の聴覚が嫌いであるため、うまく売れなくなるでしょう。

そして、IT基準のみに従って判断する場合でも、申し訳ありませんが、どのような基準を意味しますか? APLまたはSNOBOLでprogを記述しようとしましたか?これらの2つの言語は、適切なフィールド(カウントと文字列)で最も強力なIMHOです。しかし、構文は非常に奇妙な(そして効果的な)ものです。APLコードの行を読み取るには数日かかる場合があります。一方、そのようなラインはSWの重要な部分です。安心して涙を浮かべてMathlabに戻ります。

「=」については、平等ではなく代入であることに慣れている人が多い。ところで、Pascalでは、IS等価であり、代入は ":="です。

そして、あなたは本当に平等のための==がより自然であると思いますか?反対に、=と==の混合はCプログラミングで最も一般的なエラーであり、自動制御を使用する現代のIDEでも非常に頻繁に発生します。

1からの索引付けについては、これが唯一の自然な方法です。あなたが子供だったとき、あなたは数えた詩と歌を学びました:1、2、3 ...そして0,1,2ではありません...学校の数学では、カウントは1から始まり、自然/カウント数に属していません。関数の定義がある場合にのみ、非自然なインデックスが発生します。結局のところ、0は、祖先が指を上げてから数千年後に発明されました。

0-startはより簡単に実現でき、Cの登場後すぐにITの実践に入りました。ただし、第1言語のFortranでは、1インデックスが使用されます。産業革命以前の他の言語と同じ。

そして、はい、私は0ベースのカウントの自然さに関するDyjkstraの記事を読みました。そして、彼の主張に完全に同意しません。それはミュージシャンのみにとっては自然なことです。 CとJavaコンパイラを作成する愛好家が0人でも、コードの行数を1から開始します!

21
Gangnus

1からのインデックス付けは奇妙ではなく、完全に正常で予期されるプログラマを除くです。これは、Cによる0ベースのカウントを期待するように条件付けられているためです(これは、プロセッサアーキテクチャのプロパティから条件付けられました)。

コメントは、さまざまな言語でさまざまな方法で示されます。 no標準的な方法があります。すべての言語は、まだ使用されていない記号またはダイグラフを選択します。

同様に、割り当ては奇妙で理解できない概念ですプログラマを除く;ほとんどの人は、それが=でも:=でも<-でもかまわないので、[意味]を理解するのに苦労しています(そして、彼らにとっては、実際にはより良いです) not=を使用します。これは、割り当てが同等ではないことを強調するためです-プログラマー以外がコードを理解するための最も一般的なハードルです)。

要するに、プロのプログラマー以外の人々を対象としたプログラミング言語は、それらを最も使用する人々がそれをそのように望んでいるので、異なって見えます。

16
Kilian Foth

3つの問題があります。

  1. あなたは、特定の伝統や特定の選択の正当な理由に気づいていません。
  2. 構文を重視しすぎて、セマンティクスを重視しすぎています。
  3. エンジニアや科学者は言語設計の経験がなく、構文に問題があります。

今あなたの特定のポイントに:

  • Matlabがわからないので、ファイル編成の要件についてコメントできません。 Javaでは、パブリッククラスごとに1つのファイルを使用する必要があることに注意してください。

  • Rでは、_=_は代入演算子としても使用できます。スコーピングの概念に対処するには、複数の代入演算子_<-_および_<<-_が必要であることに注意してください(_<<-_は、関数内に新しいシンボルを作成するのではなく、外部スコープ内のシンボルに割り当てます)。矢印は他の方向にも使用できるため、コードがきれいになる可能性があります:complex_calculation() -> x

  • 1ベースのインデックス付けは数学の標準であり、これはMatlabとRのユーザーがCよりも使いやすいものです。ジュリアは、より良い学習曲線を得るためにMatlabに従います。

  • コメントの_%_はTeX/LaTeXでも使用されます。 _#_は、Unixスクリプト言語とその子孫の慣例にすぎません。

また、「実際の」プログラミング言語には多くの奇妙な部分があることも無視します。 Schemeが_=_を使用しないのはなぜですか?代わりに:

_(define foo 5)
_

明らかにキャレット_*_が他の伝統でより一般的であるのに、なぜCは逆参照に_^x_を使用するのですか?

5
amon

それはあなたが他の言語に触れたことによると思います。私の頭の上から:

  • C/C++には個別のソースファイル(.c/.cpp&.h)があります。
  • ->文字はC#でラムダ式に使用されます
  • VBの古いバージョンは、デフォルトのインデックスとして1を使用していました(ただし、これはOption Baseで変更できます)
1
Robbie Dee