بروتوكول خادم اللغة

بروتوكول خادم اللغة ( LSP ) هو بروتوكول مفتوح المصدر قائم على JSON-RPC ، يُستخدم بين محررات شفرة المصدر أو بيئات التطوير المتكاملة (IDEs) والخوادم التي توفر "أدوات ذكاء اللغة": [ 1 ] ميزات خاصة بلغات البرمجة مثل إكمال الشفرة ، وتلوين بناء الجملة ، ووضع علامات على التحذيرات والأخطاء، بالإضافة إلى إجراءات إعادة هيكلة الشفرة. يهدف البروتوكول إلى تمكين تنفيذ وتوزيع دعم لغات البرمجة بشكل مستقل عن أي محرر أو بيئة تطوير متكاملة. [ 2 ] في أوائل العقد الثالث من القرن الحادي والعشرين، سرعان ما أصبح بروتوكول خادم اللغة معيارًا لمزودي أدوات ذكاء اللغة. [ 1 ]

تاريخ

طُوِّر بروتوكول LSP في الأصل لبرنامج Microsoft Visual Studio Code ، وهو الآن معيار مفتوح المصدر . في 27 يونيو 2016، أعلنت مايكروسوفت عن تعاونها مع Red Hat و Codenvy لتوحيد مواصفات البروتوكول. [ 3 ] [ 4 ] وتُستضاف مواصفاته وتُطوَّر على منصة GitHub . [ 5 ]

خلفية

توفر بيئات التطوير المتكاملة الحديثة للمبرمجين ميزات متطورة مثل إكمال التعليمات البرمجية ، وإعادة هيكلة التعليمات البرمجية ، والتنقل إلى تعريف الرمز ، وتمييز بناء الجملة ، وعلامات الخطأ والتحذير.

على سبيل المثال، في لغة برمجة نصية، قد يرغب المبرمج في إعادة تسمية دالة read. يمكنه إما تعديل ملفات الشيفرة المصدرية يدويًا وتغيير مواضع اسم الدالة القديم إلى الاسم الجديد، أو استخدام إمكانيات إعادة هيكلة الشيفرة في بيئة التطوير المتكاملة (IDE) لإجراء جميع التغييرات اللازمة تلقائيًا. لدعم هذا الأسلوب من إعادة الهيكلة، تحتاج بيئة التطوير المتكاملة إلى فهم دقيق للغة البرمجة المستخدمة في كتابة الشيفرة المصدرية . قد تتسبب أداة برمجة تفتقر إلى هذا الفهم - على سبيل المثال، تلك التي تعتمد على البحث والاستبدال البسيط - في حدوث أخطاء. عند إعادة تسمية readدالة، على سبيل المثال، يجب ألا تستبدل الأداة التطابق الجزئي في متغير قد يُسمى readyState، كما يجب ألا تستبدل جزءًا من تعليق برمجي يحتوي على كلمة "already". كذلك، يجب ألا تؤدي إعادة تسمية متغير محلي ، على سبيل المثال، إلى تغيير متغيرات تحمل نفس الاسم في نطاقاتread أخرى .

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

قبل تصميم وتنفيذ بروتوكول خادم اللغة لتطوير Visual Studio Code، كانت معظم خدمات اللغة مرتبطة بشكل عام ببيئة تطوير متكاملة (IDE) أو محرر آخر. في غياب بروتوكول خادم اللغة، تُنفذ خدمات اللغة عادةً باستخدام واجهة برمجة تطبيقات (API) خاصة بالأداة . ويتطلب توفير خدمة اللغة نفسها لأداة تحرير أخرى جهدًا لتكييف الكود الحالي بحيث تستهدف الخدمة واجهات الإضافات الخاصة بالمحرر الثاني. [ 7 ]

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

لا يقتصر استخدام بروتوكول LSP على لغات البرمجة فقط، بل يمكن استخدامه مع أي نوع من اللغات النصية، مثل المواصفات [ 8 ] أو لغات المجال المحددة (DSL) [ 9 ] .

نظرة عامة فنية

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

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

يُحدد بروتوكول خادم اللغة الرسائل التي يتم تبادلها بين العميل وخادم اللغة. وهي رسائل بتنسيق JSON-RPC مسبوقة برؤوس مشابهة لبروتوكول HTTP. وقد تصدر الرسائل من الخادم أو العميل.

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

السجل

توجد قوائم بالتطبيقات المتوافقة مع بروتوكول LSP، والتي يتم صيانتها بواسطة Langserver.org [ 10 ] أو Microsoft. [ 11 ]

مراجع

  1. 1 2 جوناسينغ وماركوس 2021 ، ص. الحادي والعشرون.
  2. إفتينج، سفين؛ سبونيمان، ميرو (11 ديسمبر 2016). "شرح بروتوكول خادم اللغة" . مؤسسة إكليبس . تم الاطلاع عليه بتاريخ 25 أبريل 2017 .
  3. كريل، بول (27 يونيو 2016). "بروتوكول خادم اللغة المدعوم من مايكروسوفت يسعى لتحقيق التوافق بين اللغات والأدوات" . إنفوورلد . تم الاطلاع عليه بتاريخ 26 أبريل 2017 .
  4. هاندي، أليكس (27 يونيو 2016). "كودنفي ومايكروسوفت وريد هات يتعاونون في بروتوكول خادم اللغة" . إس دي تايمز . تم الاطلاع عليه بتاريخ 26 أبريل 2017 .
  5. "microsoft/language-server-protocol" . GitHub . تم الاطلاع عليه بتاريخ 29 مارس 2021 .
  6. 1 2 خواريز، سيث (12 مايو 2016). "أندرس هيلسبرغ حول بناء المترجمات الحديثة" . مايكروسوفت . تم الاسترجاع في 22 فبراير 2017 .
  7. إفتينج، سفين (ديسمبر 2016). "إكليبس يتعلم بروتوكولات جديدة" . تم الاطلاع عليه بتاريخ 26 أبريل 2017 .
  8. توماسيتي، غابرييل (16 فبراير 2017). "لماذا يجب أن تعرف بروتوكول خادم اللغة" . فيديريكو توماسيتي . تم الاطلاع عليه بتاريخ 8 مايو 2017 .
  9. ^ نيومان ، ألكسندر (1 يونيو 2016). "Xtext 2.11 يدعم بروتوكول خادم اللغة" [ يدعم Xtext 2.11 بروتوكول خادم اللغة ] . مطور Heise (بالألمانية). هيز مدين . تم الاسترجاع في 8 مايو 2017 .
  10. "Langserver.org" . Langserver.org . تم الاطلاع عليه بتاريخ 8 مايو 2017 عبر Sourcegraph.
  11. غاما، إريك (21 يناير 2019). "خوادم اللغات" . مايكروسوفت . تم الاسترجاع في 25 يناير 2019 عبر جيت هاب.

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