問題タブ [compiler-construction]
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# - .NETアプリケーションへのスクリプト機能の追加
私はC#で書かれた小さなゲームを持っています。データベースをバックエンドとして使用します。トレーディングカードゲームなので、カードの機能をスクリプトとして実装したかったのです。
つまり、私は基本的にICard
、カードクラスが(public class Card056: ICard
)を実装し、ゲームによって呼び出される関数を含むインターフェイスを持っているということです。
さて、物事を保守可能/変更可能にするために、データベースにソースコードとして各カードのクラスを用意し、基本的に最初の使用時にコンパイルしたいと思います。したがって、カードを追加/変更する必要がある場合は、データベースに追加して、アセンブリの展開を必要とせずにアプリケーションに更新するように指示します(特に、カードごとに1つのアセンブリ、つまり数百のアセンブリについて話しているため) 。
それは可能ですか?ソースファイルからクラスを登録してからインスタンス化するなど。
言語はC#ですが、任意の.NET言語でスクリプトを記述できる場合は、追加のボーナスがあります。
compiler-construction - コンパイラの書き方を学ぶ
推奨言語: C/C++、Java、および Ruby。
単に教育目的で独自のコンパイラを作成する方法についての役立つ本/チュートリアルを探しています。私は C/C++、Java、Ruby に最も精通しているので、これら 3 つのうちの 1 つを含むリソースを好みますが、優れたリソースであれば何でも構いません。
c# - CSharpCodeProvider のコンパイル パフォーマンス
CompileAssemblyFromDomはCompileAssemblyFromSourceより高速ですか?
おそらくコンパイラのフロントエンドをバイパスするはずです。
c# - C# の論理順序とコンパイラの動作
C# では (他の言語については自由に回答してください)、ランタイムはどのような順序で論理ステートメントを評価しますか?
例:
ランタイムが最初に評価するステートメント -
また:
?
コンパイラがステートメントを逆方向に評価するときはありますか? おそらく、「OR」演算子が関係しているときですか?
& はビット単位の論理演算子として知られており、常にすべての部分式を評価します。
「短絡ブール値」の代わりにビットごとの演算子を使用する場合の良い例は何ですか?
string - 文字列の内容を確認していますか? 文字列の長さと空の文字列
コンパイラにとってより効率的で、文字列が空白かどうかをチェックするためのベスト プラクティスはどれですか?
- 文字列の長さ == 0 かどうかの確認
- 文字列が空かどうかの確認 (strVar == "")
また、答えは言語によって異なりますか?
compiler-construction - ブートストラップにはまだ外部サポートが必要です
言語をブートストラップする、つまり、言語自体のコンパイラ/インタプリタを作成するという考えを聞いたことがあります。どうやってこれを達成できるのだろうと思って、少し周りを見回したところ、誰かがそれはどちらかによってのみ行うことができると言っているのを見ました
- 別の言語で最初のコンパイラを作成します。
- アセンブリで最初のコンパイラをハンドコーディングします。これは、最初のコンパイラの特殊なケースのようです。
私には、どちらも外部サポートを必要とするという意味で、実際に言語をブートストラップしているようには見えません。実際に独自の言語でコンパイラを作成する方法はありますか?
compiler-construction - Mixed C++/CLI TypeLoadException 内部制限: フィールドが多すぎます
いくつかの新しい UI をマネージド/C# ランドに移行するために、最近、大規模なレガシー プロジェクトで共通言語ランタイム サポート (/clr) を有効にしました。全体的なソリューション。このプロジェクトはアプリケーションのコアであり、生成されたマネージ UI コードを駆動します (したがって、相互運用のために clr サポートを有効にする必要があります)。
大量の小さなエラーと警告を修正した後、最終的にアプリケーションをコンパイルすることができました..しかし、アプリケーションを実行すると EETypeLoadException が発生し、デバッグできなくなります...
掘り下げてみると、原因は「System.TypeLoadException: 内部制限: フィールドが多すぎます」であることがわかりました。これはコンパイルの最後に発生します。次に、アセンブリを2つ以上のdllに分割することを提案するこのリンクを見つけました。ただし、これは私の場合は不可能です。レガシー コードは基本的に変更されないという制限があるためです。
誰でも他の可能な解決策を提案できますか? 私は本当にここで行き止まりです。
c++ - 移植可能な方法で配列の新しい配置を使用できますか?
配列に使用する場合、移植可能なコードで新しい配置を実際に利用することは可能ですか?
new[] から返されるポインタは、渡したアドレスと必ずしも同じではないようです (5.3.4、標準の注記 12 は、これが正しいことを確認しているようです)。この場合、配列が入るバッファを割り当てることができます。
次の例は、問題を示しています。この例を Visual Studio でコンパイルすると、メモリが破損します。
メモリーを見ると、コンパイラーはバッファーの最初の 4 バイトを使用して、項目数のカウントを格納しているようです。これは、バッファーがsizeof(A)*NUMELEMENTS
大きいだけであるため、配列の最後の要素が未割り当てヒープに書き込まれることを意味します。
質問は、placement new[] を安全に使用するために、実装が必要とする追加のオーバーヘッドをどれだけ見つけられるかということです。理想的には、異なるコンパイラ間で移植可能な手法が必要です。少なくとも VC の場合、オーバーヘッドはクラスによって異なるように見えることに注意してください。たとえば、例で仮想デストラクタを削除すると、new[] から返されるアドレスは、渡したアドレスと同じになります。
c++ - Visual Studio の C
C を学ぼうとしています。C# 開発者として、私の IDE は Visual Studio です。これは C/C++ 開発に適した環境だと聞いています。しかし、どんな小さなことをしようとしても、直感は失敗するようです。誰かが次のいずれかの方法について良いリソースを提供できますか:
- Visual Studio で C の詳細を学ぶ
- より良い C IDE + コンパイラを推奨する
編集:も参照してください: https://stackoverflow.com/questions/951516/a-good-c-ide
.net - .NET コンパイラ -- DEBUG と RELEASE
何年もの間、コンソールにメッセージを書き込むために VB.NET で DEBUG コンパイラ定数を使用してきました。System.Diagnostics.Debug.Write も同様の方法で使用しています。RELEASE がビルド オプションとして使用された場合、これらのステートメントはすべてコンパイラによって除外され、実稼働コードからデバッグ ステートメントのオーバーヘッドが解放されることを常に理解していました。最近、Silverlight 2 Beta 2 を使用しているときに、公開 Web サイトから実行していた RELEASE ビルドに Visual Studio が実際にアタッチされ、コンパイルさえされていないと想定していた DEBUG ステートメントが表示されることに気付きました。さて、私の最初の傾向は、自分の環境に何か問題があると仮定することですが、System.Diagnostics について深い知識を持っている人にも尋ねたいと思います。