問題タブ [druntime]
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.
unicode - ユニコード変換
構成:
- OS: Windows 7 (32ビット)
- Phobos 標準ライブラリを使用した DMD 2.58
私の意図:
2007 年に書かれた古いパッケージ (10 個のモジュール) の移植を開始しました。完全な Unicode サポートが特徴で、その機能を維持したいと考えています。
その作成者はclass UnicodeBom(T)
、次の目的のために特定のモジュール ( ) を作成しました。非常に複雑なアプローチです (少なくとも、私は熱狂的ファンであり、C++/Qt/C# 入門の経験しかない初心者であることを考えると)!
私はすべてのモジュールからコードフラグメントをクリーンアップTango
し、ボックスで作業することに成功しました (確かにユニット/モジュールレベルで) これまでのところ、10 個中 4 個のモジュールのみです。
コードフラグメント:
どこ
- st (パラメータ) は
std.stream.Stream
- mSourceBuffer (プライベート フィールド) は
wchar[]
見積もり:
メソッドに関連するコード ドキュメントからの抜粋final T[] decode (void[] content)
:
提供されたコンテンツを変換します。BOM 署名の内容が検査され、削除されます。署名が存在する場合、エンコーディング タイプによって存在すべきでない場合に、例外がスローされます。逆に、現在のエンコーディングで既知の署名が存在すると予想される場所に既知の署名がない場合は、例外がスローされます。
私の質問:
Druntime
すぐに使える、および/またはPhobos
同じ結果につながるリソースを使用する最新のより慣用的なアプローチはありますか (つまり、UTF8/16/32 ファイルをロードし、BOM なしで wchar[] に変換します)?
前もって感謝します。
segmentation-fault - OSXでのDランタイムの初期化
編集:これは、差し迫った解決策のない長期的な問題のようです: http ://d.puremagic.com/issues/show_bug.cgi?id=8133 http://www.digitalmars.com/d/archives/digitalmars/D /Ideas_for_runtime_loading_of_shared_libraries._154126.html http://lists.puremagic.com/pipermail/dmd-internals/2011-December/002853.html
acプログラムにロードされたaddylibでdランタイムを開始することに問題があるようです。Runtime.initialize()を呼び出すたびに、セグメンテーション違反が発生します。
Cコード:
gccでコンパイルされ、フラグはありません。
dコード:
dmd-sharedでコンパイル
バックトレース:
すべてのコンパイルとデバッグはOSX10.7で行われます
注:Runtime.initialize();の場合 行がコメント化され、ライブラリがロードされ、正しく実行されます。
d - D言語はDランタイムに完全に依存していますか?
最近、D語を勉強しています。私はいつもランタイムについて少し混乱してきました。
それについて収集できる情報から(それほど多くはありませんが)、Dの機能の一部に役立つランタイムのようなものであることがわかります。ガベージコレクションのように、それはあなた自身のプログラムと一緒に実行されます。しかし、Dはマシンコードにコンパイルされているので、プログラムで必要ない場合は、ガベージコレクションなどの機能が本当に必要ですか?
私を本当に混乱させるのは、次のようなステートメントです。
「Dでオペレーティングシステムを書くことができます。」
オペレーティングシステムには、アセンブリを使用せずにコンパイルされた言語が提供できる以上のものがあるため、実際にはそれを行うことができないことを私は知っています。しかし、Dコードを呼び出すカーネルがある場合、Dランタイムは、Dがそのような必要最低限の環境で実行されるのを防ぎますか?それとも、Dランタイムはそれよりも単純ですか?ソースファイル/ライブラリの単なる「自動」インクルードと考えることができますか?アプリケーションでコンパイルすると、そのコードを自分で作成するよりも大きな違いはありませんか?
多分私はそれをすべて間違って見ているだけです。しかし、このテーマに関するいくつかの情報は、多くの人々に役立つと確信しています。
d - DランタイムなしでDアプリケーションをコンパイルするには?
私はこれを永遠に理解しようとしてきました、そしてそれは私を悩ませ始めています. D ランタイム ライブラリを理解しています。それが何であるか、それが何をするか。また、それなしで D アプリをコンパイルできることも理解しています。XoMBのように。XoMB には独自のランタイムが定義されていますが、必要がなければ独自のランタイムを作成する必要がない場合もあります。私が使用している DigitalMars D コンパイラ (dmd) は、プログラムで必要なものに応じて特定のものへの参照を発行するなど、ランタイムの舞台裏で多くのことを行うことを理解しています。そしてまた、すべてのプログラムのためのもの。したがって、これらを自分で定義する必要があります。私は実験することに決めました。つまり、リンカーが吐き出すエラーがどんどん少なくなるということです。テストのために、完全な必要最小限のアプリをコンパイルしたいだけです。ランタイムなしで物事を機能させるだけです。または実行時間をできるだけ少なくします。これが私の単一のソースファイルです。
私は次のようにコンパイルします: dmd -c main.d -defaultlib=
次にリンクします: link main.obj
そして、これは私が得るエラーです: OPTLINK: 警告 23: スタックがありません & OPTLINK: 警告 134: 開始アドレスがありません
開始アドレスなしエラーを取り除くために main を _main にチェーンしようとしたことがわかりますが、とにかく役に立ちませんでした。これらの最後の 2 つのエラーを解決するにはどうすればよいですか? もし私がそれを機能させることができれば、より多くの機能を機能させるために実装する必要があるものを調べることができると思います. しかし、誰かが私を助けてくれるなら、それは非常にありがたいです!