مأساة اللثغة المشتركة: لماذا تتضخم اللغات الشعبية في التعقيد

مقتبس من المناقشة في عام 2015 . هنا ، تعد Common Lisp مجرد مثال على العديد من الأمثلة الجيدة.


مستقبل جافا سكريبت؟

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

أحببت Algol و Smalltalk و Pascal و Early Scheme كلغات صغيرة وجميلة. في وقت مبكر C وجافا سكريبت وانتقد بحق عن كثب ونادرا ما دعا جميلة. لكنها كانت صغيرة أيضا ، وكان موضع تقدير كبير. عندما تكون اللغة صغيرة ، غالبًا ما يتحدد تقييمنا من خلال الشعور: "يمكنني تعلم كل شيء وإتقانه" ، ثم: "أعرف كل شيء. يعجبني أنه لا توجد تفاصيل مجهولة . " ولكن في حالة C و JavaScript ، فمن غير المرجح أن يكون لدى أي شخص إحساس بالتمكن من إتقان اللغة تمامًا ، لأن التفاصيل كانت معقدة بالفعل بشكل شيطاني. ومع ذلك ، فإن شعور "لغة صغيرة" في نواح كثيرة تحدد مدى الرضا عن الاستخدام اليومي.

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

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

بمجرد أن تتجاوز اللغة تعقيدًا معينًا - على سبيل المثال ، LaTeX و Common Lisp و C ++ و PL / 1 و Java الحديثة - تصبح البرمجة أكثر شبهاً باستبعاد مجموعة فرعية من الوظائف للاستخدام الشخصي من بحر لا حصر له من الوظائف ، ومعظمنا لن نتقنه ونتصالح معه مع ذلك. بمجرد اعتبار اللغة "لا نهائية" ، لا تزال الفوائد المحددة للميزة الجديدة مفهومة. لكن التكاليف الإجمالية المرتبطة بالتعقيد الإضافي لم تعد واضحة. لم يعد يشعر بها أولئك الذين يناقشون ميزة جديدة.

$ Infinity + 1 == Infinity $ .

حتى رقم كبير $ + 1 == تقريبا نفس العدد الكبير $ .

هذا هو موت الف التخفيضات ، مما يجعل هذه الوحوش تنمو دون أي قيود.

لذلك ، أطلب من كل من يؤثر على اللغة أن يفكر في شريط أعلى عند التفكير في وظيفة جديدة بدلاً من "من الجيد أن تتاح له هذه الفرصة ، أليس كذلك؟". أعتقد أن EcmaScript-2015 يقع في المنطقة الحدودية حيث لا يزال من الممكن منع النمو المتفشي ، ولكن فقط إذا بدأنا في كبح بعضنا البعض بمعايير عالية لأي ميزة جديدة مقترحة. كمجتمع ، نحتاج إلى شعور أكثر عمومًا بالهلع من الحجم الذي وصل إليه بالفعل EcmaScript 2015. من الناحية المثالية ، مع نمو اللسان ، عندما يقترب الحجم من نقطة اللاعودة ، يجب أن يزيد الذعر ، لا أن ينقص.

بعض الاختلافات



الحفاظ على الحد الأدنى من الضغط غير المتكافئ

تتلاشى أهمية بساطتها مع انتقالنا من لغة أساسية إلى المكتبات. يمكن تمثيل اللغة القياسية ككل باعتبارها البنية التالية:

  • بناء الجملة الأساسي : النماذج الخاصة التي لا يمكن التعبير عنها بدقة بواسطة الامتداد المحلي إلى بناء جملة آخر.
  • الحالة الدلالية : حالة يتم التلاعب بها عن طريق الحساب.
  • مدخلات Kernel : جزء من المكتبة المضمنة التي توفر وظائف لا يمكن أن يوفرها التعليمات البرمجية المخصصة من تلقاء نفسها.
  • مضامين غير نواة: مكتبات مضمنة يمكن تنفيذها في JavaScript ، ولكن الحالة الدلالية أو الوحدات النمطية المضمنة في النواة تعتمد عليها. على سبيل المثال ، من خلال وكيل ، يمكنك تطبيق صفيف في رمز المستخدم. لكن الوحدات الأخرى المضمّنة في النواة تعتمد بالفعل على Array ، مما يمنح هذه المجموعة المحددة موقعًا متميزًا على أي بديل مقترح.
  • السكر النحوي : بناء جملة يمكن التعبير عنه بالتمديد المحلي للبناء الأساسي.
  • المكتبات العامة للراحة : يمكن تنفيذها برمز مستخدم غير منقطع ، ولكن مع مراعاة مسارات التسمية العامة القياسية في مساحة الاسم العالمية الأصلية.
  • الوحدات القياسية للراحة : الوحدات التي تم تطويرها من قِبل المجتمع والتي تمت الموافقة عليها كمعيار.

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

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


All Articles