タグ付けされた質問 「language-agnostic」

このタグは、プログラミング言語または環境に固有ではない質問用です。

2
手順として実装されていない継続の例は何ですか?
SOに関するコールバックと継続の区別に関する興味深い議論がこの質問を促しました。定義上、継続とは、計算を完了するために必要なロジックの抽象的な表現です。ほとんどの言語では、これは継続的な処理が必要な値を渡す1つの引数プロシージャとして現れます。 純粋に関数型の言語(すべての関数が純粋でファーストクラスの市民である場合)では、継続は関数として完全にモデル化できると思います。これは、結局のところ、これまでの継続を私が以前に理解していた方法です。ただし、世界は状態(ため息)でいっぱいです。したがって、一般的な定義では、継続がプログラムの状態をキャプチャする必要はありません。 私の理解を助けるために、継続が関数よりも抽象的な方法で表現されている関数型言語で例を提供できますか?Schemeを使用すると、現在の継続をファーストクラスの方法(call / cc)で取得できることはわかっていますが、それでも、call / ccに渡される1つの引数プロシージャには、現在の継続が別の形式で与えられているようですcall / cc'd関数が結果を適用できる引数手続き。

10
次の抽象化レベルは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 プログラミング言語は最初は連続して実行されるコード行のみを使用し、抽象化の最初のレベルの1つである関数を含めるように進化したため、さらに抽象化するクラスとオブジェクトが作成されました。次の抽象化レベルは何ですか? クラスよりもさらに抽象的なものはありますか?


16
何のために文字列の反転を使用しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 PHP strrev()では、Rails .reverseではですが、ほとんどの言語には文字列の逆関数はありません。いくつかは、文字に使用できる配列反転関数を持っています。私はこれは大きな見落としだと思っていましたが、それは私に起こりました、あなたは実際に文字列リバースを何のために使用しますか? 私がそれを見たと思うことができるのは、デモとレッスンで「Hello World!」をオンにすることだけです。「!dlroW olleH」に。 私の質問は 文字列を反転する用途はありますか、それとも完全に無意味ですか? 。 補遺 私が予想していたより多くの答えがありましたが、それらすべてが完全にアカデミックなわけではありませんでした。私は誰も正当な例を思い付かせることができないお金を入れていただろう。また、新しいことを学ぶとは思いませんでしたが、Mark Canlasの正規表現の提案は素晴らしく、それを証明する機会を楽しみにしています。ありがとうございます。

4
安全なクロージャーを実装するにはガベージコレクションが必要ですか?
私は最近、プログラミング言語のオンラインコースに参加しました。このコースでは、概念の中でも特にクロージャが紹介されました。質問をする前に、このコースに触発された2つの例を書き留めて、コンテキストを説明します。 最初の例は、1からxまでの数字のリストを生成するSML関数です。xは関数のパラメーターです。 fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end SML REPLで: val countup_from1 = fn : int -> int list - countup_from1 5; val it = [1,2,3,4,5] …

4
なぜ「ヒアドキュメント」と呼ばれるのですか?
(これがこれの間違ったSEかどうかを教えてください) ヒアドキュメント(またはHeredoc)がそれを呼び出すのはなぜですか?ウィキペディアには、その特定の主題について何も言うことがありませんでした。「Here is document」を説明するUNIXドキュメントを見つけましたが、それは元のフォームですか?

5
なぜそれほど多くのfor(;;)コンストラクトが表示されるのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私の考え方では、forループを使用して、既知の範囲または決定可能な範囲を反復処理します。 String[] names = //something; for ( int i = 0; i < names.length; i++ ) { //do stuff } これは(iの範囲を除いて)と同等です: String[] names = //something; int i = 0; while (i < names.length ) { // do stuff i++; } 言い換えれば、forループは、一般的に使用されるwhile構造の単純な(非常に有用な)構文糖です。 しかし、私for(;;)は機能的にと同等であるウェブ上の多くの構造を見ていますwhile(true) これの理由は何ですか?無限forループが無限whileループよりも優先されるのはなぜですか? // whileループをまったく使用しないjavaテキストも見ました!次のような巨大な構成要素につながる: String input = …

12
タイプとスコープの接頭辞は価値のある命名規則ですか?
最近、ソフトウェア開発者として最初の仕事を始めたとき、コードの命名規則に従う必要がないと言われたとき、私は少し投げられました。他のより大きなプロジェクトに取り組んでいるグループによって書かれたコードは命名規則に従っていましたが、私は新しいスタンドアロンのアプリケーションを書くために持ち込まれたので、それは特に重要ではないという感じでした。それが私の心配の最後だったので、私はちょうどその既存の慣習を取り、それで走りました。 int nTickCount bool bConnected object[] m_aItems fSum += fWeight * fValue class cManager enum etSystemStates etSystemStates eState cManager.cs しかし、実際に価値があるのでしょうか?この種の命名規則に従うことがエラーの理解と検出に与える正味の効果を判断するのは難しいと思いますが、視覚的には、それはちょっといように見えます。さらに、cSomethingと呼ばれるプロジェクトにすべてのクラスとファイルがあることは、非常に簡単です。 私が採用しているアルゴリズムやアーキテクチャのような明らかな違いをもたらすものと比較した場合、それはリモートで大したことではないという幻想ではありません。しかし、私が書いたコードのすべての行に影響する規則は、正しく理解する価値があるようです。 使用する必要がある場合、最もエレガントで効果的な命名規則は何ですか?タイプやスコープを示していますか?

2
スレッドのスリープはどのように機能しますか?
スレッドを眠っているとき、実際には何が起こっていますか? スレッドをスリープ状態にすると、「現在のスレッドを一定期間一時停止」することがわかります。しかし、それはどのように機能するのでしょうか? Thread.sleep()が内部でどのように動作し、Thread.sleepが実際にどのように動作するかによると?: スリープ期間は、システム固有の細分性の影響を受けます 睡眠が妨げられている スレッドはCPUを離れ、その実行を停止します スレッドはスリープ中にCPU時間を消費していません これが何を意味するのかについての内部および基本的なメカニズムを完全に理解することはできません。 スレッド間の切り替えを担当するスケジューラと呼ばれるものがあることを理解しています。 ソースはこれがOS(またはハードウェア)によって異なることを示しているようで、ほとんどのスレッドには、CPUが別のスレッドに切り替える前にいくつかのアクションを実行するために1ミリ秒から60ミリ秒程度与えられます。 しかし、スレッドがスリープ状態になると(たとえば、数秒)、どのように再開しますか?タイマーが何らかの形で関与していると思いますが、それはマザーボードのクロックですか?CPUクロックレートに関連していますか? タイマーが含まれている場合でも、CPUは、スレッドに再び注意を払う時期になったことをどのようにして知るのでしょうか。常にスレッドをチェックインして、準備ができているかどうかを確認する必要はありませんか?効果的ではないことを、ポーリングは、したがって、種類のされたCPU時間を消費しますか? スレッドは言語固有にスリープしていますか、それともOSがスレッドを担当していますか、それともCPU固有のものですか? 誰かがスケジューラのようなものの基本的な説明とこれのすべての間にCPUが何をしているのかでこれを私に説明してくれませんか?

4
修正された後にのみテストできるバグをTDDするにはどうすればよいですか?
次に例を示します。私のWebアプリケーションには、ドラッグ可能な要素が含まれています。要素をドラッグすると、ブラウザは「ゴーストイメージ」を生成します。ドラッグするときに「ゴーストイメージ」を削除したいので、この動作のテストを作成します。 私の問題は、最初にこのバグを修正する方法がわからないことであり、テストを書く唯一の方法は修正した後です。 などの単純な関数ではlet sum = (a, b) => a - b、コードを記述する前に、なぜsum(1, 2)等しくないかに関するテストを書くことができ3ます。 私が説明しているケースでは、検証が何であるかわからないので、テストできません(アサーションがどうあるべきかわかりません)。 説明されている問題の解決策は次のとおりです。 let dataTransfer = e.dataTransfer let canvas = document.createElement('canvas'); canvas.style.opacity = '0'; canvas.style.position = 'absolute'; canvas.style.top = '-1000px'; dataTransfer.effectAllowed = 'none'; document.body.appendChild(canvas); dataTransfer.setDragImage(canvas, 0, 0); これが解決策だとは知らなかった。ソリューションをオンラインで見つけた後、テストを作成することさえできませんでした。実際に機能するかどうかを知ることができる唯一の方法は、このコードをコードベースに追加し、目的の効果があったかどうかをブラウザで確認することでした テストは、TDDに反するコードの後に​​記述する必要がありました。 この問題に対するTDDアプローチはどうなりますか?コードの前にテストを書くことは必須ですか、それともオプションですか?

7
コレクションにアイテムを追加する、より「自然な」方法のパターンはありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 コレクションに何かを追加する最も一般的な方法はAdd、コレクションが提供する何らかの方法を使用することだと思います。 class Item {} var items = new List<Item>(); items.Add(new Item()); そして、それについて実際に異常なことは何もありません。 しかし、なぜこのようにしないのでしょうか。 var item = new Item(); item.AddTo(items); 最初の方法よりも自然な方法のようです。これには、Itemクラスに次のようなプロパティがあるときにandvantange がありますParent。 class Item { public object Parent { get; private set; } } セッターをプライベートにすることができます。もちろんこの場合、拡張メソッドを使用することはできません。 しかし、おそらく私は間違っており、このパターンはあまり見られないので、これまで見たことがないでしょうか?そのようなパターンがあるかどうか知っていますか? でC#拡張メソッドは、そのために有用であろう public static T AddTo(this T item, IList<T> list) { list.Add(item); return …

6
関数を呼び出すときに関数のパラメーター名がわからない場合の対処
ここにあなたの考えを聞きたいプログラミング/言語の問題があります。 私たちは、ほとんどのプログラマーが従うべき規約を開発しました。これは言語構文の一部ではありませんが、コードを読みやすくするのに役立ちます。もちろん、これらは常に議論の問題ですが、ほとんどのプログラマーが同意すると思う少なくともいくつかのコア概念があります。変数に適切な名前を付け、一般的な名前を付け、極端に長くならないように行を作成し、長い関数、カプセル化などを避けます。 しかし、まだコメントしている人がいないという問題があり、それが最大の問題かもしれません。関数を呼び出すときに引数が匿名になるという問題です。 関数は数学に由来しますが、f(x)には明確な意味があります。これは、関数にはプログラミングで通常行われるより厳密な定義があるためです。数学の純粋な関数は、プログラミングの場合よりもはるかに少ないことができ、はるかに洗練されたツールです。通常、1つの引数(通常は数値)のみを受け取り、常に1つの値(通常は数値)を返します。関数が複数の引数を取る場合、それらはほとんどの場合、関数のドメインの単なる余分な次元です。つまり、1つの引数は他の引数よりも重要ではありません。確かに明示的に順序付けされていますが、それ以外には意味の順序付けはありません。 しかし、プログラミングでは、関数を定義する自由度が高くなります。この場合、それは良いことではないと主張します。一般的な状況では、このように定義された関数があります func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {} 定義を見ると、関数が正しく記述されていれば、何が何であるかは完全に明確です。関数を呼び出すとき、IDE /エディターで次の引数がどうあるべきかを伝えるインテリセンス/コード補完のマジックを持っているかもしれません。ちょっと待って。実際に通話を作成しているときに必要な場合、ここで不足しているものはありませんか?コードを読んでいる人にはIDEの利点がなく、定義にジャンプしない限り、引数として渡された2つの長方形のどちらが何に使用されるかわかりません。 問題はそれ以上です。引数がローカル変数に由来する場合、変数名のみが表示されるため、2番目の引数が何であるかさえわからない状況があります。たとえば、次のコード行を見てください DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2]) これはさまざまな言語でさまざまな程度に緩和されますが、厳密に型指定された言語でさえ、変数に適切な名前を付けたとしても、関数に渡すときの変数の型については言及しません。 通常はプログラミングの場合と同様に、この問題には多くの解決策があります。多くはすでに一般的な言語で実装されています。たとえば、C#の名前付きパラメーター。しかし、私が知っているすべてには重大な欠点があります。すべての関数呼び出しですべてのパラメーターに名前を付けると、コードが読みやすくなる可能性はありません。多分、プレーンテキストプログラミングが提供する可能性を超えているように感じます。ほとんどすべての領域でJUSTテキストから移動しましたが、まだ同じコードを使用しています。コードに表示するためにより多くの情報が必要ですか?テキストを追加します。とにかく、これは少し接線になっているので、ここで停止します。 2番目のコードスニペットに答えた1つの回答は、おそらく最初にいくつかの名前付き変数に配列をアンパックしてから使用するでしょうが、変数の名前は多くのことを意味する可能性があり、呼び出される方法は必ずしもあなたがするべき方法を教えてくれません呼び出された関数のコンテキストで解釈されます。ローカルスコープには、leftRectangleとrightRectangleという名前の2つの四角形があります。これは、それらが意味的に表すものであるが、関数に与えられたときに表すものに拡張する必要がないためです。 実際、呼び出された関数のコンテキストで変数に名前が付けられている場合、その関数呼び出しで潜在的に可能な情報よりも少ない情報を導入しており、コードが悪いコードになる場合があります。rectForClippingに格納する四角形を作成するプロシージャと、rectForDrawingを提供する別のプロシージャがある場合、DrawRectangleClippedへの実際の呼び出しは単なるセレモニーです。新しいことは何も意味せず、ネーミングで既に説明しているにもかかわらず、コンピューターがまさにあなたが望むものを正確に知っているように存在する行。これは良いことではありません。 私はこれについて新鮮な視点を聞きたいです。私はこれを問題と考える最初の人ではないと確信していますが、どのように解決しますか?

9
C ++でのIBMアセンブラー+ COBOLの書き換え
私は1972年に書かれたレンタルシステムで実行されているレンタカー会社のレンタルエージェント/マネージャーとして働いています。ちょっとした背景として、このプログラムから毎日対処しなければならない狂気の短い例を以下に示します。 レンタルエージェントは、1つの画面での印刷がACTフィールドで「MXC」を使用することを覚えておく必要があります(すべてが短いコードに基づいています)。これは「MaXimum display on a Contract」を意味し、別の画面ではPR(PRint) ACTIONフィールドですが、いくつかの画面はPT(PrinTの場合)フィールドでYを使用し、さらに別の画面はPRT(PRinTの場合)フィールドでYを使用しますが、さらに別の画面ではユーザーがEnterキーを押す必要があります(ただし、文字、それは改行文字であるため、数字パッドで入力する必要があります)、F8、異なるが関連する画面には単にF8が必要です、一部の画面にはPRinT用のフィールドがありますが、実際にはフィールド何もせず、いくつかのプロンプトを通過した後、印刷が自動的に行われ、さらに多くの画面にPRINT Y / Nというラベルのフィールドがあります。これは、別の場所が既に書類を提出している業務ではデフォルトでYになり、別のディーラーが書類を必要とする業務ではNになります。 私はこれよりも良い仕事をすることができると決めたので、これを更新する決定を下す会社の人に連絡することにしました。最終的に、このプログラムを担当するITのVPに連絡します。私は彼から少し情報を入手し、私のレンタカー会社がIBMメインフレームアセンブラーで書かれたCOBOLを少し混ぜたレンタルプログラムを持っていることを知りました。とにかく彼に私の履歴書をメールしてください(何かが開いた場合)。 これは私の質問につながります。 最初は技術的です。将来、保守性を向上させるという考えで、アセンブリ言語よりも高いレベルの言語で書き直すことを考えています。私の経験分野はC ++なので、それは私にとって明らかな選択です。私は最近、私が話した人がチームが一生懸命働いたと言われているという記事を読んだので、プログラムを更新する簡単な方法を切に必要としています。 -桁のロケーションコード(4ではなく)と8桁の車番号(7ではなく)。更新に関する私の哲学は、このような悲惨な状況であっても、Joelの方針に沿っています:http : //www.joelonsoftware.com/articles/fog0000000069.html要するに、再書き込みは以前のすべてを捨てるのではなく、増分する必要があります新鮮に始めます。 IBMアセンブリをC ++と統合する簡単な方法はありますか?ある場合、どうすればよいですか?私はasmキーワードを漠然と認識していますが、それを使用するのが最適なのか、それとも何か他のことをするのが最適なのかわかりません。そのような計画はお勧めしませんか?私はg ++とGNU makeを使用してLinuxでほとんどの作業を行っているので、それに固有の回答は歓迎されますが、絶対に必要ではありません(どのようなビルドシステムがないのかわからないので、ほとんど何もありません)。 2番目の質問はより政治的です。切り替えを行う必要があることをこの会社に説得するにはどうすればよいですか?理論上のコスト削減は莫大です(私の見積もりによれば、会社はプログラムとやり取りする方法を学ぶためのトレーニングコストの増加だけで年間余分に数百万ドルを無駄にしています)が、私の提案された変更はおそらくすべての現在のプログラマーは、仮に彼らが制定されたとしても仕事を終えているので、変化に対する大きな構造的抵抗があります。 編集:会社が既に持っているものを変更する理由が、私にとって最良の解決策のように思える理由を説明しなければなりません。ただし、これはプログラムの怪物であるため、他の提案を受け入れています。プログラミングの仕事をしたことがないので、間違った分析を修正してください。 まず、既製のソリューションがあります。 この種のことについてのいくつかの中間レベルのマネージャーとの私の話から、新しいシステムに切り替えることの主な懸念の1つは、何十年も会社にいて、今までシステムに慣れている忠実な従業員の大多数です。持っているものを変更できる場合は、現在のインターフェイスを一種の「互換モード」に維持できます。ユーザーは既に現在のシステムを使用するためにログインする必要があるため、ユーザーが(この変更を行った後)初めてログインするときに設定をアクティブ化する機能を追加できます。 「クラシック」インターフェースまたは「新しい」インターフェース。それを可能にする既成のソリューションを見つける方法はありません。 私の会社も私たちが使用するソフトウェアを所有しています。私たちはそれをライセンスしません。これは、私が現在話している経営陣は、実際に私に変更を許可することができる人と同じであることを意味します。サードパーティのソリューションでは、使用する製品を開発した会社から必要な権利を確保することに加えて、会社から承認を得なければならないため、ハードルが追加されます。また、これは会社に「彼らの」製品をあきらめて他の製品を使用するよう説得することを必要とします。これは、私たちが持っているものを更新しようとするよりも大きなハードルのようです。 最後に、将来を見据えて、ユーザーインターフェイスを改善し、いくつかのバグを修正したいだけではありません。これらの「緊急」問題を更新した後、テクノロジーに関連する会社の基本的な方法を更新したいと考えていました。この種の問題に1〜2年費やした後、私の計画は経営陣に戻り、より劇的な変化を提案することでした。会社が運営している多くの方法がありますが、それらは現在使用していない技術によって根本的に改善される可能性があります。たとえば、各リージョンはほぼ同じように動作します。地元の主要空港は、自動車を配送する中心的なハブです。これらは主に必要に応じて送信されます。ただし、空港はすべての操作のホームベースとして使用されます。彼らは1台の車で2人を私の場所に送り、必要のない1台の車を私たちから受け取ります。その後、彼らが入った車と、彼らが取り戻しているもの(空港から32マイル)を持って空港に戻ります。その後、2台の車で5マイル離れた場所に到着し、1台を降ろしてから、もう1台の車で空港に戻ります。たとえ私たちが送り返した車が私たちの近くで必要な同じ種類の車であっても、彼らはこれを行います。私は約2年前から会社に勤めていますが、自動車不足の最も極端な緊急事態(これまで約3回)で、彼らがこれから逸脱しているように見えます。すべての地域で働く4人を、どの車がどこに行くかを決定する自動スケジューリングシステムに置き換え、必要な場所にすべての車を届けるために最短時間+マイル+ドライバーを必要とする経路を見つけようとしますより高いレベルの修正の例は、いつか追加したいと思っています。 ただし、これらすべてを提案することに不安を感じる前に、インターフェイスの更新などの小さなタスクを実行することで、会社とコードベースの足掛かりをつかむことが役立つと思います。アウトソーシングなどのソリューションは、この可能性を排除します。

5
TDD、新しいテストと古いテストはまだ実装されていません
私はテスト駆動開発を実験していますが、次のような状況に陥ることが多いことがわかりました。 一部の機能Xのテストを作成します。これらのテストは失敗します。 Xを実装しようとしているときに、コードの下位層に機能Yを実装する必要があることがわかりました。そう... Yのテストを作成します。XとYの両方のテストが失敗します。 一度に異なるコードレイヤーで4つの機能を同時に使用すると、実際に実行していることに集中できなくなりました(同時に失敗するテストが多すぎます)。 テストの作成を開始する前であっても、タスクの計画にもっと力を入れることでこれを解決できると思います。しかし、いくつかのケースでは、例えば、下層のAPIをあまりよく知らなかったので、もっと深くする必要があることを知りませんでした。 そのような場合はどうすればよいですか?TDDには推​​奨事項がありますか?

2
クラスターでタスクを1回だけ実行するにはどうすればよいですか?
サーバーのクラスターで一度だけ実行したいタスクがある場合、定期的にこれを達成するための最良の方法は何ですか?この場合のクラスターの定義は、ロードバランサーの背後に分散セッションを持つ2つ以上の同一サーバーです。 使用例: X時間に1回のみ実行する必要がある実行コストの高いタスクがあります。このジョブは、たとえば多数のレコードを反復処理し、そのステータスを更新できます。 最悪のシナリオは、ジョブを2回実行するとデータが無効になることです。 最良のシナリオは、ジョブがすべてのサーバー上のリソースを利用することです。 要件の概要: ノードの1つがダウンしている場合でも、ジョブを実行する必要があります。 ジョブは、スケジュールごとに1回のみ実行する必要があります。 複数のジョブが同時にまたは重複してスケジュールされている場合、実行中のジョブの数はサーバー間で均等に分散されます。 マシンは同じコードベースを持ち、NTPを介して同期する必要があります。 環境変数によって、構成はノードごとに異なる場合があります。 ジョブは時間どおりに、または割り当てられた時間の特定の間隔内で開始する必要があります。(たとえば5分と言います) 可能な解決策 1つのノードをマスターノードとして設定します。上記1に違反するため、これは機能しません。 ロードバランサーのバランスを取り、ジョブを開始するよう要求します。残念ながら、これには、同時に複数のジョブを実行している場合、それらがすべて同じマシンで実行されるという副作用があります。 これは、Javaのサーブレットコンテナで実行する必要があります。しかし、それは私が探している仕事をコーディングしていません。 確かにこれは既知の最良の解決策を備えた解決された問題です。 関連する質問。 /programming/5949038/schedule-job-executes-twice-on-cluster 上記の5つの要件に従ってソリューションが不十分であるため、これは重複ではありません。最も投票されたソリューションは人種問題に苦しみ、2番目のソリューションは要件3に違反します

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