「恥ずかしがらないでください。 やっおみお」 Unity Alexandre Mutelずの生掻、コンパむラヌ、コンパむラヌの生掻に関するむンタビュヌ

システムプログラミングで成功する方法、知っおおく必芁があるこず、特に30幎以䞊働いおいる堎合はどうすればよいですか Cずパフォヌマンス-Cに衚瀺されるすべおを曞き換える䟡倀はありたすか 私たちを埅っおいる䜎レベルのコンパむラ技術に関しお、将来はどうなりたすか



今日、私たちの仮想スタゞオでは、 Alexandre Mutelが質問に答えたす。



Alexandre Mutelは、Unity Technologiesのリヌド゜フトりェアアヌキテクトです。 さらに、SharpDX、Markdig、Zioなどのプロゞェクトに貢献する有名なオヌプン゜ヌス開発者であり、2014幎以降はVisual Studioおよび開発テクノロゞカテゎリのMVPです。



Alexandreは、リアルタむムグラフィックスレンダリング、GPGPU、サりンド合成、マネヌゞ蚀語の効率的な䜿甚ずアヌキテクチャ、コヌド生成、ドキュメントの分野で、さたざたな䜎レベルおよび高レベルの問題に取り組んでいたす。


い぀ものように、むンタビュヌはJUG.ruグルヌプのEvgeny Trifonov phillennium ずOleg Chirukhin olegchir によっお行われたす。







投皿の最埌に、ディラン・ビヌティ別の有名なドナヌからの驚きがありたす-私たちはそれを期埅しおいたせんでした。


E。あなたは30幎の長いキャリアを持っおいたす-手始めに、それに぀いお簡単に話せたすか



それはすべお幌少期に始たりたした。私はAmstrad PC 464を手に入れたした。このコンピュヌタヌでプログラミングを始めたずき、私は11歳か12歳でした。正確に芚えおいたせん。 私はすぐにBASICプログラミングを習埗し、ゲヌム開発の本を賌入したした。 コヌドを開発しお曞くほうが面癜いゲヌムはほずんどありたせんでした。 それから私はアムストラッドのアセンブラヌコヌドを曞き続けたした。



16時に、Amiga 500を手に入れたした。デモを曞いおいた人に䌚いたした。今はたったくありたせんでした。 これがWebGLであり、これはたったく異なるデモシヌンです。 私は倚くのデモを曞き始めたしたが、それはい぀も芋せたわけではありたせんが、アセンブラヌで曞くのが奜きでした。 そしお、それはずおも簡単でした。



それから圌は高等専門孊校に行き、そこでコンピュヌタヌ工孊を孊びたした。 これはすでにゲヌムやアセンブラヌず比范しおたったく異なるものでした。 以前は存圚しおいなかったずさえ知らなかったものを孊ぶのが倧奜きでしたオペレヌティングシステム、UNIX、C蚀語での䜜業C / C ++コンパむラを賌入するお金がなかったのでBASICたたはアセンブラヌのみを䜿甚しおいたした。



圌は倧孊を卒業したずき、通貚垂堎業界で働き始めたした。 これはニュヌペヌクのフランス䌁業の仕事でした。 2幎埌、私は戻っお銀行に行きたした。 実際、銀行で働きたくなかったので、ゲヌム開発者で働きたかったのです。 しかし、その結果、そこにずどたりたした-新しい領域、孊ぶべき倚くのこず。 そこで私はそこで8〜9幎を過ごしたした。䞻にJavaを扱い、C ++を少し扱いたした。 倚くの分散サヌバヌずSQLデヌタベヌス、デヌタベヌスのコピヌ...私が今しおいるこずはたったくありたせん。



それから私は創造的な䌑暇を取り、䞖界䞭の芳光旅行に行きたした。私はアフリカ、南アメリカ、アゞアで䞀幎過ごしたした。 旅は私を倉え、私を揺さぶりたした。 戻ったずき、私はもはやコンピュヌタヌを扱うこずができたせんでした。ITの分野では、銀行で働くこずができたせんでした。 私は仕事を蟞め、子䟛、ホヌムレス、障害者、高霢者ず働くために゜ヌシャルワヌカヌコヌスに4幎間を費やしたした。 私はこれを3幎間勉匷したしたが、非垞に興味深かったです。なぜなら、私の人生のほずんどは、数孊、プロゞェクト、抜象化ずいう正確な科孊の分野で働いおいたからです。 そしお、圌は突然、非垞に人道的な地域に連れお行きたした。 トレヌニング埌にこの分野で仕事をしようずさえしたしたが、この期間䞭に、子䟛の頃にデモを行った友人が、これをもう䞀床できるずほのめかしたした。



私は自由な時間にデモを緎習し始めたしたが、すぐに路䞊で子䟛たちず仕事をする以䞊の時間がかかり始めたした。 それは悪かった。 人々は蚀った「私たちはゲヌム開発で仕事を芋぀けようずする必芁がある、どうしお できたす。」 しかし、私はそれが䞍可胜だず思った。なぜなら私は長い間コンピュヌタヌを䜿っおいなかったし、履歎曞でITの仕事を芋぀けるのが難しいからだ。



私はオヌプン゜ヌスアプリケヌションに取り組み始め、䌁業が䜿甚し始めたいく぀かのプロゞェクトをリリヌスしたした。 これらの䌚瀟の1぀から連絡があったずき、SharpDXず呌ばれる最新のプロゞェクトの1぀を䜿甚したした。 私は家族ず䞀緒に日本に行きたした-私はすでに2人の子䟛がいたからです。 私たちは日本に5幎間䜏んでいたした。 このずき、私はCでれロからゲヌム゚ンゞンを䜜成するこずに取り組んでいたした。



箄2幎前、私はフランスに戻り、Unityで働き始めたした。 これは私が前にやったこずを劚げたしたが、圌らはIL .NETコヌドからネむティブコヌドを生成するネむティブコンパむラを䜜成するずいう非垞に耇雑で興味深いタスク、実際のテストで働くこずを申し出たした。 これは私がい぀もやりたかったこずでしたが、できたせんでした。 そしお、チャンス、玠晎らしいチャンスがありたした。 私はこのプロゞェクトに2幎間携わりたした。



はい、物語はそれほど短くなかったようです。



E。䜕もない、そのようなキャリアは長い話の䟡倀がある。 あなたの経隓から、これをお聞きしたいず思いたす。 今では、「ムヌアの法則はもはや機胜せず、コンピュヌタヌは速くならない、私たちはすべお運呜だ」ず蚀う人もいたす。 他の人は答えたす「さあ、圌らは同じペヌスで加速しおいたせんが、ただ成長しおいるので、パニックする理由はありたせん。」 生産性のトピックはあなたに近く、同時にあなたは長い間業界をフォロヌしおいるので、あなたの立堎は䜕ですか



私はこの黄金の意味に固執しおいたす。 笑私たちが開発するアプリケヌションのほずんどではないにしおも、倚くのアプリケヌションが最初からパフォヌマンス芁件に適応しおいるため、可胜な限り最高の品質が埗られるず思いたす。



目の前でIT業界で䜕が起こったのかをご芧ください。 たずえば、Windows Vistaなどのように、Windowsが数幎かけお少し遅くなったずき 実際、パフォヌマンスを改善するために自然な䜜業が行われたした。䜕幎もそれに぀いお特に心配しおいなかったからです。 Windows 8が登堎したずき、それはもう少し良くなりたした。 その埌、Windows 10が登堎し、少し良くなりたした。 その結果、以前ず比范しお非垞にうたく機胜するシステムができたした。 これらの最適化を行うこずは圌らにずっお本圓に重芁でした。なぜなら、人々は必然的に「圌らの手段を超えお生き」、「ああ この゜フトりェアは機胜しなくなりたした。Linuxに切り替えおいたす。なぜなら、それはより速くお愚かではないからです。」



私たちが開発するすべおの゜フトりェアに぀いおも同じこずが蚀えたす。 そしお驚くべきこずネむティブコヌドを䜿甚する傟向が垞にあり、WindowsでもC ++に戻るこずを決めた時点で、「C ++は解決策です。 「。 そしお再び、母囜語が関連するようになりたした。



同時に、ChromeのV8はJITのおかげでJavaScriptを䜿甚できるようにしたした。 JSはスクリプト蚀語であり、超高速ではありたせんが、C ++の2倍の速床で動䜜する堎合がありたす。 Visual Studio Codeでのコヌドの䜜成など、圌が生き残り、今すぐ䜿甚するのに十分でした。 しかし、よく芋るず、それはすべお、最初からパフォヌマンス芁件が定められおいるためです。 VSCodeでさえ、䞀般に倚くのJavaScriptおよびスクリプトコヌドがありたすが、他のすべおV8、レンダリングスタック、JITはすべお、最高のパフォヌマンスのために蚭蚈された蚀語、぀たりC ++で蚘述されおいたす。 すべおをC ++ずは限らない別の蚀語で曞くこずもできたすが、実際には、この゜フトりェアはすべお最初からパフォヌマンスを考慮しお開発されたものです。



確かに、効率の悪い生産的な蚀語を䜿甚できたすが、それは基瀎ずなるすべおのテクノロゞヌが玠晎らしいナヌザヌ゚クスペリ゚ンスを獲埗するこずを目的ずしお開発されおいるためです。 たずえば、Visual Studio Codeは開発者にずっお非垞にうたく機胜し、問題を解決する玠晎らしい゜フトりェアです。 倚くの人は、「より倚くのネむティブコヌド゚ディタヌを䜿甚したいのですが、今はVisual Studio Codeに切り替えおいたす」ず蚀っおいたす。 パフォヌマンスはどこにでもありたすが、䜿甚するすべおのものに既に組み蟌たれおいるために衚瀺されない堎合がありたす。



私たちは思うそれはJavaScriptで曞かれおいる、なぜならそれは十分に速いからだ。 しかし、䜕癟人もの開発゚ンゞニアが䜕幎もJITを最適化するために働いおきたずいう理由だけで、JavaScriptは非垞に高速です。 非垞に耇雑なアプリケヌションを䜜成する堎合でも、スクリプト蚀語を䜿甚できるようになりたした。 このすべおの準備䜜業がなければ、スクリプト蚀語ははるかに遅くなりたす。 私たちは奇劙な時代に生きおいたす。 私たちには遞択肢がありたすが、それでもすべおの蚀語で䜕床も繰り返されるパフォヌマンスの物語がありたす。



.NETは兞型的な䟋です。 過去3〜4幎にわたっお、膚倧な䜜業が行われたした。 い぀かASP.NET Coreを芋お、CoreCLRで行われたすべおの䜜業を芋るず...パフォヌマンスは売れ行きが良く、お金がかかり、より倚くを達成できたす。 厳しい芁件を満たそうずするず、生産性を高め、電力を節玄し、月末にお金を節玄できたす。パフォヌマンスはすべおに圱響したす。 「すべおが順調です。アプリケヌションを開発しおいたす。平均的なパフォヌマンスがありたすが、そうなりたす...」ず人々が蚀っ​​おいるのを聞いたずき、圌らは䜕を考えおいたすか アプリケヌションの生産性をもう少し高めるこずができるかどうかを確認するには、少し時間をかける必芁がありたす。 リ゜ヌスたたはアプリケヌションのランタむムを10分の1でも節玄できる堎合は、それで十分です。



E。哲孊的な質問が郚分的にありたす。 Slackは技術的な解決策ずしお最適な堎所ではないず考えおいたすが、サむトでは叀い孊校のRSSを賌読するこずを提案しおいたす。 むンスタントメッセヌゞングの新しい時代が開発者の生産性を䜎䞋させおいるず思いたすか



いいえ、そうは思いたせん。 今、私はリモヌトで䜜業しおいたす。 Unityの職堎では、リモヌトで䜜業できるため、私は垞にSlackを䜿甚しお同僚ず通信しおいたす。 これは私が連絡を取り合い、生産性を維持するための最良の方法です。 チャンネルなどを確認する必芁があるため、これには仕事から倚くの時間がかかりたすが、䞀時的にSlackをオフにしお仕事に集䞭するこずができたす。 私はオヌプンスペヌスで䌚瀟に勀めおいたしたが、遞択の䜙地はありたせんでした。誰かが質問をしたい堎合、すぐに答えなければなりたせん。それははるかに耇雑です。



Twitterずメヌルに぀いおは、あたり頻繁にチェックしたせん。 Twitterを1日に1〜2回読むのは、さたざたな芁因に䟝存したす。議論に参加するかどうか、議論するこずです。 Slackのようなものを䜿甚するず、瀟内のさたざたなチャネルに参加したり、単独で䜜業した堎合には埓うこずができない倚くのトピックに埓うこずができたす。 劥協点を芋぀ける必芁がありたす。私たちは皆、䌚瀟で起こる倚くのこずを心配しおいたすが、すべおの議論に同時に参加するこずはできないので、遞択する必芁がありたす。 䜕人かの人々は非垞に倚くのチャンネルを読むこずができるので、私は圌らの胜力に単に驚いおいたす。私自身はそうではありたせん。 今日、私は玄30のチャンネルを読みたしたが、これはそれほど倚くありたせん。



E。オレグの質問の時間をありがずう



A。私のキャリアはあなたのキャリアずいくらか䌌おいたす。私は銀行で働いおいたしたが、珟圚はたったく異なる分野で䌚議を開催し、同時にコンパむラヌの構築方法を芋぀けようずしおいたす。 単玔な゚ンタヌプラむズWeb開発者からシステムプログラミングに切り替えようずしおいる人に、䜕をアドバむスできたすか。そのような移行に関するヒントはありたすか。 ここには、十分な数の人はいないず思いたす。



そのような移行のための準備されたパスがあるかどうかはわかりたせん。 そのような技術に興味があるなら、普通の宿題をしたす。 自宅では、パヌサヌやコンパむラに関連するものを曞きたす。 最初から最埌たで、コンパむラヌ党䜓をマシンコヌドの生成たで曞く必芁はありたせん。 コンパむラむンフラストラクチャの䜜成に興味を持぀ようになりたす。 これが私が近幎Unityで働いおいるこずです。 あなたが䜎レベルのものに情熱を持っおいるなら、これはそれがすべお実際にどのように機胜するかを理解できる堎所の1぀です。 䜜業を改善する方法、パフォヌマンスを改善する䟡倀がある堎所、およびこれがただ行われおいない堎所。 パフォヌマンスが心配な堎合は、アプリケヌションが最終的に実行されるものを認識するこずが非垞に重芁です。



パフォヌマンスは私のテヌマであり、これはすべお私にずっお玠晎らしい機䌚になりたした。 私は、コア、぀たりコンパむラレベルで問題の解決策にアプロヌチしたいず思いたす。 ナヌザヌにずっお必芁な堎所で生産性を数十倍に高めるこずができるのはここです。 ゲヌム、アプリケヌション、映画などを実行する堎合、そのような結果を達成するのは比范的簡単な堎合がありたす。



䜎レベルのものずコンパむラヌコンポヌネントに察する私の情熱は、珟圚の仕事に私を導きたした。 しかし、それは私が特にやりたかったこずではありたせんでした。 時には、異なる蚀語で倚くの経隓を積んだら、アプリケヌションを䜜成したす-あなた自身の蚀語を考え出しさえしたいのです。 私はこれを始めたしたが、仕事が倚すぎるのでやめたした。 しかし、あなたは「根に」戻り、すべおを理解するために自分で䜕かをしようずする朜圚意識の欲求を持っおいたす。 もちろん、コンパむラヌがどのように機胜するかは理解しおいたしたが、芁件の耇雑さは理解しおいたせんでした。 たずえば、メモリ管理の分野で察凊する耇雑なトレヌドオフ。 アプリケヌション開発者の生産性を高め、効果的なものを同時に遞択するこずは非垞に困難です。 この問題はただ最埌たで解決されおいたせん。 Rustたたは.NETはこれを決しお解決したせん。 Rustは玠晎らしく、驚くべきものですが、特にJavaScriptのようなもので切り替える堎合は、䜜業が困難です。 ただし、Rustに移行しおいるPythonたたはJavaScript開発者の䟋がありたすが、これは倚少驚くべきこずです。



A。過去10幎間Cでプログラミングしたずおっしゃいたしたが、Cでは䜕が良いのでしょうか たずえば、なぜC ++ではないのですか C ++はより䜓系的な蚀語のようです。



正盎に蚀うず、私はC ++が嫌いで、Cは嫌いですが、私は圌らず䞀緒に働いおいたす。 私はそれらが倚くのバグ、巚倧な開発の非効率性に぀ながるず心から信じおいたす。 倚くの人は、Cでプログラミングしおいるので、プログラムがパフォヌマンス指向であるずいう事実䞊のコヌドをすでに事実䞊曞いおいるず考えおいたす。 これは真実ではありたせん。 mallocなどのヒヌプをスカルプトするず、.NETで蚘述されたものず比范しおも遅くなりたす。 優れたC / C ++開発者は、 リヌゞョンメモリアロケヌタヌのようなトリックを䜿甚せざるを埗たせん。 誰も聞いたこずのないたくさんの奇劙なこずに自分自身を埋めなければなりたせん。 ここでは、ゲヌム開発者は通垞そのようなこずを知っおいたす。 少なくずも、AAA開発者たたはC / C ++フレヌムワヌクでゲヌムを䜜成する人々。 問題の䞀郚は、蚀語自䜓の耇雑さに起因しおいたす。 以前は、C ++の本をたったく読んでいたせんでしたが、ほんの3、4幎前に、蚀語を感じるためだけにC ++の本だけを読み始めたした。 私はそれをプログラムしたしたが、䜓系的で正匏なアプロヌチがありたせんでした。その耇雑さ、すべおを正しく曞かないず砎滅するこずのあるものの数に驚かされたした。



数か月前にUnityにバグがありたしたが、誰かがC ++コヌドでミスを犯したした。それはコンストラクタヌにあり、䜕かが倀で枡されたため、この倀からアドレスを取埗しおキャッシュで探したした。 実際、メモリになくなった倀を参照したした。 これはすべお、ポむンタヌが非むンゞケヌタヌず混同され、このリファクタリングを行った人がすべおの䜿甚堎所をチェックしなかったためです。 完党に機胜するたったく異なるコヌドが突然機胜しなくなりたした。 それは小さな間違いのようですが、すべおを壊したした。 実際、これはメモリの操䜜における間違いです。 そうです、そういうものを芋たずき、私はCずC ++での䜜業ぞのアクセスを制限し、それらの䜿甚を最小限にしなければならないず確信しおいたす。 .NETの郚分では、䜿甚をプラットフォヌム固有のものにのみ制限したした。 しかし、すべおをCで曞くのはかなり面倒です。 APIにアクセスするには、たくさんのdlopenを実行する必芁がありたす。 ただし、たずえば、これらすべおをCのラッパヌにカプセル化し、1぀の関数だけでアクセスを敎理するこずができたす。 そのようなものを分離し、CおよびC ++でさらに開発したいず思いたす。 しかし、これは盞互運甚性に関する非垞に狭いトピックであり、その埌、通垞の制埡蚀語にずどたり、ほずんどの堎合それを䜿甚し、より高速なコンパむルをお楜しみください。



C ++コンパむラずリンカの゚ラヌが嫌いです。異なるプラットフォヌムで䜜業する必芁が嫌いです。これはすべお非垞に難しいこずです。 MSVCでコンパむルを開始したら、Clangに切り替えおからGCCに切り替える必芁がありたす。 Linux、Mac、Windows、Android、iOSなどで。 C ++での䜜業は悪倢です



゚ディタヌファむル、.hファむル、およびcpp。ファむルの分離は嫌いです。 人々は蚀語に完党に混乱し、マクロでプログラムを開始したす。 私はメタプログラミングが倧奜きですが、珟代のC ++では完党に狂気に陥りたす。 これらのこず自䜓は玠晎らしいですが、実際にはすでに倚すぎたす。



芁玄するず、はい、Cで効果的な゜フトりェアを開発できるず思いたす。 C ++ほど高速ではないかもしれたせんが、可胜です。 これはたさにUnityでやろうずしおいるこずです-たずえば、C ++の堎合よりもさらに倚くの堎所で最倧のパフォヌマンスを達成するために、Cの特定のサブセットをコンパむルするバヌストコンパむラを実行しおいたすが、Cに残りたす。 それは完党に安党です。 ポむンタヌに぀いおは、安党でないず宣蚀し、䟋倖をスロヌせず、すべおを明瀺的に行う必芁がありたす。 そしお、これは苊い経隓です。 ただし、C ++ず同じくらい高速なコヌドを䜜成できたす。 これはたさに.NETが進む䟡倀のある方向であり、私たちが進むべき方向だず思いたす。



A。たずえば、オヌプン゜ヌスコヌドに぀いお話すず、非垞に倧きくお恐ろしいCファむルである.NET Coreにガベヌゞコレクタヌがありたす。 おそらく、ある皮のLispから生成された2メガバむトのゎミです手䜜業で曞く䟡倀のある文字はほずんどありたせんでした。 おそらくここですべおをCで曞き盎すのが理にかなっおいたすか



はい 私は、Microsoftずコミュニティの䞡方でJITに携わっおいる人々ずチャットしおいたす。 私が本圓に信じおいるものがありたす。 あなたの蚀語がより成熟し、基本的になった瞬間があるず信じおいたす。そしお、あなたはそれに挑戊し、匷さをテストしなければなりたせん。 基盀ずしお䜿甚できる必芁がありたす。 パフォヌマンスを非垞に芁求するものを䜜成するためにも䜿甚できるこずを蚌明しおください。 これがガベヌゞコレクタヌずJITの物語です。 JITやGCなど、非垞に倧きな割合の.NETランタむムサブシステムをCで実行できたす。 C ++で基本プラットフォヌムの抜象化しか蚘述できないずいうルヌルを䜜成するず、ほずんどのランタむムプラットフォヌムが独立したす。 これが起こったらずおもうれしいです。 しかし、これは倧きな仕事です。



私がこのアむデアが特に奜きな理由が1぀ありたす。 , C/C++ , - . , . - , IDE , , — . C#, . , , . . , , , CoreRT C# C++. .



, .NET GC C#. . , , .NET GC, -. GC, , - GC. Java- Jikes RVM — Java. , Golang C, Golang. Golang-, , . , , , . , . LLVM, .NET JIT.



, , .



.: , . — . , AST- . Golang , . , ? ?



, , ! , . : . : -, .



: , , , , . , : « ! !». . , .



LLVM, — , . , , , , , . . , , . , . , , , , ? , , , . , - : «, , , - » — , , , .



, . , , , , , , - . , : , , . , , . , , . , . , — .



— . -. , -, API, . . , SharpDX . . , , , . DirectX C++ API, C++. , . , - , . : , . , SharpDX. , PR, . pull request ( ). - . - , SharpDX - . : « ?» ( , ) , . 90- — . , , .



, , , , : , , .



.: — , ? . , , ?



, — , SIMD. , , SIMD , . ( LLVM, , ). , , . , , , . - , . , . . - Intel LLVM. , , LLVM. , , . LLVM — , , , .NET. SIMD, CPU — . , , .NET — SIMD- . , , .



: « ». . . LLVM : -, , . , , Roslyn C#, . , , . , , , . SIMD — . GPU, CPU, — . 6, 8, 16, 42 . - , , .



.: Markdown Markdig, ? , Markdown? , ?



, Markdown — , . , , Word - . . ? , , . . , RFC — , , , . , , . , ASCII-art. Word, PDF . Word. - — . , . Markdown, , - — , HTML. , . HTML, Markdown . , Github, Markdown- . . — . , Microsoft Markdown, GitHub, PR — , .



Markdown, CommonMark, , Markdown. , CommonMark — . , , . , Github CommonMark . — . . Microsoft CommonMark, Markdig. , Markdig , Markdown-, . , , , CommonMark, Markdig. , . Markdig , , , . , Microsoft .



.: , ? ?



, . — , . . , . , , , . , . « , , ». , ? , , , , , - . , Google « X» « ». , — . , , , . , , - — , . « , - ?»



, , . . , , . , - . , , , . — , , ? , ? おそらくない。



, . . ? ? , , . , 
 - , . . , , , .



. . ! , . — . , — - . , , , . , , , . , . , . . , - : « !». -, , , . , . .



, , , , , , , - , .






«Behind the burst compiler, converting .NET IL to highly optimized native code by using LLVM» DotNext 2018 Moscow . 22-23 , , DotNext . , , , — :





All Articles