なぜ私たちの高級言語はまだそれほど高級ではないのですか?

厳密に判断しないようにお願いします。これはHabrに関する最初の記事です。 コメントにコメントを残す方が適切であり、適切な結論を出すことをお約束します。



それで、プログラミング言語の私の最初の知り合いは学校で行われました、そしてそれはBASICでした。 それ以来、プログラミング言語を横断していません。 20年以上が経過し、現代のプログラミング言語の1つを学ぶ必要がありました。 プログラミング言語に対して私が提示したすべての基準は、その時点で定式化できましたが、C#によって完全に満たされました。 袖をまくり、それを勉強し始め、この間にプログラミング言語がどれだけ変わったかを評価する機会がありました。



見た目ではないにしても、コンセプトでは、変数、ループ、分岐演算子など、多くのことはおなじみでした...しかし、まったく新しいものがありました:OOPのクラス(フィールド、メソッド、プロパティ)、継承など

もちろん、多くの人が喜んでいました。 クラスにより、職務の配分に対処できるようになりました。 あなたはそれをします。 私を「これ」と数え、結果を報告します。 これは、環境との相互作用を非常に連想させます。 たとえば、私たちは洗濯室に入り、汚れた寝具を配って掃除しました。 私たちはスタジオに入り、パンツを用意してもらい、完成版を用意しました。 私たちはダイナーに行き、注文し、朝食を取りました。 非常に便利で明確です。

しかし、記事のトピックに戻って。 20年後、プログラミング言語でいくつかのことを期待していませんでした。



1. 0からのインデックス付け。



配列、リスト、その他のコレクションのインデックス作成が1ではなく0から始まるのは、私にとって大きな驚きでした。なぜですか? これは不快だと思いました。



それから弟にC#の基礎を学ぶのを手伝い、ここで1からではなく0から数える必要があると説明しました。彼はすでに「なぜ? これは不便です!」



それから、興味のために、私は友人や知人に、最近のプログラミング言語では(まれな例外を除いて)1ではなく0からカウントする必要があることを伝え始めました。 これは不便です!」そして、私はまだこの質問に何を答えるべきかわかりません。



以前に何らかのロジックが含まれていた場合、現在、最新のコンパイラが膨大な数のあらゆる種類の最適化を行うとき、これは意味がありません。 -1を修正することは、彼らにとって何の価値もありません。

今、プログラマーは心の中でこの修正を行わなければなりません。 しかし、問題は、作業の一部、特に日常業務を節約するためにプログラミング言語が常に繰り返されているのではないかということです。 では、なぜ0からカウントし続けるのでしょうか?



2.数値データ型。



私にとってもう一つの驚きは、多数の数値データ型でした。 何らかの理由で、長い間、1種類の数値データが残っていたはずだったように思えました。結局のところ、21世紀は庭にあったのです。 プログラマーがメモリの割り当てを気にしなくなった場合、ガベージコレクターがコレクションのサイズを動的に変更する場合は、ガベージコレクターがすべてを行います。たとえば、プログラマーの関与なしにRAMで占有されるスペースを動的に増やすなど、単一の数値データ型がまだないのはなぜですか?



まず 、この特定のケースで使用する数値データ型を常に考えるのは不便です。

第二に 、あなたは常に正しいキャストの世話をする必要があります。

第三に 、型のオーバーフローを監視する必要があります。 ところで、このため、ミサイルは落下しています。 こんにちはAriane5。この種のエラーに対して実際に70〜80億ドルで十分ですか?



3.データ型を整数と小数に分離します。



驚いた3番目のポイントは、数値データ型を整数と浮動小数点に分離したことです。

繰り返しになりますが、進歩ははるかに進んでおり、数字で操作する場合でも、これらは単一のデータ型がある数字です。



ハブにはSmalltalkに関する記事があり、Smalltalkの精度を損なうことなく計算について話しました。

精度を損なうことなく計算。 多くの言語の主な問題は、除算の精度の低下です。 たとえば、1/3は0.3333で、期間中は3です。 したがって、他の言語では、小数点以下の桁数が指定され、精度が失われます。 Smalltalkはこの問題を非常にうまく解決しました。 この除算の結果、Fractionクラス番号が取得されます。 分子(1)と分母(3)が含まれています。 つまり、そのようなものとして、分割はありませんが、分数があります。 何も失いません。 そして、以降のすべての操作は、分数を扱うための規則に従います。 10進数を取得する必要がある場合は、このオブジェクトにasFixedPoint:を指定して、必要な小数点以下の桁数で結果を取得します。 この場合、数値自体は変更されないままであり、精度を損なうことなく計算を続行できます。
それでは、分子、分母で構成され、制限に達したときに占有メモリ空間を動的に増加させる、単一のデータ型がまだないのはなぜですか?



おそらく、多くの人は「反対」のような議論をすることができます。例えば、完成したプログラムの速度の低下、コンピューターリソースへの要求の増大ですが、高レベルのプログラミング言語について話します。 私の知る限り、アセンブラーで書かれたプログラムから最高のパフォーマンスを達成することは可能ですが、今日のプログラムの総数のうちアセンブラーで書かれたプログラムの割合は何ですか? したがって、パフォーマンスは、現代のプログラミング言語で最も重要なこととはほど遠いものです。



プログラミング言語が高レベルである場合、言語のパフォーマンスをわずかに低くするのは良いことではありませんが、それを使用する際の利便性は比較にならないほど優れていますか?



このトピックを議論するために皆を招待します。 おそらく、私が単に理解していない、または考慮に入れていないことがいくつかありますか?



PS SkidanovAlexが誰であるかはわかりませんが、親切な人、私をハブに招待してくれてありがとう



All Articles