誰国内のコンパイラを保存することはできませんか?C / C ++とJavaScriptコンパイラへ|ライフ2020プログラム

Readmeファイル|  ヤンXiaobing

編集|呉Xingling

出品 | CSDN(ID:CSDNnews)

編集者注の前に:

コンパイラは、人間の世界と機械の世界の間のブリッジに接続されている、それはプログラマが理解して、高レベルの言語とすることができ、効率的なマシンコードプログラムの実行に変換します。C / C ++コンパイラでは、VC、ボーランドC ++、GCC、そこではWatcom C / C ++ コンパイラおよびその他の人気の外国人、あまり国内の自社開発コンパイラ。

結局のところ、実用的なコンパイラの開発が関与する、簡単ではありませんフロントエンドの字句、構文解析、意味解析、コンパイラの最適化作業の数が多いです。そして、チームは努力完全に独立した研究コンパイラとYC YCブラウザカーネルの開発の十年以上を費やすことをいとわあります。

なぜ彼らは独立したR&Dコンパイラやブラウザのカーネルに努力を惜しまないのですか?このコンパイラは、どのような利点がありませんか?以下は、 YCの コンパイラの主な著者の一人-ヤンXiaobing、研究開発、道路のこの長い十年の背後にある物語を伝えるために。

以下はヤンXiaobingのある README:

マインド:「ソフトウェア産業のヘルプ物事の進行に実行(Do)何か。」

10年前、私はいくつかのハードウェアの設計に関与し、電子研究所、中国科学院で働いていました。私は仕事の後、ソフトウェア事業に特化し、ハードウェアソフトウェアのはるかに興味がありました。

私は、このようなソフトウェアは、お金を稼ぐために行うことができますが、起業家精神のプロセスを見つけましたが、科学とソフトウェアの発展に少しでも影響されないものを、関係なくやって。多くが、達成感のないを支払うが。

オペレーティングシステム、データベース、コンパイラ、およびブラウザカーネルは、非常に困難なソフトウェア製品の最も基本的な開発するために特別な専門知識ではありません。

私は確かに成果を何を作ることではないが、主な研究開発の1から複数のソフトウェアから選択したいが、私は自分自身に、このソフトウェアへの価値ある一歩を踏み出すためにソフトウェア業界の何かでいくつかの進歩を作るために有用であることを願っています業界。状況の下で、私は、ブラウザが起動するカーネル、既存の製品を維持するので、私加えて、しかし、ブラウザでの研究開発への主要な努力を始めることができることがわかります。

イノベーション CコードはHTMLに埋め込まれ

二年後、私たちは、このようなJavaScriptのスクリプトの実装などのHTML構文解析や表示などの基本的な機能は、ブラウザのカーネルを開発しました。

この時点で、我々はより多くの複雑なHTMLの標準を見つけ、より多くの困難の発展につながる、この開発によると、ブラウザカーネルが市場にされません。

、HTMLに埋め込まれた画像化するJavaScriptスクリプトを処理するC言語の場合はソフトウェア組込みCコードHTMLハイパーテキストインターフェースで行うことを、カーネルが少し競争上の優位性である必要があり、これを作る:再考私はそう。

だから我々はHTML、HTMLタグに同様の方法でJavaScriptの2倍半、標準Cの実装を過ごしたし、展開します、各ユーザーが属性SRCとラベルCソース・ファイルを指定することができ、ユーザー・ラベルは、<ユーザーを>ディスプレイインタフェースと判定Cコードによってすべての行為。

ながら Cの コンパイラは関数として定義され、その関数を使用してコンパイルされる C 実行可能コードプログラムを、実行コードは、ファイルに格納され、または直接実行することができます。この時点で、我々は、YCコンパイラコンパイラ、YCブラウザという名前のブラウザカーネルの名前。

別の3年間の三年間、長い開発の道

その後、我々は、そのうちのいくつかは、埋め込まれたコンパイラで動的にコンパイルカーネルのコードの実行とは無関係になり、ブラウザカーネルを改善し続け、およびカーネルのソースコードの大部分はオープンソースです。

YCコンパイラがが速くコンパイルするが、それはゆっくりと、実行するのバイトコードを生成して、ネイティブコードの呼び出しで互いに(特にコールバック関数)プロセスは非常に面倒です。同時に、我々は問題を抱えています。だから、YCでレン開元コードの作業をコンパイルするコンパイラを獲得することは困難でした。

ブラウザのカーネルコードコンパイラからの問題を解決するために、我々はそれがC ++構文量が少ないので、こと、それバイトコードは、ネイティブコードの実行、および拡張構文に変換されてなって、YCコンパイラを変更することを決めました。仕事は3年間続きました。

それが直接の呼び出しとしてCのソースコード内のダイナミックリンクライブラリ関数への関数呼び出しを提供して三年後、YCコンパイラは、増加しています。このとき、オープンソースブラウザのコア部分は、YCが行わコンパイルするリアルタイムコンパイラで使用することができます。

私たちは、ブラウザのカーネルを改善し続け、速度が非常に遅いJavaScriptのバイトコードの代わりに、バイナリネイティブコードであり、100倍程度の増加についてのJavaScriptの実行速度カーネルコードブラウザが開いているすべてのモジュラー、各モジュールは、動的にコンパイルされた実行YCコンパイラが、コンパイラは、部分的にオープンソースである(例えば、インラインアセンブラソースコード、ソースコード分解、C / C ++バイトコードソースコード、等)、自動的にYCは、動的に実行埋め込みコンパイラコンパイラによって検出されたすべてのオープンソースの実行。この作品は4年かかりました。

あなたはそれらのソースコードを見てみない理由開発これまでのところ、私は、GoogleとFirefoxのブラウザが開いていると思いますか?したがって、これら2つのブラウザのソースを見つけます。

その時に、何らかの理由で、私はGoogleのブラウザのソースコードがコンパイルされない分析し、私は道路のFirefoxのソースコード解析を取ったので、コンパイルにFirefoxのソースコードは、非常によく成功しました。

ダウンロードFirefoxのソースコードは2つの部分で構成純粋なCおよびC ++のコードでは、Visual C ++ 2013コンパイラがxul.dll firefox.exeをファイルやファイルを生成します。

私は、最初のグループに、すべてのインターフェイスをすべての出力機能を、そのCコードを解析し()、次いでCのソースコードにおけるクラスのインターフェイス関数を呼び出すYCコンパイラYC_cppLoadをコンパイルxul.dllリアルタイムを可能にします。限り、再実行してFirefoxの効果は、それ以上の行動を取るよう、FirefoxのCコードを変更した場合、このステップは、スムーズに進みました。

机一度

次のFirefoxは、C ++コードの分析を開始します。ほんの数C ++構文YCコンパイラの実装、FirefoxはC ++コードをコンパイルすることはできません、それらを分析することは非常に困難です。

なぜFirefoxのCコードを簡単に分析し、そのC ++のコードでは、それを分析することは困難であるには?もともと、私はそれYCコンパイラが大幅分析の難しさを減らし、これらのファイルを使用してコードファイル、変数の構造定義ファイル、マクロ定義ファイルとコンパイル済みのファイルアセンブラCコードを生成します使用します。

FirefoxはC ++ 11個の構文機能をほぼすべて使用していますので、私はそうもう一度、それは完全にC ++ 11標準C ++のコードをサポートするようにYCコンパイラを改正することにしました。まず、使用STL標準テンプレートライブラリのコードが変更すると、デバッグコンパイラが予期せずに、このプロセスは、実際には3年かかりました!

その後、私はC ++コードのFirefoxのデバッグYC ++コンパイラで始まります。STLはそれほど複雑なコードをコンパイルし、正しく実行することができ、FirefoxのC ++コードはすぐにコンパイルすることができるはずと思いました。FirefoxはC ++のソースコードを使用している間、私は、STLに文法の多くを使用していない、期待していませんでした。彼らはYCコンパイラ、コンパイル済みのC ++のFirefoxの各モジュールを修正し続けるので、このプロセスは、1年以上続きました

YCコンパイラは、すべてのFirefoxのC ++コードをコンパイルすることができますが、しかし、どのように実装コードを生成するには?メインプログラムFirefox.cpp開始から開始して、終了後に、このプログラムは、YCコンパイラは、コード実行firefox.exeをを生成することができ、かつスムーズに実行することができます。

FirefoxのC ++モジュールが緊密に結合するので、それは仕事の月よりも後に、分割することは困難であり、まだそれはYCコンパイラ時のコンパイル、動的な実行を使用するために、複数の独立したソースモジュールに分割することができ、これは私のかもしれC ++ソースコードのFirefoxの全体的な構造は、木のためにその森を見たこと、したがって、また、明確ではありません。

ヤンXiaobing

私はFirefoxのC ++コードを再び全体的な分析のために準備していた場合は、原因管理システムは、多くの場合、失敗し、既存に、学校管理システムの開発に参加する機会があり、操作が非常に不便です。そこには開発経験のWebサービスプログラムではありませんが、私はWebサーバソフトウェアで何が素晴らしい関係を持っています。

Apacheまたはnginxのサーバー、MySQLやので、これらのツールの当社独自の研究開発に触発され、このようなASPやJSPやPHPなどの他のデータベースプログラミングツール、:必要なソフトウェアを開発するために、この管理システムの理解。Y- C / C ++コンパイラとHTMLとJavaScriptパーサのCに便利です。

時間が経つにつれて、安定したが、任意にスケーラブルで、非常に同時マルチスレッドHTTPサーバーは完了です。サーバは合格するYSPファイル生成Webブラウザを処理します。

YSPは私のデザインやWebプログラミング言語のようなASP、JSPやPHPの関数です。YSPファイルサーバを行うYC埋め込みC / C ++またはJavaScriptコードは、HTMLハイパーテキスト端末装置に送信生成します。ツールが良く、すぐに試作品管理システムを作った後、プロトタイプが公開YCコンパイラで見ることができます。

上記の作業を行った後、私はこの本を書くためにそれの時間は、時間をかけて書かれた、YCコンパイラを教え考える- 「マルチ言語プログラミングコンパイラYC」(仮名)今後。

私は本を​​完了すると、彼らはすぐに64ビットのC / C ++とJavaScriptコンパイラ、順調に進ん開発の発展に入れ、テスト段階に入りました。

編集後記:

三年は、新しい職場は穏やかなベテランになるとの無知であってもよいし、泣き言赤ちゃんのバウンスと幼い子供に変換することができます。そして、心の中ヤンXiaobingチームシンクは、困難は、単に技術的な困難を打破するために3年と3年、その後、1、2、または4年間を過ごし、そして最終的には自己啓発のコンパイラおよびYC YCブラウザカーネル。

このプロセスでは、ヤンXiaobingは最大の課題だけでなく、高度な技術だけでなく、思考であることを認めました。この期間中だけでなく、開発作業の多くを持っているだけでなく、最適化するには、繰り返し彼は独創性に貢献するコンピュータソフトウェアの科学の発展のためにそれに固執したかったので、コードを書き換えます。

現在、ヤンXiaobingのチームは、64ビットのC / C ++コンパイラを開発し、将来について話している、ヤンXiaobingは促進するために国内で最初であり、その後、海外に行きます。ヤンXiaobing祝福。

ポータルコンパイラYCます。http://www.ycbro.com

【終わり】

「フォース計画[第二四半期] -学習能力チャレンジ」開始!
今から3月21日まで、原作者、挑戦にあなたを待って排他的[全表示]メダルをサポートするために流れなければなりません

推奨読書 

開発者の中国の現実的な肖像画:JavaのChangsheng、Windowsオペレーティングシステムを好むが、めったにオープンソースプロジェクトに参加していません

新しいグローバルクラウン広がり、AI +ビッグデータは何が人類を救うことができますか?| AI技術生態学理論

商品と一緒に暮らすために過熱、Jingdongはあなたが私を助けることができると言います

SOTAを達成するために、最新の人体姿勢推定方法、3Dモーショントレーニングデータを必要としない| CVPR 2020

どのように別れを告げるとノウサギはnullでは?偉大な神がやっていることが判明しました!

ハッシュ関数、ハッシュ衝突、オープンハッシュから、ハッシュ記事は最後に構築されているものの考えやハッシュテーブルを示しています!

あなたは、私が好きなよう真剣に、すべてのポイントを見て

リリース1807元の記事 ウォンの賞賛40000 + ビュー1633万+

おすすめ

転載: blog.csdn.net/csdnnews/article/details/104788072