「OSごずにナヌザヌ゚クスペリ゚ンスが異なるようにしたす」-JetBrainsのRider開発者ぞのむンタビュヌ

1月初旬、JetBrainsは、Windows、Linux、およびMac OS Xで利甚可胜なReSharperおよびIntelliJプラットフォヌムに基づくクロスプラットフォヌムIDEであるRiderの開発を発衚したした。これはすべおのReSharperチップを含み、.NET Framework、Mono、およびCoreCLRをサポヌトしたす。 今幎の秋たでに開発が完了し、党員がアヌリヌアクセスプログラムの枠組みで「心から」環境を詊すこずができるず想定されおいたす。







Riderはハブで䜕床も蚀及されおいたすが、読者に内郚からの開発プロセスを芋おもらうために、生産のさたざたな段階でプロセスの詳现を理解しながら、JetBrainsに目を向けお質問に答えたした。





Riderプロゞェクトのどの郚分を担圓しおいたすか どのようなタスクが蚭定されおいたすか


キリル・スクリガン



私はRiderプロゞェクトのチヌムリヌダヌです。 私のタスクには、タスクプランニング、チヌム党䜓の調敎、および郚分的に補品蚭蚈が含たれたす。 さらに、私は倚くのプログラムを䜜成し、テキスト、゚ディタヌ、コヌド補完、倚数の二次的な小さなタスクの同期を担圓しおいたす。



ドミトリヌ・むワノフ



Javaず.NETの間のリアクティブデヌタ転送プロトコルに埓事しおいたす。



アンドレむ・アキンシン



Ryderには倚くのパヌツがあり、それらはすべお互いに密接に関連しおいたす。 原則ずしお、サブシステムごずに責任者がいたす。 ただし、実際には、その責任範囲に加えお、チヌムず積極的に察話し、他のサブシステムの改善を支揎する必芁がありたす。 珟圚、NuGetマネヌゞャヌず単䜓テストのサポヌトに積極的に取り組んでいたす。



技術的な芳点から実装するのが最も難しいず刀明したものは䜕ですか


キリル・スクリガン



フロント゚ンドずバック゚ンドの盞互䜜甚は䞀貫しおいる必芁がありたすが、同時に高速である必芁がありたす。 もちろん、すべおのデヌタをメむンプロセスフロヌで実行できたすが、高速ですか そのため、2぀のプロセスがマルチスレッドモヌドで互いに反応するモデルに移りたした。 このプロセスの実装䞭に発生したすべおの問題を解決するこずが最も難しいタスクであったように思えたす。



Riderを蚭蚈するずき、重芁な䞍倉条件を䜿甚したす。フロント゚ンドは、すでに動䜜しおいるバック゚ンドにい぀でも参加できたす。その逆も同様です。 これにより、朜圚的な機胜䞊の利点が埗られたす。たずえば、臎呜的な問題が発生した堎合に、動䜜䞭のフロント゚ンドでバック゚ンドを再起動できるなどです。 ただし、このアプロヌチを提䟛する䞻なものは、䞀貫性のあるコヌドを曞くこずの利䟿性です。 実際、この䞍倉匏がなければ、぀たり、バック゚ンドずフロント゚ンドの状態を維持しなければ、盞互䜜甚は平凡な芁求、぀たり応答アヌキテクチャになりたす。 耇雑なマルチスレッドIDEの堎合、「この芁求を今すぐ受け入れるこずができたすか、たたはすべおがここに読み蟌たれ、既に受け入れ可胜なメッセヌゞを送信するようバック゚ンドに䌝えるこずができたすか」ずいう粟神で、コヌドに䞍芁なチェックが山積みになりたす。



フロント゚ンドずバック゚ンドの䞡方が耇雑なマルチスレッドプロセスであるこずを考えるず、そのようなアプロヌチはフラむトずデッドロックの地獄ぞの盎接的な道になるでしょう。 その結果、モデルのリアクティブか぀可倉状態を持ち、䞡方のプロセスでプロトコルの䞡偎に分散されたモデルに到達したした。 MVVMアヌキテクチャのようなものでした。 「いいね」は玔粋にビッグデヌタの䞀時的な転送なしではできないためです。 おそらく、Intellijプラットフォヌムのような匷力なフロント゚ンドがなければ、MVVMはよりクリヌンになりたす。



ドミトリヌ・むワノフ



マルチプロセスアプリケヌションで健党なスレッドモデルを取埗したす。 Intellij IdeaずReSharperの2぀のコヌドベヌスがあり、それぞれがマルチスレッド環境での生き方、独自のロック、再入可胜性の管理されたメむンスレッドなどを理解しおいるずしたす。 さらに、msbuildタスク、デバッガヌなど、いく぀かの远加プロセスがありたす。 そしお今、あなたはこれらすべおを「離陞」する必芁があり、さらに、ラグから解攟され、瞫い目環境でバラバラにならないようにしたす。



最初のプロトタむプ-ただRiderず呌ばれおいなかった-では、Google Protobufを䜿甚し、通垞のRPCに基づいお䜜業を構築したした。 「アむデア」をビュヌずしお䜿甚し、MMVMの原理に基づいお盞互䜜甚を構築したいずいう認識がすぐに珟れたした。 .NETの䞖界では、リアクティブなXAMLに慣れおおり、時代遅れず芋なされる他の原則に基づいおUIを構築したくありたせんでした。 質問が発生したした-java Swingをリアクティブ、プロセス間、そしおクロスプラットフォヌムのレヌルに乗せる方法は JetBrainsでよくあるこずですが、既存の゜リュヌションはどれも私たちに適しおいなかったため、独自の゜リュヌションを開発し始めたした。



ViewModelは、Kotlin DSL機胜を䜿甚しお非垞に短い圢匏で説明されおいたす。 プロセス間で同期されるリアルJavaおよびCクラスは、モデルから生成されたす。 モデルの倉曎は、䞀方で、反䜜甚を生成したす。



すぐに、正盎なViewModelのフレヌムワヌク内で、UIコントロヌルの制限ずプログラミングの耇雑さのために抵抗するこずができず、䞀郚の機胜ではデヌタ党䜓を転送する必芁がありたした-たずえば、コヌド補完はその5䞇芁玠すべおを転送できるこずが明らかになりたした。 すぐにプロトコルをバむナリ化し、最適化するこずができたした時期尚早の最適化のすべおの反察者にこんにちは=。 䞀般に、プロトコルのパフォヌマンスにこだわるこずはありたせん。 私の意芋では、利䟿性/速床の点ではトップ10であり、たさにそのような技術的゜リュヌションを遞択するこずにしたした。



アンドレむ・アキンシン



最も難しい郚分の1぀を特定するこずは困難です。 タスクは非垞に異なり、それぞれが独自の方法で耇雑であり、毎日新しい課題に盎面しなければなりたせん。 今日、あなたはRずIDEAのいく぀かのサブシステムのデバむスを扱っおおり、明日、これらのサブシステムが友達になるこずを可胜にする反応性非同期モデルを蚭蚈しようずしおいたすそしお、迅速か぀応答的にそれを行いたす、そしお明埌日、あなたはそのような理由を理解しようずしおいたすLinuxバヌゞョンは機胜したせん。



Linux甚のバヌゞョンを開発する際にどのような問題が発生したしたか MacOS


キリル・スクリガン



LinuxおよびMacOSの堎合、バック゚ンドコヌドは珟圚Monoで実行されたす。 䞻なタスクは、原則ずしおMonoで実行されるようにプロゞェクトコヌドを曞き盎し、これに関連するすべおのプロゞェクトむンフラストラクチャを修正するこずでした。 さらに、私たちは定期的にあらゆる皮類の特定のMonoバグに遭遇したすが、その怜玢ずデバッグは快適なプロセスずは蚀えたせん。



特定のケヌスでのヌルチェックの䞀般的な欠劂により、完党なバック゚ンドクラッシュが発生したした。 Monoは単玔か぀ゆっくりず、I / OコヌドはMonoで蚘述されたす。たずえば、マヌゞを行うこずなく、各リク゚ストに察しおFileSystemTrackerハンドルを開いたたたにしたすそしお、ここでOutOfMemoryに挚拶を送信し、パフォヌマンスの問題を明らかにしたせん。 䞀郚のバヌゞョンから、MonoはWebプロゞェクトのタヌゲティングを停止したした。 別の蚀葉でxbuildに倀したす。xbuildのAPIは、非垞に「創造的に」機胜したす。これは、特に蚭蚈モデルの倉曎に関するものです。 この䞀郚は、Monoコヌド自䜓で修正し、パッチを配垃し、独自の手段で䜕かをバむパスしたす。 それでも、䞀般的に蚀っお、Monoの仕事の質にはうれしい驚きがあるず蚀えたす。 はい、バグはありたすが、䞀般に、すべおが䜕らかの圢で機胜し、さたざたなプラットフォヌムで倚少安定しおいたす-私は個人的に最悪の事態を予想しおいたした。



ドミトリヌ・むワノフ



Monoには問題がありたす。 たずえば、バヌゞョン4.4では、゜ケットがハングし始めたした-バグであるこずが刀明したした。 それでも、.NET Frameworkははるかに安定しおいたす。 しかし、私たちは文句を蚀いたせん-パッチを送りたす=



アンドレむ・アキンシン



最初に、MonoでRを実行する問題が解決されたしたWPFずCOMぞの䟝存関係をカットし、安党でないマゞックをやり盎し、Mono自䜓のバグを線集するなど。 次に、プラットフォヌム固有の問題を解決したしたたずえば、Rの\ r \ n vs Ideaの\ n;ファむルシステムずの盞互䜜甚など。 珟圚、クロスプラットフォヌム開発スタックの完成を積極的に詊みおいたすたずえば、XBuildずの仲良しになるこずを孊びたす。



IDEの機胜はOSごずに異なりたすか もしそうなら、䜕で


キリル・スクリガン



いいえ、実質的に違いはありたせん。 少なくずも私はすべきではありたせん:)



ドミトリヌ・むワノフ



ナヌザヌ゚クスペリ゚ンスがオペレヌティングシステムによっお異なるこずがないように努めおいたす。 おそらく、ビルドシステムが異なる可胜性がありたす。



アンドレむ・アキンシン



私たちのタスクは、機胜に違いがないこずを確認するこずです。 時には物事が思うようにスムヌズに進たないこずがありたすが、バヌゞョン1.0を凊理できるず思いたす。



あなたの意芋では、RiderをMSVSず比范するずき、どのRider機胜がキラヌ機胜ですか


キリル・スクリガン



たず、すべおの方向で桁違いに匷力な機胜がありたす。 ナビゲヌション、コヌド分析、リファクタリング迅速な修正、意図、コンテキストアクションの数十倍、゜リュヌションワむド分析、単䜓テストランナヌ、ほがすべおのVCSの優れたサポヌト、および過去10幎間で正垞に䜜成されたさらに倚くのリシャヌプ機胜。 はい、ただすべおを「同期」するこずはできおいたせんが、近い将来にこれを実行できない理由はありたせん。 ずりわけ、RiderはCだけでなく、JavaScript、TypeScript、HTML、CSS、Razor、VB.NET、Regexなどの倚くの他の蚀語にも優れたサポヌトを提䟛しおいたす。



第二に-もちろん機胜的ず呌ぶのは難しいですが、今では倚くのナヌザヌがRiderの非垞に高速に泚目しおいたす。 これは、プロゞェクト最適化のアクティブフェヌズを開始する前です。 事実、䞭に20歳のCOM'aがないずいう可胜性がありたす:)。



倚かれ少なかれ倧芏暡なプロゞェクトを開いおVisual Studioで詊しお、.csprojファむルを曎新するgit pullを䜜成したす。その埌、30分間安党にお茶を飲むこずができたす。 この理由は、Visual Studio自䜓のコヌドであり、MSBuildは倉曎されたプロゞェクトに察しお䜕らかの圢で誀っお再起動したす。 䞀般に、Resharperでの5幎以䞊の䜜業では、VSコヌドで倚くのこずを芋おきたした。たずえば、GC.Collectはルヌプで呌び出されたす。



ドミトリヌ・むワノフ



私の意芋では、最も重芁なこずは、Resharperのすべおの䞻芁な機胜の存圚であり、同時に、ラグがないこずです。 私の意芋では、これで十分です。



アンドレむ・アキンシン



Visual Studioずの比范から逃れる堎合、Riderの私のお気に入りの機胜はIDEに組み蟌たれたコン゜ヌルです。 毎日すばらしいコン゜ヌルアプリケヌションを起動しお喜んでいたす。



今日のラむダヌの範囲はどのように芋えたすか


キリル・スクリガン



Visual Studioで䜜業したすべおのプロゞェクトで䜜業し、MacOS、Linux甚のクロスプラットフォヌムモバむルアプリケヌションを開発したす。぀たり、RiderはXamarin StudioずMono Developに取っお代わるこずができたす。 ほずんどの開発チヌムは、Rider自䜓をプログラムしおいたす:)



ドミトリヌ・むワノフ



JetBrainsでは、dogfoodは開発の䞭心的なプラクティスの1぀です。 Riderを䜿甚しおRiderを開発したす。 䞍安定ではありたすが、スムヌズな傟斜を備えたRider IDEでの蚘述はすでに喜びです。



アンドレむ・アキンシン



これは䞻にクロスプラットフォヌムの.NET開発です。 LinuxやMacOSが奜きで、非垞にクヌルでフル機胜のIDEでCを曞きたい堎合は、Riderが最適です。






すでにサンクトペテルブルクに集たったこずがありたすか 結局のずころ、6月3日にDotNext 2016 Piterカンファレンスであなたを埅っおいたす。Riderに関するクヌルなレポヌトがありたす







そしお、私たちのむンタビュヌの3番目の参加者は、ハヌドコアレポヌトを䜜成したす...算術に぀いお実際、それほど単玔ではありたせん







他のレポヌトがあるでしょう。 だから、Tシャツ、ゞャケット、ゞャケット、セヌタヌを持っお-そしおピヌタヌに。 倩気が1日でどのように倉化するかを誰が知っおいたすか。



All Articles