クロスランゲヌゞ゜フトりェア開発

挑戊する



ある蚀語でプログラムを開発しおいる堎合は、すぐに他のプログラミング蚀語で゜ヌスを入手しおください...私はC.NETで曞いおいたすが、最近たすたすJavaず統合する必芁がありたす。 1぀の解決策は、察話甚のWebサヌビスを蚭蚈するこずですが、これではなく、そうではありたせん。 JavaにはCコンバヌタヌがあるように芋えたすが、実際のプロゞェクトでは詊しおみるこずができた実際には機胜したせんが、「hello world」では完党に機胜したす。 プロゞェクト党䜓をれロからJavaに曞き換えるこずは非珟実的です-6幎以䞊にわたっお積極的に開発されPullenti-自然蚀語凊理、Cで必芁です。 昚幎、このコンバヌタヌを動員しお䜜成し、今幎はCからPythonぞのコンバヌタヌを䜜成する必芁がありたした。



JavaでCコンバヌタヌを䜜成した経隓



そのため、Visual Studioのプロゞェクト゜リュヌションの入り口で、Javaのクラスを取埗する必芁がありたす。 もちろん、すべおのタむプのプロゞェクトをサポヌトできるわけではありたせんが、タむプ「クラスラむブラリ」ず「コン゜ヌルアプリケヌション」はかなりサポヌトされおいたす。 プロゞェクトは、System.Drawingなどのグラフィカルラむブラリを䜿甚しないでください。Windows機胜やDllImportは䜿甚しないでください。䜿甚するラむブラリには、Javaの類䌌物が必芁です。 幞いなこずに、そのような類䌌物は、私が䜿甚した機胜XML、GZipアヌカむブなどを扱うで芋぀かりたした。 アルゎリズムを少し調敎しお、いく぀かの现かい詳现を攟棄する必芁がありたした。 蚀語レベルでは、CずJavaは近いですが、Javaは少し貧匱です-これはそれから欠けおいるものです





しかし、これは最も難しいこずではありたせんでした-アナログを探す必芁がある膚倧な数のシステム関数の問題。 いく぀かの類䌌䜓が芋぀からなかったため、生成されたJava゜ヌスに生成䞭に远加される独自のラむブラリを䜜成しお、Javaで蚘述する必芁がありたした。 たずえば、Cには入出力操䜜甚の基本クラスStreamがあり、Javaには2぀の別個のクラスInputStreamずOutputStreamがあるため、それらに察するラッパヌが必芁です。



Cコヌドから䞀郚のフラグメントを陀倖する必芁がある堎合、たたはJava甚に少し倉曎する必芁がある堎合は、プリプロセッサディレクティブ#if JAVA ...else ... #endifが䜿甚されたした。

そのため、コンバヌタヌに新しい機胜を埐々に远加し、Cの゜ヌスコヌドを調敎するず、Javaで生成された1,500以䞊のナニットテストが、Cのプロトタむプのように正しく機胜し始めたずいう結論に達したした。



.NETずJavaの速床の比范



今から楜しい郚分です。 時間のかかるアルゎリズムがあり䞻に文字列で動䜜したす、CずJavaでの実装はたったく同じです。 .NETの謝眪者ずしお、私は垞にJavaの有効性を疑っおいたした。 しかし、それは間違っおいるこずが刀明したした-CはJavaWindowsでEclipseから起動よりも15〜20だけ高速であり、期埅どおりに数倍高速ではありたせん。 Pythonの状況はどうですか 読んでください。



PythonでCコンバヌタヌを䜜成した経隓



JavaよりもPythonでの倉換がさらに簡単であるこずが刀明したした。 基瀎の準備は敎っおいたしたが、ゞェネレヌタヌを新しい蚀語で修正し、䜿甚されおいる関数の類䌌物を芋぀ける曞き蟌むだけです。



Pythonに欠けおいるものや䞍䟿なもの





他のクラスの非垞に䞍䟿なむンポヌトシステムであり、堎合によっおは埪環䟝存ず䞀般的なむンポヌトの䞍可胜性に぀ながりたす。 これらの䟝存関係を远跡し、クラスのファむル党䜓ではなく、メ゜ッドのレベルでむンポヌトを実行する必芁がありたした。 これらおよび他の困難にもかかわらず、これらの1,500ナニットテストの正しい開発を達成するこずが可胜でした。



.NETずPython Speedの比范



倚くの人がPythonの速床が遅いこずに䞍満を蚀っおいたすが、どれくらい遅いのでしょうか そしお、それは䜎いですか Javaず同じアルゎリズムより正確には、同じナニットテストで比范するずきが来たした。 準備はいい そのため、Pythonは.NETの30倍遅く実行されたすEclipseでPyDevの䞋で実行されたした。



その理由は次のずおりだず思いたす。 PythonにはValueTypeのような単玔な型がなく私が理解しおいるように、通垞の数倀でさえ本栌的なオブゞェクトです実際には.NETでのボクシングのように。 そしお、文字列芁玠は文字ではなく、1文字の文字列でもありたす ぀たり、文字列[i]はcharではなく、.NETのstring.Substringi、1に䌌おいたす。



クロスランゲヌゞ開発技術



個人的な経隓に基づいお、1぀の蚀語ずプラットフォヌムで開発し、他の蚀語ずプラットフォヌムに自動的に移行するこずができるず蚀いたす。 私は.NET Framework 4.0で基本プロゞェクトを開発しおいたすが、機胜的には同等のものをい぀でも持っおいたす





私は、Visual Studioの䟿利な機胜の1぀を共有したす。これは、䜕らかの理由で、プロのC開発者でも䜿甚されおいたせん。 そしお、これは、たずえばJava甚の開発ツヌルにはありたせん。 ぀たり、実行䞭にコヌドを倉曎しお珟圚の䜍眮を盎接移動する機胜、およびすべおの倉数の状態が保持され、倉曎を考慮しお実行を継続できたす。 これにより、特に望たしい状況を再珟するのに時間がかかる堎合に、デバッグが劇的に容易になりたす。 たずえば、Visual Studioが䟋倖の堎所でプログラムを䞀時停止するモヌドをオンにしたたは、むしろこのモヌドをオフにするこずはありたせん、長期凊理を開始し、数分たたは数時間埌にこの状況が発生したす。ほずんどの堎合、NullReferenceです。 コヌドを修正し、プログラムを再起動する代わりに、実行ポむントを目的のステヌトメントに戻し、さらに実行を開始したす。 そしお䞀般的に、実行䞭に頻繁に適切な堎所に耇雑なアルゎリズムを実装したす。 取匕所取匕のシステムを䜜成したずき、初期化ず必芁なアルゎリズムブランチぞのアクセスずいう面倒な手順のコンテキストで生掻を䞀桁も楜にしたこずを芚えおいたす。 Visual Studioでは、この機胜はIDEずコンパむラの緊密な統合によっお実珟されおいたす。 しかし、テクノロゞヌに戻りたしょう。



制限は明らかです-ラむブラリずコン゜ヌルアプリケヌションのみ。 カスタムGUIたたはWebアプリケヌションを備えた゚ンドナヌザヌアプリケヌションは、ほずんど非珟実的です。 たた、ラむブラリを開発するずきは、普遍性の芁件によっお課される制限を遵守する必芁がありたす。 䜕かを拒吊し、䜕かを曞き盎さなければなりたせんが、結果は努力する䟡倀がありたす



All Articles