
Egor Bogatov هو مطور Microsoft من فريق Mono يعمل على Mono ويدمجه مع .NET Core. تحدثنا معه عن كيفية العمل داخل Xamarin و Microsoft ، عن حب تطوير اللعبة. ناقشنا سبب كون SSDs أفضل صديق للمطور ، ولا ترتبط فائدة العروض التقديمية للمؤتمرات دائمًا بتعقيدها. كما هو الحال دائمًا ، يتم إجراء المقابلة بواسطة Oleg Chirukhin (
olegchir ) من مجموعة JUG.ru.
تقديم: حول العروض التوضيحية المشفرة وكيفية الدخول إلى Xamarin
- دعنا نقول لحبر من أنت ، ماذا تفعل.- أنا مطور ، أعمل في مكدس .NET لمدة عشر سنوات تقريبًا ، عملت قليلاً في Java وكتبت قليلاً في Android.
كان يعمل في شركات مختلفة: بدءًا من الاستعانة بمصادر خارجية ، ثم تحول إلى البقالة ، مثل Viber و Playtika. ثم عملت بشكل مستقل قليلاً ، بما في ذلك في Java ، وذهبت للعمل في Xamarin.
- كيف وصلت إلى هناك؟- لقد كنت مدمنًا على .NET و Mono لفترة طويلة جدًا. لقد أحببت C # ، لكني لم تعجبني سياسة Microsoft ، التي ربطتها بقوة بنظام Windows. لذلك ، أنا أتابع التنفيذ عبر الأنظمة الأساسية منذ بدايتها.
راقبت بنشاط مونو ، Xamarin ، بمجرد ظهوره: أحببت المفهوم نفسه. شارك في منافساتهم وحصل على المركز الثاني عدة مرات. لقد لوحظت وعرضت العمل كمقاول ، وكتب ميغيل دي إيكاس نفسه ، والذي كان بمثابة مفاجأة كاملة بالنسبة لي ، لأنه بالنسبة لي كان أسطورة.
- من أين بدأت؟- دعاني ميغيل لكتابة عرض توضيحي ، والذي تضمن الدردشة مع التشفير الشامل لمنصات الجوال. كانت لدي خبرة في العمل مع تطبيقات الدردشة وكنت مغرمًا بموضوع التشفير ، لذلك أخذوني في البداية إلى الواجهة الخلفية ، لكنني قلت أنه يمكنني تطوير Android أيضًا. بعد ذلك ، شاركت في العديد من مشاريع Xamarin التابعة لجهة خارجية - لم يُسمح لي أيضًا بالدخول إلى مكونات وقت التشغيل.
ميغيل لديه العديد من المشاريع المثيرة للاهتمام. أحيانًا يبدو لي أن هذه مجموعة من الأشخاص تحت نفس الاسم. حسنًا ، لا يمكن لشخص واحد أن يتلعثم في كل شيء ، والإجابة على الجميع ، والوعي بكل شيء.
عدة مرات قمت بعمل عرض توضيحي له من أجل مؤتمرات كبيرة مثل Xamarin Evolve و MS Build - هذا هو أكبر مؤتمر للمطورين في Microsoft.
وما هي أهميتها التجارية لهذه العروض التوضيحية ، لماذا هم في حاجة إليها؟مجرد تقنية الإعلان بين العملاء المحتملين. على سبيل المثال ، أظهر أحد العروض التوضيحية مثالًا على كيفية دمج التصور ثلاثي الأبعاد بسهولة في تطبيق منتظم على أي نظام أساسي ، وكانت هذه الفرصة محل اهتمام العديد من الشركات الجادة في هذا المجال.
عن الوظيفة: المهام والنزاع الأبدي "بعيد أو مكتب"
"ماذا تفعل الآن؟"- تم نقلي إلى فريق وقت التشغيل ، أي مباشرة إلى مونو. مسؤوليتي الرئيسية هي دمج Mono و .NET Core ، أي في مكان ما بين وقتين. هذا يسمح لي بفهم .NET بشكل أفضل ، لأنني كل هذه الأنواع ، بدءًا من أبسطها وانتهاءً بالمركب المعقد والبحث والبحث بدقة. في غضون عامين ، تمكنا من بناء قاعدة خبرة جيدة والتعرف على جميع المطورين الرئيسيين.
"هل تعمل من المنزل؟"- لدينا مكتب مايكروسوفت صغير في مينسك. أقوم بزيارة هناك بشكل دوري ، ولكن في الغالب أعمل من المنزل.
- وما هو الأفضل: العمل في المكتب أو المنزل؟- للعمل في المنزل تحتاج إلى الكثير من الانضباط الذاتي. أحاول بشكل دوري دمج هذا مع السفر ، لكنه لا يعمل بشكل فعال للغاية. على سبيل المثال ، أحتاج إلى جهاز كمبيوتر مكتبي سليم مع ثلاث شاشات. على الكمبيوتر المحمول ، لا يمكنني العمل بشكل مريح.
- هل تحتاج هذا للشاشات أم أن طاقة الكمبيوتر مهمة؟- ومن أجل المراقبين ومن أجل السلطة. أحتاج بشكل دوري إلى تجميع أوقات تشغيل مختلفة: أحادية ، coreclr ، corert ، قرص الآلات الافتراضية ، إلخ. للقيام بذلك ، أحتاج إلى معالج متكامل ، وليس سوء تفاهم قطعه TPD ، وبالطبع ، SSD سريع.
- إذا كنت ترغب في العمل على كود مونو ، هل تحتاج إلى كمبيوتر عادي؟- يحتوي Mono على الكود المصدري لـ .NET و .NET Core في شكل وحدات فرعية ، لذلك في النهاية هناك عدد كبير من الملفات التي تحتاجها للتنقل بسرعة من خلال بطريقة ما ، لذلك فإن أهم شيء هو SSD سريع. نحتاج إلى أخذ شيء من Samsung 960 Pro والإصدارات الأحدث. عنق الزجاجة دائما في IO.
- صف يوم عملك- أعمل عن بعد من مينسك. الجزء الأكبر من فريقي في الولايات المتحدة ، على الرغم من وجود العديد من الأشخاص في أوروبا ، هناك أشخاص في اليابان وأستراليا وحتى في إفريقيا. مثل هذا الفريق الموزع. نتواصل بشكل رئيسي في Slack ، ونعقد مسيرات عدة مرات في الأسبوع. نلتقي بشكل دوري في بوسطن أو ريدموند.
المهام مجردة في الغالب. على سبيل المثال ، أنواع المنافذ من مساحة اسم محددة. يمكنني أخذ شيء ما بالتوازي ، والذهاب إلى GitHub وإصلاح بعض الأخطاء. أقوم بشيء دوري من أجل .NET Core - أحاول تحسين شيء ما أو تنظيفه.
- ومن أين تأتي المهام ، كيف يتم تنظيمها؟ أي تراكم لا نهاية لها؟- يبدأ المستخدمون المهام وقيادات الفريق في المهام ، مرة واحدة في الشهر لدينا أسبوع لإصلاح الأخطاء: لمدة أسبوع كامل نقوم فقط بإصلاح الأخطاء ، فأنت تسقط أشياء أخرى.
في بقية الوقت ، يُنصح أيضًا بعدم نسيان الأخطاء ، ولكنك بحاجة إلى الالتزام بالأهداف الرئيسية ، على سبيل المثال ، هدفي هو نقل الأنواع الرئيسية من mscorlib وجعل Mono / Xamarin متوافقًا مع NET Standard 2.1. عادةً ما يبدو نقل النوع وكأنه التخلص من التطبيق القديم واستبداله برابط إلى التعليمات البرمجية في الوحدة الفرعية .NET Core مع التكيف.
عن مايكروسوفت والفؤوس والخيانة
- حسنا ، نعم ، الترخيص يسمح. وبالفعل أنت في نفس الشركة.- نعم إنه كذلك. لقد فعلنا هذا من قبل. كان مونو جزءًا من بعض التوزيعات ، أعتقد أن أوبونتو وجنوم كانا يمتلكان مونو. قيل لميغيل أنه سوف يخذل الجميع إلى الدير.
"نعم ، أتذكر ، وصفه ستالمان بأنه خائن"."كانوا يخشون أن يأتي محامو Microsoft في أي لحظة ويقاضون الجميع ، وهو ما لم تفعله شركة مايكروسوفت لحسن الحظ.
- حسنًا ، نعم ، قامت Microsoft بالعكس تمامًا - فقد بدأت في استخدام Linux في المنزل.- أصبحت Microsoft مختلفة تمامًا عن الرئيس التنفيذي الجديد ، وقد قادنا التركيز على التقنيات السحابية إلى عالم المصادر المفتوحة وكل ما لم نكن نفكر فيه من قبل. الآن من الممكن تنزيل Ubuntu WSL من Marketplace بنقرة واحدة ، ونشر MS SQL Server على Linux والتطوير تحت .NET من تحت macOS.
- أي أنه يمكنك كتابة الرمز بأمان تحت التراخيص المفتوحة ولن يقول أحد أي شيء؟"نعم بالطبع." بطبيعة الحال ، قبل وضع بعض المشاريع الداخلية في مصدر مفتوح ، نحتاج إلى القليل من البيروقراطية ، ولكن بشكل عام ، لم أكن أواجه أي حظر على استخدام أي شيء.
- هل لديك مهام تتطلب ثلاث منصات في وقت واحد؟- لدي مجموعة كاملة: كمبيوتر واحد يعمل بنظام Windows و MacBook مع macOS وكمبيوتر محمول مع Fedora. أيضا مجموعة كاملة من الأجهزة الافتراضية ، بما في ذلك WSL. في أغلب الأحيان ، تنقسم الأخطاء إلى نوعين - Windows و non-Windows ، يلعبان على كل من macOS و Linux.
فهم .NET Core و Mono
- ما هي التوجيهات التي تحبها وهل يمكن تطويرها في .NET Core و Mono؟- أنا شخصياً أحب الكثير من التركيز على الأداء ومنصات عرضية. يعمل باستمرار على تحسين الأداء في ظروف القتال من Bing إلى المعايير العامة مثل TechEmpower ، حيث يعمل .NET Core بشكل جيد جدًا إلى جانب حلول Go و Java و C ++. لا يزال لدى العديد من الأشخاص صورة نمطية عن .NET كتقنيات Windows فقط باستخدام جهاز افتراضي للكبح - نحن نجاهد في محاربة هذه الصورة النمطية بنجاح.
يولي فريقنا اهتمامًا كبيرًا لسيناريوهات AOT واستخدام LLVM كخلفية لتوليد كود الجهاز. LLVM هي أداة قوية للغاية مع عدد كبير من التحسينات. من الضروري فقط إنشاء LLVM IR بعناية مع الحد الأدنى من النقاط الآمنة ، حتى لا تتداخل مع هذه التحسينات. شخصياً ، كتبت مؤخراً بطاقة تحويل LLVM البسيطة الخاصة بي.
ومن المشجع أيضًا أن C # و .NET هما الاتجاه السائد إلى جانب C ++ في تطوير اللعبة ، وذلك بفضل Unity وبعض المحركات الأخرى التي تحتوي على C # البرمجة النصية.
هناك اتجاه محتمل مثير للاهتمام - تجميع C # في تجميع الويب للمتصفح.
- لا أعرف كيف في .NET ، ولكن في بعض الأحيان يجب أن أسحب مجموعة من المكتبات القياسية لتجميعها. في Java ، تقوم بتشغيل Hello World ، ولديك 2000 فئة تم تحميلها. سيتم تحميل عدد كبير من الميجابايت في المتصفح. ما رأيك بهذا؟- يبلغ الحد الأدنى لحجم وقت تشغيل Mono مع مكتبة أساسية حوالي 2 ميغابايت. ولكن حتى Apple تواجه هذه المشكلة: التطبيقات المكتوبة بلغة Swift تسحب كل أوقات التشغيل الخاصة بها. في حين أن تقنية Mono-wasm هي خام وتعتمد على وقت التشغيل ، والذي تم تجميعه بواسطة AOT في مترجم WASM + لرمز المستخدم. بالمناسبة ، الآن نعيد كتابة وقت التشغيل من C إلى C ++ ، آمل أن لا يؤثر هذا على الحجم في النهاية.
- هل حاولت إعادة كتابة Mono في C # بدلاً من الإيجابيات أو C؟- تبدو الفكرة جيدة ، لكنها تتطلب موارد غير واقعية ولدينا بعض التقدم في ذلك. وصل فريق .NET Core إلى هذا المستوى من C # و .NET بحيث يتم استبدال الرمز الإيجابي بـ C # حتى لا تأخذ حمام بخار بأداء عبر الأنظمة الأساسية وفي نفس الوقت لن تفقد الأداء. مثال حديث هو ترجمة تنفيذ تحليل وتحويل الأنواع الرقمية وقد تم إعادة كتابة العلامة العشرية بالكامل في C #. هذا يجعلني سعيدًا للغاية ويبسط إلى حد كبير عمل ترحيل التعليمات البرمجية.
حول جامع القمامة
- رأيت .NET Core GC يخيف الأطفال لأنه واحد ونصف ميغابايت من المصدر في C ++! واحد ونصف ميغا بايت كارل! هذا كم عدد الكتب ؟!- نعم نعم ، بينما تمت ملاحظة 47 مساهمًا في هذا الملف وفقًا للجيثب. أنا لست خبيراً في جامع القمامة ، ولكن بشكل عام ، لدى GC نظرية عامة إلى حد ما مثل خوارزمية Mark-n-Sweep ، والتي معقدة بسبب الأجيال ومحاولات تجنب التوقف الكامل للعالم والقيام بكل شيء موازٍ للخيط الرئيسي للتنفيذ.
- هل لديك ملحقات أو القدرة على تغيير جامع القمامة أم أنها واحدة؟- في Mono ، هناك العديد من عمليات التنفيذ ، وفي .NET Core أنشأنا مؤخرًا واجهة برمجة تطبيقات عامة تسمح لك بأخذ رأسين وكتابة HZ الخاص بك وربطه بأي تطبيق لمتغير بيئة واحد. كمثال ، هناك مقال حول كيفية كتابة ZeroGC لـ .NET Core. في عالم الحاويات ، حيث ليس من الضروري إزالة القمامة ، قد تكون ذات صلة. بشكل عام ، هذا يسمح لشخص ما ، على سبيل المثال ، بأخذ التنفيذ الحالي وتحسينه قدر الإمكان ، على سبيل المثال ، تطوير اللعبة ، بحيث لا يؤدي إيقاف العالم والتشغيل عبر جميع الكائنات إلى حمى FPS ، على سبيل المثال ، أو تحسين استهلاك الذاكرة ، في رأيي ، قام الرجال من سامسونج بذلك ل Tizen بضعة تعديلات على GC.
- حقيقة أن Microsoft قد تركت السيطرة الكاملة على كل شيء أمر جيد ، لأن GC و JIT أداة تحكم جيدة جدًا.- نعم. انظر إلى .NET Foundation - إنها ليست Microsoft فقط. هناك جوجل ، ريد هات ، سامسونج ، إنتل ، بشكل عام ، جميع الشركات التي في وقت سابق ، على ما يبدو ، لن تقف بجانب مايكروسوفت. ما لم تكن Apple مفقودة.
حول دعم IDE
- حول IDE: ما مدى جودة ضبطه في المترجم وفي دعم IDE؟ الآن هناك كل أنواع الأشياء مثل Swift ، حيث يعطي المترجم فرصًا قليلة جدًا لفحص الهيكل الداخلي ، وذاكرة التخزين المؤقت ، وشيء آخر. وهذا ألم لا نهاية له ، لأنه عندما تقوم بعملية الضبط الخاصة بك ، تحتاج إلى إعادة اختراع العالم كله. ما مدى جودة هذا مع مونو؟ هل لديك IDE الخاص بك؟- تم كتابة مترجم C # Roslyn في الأصل ليس فقط كمترجم C # في IL ، ولكن أيضًا كخلفية ومحلل IDE ، يمكنه حتى هضم التعليمات البرمجية السيئة. يمكنك ببساطة عرض بعض المشاهدات والقيام بشيء بناءً على مخرجاته ، وسيقول مباشرة: "اعرض لي القائمة هناك" ، "عرض إعادة بيع الهيكل" ، "هنا لديك معاينة للتغييرات" ، وما إلى ذلك .. "تمييز ، تقديم إعادة بيع ديون للمستخدم ". أي أن هذا المترجم يسمح لك مباشرة بعمل IDE بسرعة.
في الواقع ، أنت تقوم فقط بتنفيذ مجموعة من الواجهات لواجهة المستخدم الرسومية الخاصة بك ، ولديك بالفعل IDE يدعم مجموعة كبيرة من إعادة البناء وما شابه.
بشكل عام ، توفر العديد من اللغات الحديثة AST ، وهي شجرة مجردة من تعبيرات التعليمات البرمجية. على سبيل المثال ، يجعل Clang من الممكن الحصول على شجرة مجردة من رمز زائد ، بالمناسبة ، نستخدم هذه الميزة لإنشاء روابط C # لرمز C ++ و Objective-C.
- هل حاولت استخدام Visual Studio Code لأي شيء؟- حسنًا ، أود أن أقول إن هذه هي أداتي الأساسية.
- لنفترض أن المتأنق يريد فتح مستودع مونو وتعليقه. ماذا يحتاج لهذا؟- في Windows ، ما عليك سوى فتح حل وقت التشغيل وحل btsl وإنشاء كليهما. بفضل التوازي الفعال ، يجب أن يقوم msbuild بذلك في حوالي 5 دقائق. على macOS و Linux ، يتم استخدام النهج المعتاد من خلال Makefiles.
على إعداد التقارير وبعض المفسدين
- أنت قادم إلى DotNext مع التقرير ، ولكن ما الذي يدور حوله؟- سيتألف تقريري من مجموعة من الأمثلة المثيرة للاهتمام للتحسينات الدقيقة المطبقة في .NET Core من قبل المطورين والمساهمين الخارجيين ، والتي أعتقد أنها يمكن أن تكون مفيدة للمبرمجين التطبيقيين أيضًا. سأنتبه أيضًا إلى الأمثلة غير الناجحة لتحسين شيء ما ، على سبيل المثال ، عندما يرغب المساهمون في تحسين حالة معينة ، ولكن يتحول إلى جانب في شكل انحدار في حالات أخرى. بشكل منفصل ، سيكون هناك عشرات الشرائح على واجهة برمجة تطبيقات SIMD الجديدة.
جلب الرجال من Intel إلى جانب Microsoft Microsoft في C # واجهة برمجة تطبيقات منخفضة المستوى لـ SIMD ، والتي تسمح لك بكتابة خوارزميات فائقة السرعة دون الاعتماد على المترجم ، والذي ، كما يعتقد الكثير من الناس ، سيكون قادرًا على تحسين كل شيء وتوجيهه - لا.
- في الحالة العامة ، هذا مستحيل نظريًا.- نعم ، لا يوجد مكان للابتعاد عن الإدراج المستقل للأسباب الجوهرية. أشك في أنه في أي لغة يمكن للمرء أن يصف ضرب أو تبديل المصفوفات على أنواع بسيطة ويتوقع أن تكون تعليمات SSE / AVX الأكثر فعالية من المترجم إلى الإخراج. بالمناسبة ، لقد قمت بالفعل بتطبيق الجوهر الداخلي لـ C # داخل .NET Core لتحسين System.Numerics.Matrix باستخدام SSE وتحسين وظيفة GetHexDigits باستخدام Lzcnt. يمكنك استخدامه كمثال لاستخدام API في مشاريعك.
- عندما يأتي الأشخاص الذين يطورون شيئًا أساسيًا ، فإن الأشخاص المهتمين أيضًا بالمشاركة في هذا يأتي. هل هناك طريقة مبتدئ؟في أي وقت يتلقى المساهم الكثير من الاهتمام والمساعدة ، يمكن تمييز العديد من المهام أو الأخطاء البسيطة التي لا تتطلب معرفة واسعة وأولويات عالية بعلامة خاصة على GitHub - "up-for-grabs" أو "good first المسألة".
- يمكنك الذهاب إلى المستودع ، والعثور على مشكلات بهذه العلامات واختيار شخص قريب من الروح. على سبيل المثال ، هناك عدد غير قليل من المهام تتعلق بتغطية بعض أجزاء التعليمات البرمجية بالاختبارات. زيادة التغطية بالاختبارات ليست سوى المهمة الأولى المثالية. ومن الطرق الجيدة أيضًا قياس شيء ما ومقارنته بأوقات التشغيل الأخرى ومحاولة معرفة سبب عمل هذا الرمز أو ذاك بشكل أبطأ مما هو عليه في .NET 4.x ، على سبيل المثال string.GetHashCode. عند قياس الأداء ، هناك عدد كبير من الخطب ومشاركات المدونات من Andrei Akinshin و Adam Sitnik حول أداة مريحة للغاية - BenchmarkDotNet ، والتي تُظهر لك بإشارة بسيطة - سرعة تنفيذ الشفرة بسمة واحدة ، وتقارنها مع أوقات التشغيل الأخرى ، وتحكي عن الذاكرة وتعرض رمز التجميع.
أي الحد الأدنى من الإجراءات هو تصفح جميع طلبات السحب والمهام ، والاشتراك في أشخاص مثل Matt Waren و Ben Adams على Twitter ، والانتقال إلى قنوات corefx و coreclr على تويتر وقراءة وثائق BenchmarkDotNet.
- نعم. لقد قمت الآن بتصفية علامة up-for-grabs ، وهناك حوالي 600 مشكلة هنا ، بعضها بدون تعليق على الإطلاق ويمكنك تناولها.- نعم هذا صحيح. في الآونة الأخيرة ، أجروا هاكاثون لفريق .NET Core. لقد خصصوا بضع عشرات من القضايا ، وفي يوم واحد كان عليهم إصلاحها والحصول على جائزة لذلك.
- هذا رائع. قال الكثير من الأشياء المثيرة للاهتمام ، والآن أريد أن أحاول حل بعض المشاكل بنفسي. صحيح ، أنا لا أعرف C # ، هذه هي المشكلة.- C # ، كما أريد أن أصدق ، لغة يمكن التنبؤ بها إلى حد ما على الرغم من كمية السكر والخبرة في Java أو C ++ ، أعتقد أنه يمكنك حتى البدء في تحسين شيء بسرعة كبيرة في وقت التشغيل ، وستساعدك الخبرة بلغات أخرى على أشياء من الجانب الآخر.
- أنا أنظر إلى مستودع .NET Core ويبدو لائقًا جدًا. ويتواصل الناس حقًا في التعليقات ، وتجري المناقشات مباشرة.- نعم ، نشط للغاية. هناك 100 و 200 تعليق. ويمكنك أن تتعلم من المكتبة الأساسية للفصول ، هناك الكثير من المهام المثيرة للاهتمام التي يمكن لأي شخص القيام بها.
- شكرا جزيلا للإجابات! قابلني في DotNext.هذه المرة ، ستكون دقيقة من الدعاية غير عادية ، لأنه أثناء إعدادنا للمقابلة ، نفدت تذاكر المؤتمر. هل تريد الاطلاع على التقارير ولم يكن لديك الوقت لشراء تذكرة؟ البث المباشر لا يزال متاحًا على الموقع .
إذا كانت لديك أسئلة أو رغبة لا تصدق في زيارة DotNext 2018 Moscow شخصيًا ، فاكتب إلينا على tickets@dotnext.ru (ربما سيعيد أحد الأشخاص التذكرة ويمكننا مساعدتك).