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

9
「ワンリターンのみ」という概念はどこから来たのですか?
「同じメソッドに複数のreturnステートメントを入れないでください」と言うプログラマーとよく話します。理由を教えてもらうと、「コーディング標準がそう言っている」または「わかりにくい」だけです。単一のreturnステートメントでソリューションを表示すると、コードが見苦しくなります。例えば: if (condition) return 42; else return 97; 「これは見苦しいです。ローカル変数を使用する必要があります!」 int result; if (condition) result = 42; else result = 97; return result; この50%のコードの肥大化により、プログラムが理解しやすくなりますか?個人的には、簡単に防ぐことができた別の変数によって状態空間が増加したため、私はそれが難しいと感じています。 もちろん、通常は次のように書きます。 return (condition) ? 42 : 97; しかし、多くのプログラマーは条件演算子を避け、長い形式を好みます。 この「一回限りの帰り」という概念はどこから来たのでしょうか?このコンベンションが生まれた歴史的な理由はありますか?


2
Mars Curiosity Roverのソフトウェアは何に組み込まれていますか?
火星好奇心の探査車が正常に上陸した、とプロモーションビデオ「恐怖の7分」の一つは、コード50万行あることについてが自慢します。それは複雑な問題であり、間違いありません。しかし、それは多くのコードであり、確かにその背後にはかなり大きなプログラミング努力がありました。このプロジェクトについて誰か知っていますか?ある種の埋め込みCであるとしか想像できません。

4
ソビエト連邦の宇宙計画で使用されたソフトウェアプログラミング言語は何ですか?
私はソビエトの宇宙プログラムに興味を持ち、1988年頃のブラン宇宙船のソフトウェアがPrologで書かれていることを発見することに興味がありました。 初期のミッション、特に1970年代初頭のMars PrOP-Mローバーミッションでどの言語が使用されていたのかを知っている人はいますか? 編集 Buran Prologの私のソースは、1990年5月のCIAサイトからの機密解除されたドキュメントです。OCRバージョンが見つかりませんでした。0449: オープンソースの文献によると、ソビエト連邦はフランスで開発されたPrologとして知られるプログラミング言語を使用して、ブラン車用のオンボードシステムソフトウェアを開発しました...

7
Cプログラミング言語が登場したとき、それは低レベル言語と見なされていましたか?
現在、Cは低レベル言語と見なされていますが、70年代に低レベル言語と見なされていましたか?この用語は当時も使用されていましたか? 多くの一般的な高レベル言語は80年代半ば以降まで存在しなかったため、低レベルの性質が長年にわたって変化したかどうか、どのように変化したかを知りたいです。

6
Java 8に不変のコレクションが含まれないのはなぜですか?
Javaチームは、Java 8の関数型プログラミングの障壁を取り除くために多大な努力をしてきました。特に、java.utilコレクションの変更は、変換を非常に高速なストリーム操作に連鎖させるという素晴らしい仕事をしています。彼らがコレクションにファーストクラスの関数と機能メソッドを追加するのをどれだけうまくやったかを考えると、なぜ彼らは不変のコレクションや不変のコレクションのインターフェースを提供することに完全に失敗したのでしょうか? 既存のコードを変更せずに、Javaチームはいつでも変更可能なインターフェイスと同じ不変インターフェイスを追加し、「set」メソッドを削除して、既存のインターフェイスを次のように拡張できます。 ImmutableIterable ____________/ | / | Iterable ImmutableCollection | _______/ / \ \___________ | / / \ \ Collection ImmutableList ImmutableSet ImmutableMap ... \ \ \_________|______________|__________ | \ \___________|____________ | \ | \___________ | \ | \ | List Set Map ... 確かに、List.add()やMap.put()などの操作は現在、指定されたキーのブール値または前の値を返し、操作が成功したか失敗したかを示します。不変のコレクションは、そのようなメソッドをファクトリーとして扱い、追加された要素を含む新しいコレクションを返す必要があります-これは現在の署名と互換性がありません。ただし、ImmutableList.append()または.addAt()およびImmutableMap.putEntry()などの別のメソッド名を使用することで回避できます。結果として得られる冗長性は、不変のコレクションを操作する利点よりも重要であり、型システムは間違ったメソッドを呼び出すエラーを防ぎます。時間が経つにつれて、古いメソッドは廃止される可能性があります。 不変コレクションの勝利: シンプルさ-基礎となるデータが変更されない場合、コードについての推論は簡単です。 ドキュメンテーション-メソッドが不変のコレクションインターフェイスを取る場合、そのコレクションを変更しないことを知っています。メソッドが不変のコレクションを返す場合、変更できないことを知っています。 並行性-不変コレクションはスレッド間で安全に共有できます。 不変性を前提とする言語を味わった人として、Wild延する突然変異のワイルドウエストに戻ることは非常に困難です。Clojureのコレクション(シーケンス抽象化)には、Java ...

14
0はなぜ偽ですか?
この質問は馬鹿げているように聞こえるかもしれませんが、ほとんどのプログラミング言語が0評価されfalse、他の[整数]値が評価されるのはなぜtrueですか? 文字列比較 質問は少し単純すぎるように思えるので、もう少し説明します。まず、プログラマーにとっては明白に思えるかもしれませんが、なぜプログラミング言語がないのか-実際にはあるかもしれませんが、私は使用しました-どこに0評価しtrue、他のすべての[整数]値を評価しfalseますか?その発言はランダムに見えるかもしれませんが、私はそれが良いアイデアだったかもしれないいくつかの例を持っています。まず、文字列の3者間比較の例を取り上げましょstrcmpう。Cを例に取ります。C 言語を最初の言語として試すプログラマーは、次のコードを書きたくなるかもしれません。 if (strcmp(str1, str2)) { // Do something... } 文字列が等しいときに評価されるstrcmp戻り値なので、最初のプログラマーがやろうとしたことは惨めに失敗し、一般的に最初はなぜか理解できません。していたために評価上記1 - -代わりに、この関数はその最も単純な式で使用されている可能性が平等を比較するとき、およびのための適切なチェックとは、必要なときにのみ行われていたであろう。ほとんどの場合、戻り値の型を(私たちの考えでは)考えていたでしょう。0false0true-11bool さらに、sign値-1、0およびのみを受け取る新しいタイプを導入しましょう1。それはかなり便利です。C ++に宇宙船オペレーターがあり、それを望んでいると想像してくださいstd::string(まあ、既にcompare関数はありますが、宇宙船オペレーターはもっと楽しいです)。現在、宣言は次のようになります。 sign operator<=>(const std::string& lhs, const std::string& rhs); していた0ために評価されtrue、宇宙船演算子は存在さえしないだろう、と私たちは宣言している可能性がoperator==そのように: sign operator==(const std::string& lhs, const std::string& rhs); これoperator==は3者間比較を一度に処理し、必要に応じてどの文字列が辞書的に優れているかを確認しながら、次のチェックを実行するために使用できます。 if (str1 == str2) { // Do something... } 古いエラー処理 現在、例外があるため、この部分は、そのようなものが存在しない古い言語(Cなど)にのみ適用されます。Cの標準ライブラリ(およびPOSIXのライブラリ)を見ると、maaaaany関数0が成功すると必ず戻り、それ以外の整数は必ず戻ります。悲しいことに、このようなことをする人を見たことがあります。 #define TRUE 0 // ... if ...

14
現代の主流のプログラミング言語でラムダ関数の人気が高まったきっかけは何ですか?
過去数年で、匿名関数(ラムダ関数)は非常に人気のある言語構成要素になり、ほぼすべての主要な/主流のプログラミング言語がそれらを導入するか、標準の次の改訂で導入する予定です。 しかし、匿名関数は、数学とコンピューターサイエンス(1936年頃に数学者のアロンゾ教会によって発明され、1958年からLispプログラミング言語で使用された、たとえばここを参照)で非常に古く、非常によく知られた概念です。 では、なぜ今日の主流のプログラミング言語(その多くは15年から20年前に生まれたもの)が、最初からラムダ関数をサポートし、後で導入しただけだったのでしょうか? そして、ここ数年で匿名機能が大々的に採用されたきっかけは何ですか?この現象を引き起こした特定のイベント、新しい要件、またはプログラミング手法はありますか? 重要な注意点 この質問の焦点は、現代のメインストリーム(したがって、いくつかの例外を除いて、機能しない)言語での匿名関数の導入です。また、匿名関数(ブロック)は関数型言語ではないSmalltalkに存在し、通常の名前付き関数はCやPascalなどの手続き型言語にも長い間存在していることに注意してください。 「機能的なパラダイムの採用とその利点」について話すことによって、あなたの答えを一般化しすぎないでください。これは問題のトピックではないからです。


11
「goto」ステートメントはどのようなバグにつながりますか?歴史的に重要な例はありますか?
ループに入れ子になったループから抜け出すために保存することを理解しています。このgotoステートメントは回避され、バグが発生しやすいプログラミングスタイルとして悪用され、決して使用されることはありません。 代替テキスト: 「ニール・スティーブンソンは自分のラベルに「dengo」という名前を付けるのはかわいいと思っている」 オリジナルのコミックを参照:http : //xkcd.com/292/ 私はこれを早く学んだからです。どんな種類のバグがgoto実際につながるのかについての洞察や経験は本当にありません。ここで何を話しているのか: 不安定? 維持不能または読み取り不能なコード? セキュリティの脆弱性? 完全に何か他のもの? 「goto」ステートメントは実際にどのようなバグにつながりますか?歴史的に重要な例はありますか?

3
プログラミング言語、特にCでは、中括弧ではなく中括弧を使用するのはなぜですか?
「Cスタイル言語」の定義は、実際には「中括弧({})を使用する」まで簡略化できます。なぜその特定の文字を使用するのですか(そして[]、少なくともUSキーボードではShiftキーを必要としないなど、より合理的な文字を使用しないのはなぜですか)。 これらの中括弧からプログラマの生産性に実際の利点はありますか、または新しい言語設計者が代替手段(つまり、Pythonの背後にいる人)を探す必要がありますか? ウィキペディアは、C が前述のブレースを使用しているが、その理由を説明していないと言っています。Cベースのプログラミング言語のリストに関するウィキペディアの記事の声明は、この構文要素がやや特別であることを示唆しています。 大まかに言って、Cファミリー言語は、Cに似たブロック構文を使用する言語です(ブロックの開始と終了のための中括弧を含む)...


2
JavaScriptとは何ですか?
これはすべて、W3C HTML ValidatorのようなJavaScript準拠のWebページをテストする方法を探していたときに始まりました。まだ見つけていません。何か知っているなら教えてください... 公式のJavaScriptページを探して、ECMA Scriptを見つけました。これらの人々はスクリプト言語を標準化しており(JavaScriptをもう呼び出す気はありません!)、それをECMA-262(Wikipedia)と呼びました。彼らの最新の作品はEdition 5.1です JavaScriptはMozilla Corporationによって開発され、最新の安定バージョンは1.8.5(これを参照)で、ECMAのエディション5.1に基づいています リンクWikipediaのページには、方言に言及しています。MozillaのJavaScript 1.8.5は、JScript 9(IE)およびJavaScript(ChromeのV8 [ Wiki ])およびその他多くの方言としてリストされています。JavaScript 1.8.5はECMA-262の派生物であり、SpiderMonkey [ Wiki ]はそれを実行するエンジンであることを理解していますか?そして、Chromeには独自の方言があり、V8エンジンはそれを実行するプログラムですか? これらすべての方言がECMA-262に基づいているため、理解できないのは「JavaScriptとは何ですか?」真のクロスブラウザースクリプト言語はありますか?方言の相互互換性に同意するために、さまざまな実装者が集まっていますか?この取り組みはECMAですか?

4
それでは、「オブジェクト指向」という用語でアランケイが本当に意味したことは何ですか?
伝えられるところによれば、アラン・ケイは「オブジェクト指向」という用語の発明者です。そして彼はしばしば、今日私たちがOOと呼ぶものは彼が意味するものではないと言ったと引用されています。 たとえば、Googleでこれを見つけました。 「オブジェクト指向」という用語を作成しましたが、C ++を念頭に置いていなかったことがわかります。 -アラン・ケイ、OOPSLA '97 私は彼が何をしたかについてかなり洞察に満ちた何かを聞いたことを漠然と覚えています。「メッセージの受け渡し」に沿った何か。 彼の意味を知っていますか?彼が何を意味し、今日の一般的なオブジェクト指向とどのように異なるのか、詳細を記入できますか?参照がある場合は共有してください。 ありがとう。

10
アラン・ケイが「インターネットはとてもよくできていたが、ウェブはアマチュアによるものだった」と言ったのはなぜですか?
OK、だから私は言い換えました。完全な引用: インターネットは非常によくできていたため、ほとんどの人は人工的なものではなく、太平洋のような自然資源と考えています。そのような規模のテクノロジーが最後にエラーになったのはいつですか?それに比べて、ウェブは冗談です。ウェブはアマチュアによって行われました。-アラン・ケイ。 私はインターネットとウェブの歴史を理解しようとしていますが、この声明は理解するのが難しいです。インターネットは現在、設計されたものとは非常に異なるものに使用されていることを他の場所で読んだことがあります。 何がインターネットをこれほど良くし、何がウェブをこれほどアマチュアにしているのでしょうか? (もちろん、アラン・ケイは間違いがあり、ここにいる人は誰もいないので、なぜ彼がそれを言ったのか正確に知ることはできませんが、可能な説明は何ですか?) * 元のインタビューも参照してください*。

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