タグ付けされた質問 「history」

プログラミングとコンピューティングの歴史についての質問。

1
なぜ.NETフレームワークには、ファーストクラス型としてのクラスの概念がないのですか?
C#と.NETフレームワークは、Delphiの主任開発者であるAnders Hejlsbergによって設計された、本質的に「Javaのように書き換えられたDelphi」として始まったという歴史に詳しい人にはよく知られています。それ以来、物事はかなり分かれていますが、類似点の初期には非常に明白だったため、。 しかし、私は最近いくつかの.NETのものを見てきましたが、Delphiの最も興味深く有用な機能の1つは完全に欠落しているようです。それに慣れていない人のTClassために、Type型は.NET の型と同様に、クラスへの参照を表します。しかし、.NETがTypeリフレクションに使用する場合、DelphiはTClass言語の非常に重要な組み込み部分として使用します。クラスサブタイプ変数や仮想クラスメソッドなど、それなしでは存在しない、存在できないさまざまな便利なイディオムが可能になります。 すべてのOO言語には仮想メソッドがあり、異なるクラスがメソッドの同じ基本概念を異なる方法で実装し、その後、呼び出されたオブジェクトインスタンスの実際のタイプに基づいて実行時に適切なメソッドが呼び出されます。Delphiは、この概念をクラスに拡張します。特定のクラスサブタイプとして定義されたTClass参照がある場合(つまりclass of TMyClass、変数が継承する任意のクラス参照を受け入れることができますがTMyClass、階層スコープの外部ではない)それは、クラスの実際の型を使用して、インスタンスなしで呼び出すことができます。たとえば、このパターンをコンストラクターに適用すると、Factory実装が簡単になります。 .NETには同等のものはないようです。クラス参照(特に仮想コンストラクタや他の仮想クラスメソッド!)と同じくらい便利なのに、なぜそれらが取り残されたのかについて何か言いましたか? 具体例 フォームの逆シリアル化 Delphi VCLはDFM、コンポーネント階層を記述するためのDSL である形式でフォームを保存します。フォームリーダーがDFMデータを解析すると、次のように記述されているオブジェクト間で実行されます。 object Name: ClassName property = value property = value ... object SubObjectName: ClassName ... end end ここで興味深いのはそのClassName部分です。各コンポーネントクラスは、その時点でTClassコンポーネントストリーミングシステムに登録しinitializationます(静的コンストラクターは、わずかに異なるだけで、起動時に直ちに発生することが保証されています)。これにより、クラス名をキーとしてstring-> TClassハッシュマップに各クラスが登録されます。 各コンポーネントはから派生しTComponent、単一の引数をとる仮想コンストラクタを持ちますOwner: TComponent。どのコンポーネントもこのコンストラクタをオーバーライドして、独自の初期化を提供できます。DFMリーダーはクラス名を読み取ると、前述のハッシュマップで名前を検索し、対応するクラス参照を取得し(または、存在しない場合は例外を発生させます)、仮想TComponentコンストラクターを呼び出します。これは、登録関数がTComponentから派生するために必要なクラス参照を取得し、適切なタイプのオブジェクトが作成されるためです。 これがないと、WinFormsの同等物は...まあ...それを率直に言って大きな混乱であり、新しい.NET言語が独自のフォーム(デ)シリアル化を完全に再実装する必要があります。考えてみると、これは少し衝撃的です。CLRを持つことの全体的な目的は、複数の言語で同じ基本インフラストラクチャを使用できるようにすることなので、DFMスタイルのシステムは完全に理にかなっているでしょう。 拡張性 私が書いたイメージマネージャークラスには、データソース(イメージファイルへのパスなど)を提供し、コレクションにはないがデータソースでは使用可能な名前を取得しようとすると、新しいイメージオブジェクトを自動的に読み込みます。class ofベースイメージクラスとして型付けされたクラス変数があり、作成される新しいオブジェクトのクラスを表します。デフォルトが付属していますが、特別な目的で新しい画像を作成する場合、画像をさまざまな方法で設定する必要があるという点がいくつかあります。(アルファチャネルなしで作成する、PNGファイルから特殊なメタデータを取得してスプライトサイズを指定するなど) これは、大量の構成コードを記述し、新しいオブジェクトを作成する可能性のあるすべてのメソッドに特別なオプションを渡すことで実行できます...または、仮想メソッドをオーバーライドするベースイメージクラスのサブクラスを作成することもできます。問題のアスペクトが構成された後、try / finallyブロックを使用して、必要に応じて「デフォルトクラス」プロパティを一時的に置き換え、復元します。クラス参照変数を使用してこれを行うのははるかに簡単であり、代わりにジェネリックを使用して行うことはできません。

5
保護されたメモリの前にどのようにセグメンテーションフォールトをデバッグしましたか?
さて、Cのポインターでプログラミングの間違いを犯すと、いいセグメンテーションフォールトが発生し、プログラムがクラッシュし、デバッガーはどこが間違っているのかを教えてくれます。 メモリ保護が利用できなかったとき、彼らはどうやってそれをしましたか?DOSプログラマーが、ミスをしたときにOS全体をいじり、クラッシュさせるのを見ることができます。仮想化は利用できなかったため、再起動して再試行するだけでした。それは本当にそのように行きましたか?

3
なぜ論理演算子(||、&&など)の複合代入演算子がないのですか?
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 6年前に移行され ました。 ECMA-262、パート11.13によると、複合割り当て演算子の完全なリストは次のとおりです*= /= %= += -= <<= >>= >>>= &= ^= |=。 パート11.11によると、var c = a || b置くaに値をc場合はToBoolean(a)trueで、入れますbに値をcそれ以外の場合は。そのため、論理ORは合体演算子としてよく使用されます。たとえば、 function (options) { options = options || {}; } 多くの場合、上記のように、合体を使用して変数のデフォルト値を指定しますa = a || b。 複合代入演算子||=は非常に便利で、上記のコードを短く簡潔に書くことができますa ||= b。ただし、そこにはありません(ただし*=、+=および他の複合代入演算子はあります)。 問題は、なぜですか?

3
ソース管理が発明されたのはいつですか?
私は多くのバージョン管理システムを知っています:CVS、SVN、TFSなど... 私は最初の「リビジョン管理/バージョン管理システム」をグーグルで調べましたが、さまざまな矛盾する答えがありました。 ソース管理が発明されたのはいつですか?誰が発明したのですか?それは何と呼ばれていましたか?

4
最初の階層ファイルシステムは何でしたか?
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 8年前に移行され ました。 「ディレクトリとファイルを含むディレクトリ」は永遠に存在していたようですが、最初のものがあったに違いありません。
20 history 

1
定数をすべて大文字で命名するための歴史は何ですか?
すべて大文字の定数の命名規則の背後にある歴史は何ですか? 私の直感では、Cプリプロセッサから始めました。人々は、プリプロセッサマクロをすべて大文字で命名するプラクティスを開発しました。私の信念は、この慣行はその後誤解され、非プリプロセッサ定数(enums、const変数)にも適用されるように野放しにされたというものです。 プリプロセッサマクロにすべて大文字の名前を付けると、本当に便利に思えます。一般的な定数の命名は、それほどではありません(マクロ名と衝突する場合は逆効果です)。 私は基地を離れていますか?定数を大文字にする慣行はCよりも前でしたか?

2
誰が最初に非同期/待機しましたか?
Pythonは、2015年に3.5でasync / awaitコンストラクトを追加しました。Javascriptコミュニティは、数千年にわたってそれに向かって一歩を踏み出し、最終的に2017年にリリースされたES8のドラフトに非常によく似た実装を追加しました(私の理解から)。Typescriptは、2015年にバージョン1.7の非同期メソッドを追加しました。これは、訓練されていない目にはjs非同期メソッドとまったく同じように見えます。 C#2012年にasync / awaitの他のすべての実装のように見える非同期メソッドを追加し、2010年にF#2.0で導入されたF#の同様に動作するが外観の異なる非同期ワークフローに基づいていました。 -非同期/待機ペアを持つC#および非同期フローを持つF#。 言語コンストラクト(またはライブラリ)としてこのコンテキストで使用されているキーワードの以前の例はありますか?私の限られた情報から、誰もがC#実装の良い部分を模倣したように見えますが、C#は他の誰かからそれをコピーしましたか?

6
なぜウェブはリモートアプリケーションのスペースを獲得し、Xはそうではなかったのですか?
X Window Systemは25歳で、昨日(15日)に誕生日を迎えました。 おそらくご存知のように、最も重要な機能の1つは、Microsoft、Apple、またはWaylandのウィンドウシステムのいずれにもない方法で、サーバー側とクライアント側を分離することです。 かつて(あいまいな言い回しでごめんなさい)多くの人は、このサーバーとクライアントの分離のために、Xがウィンドウを作成する他の方法よりも支配的であり、ユーザーがクリックしてタイプする間、アプリケーションを別のサーバーで実行できると考えていました自宅で自分のコンピューター。 この使用法は明らかに残っていますが、せいぜい無視されています。サーバー上で実行されるプログラムを作成して使用する場合、ほとんどの場合、html / css / jsでWebを使用します。 なぜウェブは勝ちましたが、Xは勝たなかったのですか?Webに使用される技術(html / css / jsによる)は混乱です。すべてのバックエンドフレームワーク(Rails、Djangoおよびすべて)と組み合わせることで、実際にナビゲートするジャングルです。それでも、ウェブは創造性と進歩とともに繁栄しますが、リモートXアプリは繁栄しません。
19 history  web 

9
Windowsにまともなシェルがなかった理由は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 SOに関するトピックを読んでいた:なぜスクリプト言語(...など)がシェル言語として適していないのですか?。特にJörgW Mittagの答えが好きで、そこから興味深いことを学びましたWindows PowerShell。そのため、20年以上後、Windowsには最終的に適切に設計されたシェルがあります(Windows 1.0-1985、PowerShell安定リリース-2009)。一方、UNIXシステムには1978年のBourne Shell以降、さまざまなシェルが多数あります。MSの就職面接に関する記事を読んだことがありますが、非常に「オタクっぽい」会社の印象があります。私は、コマンドラインツールを使用してすべての作業を行うUnixの人々と比較して、なぜコマンドラインツールを必要としなかったのだろうかと考えています。
19 windows  history  shell 

6
コンピューターが非常に高価で希少で、部屋と同じくらい大きかったとき、プログラマーはどのように元に戻りましたか?
今日のように、彼らは一日中コンピューターの前に座ることができなかったと思います。それで、彼らはどのようにプログラムを書いたのですか?一枚の紙に、後でコンピューターが利用可能になったら入力しますか?彼らはどのようにテストをしましたか?
19 history 


3
ポインターが危険と見なされるようになったのはいつですか?
プログラミング言語でのポインターの使用については、ポインターが危険であると一般に受け入れられるようになった(完全な「悪」または類似の拡大ではない場合)と考えられるようになったようです。 この考え方の変化の歴史的発展は何でしたか?特定の独創的な出来事、研究、または他の開発がありましたか? たとえば、CからC ++、Javaへの移行を表面的に振り返ると、ポインタを参照で補完し、完全に置き換える傾向が見られるようです。しかし、実際のイベントチェーンはおそらくこれよりもはるかに微妙で複雑であり、それほど連続的ではありません。それらを主流言語にした機能は、おそらくずっと前に他の場所で生まれた可能性があります。 注:ポインター対参照対他の実際のメリットについては質問していません。私の焦点は、この明らかな変化の理論的根拠にあります。
18 history  pointers 

3
コマンドライン引数を「argv」と命名する規則はどこから来たのですか?
ように思えるのPython、PHP、およびRubyは、すべてのコマンドライン引数のリストを参照するために名前「ARGV」を使用します。名前「argv」はどこから来たのですか?なぜ「引数」のようなものではないのですか? 私の推測では、vは「ベクトル」を表すCに由来するものです。ウィキペディアには、次のような脚注があります。 この変数の名前のベクトル用語は、文字列を参照するために従来の意味で使用されます。 ただし、この情報のソースはありません。本当に、さらにさかのぼるルートがあるかどうか興味があります。Cがそれを使用したのは、その前の何かがそれを使用したからですか

2
Cが人気のTIOBEインデックスでそれほど高いのに、なぜC ++もすぐ下にあるのに、それほど人気が​​ないのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 これを回避することはできません。Cがそれほど使用されているが、CはC ++ではない場合、CをC ++よりも使用する最も重要な理由を誰かが説明できますか?このCコードはすべてどこで書かれていますか? これは、命令型プログラミングに大きく依存しているが、C ++コンパイラの実装または調整のコストをサポートできない産業部門に関するものですか?多くのカーネルハッカーがいますか? チオベは関連していますか?私は決して記事につまずかず、単一のTiobeのランキングがどのようになっているのか、業界の本当のニーズを特定するために、業界が好きなものについて実際に何を言っているのか、業界が実際に何を使用しているのかをコメントしたり説明したりしませんでした。説明するのは難しいです。 多くの企業が、C / C ++の仕事がくだらないとしても、CまたはC ++の仕事ではなく、C#、PHP、Javaの仕事を望んでいるのは奇妙だと思います(失業とインタビューをここで関連付けているだけです)。代わりにそれらを取るでしょう。または、これは言語の誇大宣伝がここで強力な役割を果たすことを意味しますか?

3
なぜ5人の食事哲学者なのか?
私はなぜ食事哲学者の問題が5人の哲学者の事例に基づいているのかと思っていました。なぜ4つではないのですか? 私たちは4人の思想家を与えられたときにも5人の哲学者の例を議論するときに発生する可能性があるすべての不快な問題を観察できると思います。それは歴史的な理由だけですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.