لينت (برنامج)

Lint هو أداة مساعدة لنظام Unix تقوم بتحليل ثابت لبرامج لغة C. [ 1 ] وقد أطلق البرنامج اسمه على أدوات الحوسبة الحديثة المسؤولة عن التحقق من أخطاء أسلوب البرمجة أو التنسيق، والمعروفة باسم " أدوات التحليل الثابت " أو " أدوات التحليل الثابت "، على الرغم من أن برنامج Lint الأصلي كان يقوم بتحليل ثابت للبرامج .

تاريخ

ابتكر ستيفن سي. جونسون ، عالم الحاسوب في مختبرات بيل ، مصطلح "lint" عام 1978 أثناء تصحيحه لقواعد yacc التي كان يكتبها للغة ومعالجته لمشاكل قابلية النقل الناجمة عن نقل نظام يونكس إلى جهاز 32 بت . [ 1 ] استُعير المصطلح من كلمة lint ، وهي عبارة عن ألياف ووبر دقيقة تتساقط من الملابس، حيث كان الأمر الذي كتبه يعمل كمصيدة وبر في مجفف الملابس، إذ يلتقط الألياف الزائدة مع الحفاظ على سلامة الأقمشة. أُصدر برنامج lint خارج مختبرات بيل في نظام يونكس الإصدار 7 عام 1979.

في ورقته البحثية التي نشرها عام 1978، أوضح جونسون أسبابه لإنشاء برنامج جديد لاكتشاف الأخطاء: "...إن فكرة وجود برنامجين فكرة جيدة" لأنهما يركزان على أمور مختلفة، مما يسمح للمبرمج "بالتركيز في مرحلة واحدة من عملية البرمجة على الخوارزميات وهياكل البيانات وصحة البرنامج فقط ، ثم تعديل خصائص الشمولية وقابلية النقل لاحقًا، بمساعدة أداة lint". [ 1 ]

تُدرج الورقة البحثية عمليات التحقق الإضافية لبرنامج Lint على النحو التالي:

  • يتحقق من وجود متغيرات ووظائف غير مستخدمة؛
  • يتحقق من المتغيرات المستخدمة قبل تعيينها أو التي تم تعيينها ولكن لم يتم استخدامها مطلقًا؛
  • التحقق من وجود رمز غير قابل للوصول؛
  • يتحقق من الدوال التي تُرجع أحيانًا قيمة إرجاع وأحيانًا لا تُرجع أي قيمة إرجاع؛
  • فحص إضافي للأنواع؛
  • فحوصات اختيارية لتحويلات الأنواع غير القابلة للنقل؛
  • يتحقق من charالقيم التي يتم اختبارها بشكل غير قابل للنقل للتأكد من كونها سلبية؛
  • تعيين قيم قد لا تتناسب مع المتغير المستهدف، على سبيل المثال، longتعيين قيم لمتغير intما؛
  • عبارات C صحيحة لا معنى لها، مثل عبارة *p++;تقوم بزيادة القيمة pولكنها لا تستخدم القيمة التي تمت زيادتها مسبقًا؛
  • احتمال وجود خلل في محاذاة المؤشر؛
  • الكود الذي يتصرف بشكل مختلف إذا تم إجراء تقييم التعبير بشكل مختلف على منصات أو مترجمات مختلفة؛
  • عدم تطابق أنواع البيانات بين المعاملات الرسمية والمعاملات الفعلية للدوال.

أدخلت لغة ANSI C نماذج الدوال ، مما يسمح لمترجمات ANSI C بإجراء فحوصات عدم تطابق الأنواع بين معاملات الدوال الرسمية والفعلية إذا تم الاطلاع على نموذج الدالة قبل استدعائها. كما أضافت نوعًا voidللدوال التي لا تُرجع قيمة، مما يسمح للمترجمات بالتحقق من voidالدوال التي تُرجع قيمة، بالإضافة إلى التحقق من الدوال التي لها نوع قيمة إرجاع ولكنها لا تُرجع قيمة. يمكن أيضًا إجراء العديد من فحوصات lint كجزء من التحليل الذي تُجريه المترجمات المُحسِّنة ، لذلك، عند إجراء مستوى عالٍ من التحسين، تُجري مترجمات C أيضًا فحوصات للمتغيرات والدوال غير المستخدمة، وفحوصات المتغيرات المستخدمة قبل تعيينها والمتغيرات المعينة وغير المستخدمة، وفحوصات للتعليمات البرمجية غير القابلة للوصول. كما أُضيفت فحوصات lint أخرى إلى مترجمات C بمرور الوقت.

خلفاء لينت

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

تُعرف عمليات التحقق من قواعد اللغة وأساليب الكتابة لشفرة المصدر بلغة معينة باسم " التدقيق اللغوي " . ومن أمثلة هذه الأدوات : clang-format من LLVM للغتين C و C++ ، وRustfmt للغة Rust ، و PHP CodeSniffer للغة PHP ، وESLint للغة JavaScript ، وStylelint للغة CSS ، وPylint للغة Python ، وRuboCop للغة Ruby ، وgolint للغة Go . تتيح بعض هذه الأدوات، مثل ESLint، إمكانية الإصلاح التلقائي للقواعد: حيث يمكن أن يتضمن تعريف القاعدة تعريفًا لتحويل يُزيل التحذير. ومن المرجح أن تتضمن قواعد الأسلوب إصلاحًا تلقائيًا. إذا تم تشغيل المدقق اللغوي في وضع "إصلاح الكل" على ملف لا يُفعّل سوى قواعد التنسيق، فسيعمل المدقق اللغوي تمامًا مثل أداة التنسيق.

تم تطوير أدوات تُجري تحليلاً ثابتاً للبرنامج أكثر تفصيلاً من المُترجمات، مثل Coverity و cppcheck ومحلل Clang الثابت. أما بالنسبة للغة JavaScript، فيُجري ESLint تحليلاً ثابتاً للبرنامج بالإضافة إلى تحليل أسلوب كتابة الكود.

تُعدّ أدوات التدقيق اللغوي مفيدةً للغاية للغات البرمجة الديناميكية مثل جافا سكريبت وبايثون . ولأنّ مُفسّرات هذه اللغات لا تُطبّق عادةً قواعد كثيرة وصارمة أثناء التنفيذ ، يُمكن استخدام أدوات التدقيق اللغوي كأدوات تصحيح بسيطة لاكتشاف الأخطاء الشائعة (مثل التناقضات النحوية) بالإضافة إلى الأخطاء الخفية مثل أخطاء هايزن (التي تُشير إلى الشيفرة المشبوهة على أنها "أخطاء مُحتملة"). [ 6 ] تُجري أدوات التدقيق اللغوي عمومًا تحليلًا ثابتًا للشيفرة المصدرية. [ 7 ]

انظر أيضاً

مراجع

  1. 1 2 3 4 جونسون، ستيفن سي. (25 أكتوبر 1978). "لينت، مدقق برامج بلغة سي" . تقارير العلوم الحاسوبية والتقنية. مختبرات بيل: 78-1273 . CiteSeerX 10.1.1.56.1841 . مؤرشف من الأصل في 23 يناير 2022. 
  2. "نظام يونكس مجاني!" . lemis.com. 2002-01-24.
  3. برودريك، بيل (23 يناير 2002). "إلى عشاق يونكس الأعزاء" (ملف PDF) . كالدرا إنترناشونال . مؤرشف من الأصل (ملف PDF) في 19 فبراير 2009.
  4. "دليل مستخدم أركانيست: لينت" . فابريكاتور . تم الاطلاع عليه بتاريخ 19 يناير 2018 .
  5. rust-lang/rustfmt ، لغة برمجة Rust، 2025-01-20 ، تم الاطلاع عليه بتاريخ 2025-01-21
  6. "ESLint - أداة تدقيق جافا سكريبت قابلة للتخصيص (1)" . theCodeCampus . 2015-06-09 . تم الاطلاع عليه بتاريخ 2019-04-21 .
  7. جونز، نايجل (1 مايو 2002). "كيفية استخدام Lint لتحليل الكود الثابت" . مجموعة بار .

للمزيد من القراءة