問題タブ [portability]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - クロスプラットフォーム C/C++ 開発のリソース
複数のプラットフォームやコンパイラで動作する C/C++ コードの作成を支援するために、どのようなリソースがありますか? たとえば、私は定期的に次のような質問をしています。
- さまざまなコンパイラや環境で自動的に定義されるプリプロセッサ マクロは? (例:
__GCC__
、WIN32
、__WIN32__
)__CYGWIN__
- コンパイラと標準ライブラリのどのバージョンが比較的新しい「標準」関数をサポートしていますか (例: C99 long double 三角関数 sinl()、cosl()、...)
- 単一の移植可能な機能が存在しないように見える場合、典型的なタスクを実行するためにさまざまなプラットフォームで使用できる機能は何ですか? (例: サブ秒の精度で現在の時刻を取得する)
Linux/gcc、cygwin、mingw32、および Visual Studio でコンパイルする必要があるコードを頻繁に作成し、必要な情報を取得するために、複数のソース (Linux のマニュアル ページ、MSDN、コンパイラ ドキュメント) からのメモを頻繁に比較する必要があります。これは、開発者が常に遭遇する問題に違いありません。この情報を簡単に理解できるリファレンスにコンパイルするリソースはありますか?
(この質問では、wxWidgets や boost のようなクロスプラットフォーム ライブラリには特に興味がありません。誰かが独自のクロスプラットフォーム ライブラリやプログラムを作成するのに役立つリソースやテクニックに興味があります。)
編集:これは、私が探しているページのタイプの例です: http://predef.sourceforge.net/precomp.html。さまざまなコンパイラ/環境と、それらを識別するために使用できるプリプロセッサ マクロの優れた調査。共通の関数が存在しない場合に、プラットフォーム間でほぼ同等の関数 (Linux の gmtime_r() または ftime() と Windows の _gmtime_s() または _ftime() など) を比較した同様のリソースを見つけることは素晴らしいことです。
c++ - 物理ツールキットの移植性
概要:
2 つ (またはそれ以上) の異なる物理ツールキット間のインターフェイスを作成したことがありますか? オンライン ゲーム (または少なくともネットワーク物理学) の場合は? それはどうなりましたか?学んだ教訓?大量のコードを別の場所で書き直したほうがよいのでしょうか?それとも投資は報われましたか?
膨張:
インディー ゲーム エンジンにODE 物理ツールキットを使用していますが、ファサード ラッパーを使用しています。元のアイデアは、必要に応じて/可能であれば、別の物理ツールキット (Havok、Bullet など) に簡単に移植できるようにすることでした。これは初心者にとっては良いアイデアのように思えましたが、今では、核心の詳細にかなりの数の悪魔がいるように見え始めています. 個々のルート オブジェクトごとの重力の必要性など (現在 ODE ではサポートされていません)。または、オブジェクト/島が無効になったときにコールバックします (ODE でもサポートされていません)。
Havok (私はまったく何も知りません) が常に新しいツールやツールキットで成長しているという事実は、最終的にはツールキットではなくフレームワークになってしまうのではないかと恐れています。そして、それは移植性には良くありませんが、おそらく私の懸念はまったく根拠がありません.
c - Cのポインタへのバイトレベルのアクセスに関連する移植性の問題は何ですか?
目的
私は、malloc / realloc / freeラッパー関数と、そのパラメーター(タイプvoid *
)が割り当てられ管理されているライブ(まだ解放されていない)メモリに対応するかどうかを通知できる関数を提供する、より大きなプロジェクト用の小さなライブラリを作成しています。ライブラリのラッパー関数によって。この関数を。と呼びましょうisgood_memory
。
内部的には、ライブラリはハッシュテーブルを維持して、によって実行される検索isgood_memory
が適度に高速であることを確認します。ハッシュテーブルは、検索を可能にするためにポインタ値(タイプの要素)を維持します。void *
明らかに、値はハッシュテーブルに追加および削除され、割り当てられたものと解放されたものをそれぞれ最新の状態に保ちます。
ライブラリの移植性は私の最大の関心事です。これは、ほとんど準拠したC90(ISO / IEC 9899:1990)環境のみを想定するように設計されています...それ以上のものはありません。
質問
移植性が私の最大の関心事であるsizeof(void *) == sizeof(X)
ため、ハッシュ関数についてはそれを想定できませんでした。したがって、私は値をバイトごとに文字列であるかのように扱うことに頼ってきました。これを実現するために、ハッシュ関数は次のようになります。
この特定のフラグメントに関して、移植性に関してどのような懸念がありますか?ptrval
バイトごとにアクセスすることで、ファンキーな配置の問題が発生しますか?
c++ - ポータブル ライブラリの言語の選択
Windows、Linux、OS/X などの最新のオペレーティング システムで実行されている他のプログラムから動的にリンクされるライブラリを作成したいと考えています (つまり、.dll
または.so
モジュールとしてデプロイされます)。
その場合、最も適切な言語は何ですか? プレーンCに固執する必要がありますか?それともC++でもいいですか?
portability - 移植性のないコードを使用する理由
最適化されたコード、実装の明確さ、効率、および移植性の観点から、誰かが設計のトレードオフを正当化するかどうかをどのように選択しますか?
この質問の目的に関連する例は、大きなファイルの処理である可能性があります。ここで、「大きなファイル」は、ランダムアクセス方法を使用して単純化される問題の「かなりの数GB」です。
このファイルを読み取って変更するためのアプローチは次のとおりです。
- とにかくストリームを使用し、目的の場所を探します。これは移植可能ですが、速度が遅くなる可能性があり、明確ではありません。これは、実質的にすべてのOSで機能します。
- ファイルの関連部分を大きなブロックとしてマップします。たとえば、チャンクごとに、処理するファイルの50MBチャンクをmmapします-これは、そのシステムにmmapを実装する微妙さに応じて、多くのOSで機能します。
- ファイル全体をmmapするだけです。これには64ビットOSが必要であり、これを実装するための最も効率的で明確な方法ですが、32ビットOSでは機能しません。
sql - SQL の移植性の問題
私の会社では、Python ORM 用の Oracle のバックエンドの仕上げに取り組んでいます。私は、RDBMS が単純なものであっても、さまざまな方法で処理を行うことに驚いています。Oracle と他の RDBMS の違いについて多くのことを学びました。純粋な好奇心から、もっと学びたいと思っています。
あるプラットフォームから別のプラットフォームへの SQL の移植に関する一般的な「落とし穴」は何ですか?
回答ごとに 1 つの落とし穴だけにしてください。
c++ - C++プロセス管理
C ++プロセス管理用のよく知られたポータブルで優れたライブラリはありますか?
Boost.Processという有望なライブラリを見つけましたが、これはBoostライブラリに含める候補にすぎません。誰かがこれを使用しましたか?それがBoostの一部ではない理由を誰かが知っていますか?
c++ - boost :: program_optionsを使用した優先クロスプラットフォームの「メイン」定義とは何ですか?
ブースト付きのC++を使用してクロスプラットフォームアプリケーションを開発しようとしています。
私は通常、*nix環境でプログラミングします。この環境では常に「main」を次のように定義しています。
このアプリケーションでは、VisualStudio2003を使用してWindows環境から始めています。
この定義でboost::program_optionsを使用しようとすると、program_options::storeからコンパイルエラーが発生します。
エラー:
mainを次のように定義して、wchar_t関数を強制しようとしました。
次にコンパイルしますが、リンクエラーが発生します:
最後に、Visual Studioによるデフォルトのメイン定義設定にフォールバックすると、コンパイルされてリンクされます。
だから、それはWindowsにとっては良いことですが、* nixに持って行こうとすると、これは機能しますか?これらのシステムは通常、_TCHARタイプを定義していますか?個人的には出会ったことがありません。
Windowsと*nixで動作し、さらにboost :: program_optionsライブラリで動作するようにmainを定義する適切な方法は何ですか?
c++ - 移植可能なコードを作成するには、C または C++ のどちらが適していますか?
夏を楽しく過ごせるように頑張ります。Unicode をサポートするが東洋言語をサポートしないシステムでアラビア語を表示できるようにするコードを作成します。最初は統合コードなしで、うまくいけばロジックだけを書いています。
C++ または C を使用する必要がありますか?
移植可能なコードを書きやすく、Python と統合しやすい言語はどれですか?
編集:
私は C/C++ にかなり慣れていますが、自分自身は C++ に近いと考えています。しかし、Cを書いてどこにでもプラグインする方が簡単だと思われますか、それとも間違っていますか? アラビア語の Unicode 文字列を処理する関数をいくつか書きます。ほとんどすべての文字がさまざまなコンテキストでさまざまな形をしているため、アラビア語を表示するには何らかの処理が必要です。
編集:
もっと楽しくするために、C++ を使用するようです。