مرحبا يا هبر!
لا نعرف مدى سخونة الهواء خارج نافذتك ، ولكن هذه الأسابيع في JetBrains لدينا إصدارًا ساخنًا بالتأكيد. نشرنا واحدًا تلو الآخر إصدارات محدثة من 2018.2 لجميع أدواتنا تقريبًا استنادًا إلى منصة IntelliJ: WebStorm و IntelliJ IDEA و PyCharm و DataGrip و GoLand و PhpStorm و RubyMine و CLion.
هذا الإصدار خاص بفريق CLion ، حيث يتضمن نتائج عملنا في ثلاثة مجالات مهمة للغاية:
- Clangd كأساس لمحرك تجريبي جديد لتحليل كود C ++.
- تحسينات أداء IDE من خلال الحلول المعمارية الجديدة.
- نماذج تصميم جديدة مدعومة من CLion.
بالإضافة إلى دعم Google Sanitizers ، والقدرة على إعادة بناء ملف واحد وأكثر من ذلك بكثير!
فيما يلي سنتحدث عن التحسينات والابتكارات بالتفصيل ، ويمكن لأكثر الصبر الآن تنزيل الإصدار المجاني لمدة 30 يومًا
من موقعنا على الإنترنت وتجربة فرص جديدة في مشروعهم أو
مشروع تجريبي معدة خصيصًا
مع GitHub .
Clangd لتحليل كود C ++ في CLion
في مارس الماضي ، أخبرناك أننا نفكر في بدائل مختلفة لمحرك لغة CLion. هذا أمر مفهوم - أرغب في تحسين الدعم بشكل أساسي لميزات اللغة الحالية ، وإضافة المزيد من رقائق C ++ الطازجة بشكل أسرع ، وكتابة المزيد من إعادة الهيكلة الرائعة والخاصة بـ C ++ ، إلخ. لكل هذا ، تحتاج إلى محلل رمز دقيق وسريع.
نواصل تحسين المحلل اللغوي الحالي من خلال التنقيب المنهجي لمجموعة متنوعة من الأخطاء والعيوب. بالإضافة إلى ذلك ، قررنا محاولة إنشاء محرك لغة آخر يعتمد على
clangd (هذا هو تطبيق بروتوكول LSP لـ clang).
إذا ذهبت مباشرة إلى النتائج ، في CLion 2018.2 ، بالإضافة إلى محرك اللغة الرئيسي ، يعمل محرك تجريبي جديد على clangd. ليس ذلك فحسب ، فقد كنا جريئين للغاية لدرجة أننا قمنا بتشغيله افتراضيًا على Linux و macOS. على نظام التشغيل Windows ، للأسف ،
تم اكتشاف
ميزة غير سارة لعمل clangd مع الذاكرة ، وبشكل افتراضي قمنا بإيقاف المحرك الجديد على هذا النظام الأساسي (ولكن مع احتمال كبير ، سيتم إصلاح هذا بالفعل في التحديثات الثانوية الأولى للإصدار 2018.2).
يمكنك تمكين / تعطيل المحلل التجريبي للتعليمة البرمجية المستندة إلى clangd في الإعدادات / التفضيلات | اللغات والأطر | C / C ++ | Clangd:

من المهم أن تفهم:
- يعمل محلل التعليمات البرمجية المستند إلى clangd بالتوازي مع محلل CLion الأصلي.
- يستخدم Clangd فقط لعرض الأخطاء والتحذيرات في المحرر. لكل شيء آخر (بما في ذلك إعادة البناء ، وإصلاح الأخطاء (الإصلاحات السريعة) ، والملاحة ، والإكمال التلقائي ، وما إلى ذلك) ، يتم استخدام محلل CLion الخاص به.
- تم تحديد التكوين الافتراضي للأخطاء والتحذيرات بواسطة Clang خصيصًا لإظهار الكثير من التحذيرات حول الأخطاء المحتملة ، ولكن في الوقت نفسه لا يتعارض مع عمليات فحص التعليمات البرمجية هذه التي تعمل في CLion بناءً على محلل الشفرة الخاص بها ويتم تمكينه افتراضيًا.
تحذيرًا من أسئلتك ، سأقول على الفور أنه نعم ، نحن نخطط لمحاولة ترجمة ميزات IDE الذكية الأخرى إلى clangd ، لكننا أولاً نحتاج إلى تثبيت الحل الحالي ، وإجراء العديد من الاختبارات وحل العديد من المشكلات المعقدة والأساسية على طول الطريق.
فحص جديد لرمز C ++
عندما تقبل دالة العديد من المعلمات من نفس النوع ، فمن السهل ارتكاب خطأ وغير محسوس لنفسك (وللمترجم) لتبادل الحجج من نفس النوع عند استدعاء هذه الوظيفة. يصعب اكتشاف مثل هذه الأخطاء ، مما يعني أن تكلفتها مرتفعة. لكن في CLion 2018.2 ، قمنا بتطبيق رمز فحص جديد خصيصًا لمثل هذه الحالات. يستخدم
خوارزمية إرشادية لتحليل أسماء المعلمات ووسيطات الدوال وقادر على اكتشاف المواقف عندما يتم تغيير ترتيب الحجج عن طريق الخطأ:

هام:
- لتجنب النتائج الإيجابية الخاطئة ، يتم إيقاف تشغيل الخوارزمية تلقائيًا لأسماء قصيرة جدًا (أقل من 3 أحرف).
- لنفس الأسباب ، تم تعطيل الخوارزمية للوظائف التي تحتوي أسماؤها على مقايضة السلاسل الفرعية / معكوس / استدارة / للخلف / قلب.
- لعدد من الأسباب الفنية ، لا يعمل الفحص إلا عند تشغيل المحلل التجريبي لرمز clangd وأيضًا فقط عند تشغيل محلل رمز clang-tidy عبر clangd (كل هذا في إعدادات الإعدادات / التفضيلات | اللغات والإطارات أعلاه | C / C ++ | Clangd).
أداء IDE
في هذا الإصدار ، عمدنا إلى تعليق عمليات تعليق IDE (تجمد واجهة المستخدم) عن قصد في عدد من الحالات: عند الانتهاء ، في Search Everywhere search ، في الانتقال إلى حرف ذي صلة (والذي يُستخدم عادةً للتبديل بين ملف المصدر والرأس والعكس بالعكس) ، عند استخدام مسارات التنقل (فتات) للملاحة. قام المستخدمون الأوائل للإصدار ، بالإضافة إلى العديد من المشاركين في برنامج الوصول المبكر الخاص بنا ، بتقييم التحسينات بالفعل والتأكيد على أن سلوك IDE قد تحسن بشكل ملحوظ ، وكان هناك عدد أقل بكثير من التجميد. سيستمر العمل في هذا الاتجاه في 2018.3.
بالإضافة إلى ذلك ، قمنا بترجمة
منسق التعليمات البرمجية المضمنة إلى lexer . بالطبع ، عند العمل من خلال المحلل اللغوي (كما كان من قبل) ، تكون نتيجته أكثر دقة ، ولكن يتم زيادة وقت التشغيل بشكل ملحوظ. ونظرًا لأن تنسيق الكود في CLion يحدث في الوقت الذي تكتب فيه الكود ، فإن حالات التعليق هنا يمكن أن تؤثر سلبًا جدًا على الانطباع العام عن سرعة IDE. تنخفض استجابة المحرر ، ويصبح التعليق ملحوظًا ، وما إلى ذلك.
يعمل المنسق الموجود على lexer بشكل رائع تمامًا ، ولكن إذا كنت لا تزال تواجه مشكلات في التنسيق على التعليمات البرمجية الخاصة بك ، فأولًا ، تأكد من
إخبارنا بذلك ، وثانيًا ، يمكنك دائمًا التبديل إلى منسق أبطأ ولكن أكثر دقة في محلل - لهذا هناك خيار
cidr.indent.lexer.only.cpp في التسجيل.
نماذج التصميم الجديدة: Gradle C ++ وقاعدة بيانات التجميع
حتى 2018.2 ، كانت هناك الطرق التالية لفتح مشروع في CLION:
- افتح مشروع CMake.
- افتح ملفًا أو مجلدًا بالكامل لا يحتوي على ملفات CMake. في الوقت نفسه ، سيتم تعطيل العديد من الوظائف الذكية للعمل مع الرمز.
- بالنسبة لرمز Rust ، باستخدام المكون الإضافي Rust في CLion ، يمكنك استخدام Cargo.
- استخدم المكوّن الإضافي التابع لجهة خارجية لـ CLion لفتح مشروع على Bazel.
في 2018.2 ، أضفنا خيارين جديدين لهذه القائمة:
- افتح المشروع في Gradle ، مشيرًا إلى موقع IDE لملف build.gradle . يرجى ملاحظة أن CLion يدعم الآن تنسيق Gradle الجديد فقط لمشاريع C ++:

- افتح المشروع من قاعدة بيانات الترجمة بتحديد موقع IDE لملف compile_commands.json . حتى الآن ، في هذه الحالة ، لا يمكن تجميع وإطلاق المشروع من CLion ، لأن قاعدة بيانات التجميع لا تحتوي على معلومات حول تجميع المشروع بأكمله.
ولكن في كلتا الحالتين ، كل من Gradle وقاعدة بيانات التجميع ، تتوفر جميع الوظائف الذكية للعمل مع التعليمات البرمجية! وبالمناسبة ، فإن خيار قاعدة بيانات التجميع مثير للاهتمام لأنه الآن ، مهما كان مشروعك - Makefiles ، Ninja ، Qbs ، أي من نماذج مشروعك المحددة - يمكنك
إنشاء قاعدة بيانات تجميعية لمشروعك وفتحها في CLion!
وفي الوقت نفسه ، نواصل العمل على واجهة برمجة التطبيقات لإضافة دعم لنماذج التصميم الجديدة في CLion!
تحسينات CMake
تم إجراء بعض التحسينات الهامة لمشاريع CMake. الشيء الأكثر أهمية هو أنه إذا تم استخدام ملفات الرؤوس الموجودة داخل دليل مشروعك في ملفات المشروع وربطها عبر التوجيه
#include
، فلن
تحتاج بعد الآن إلى إدراجها بشكل صريح في نصوص CMake ! سيضعها CLion الآن على أنها تصميم ، وستتوفر جميع الوظائف الذكية مثل إعادة البناء والإكمال التلقائي في هذه الملفات:

يتعلق التحسين الثاني المهم بتكوين الأدوات الخارجية (الأدوات الخارجية) ، والتي يمكن استدعاؤها بعد ذلك إما عن طريق الأمر أو كجزء من تكوينات تشغيل التطبيق. وحدات الماكرو التي تحتوي على جميع أنواع متغيرات CMake متوفرة الآن فيها. على سبيل المثال ، دليل التجميع أو اسم الملف القابل للتنفيذ:

أدوات تحليل التعليمات البرمجية الديناميكية
بالنسبة لـ Valgrind Memcheck ، المدعومة في CLion مرة أخرى في الإصدار 2017.3 ، أصبح من الممكن تصدير نتائج التحليل ثم استيرادها مرة أخرى:

أيضًا في هذا الإصدار ، قدم CLion دعمًا لأداة أخرى لتحليل الرمز الديناميكي -
Google Sanitizers . لتمكينها ، يجب عليك
-fsanitize
الخاص -
-fsanitize
في نصوص CMake الخاصة
-fsanitize
، وبعد ذلك ، إذا كنت تستخدم إصدار Clang 3.8.0 على الأقل أو إصدار GCC 5.0.0 على الأقل ، فسيكون CLion قادرًا على اكتشاف استخدام المطهرات تلقائيًا وعرض نتائج عملهم في نافذة خاصة:

لا يمكنك فيه عرض قائمة الأخطاء التي تم العثور عليها فحسب ، بل يمكنك أيضًا عرض شفرة المصدر (والانتقال إليها) ، ودراسة المعلومات حول الإطار ، ومشاهدة مسار الخطأ. اقرأ المزيد عن المطهرات والإعدادات المدعومة في CLion في منشور
المدونة الخاص بنا باللغة الإنجليزية.
إعادة تجميع ملف واحد
لنماذج المشروع CMake وقاعدة بيانات التجميع في CLion 2018.2 هناك فرصة لإعادة بناء ملف واحد دون التسبب في إعادة بناء المشروع بأكمله. للقيام بذلك ، هناك إجراء في قائمة Run - Recompile ، أو يمكنك استخدام تركيبة المفاتيح Shift + Ctrl + F9 على Linux / Windows ، ⇧⌘F9 على macOS (في التخطيطات الافتراضية):

تُعد هذه الميزة طريقة رائعة للتحقق بسرعة من أن التغييرات الحالية للملف لم تكسر تجميع المشروع بأكمله. إذا كانت التفاصيل مثيرة للاهتمام ، وما هو نوع أمر التجميع الذي يتم استدعاؤه وكيفية تحديد نوع التجميع ، يمكنك القراءة بالتفصيل
في مدونتنا .
قواعد البيانات
وفقًا لنتائج
استطلاعنا على Twitter ، يلجأ العديد من مستخدمي CLion إلى قواعد بيانات مختلفة عند تطوير مشروع في C / C ++. لذلك ، من هذا الإصدار ، تم تضمين مكون إضافي للعمل مع قواعد البيانات ورمز SQL في IDE الخاص بنا. وهو تناظري وظيفي كامل لبيئة قاعدة البيانات -
DataGrip . لذلك هذا
المنشور هنا على هابر من
المساجد حول الابتكارات في DataGrip 2018.2 قد تكون مهتمًا أيضًا بقراءتها.
وهذا ليس كل شيء!
باختصار حول التحسينات الأخرى:
- حظرنا الإصدار الجديد من مصحح أخطاء LLDB 6.0 والإصدار الجديد من CMake 3.12.
- بالإضافة إلى ذلك ، في حالة GDB ، تعلمت CLion استخدام طابعات جميلة للأنواع عند عرض المؤشرات لمتغيرات من نوع معين.
- يتم دعم عمليات الخلفية لـ WSL ، مما يسهل تشغيل تكوين CLion بالكامل باستخدام WSL.
- من منصة IntelliJ ، تلقى CLion عددًا من التحسينات في دعم أنظمة التحكم في الإصدار ، على نظام MacOS دعم MacBook Touch Bar وعناوين النوافذ الداكنة ، بالإضافة إلى ذلك ، تم تحديث مجموعة الرموز الكاملة في واجهة IDE .
الفيديو التقليدي حول الميزات الجديدة لـ CLion 2018.2 باللغة الإنجليزية من محامينا المطور:
وبالمناسبة ، حتى الأربعاء ، 1 أغسطس 2018 ، 19:05 بتوقيت موسكو (GMT + 3) ،
نعطي خصمًا 50٪ على جميع منتجات JetBrains Toolbox .
أسئلة؟ سنكون سعداء للإجابة في التعليقات!
فريق JetBrains CLion الخاص بكالدافع للتطوير