تاكاشي كوكوبون: كيفية جعل تطبيقات روبي تعمل بشكل أسرع

مؤتمر روبي الروسي المركزي في 28 سبتمبر يصادف 10 سنوات. هذا العام ، لدى RubyRussia مكانًا جديدًا ، يصل إلى 4 تدفقات من التقارير المختارة ، والاتصال ، وبالطبع ، الحفلة الأسطورية! من بين المتحدثين يوكيهيرو ماتسوموتو ، تاكاشي كوكوبون ، كزافييه نوريا ، نيك سوترير ، جنادي ساموكوفاروف وأكثر!

في الإعداد ، نتحدث مع المتحدثين عن روبي والعمل والحياة. ننشر اليوم المواد التي يطرح فيها ديمتري ماتفييف (مدير المشروع في إيفرون ) أسئلة على تاكاشي كوكوبون .

صورة
يدعم مكبر الصوت RubyRussia 2019 ، وهو مُحسِّن برنامج التحويل البرمجي لـ Ruby JIT ، Haml و ERB ، المهندس الخلفي في ArmTreasure Data.

أخبرني ما سيتم مناقشته في تقريرك في المؤتمر؟

حول العمل على برنامج التحويل البرمجي JIT. أود التركيز على ثلاث نقاط. الأول هو وظيفة مضمنة. يجب أن تكون الوظيفة "نظيفة" ، دون أي آثار جانبية ، بحيث يمكن أن يكون جسمها مضمّنًا. إذا كان هناك العديد من الوظائف ، يبدأ المحول البرمجي في العمل ببطء. سوف أصف كيفية حل هذه المشكلة.
تتعلق النقطة الثانية بتحسين وضع الكائنات في الذاكرة. في التطبيقات الكبيرة والمعقدة مثل Rails ، تحتاج إلى إنشاء العديد من الكائنات في طلب واحد. إذا قمت بتحسين هذه العملية ، يمكنك تحسين الأداء. عادة ما يتم إنشاء الكائنات في الكومة. لذلك ، يجب عليك إدارة بنيات البيانات المعقدة فيه. يجب عليك أيضًا استدعاء أداة تجميع مجمعي البيانات المهملة لإزالة الكائنات غير المستخدمة. وإذا وضعنا كائنات على المكدس ، فسنزيد ببساطة من مؤشر المكدس عند إضافة كائن وننقصه عندما يحتاج الكائن إلى حذفه. يكون استخدام المكدس لتخزين الكائنات أسرع بحد ذاته ، بالإضافة إلى بدء مجمّع البيانات المهملة في العمل بشكل أسرع. ولكن من أجل استخدام المكدس ، نحتاج إلى التأكد من عدم استخدام الكائنات في مكان آخر. لهذا الغرض ، نستخدم تقنية تسمى "تحليل الهروب". نحتاج إلى تحليل كل طريقة والتأكد من أن كل من الكائنات الداخلية الخاصة به لا يتم استخدامها خارجيًا ولا يتم إرجاعها كنتيجة للطريقة الحالية. إذا استطعنا القيام بذلك ، فيمكننا وضع الكائنات على المكدس ، وسيؤدي ذلك إلى زيادة الإنتاجية. فكرتي هي إضافة البيانات الوصفية للحصول على التعليمات. هذه تجربة الآن ، لكنني سأقوم بإجراء اختبار للسحب باستخدام هذا الرمز في المستقبل القريب.

النقطة الثالثة تتعلق بتحسين إرسال استدعاءات الوظائف في JIT. في الوقت الحالي ، تولد هذه العملية تشعبًا قويًا للمنطق ، مما يؤثر سلبًا على آلية التنبؤ الفرعي للمعالج. هذا يبطئ المعالج ككل. نحن بحاجة إلى تبسيط هذا المنطق ، أي تقليل عدد الشروط. أنا حاليا استكشاف كيفية القيام بذلك.

هذا هو تقرير المتشددين مع الكثير من التعليمات البرمجية والمفاهيم! يبدو أن من الصعب؟

أعتقد أن معظم الناس لا ينفذون برامج مترجمة بمفردهم ، وأنا أفهم أن فهم هذا الأمر قد يكون أمرًا صعبًا. لكنني سأحاول شرح كل شيء بالبساطة قدر الإمكان مع الأمثلة والرسوم التوضيحية. وهذا يعني أن تقريري يجب أن يكون مفهوما للأشخاص الذين ليس لديهم خبرة خاصة في تطوير برنامج التحويل البرمجي.

هل من الممكن استخدام المترجم الجديد في الإنتاج الآن ، وفي أي الحالات؟

والفكرة هي جعل تطبيقات RoR تعمل بشكل أسرع. على سبيل المثال ، ستستفيد شركتي الحالية من هذا. لكنني لا أقول أن كل شيء جاهز للإنتاج. اتضح أن فقط تطبيقات RoR ليست متسرعة بشكل خاص. هذا لأن هذه التطبيقات كبيرة الحجم عادةً وتولد الكثير من كود C ، مما يؤدي إلى الاستخدام غير الفعال للتخزين المؤقت في المعالج. لدي بعض الأفكار حول كيفية إصلاح هذا. هذا ما أعمل عليه الآن. ولكن الآن يمكن أن يكون برنامج التحويل البرمجي مفيدًا للتطبيقات الصغيرة. على سبيل المثال ، أعرف أن جوهرة الكرفكة تعمل معها بشكل أسرع من دونها.

قرأت أن برنامج التحويل البرمجي JIT تم سكبه بالفعل في برنامج اللغة المتألق بلغة Ruby وأصبح متاحًا منذ الإصدار 2.6. هل هذا صحيح؟

نعم ، تم قبول طلب الدمج الخاص بي بالفعل. ولكن هذه هي النسخة الأولى ، وما زال هناك الكثير من العمل الذي يتعين القيام به. ستكون التحسينات بالفعل في روبي 2.7 ، وأكثر من ذلك في روبي 3.

قل لي كيف بدأت الكتابة في روبي؟

في البداية ، عملت مع الهدف- C ، لكنني لم أحب ذلك حقًا. مرة واحدة كانت هناك حاجة لكتابة تطبيق الخلفية ، وأوصى الأصدقاء في محاولة روبي أون ريلز. لقد فعلت ذلك تمامًا - وكنت سعيدًا جدًا بالنتيجة! أعجبت بناء الجملة البسيط والمفهوم للغة ، وبدأت في دراستها واستخدامها بعمق أكبر.

هل تكتب في روبي في العمل الآن؟

لقد كنت مع بيانات الكنز على مدى العامين الماضيين. إنها منصة تتعقب بيانات المستخدم في تطبيقات العميل. تمت كتابة هذا المشروع في الأصل في Ruby On Rails ، وتمت تسمية مشاركتي باسم "Ruby Developer". لذلك كتبت الكثير في روبي. لكنني الآن أعمل على بعض الخدمات الموزعة المكتوبة بلغة Java و Kotlin ، وأحيانًا أستخدم Python.

يرتبط مشروع بيانات الكنز بالحمل الكبير والبيانات الضخمة. لكن روبي ليست هي أسرع لغة. كيف تمكنت من إنشاء تطبيق عالي التحميل يعمل مع البيانات الكبيرة على نظام RoR؟

يسجل التطبيق بيانات المستخدم ويحفظها في التخزين. كما يوفر واجهة لاستعلام البيانات بلغات مثل Hive و Presto ولوحة تحكم. لم يكن مشكلة كتابة كل شيء على القضبان. بالإضافة إلى ذلك ، قمنا ببناء بنية تحتية كفؤة ولدينا القدرة على زيادة موارد الذاكرة والمعالج في أوقات الذروة. المشكلة الرئيسية التي لدينا مع روبي هي أنها ليست مناسبة للحوسبة المتوازية. وعلينا استخدام Kotlin لهذا الغرض.

لماذا تحب روبي؟ إذا كان هناك مشروع يمكن تنفيذه في كل من روبي وبيثون ، أيهما تختار؟

أنا أحب بناء جملة روبي النظيف ، فهو سهل القراءة وبديهية للغاية. يتيح لك ذلك كتابة منطق التطبيق بسرعة وسهولة ، وهو أمر مهم من وجهة نظر العمل. هذه لغة كائن بحتة ، وأنا أقدر ذلك حقا. لديّ خبرة في بيثون ، لكن لا يبدو لي أنها بديهية. سأختارها فقط لمشاريع التعلم الآلي.

شيء آخر كنت تعمل عليه مؤخرًا هو محرك قوالب Haml ...

عملت في هامل و ERB في وظيفة سابقة. الآن لا أخصص الكثير من الوقت لذلك ، لكنني أحيانًا أتفحص أسئلة السحب في هذه المشاريع.

ما رأيك في آفاق محركات القوالب مثل Haml أو Slim أو ERB ، بشكل عام ، نظرًا لوجود ميل في العالم الحديث إلى فصل الظهر والأمام تمامًا إلى تطبيقين مختلفين ، وإعطاء تكوين صفحات HTML بالكامل لجافا سكريبت؟ هذا هو ، في مثل هذا التكوين ، أصبحت محركات القوالب غير ضرورية على الإطلاق؟

أوافق على أنه بالنسبة للمهام مع واجهة مستخدم معقدة ، فمن المنطقي وضع هذا المنطق في تطبيق منفصل. يجب القيام بذلك من أجل التنافس مع الشركات الأخرى ، والتي تزيد من تعقيد وظيفة واجهة المستخدم. ولكن لا تزال هناك حاجة إلى حلول أكثر بساطة والأهم من ذلك أرخص منطقية للكتابة على RoR باستخدام محركات القوالب الكلاسيكية. وبالتالي ، فهي لا تزال في العملية وسيتم استخدامها لفترة طويلة.

أرى أنه يمكنك البرمجة بعدة لغات ، على الأقل في Ruby و Python و Java و Kotlin و C. مجموعة جيدة. هل يمكنك تقديم النصائح للمبتدئين حول كيفية تعلم العديد من اللغات؟ كيف تصبح مبرمج جيد؟

أعتقد أن فعالية التدريب ستكون عالية عندما تكون اللغة مناسبة لتلك المهام التي يواجهها المبرمج. يعتبر روبي مفيدًا لكتابة تطبيقات الويب ، لأن العمل باستخدام الأوتار فيها سهل للغاية مقارنةً بجافا. بيثون هو أكثر ملاءمة للتعلم الآلي (لديها بنية تحتية غنية في هذا المجال). إذا كنت ترغب في تعلم Python ، فإنني أوصي بحل مهام التعلم الآلي بدلاً من كتابة تطبيقات الويب. إذا كنت مهتمًا أكثر بلغات Java أو Kotlin أو اللغات الأخرى المعتمدة على JVM ، أقترح كتابة أنظمة موزعة. حاليًا روبي غير مناسب تمامًا للحوسبة المتوازية أو المتوازية. لحل هذه المشكلات في روبي ، نحتاج إلى العديد من العمليات التي تستهلك الكثير من الموارد ، لذلك لن تكون فعالة. وبالتالي ، فإن استخدام الأدوات المناسبة للمشاكل ذات الصلة سوف يساعد على فهم سبب تصميم هذه الأداة بهذه الطريقة. هذا سوف يساعد على فهم أفضل لجوهرها.

ما هي الكتب في الجزء العلوي من "تصنيف" الشخصية الخاصة بك؟

الأول هو روبي تحت المجهر. إنه مكتوب بكل بساطة ويصف تفاصيل المترجم الفوري. سيساعد الفهم العميق لكيفية عمل المترجم الشفهي في حل المشكلات المعقدة ، وسيضيف أيضًا الثقة في ملكية الأداة ، أي اللغة. أوصي بهذا الكتاب حتى للمبتدئين.

والثاني هو "كود مقروء". إنه حول كيفية كتابة رمز واضح ، الغريب :). نكتب الكثير من الشفرات ونقرأ الكثير من التعليمات البرمجية ، ويجب أن نكون قادرين على كتابة التعليمات البرمجية التي يفهمها الآخرون. ولهذا ، نحتاج إلى إلقاء نظرة على الكود من زاوية تصور شخص آخر. كتب مثل هذه مساعدة واحدة. أنا أوصي به حتى للمبتدئين. حسنًا ، الكتاب الثالث ... هذا كتاب باللغة اليابانية ، حول كيفية ترتيب المعالج ، حول بنيته ، حتى الترانزستورات التي يتكون منها. أحيانًا يكون فهم كيفية عمل الكمبيوتر على هذا المستوى المنخفض مفيدًا للغاية حتى عند حل المشكلات بمستويات أعلى من ذلك بكثير. أوصي بقراءة أي كتاب جيد عن تصميم المعالجات الدقيقة ، حتى لو كان ذلك يبدو للوهلة الأولى غير واضح.

ماذا تتوقع من روسيا ومؤتمر RubyRussia ؟

أنا لم أذهب إلى روسيا من قبل. أتوقع أن أرى الكثير من كل شيء جميلًا ، على سبيل المثال ، المنازل الجميلة والمناظر الطبيعية الجميلة ... بالإضافة إلى ذلك ، ينبغي أن يكون الطقس في روسيا أكثر برودة من اليابان. سيكون من الممتع بالنسبة لي أن أرى كل هذه الاختلافات بين بلدي وتشعر بها.

باردة! يمكنني أن أؤكد لكم أنه حتى لو كان الجو باردًا (في الواقع ، في نهاية سبتمبر لم يكن الجو باردًا معنا) ، سيكون المؤتمر وما بعده ساخنًا على أي حال!

نحن أيضا في انتظاركم في المؤتمر! يمكنك طرح أسئلتك شخصيًا (وعلى الطرف الأسطوري :) في 28 سبتمبر. البرنامج موجود هنا ، والتذكرة تكلف الآن 9000 روبل.

شكرا للشركات التي تدعم RubyRussia :

المنظم - إيفرون
الشريك العام - توبتال
الشريك الذهبي - Gett
الشركاء الفضيون - JetBrains و Bookmate
الشريك البرونزي - InSales

Source: https://habr.com/ru/post/ar466305/


All Articles