
منذ بعض الوقت ، قام روبرتو من القدس ، مؤلف لغة اللوا ، بزيارة مكتبنا في موسكو. قابلناه ، حيث طرحنا أسئلة من قراء هبر. أخيرًا ، يمكننا مشاركة تسجيل المحادثة بالكامل معك.
- دعنا نفلسف لبداية. إذا كنت تريد بناء لوا مرة أخرى من نقطة الصفر ، فما الأشياء الثلاثة التي ستغيرها في هذه اللغة؟- واو! سؤال صعب. هناك قصة كاملة وراء إنشاء وتطوير اللغة. لم يكن هذا قرارًا كبيرًا. كانت هناك قرارات أسفها والتي تمكنت من إصلاحها على مر السنين. ويشكو المبرمجون من ذلك طوال الوقت لأن التوافق معطل. لقد فعلنا هذا عدة مرات. وأفكر فقط في بعض المهام الصغيرة.
- الإعدادات الافتراضية العالمية (بشكل افتراضي)؟ هل تعتقد أن هذا هو الطريق الصحيح؟- ربما. لكن هذا المسار صعب للغاية بالنسبة للغات الديناميكية. ربما يجب عليك التخلي تمامًا عن مفهوم "الافتراضي" ، ولكن بعد ذلك سيكون من الصعب استخدام المتغيرات.
على سبيل المثال ، عليك أن تعلن بطريقة أو بأخرى جميع المكتبات القياسية. تحتاج
one-liner
،
print(sin(x))
، ثم تحتاج إلى إعلان "print" و "sin" أخرى. من الغريب أن يكون لديك إعلانات لهذه النصوص القصيرة.
يجب ألا يحتوي أي شيء أكبر بشكل افتراضي ، كما يبدو لي. محليًا افتراضيًا ليس حلاً ، فهو غير موجود على الإطلاق. إنه مخصص فقط ، وليس للاستخدام. نقوم بتعيين شيء ما ، ثم استخدامه وتعيينه مرة أخرى ، ويحدث خطأ لا يمكن تفسيره تمامًا.
ربما لا تكون الشمولية الافتراضية مثالية ، ولكن الموقع الافتراضي ليس بالتأكيد خيارًا. أعتقد أن هناك نوعًا من الإعلانات ، وربما اختياريًا ... لقد اعتزمنا عدة مرات إصدار إعلان عالمي. لكن إذا قدمنا بشكل أعمى كل ما نطلبه ، فلن يتحقق شيء جيد.
(بسخرية) نعم ، سنقدم إعلانًا عالميًا ، ونضيف أنه ، sho ، الخامسة ، العاشرة ، نسحب أخرى ، ونتيجة لذلك ، ندرك أن الحل النهائي لا يرضي معظم المبرمجين ، ولن نقوم بإضافة جميع الميزات التي طلبناها ، وبالتالي نحن لا ننفذ أي شيء. بعد كل شيء ، وضع صارم هو حل وسط معقول.
هناك مشكلة: غالبًا ما نستخدم ، على سبيل المثال ، الحقول الموجودة داخل الوحدات ، ثم مرة أخرى تواجه نفس المشكلات. هذه مجرد حالة واحدة محددة للغاية من الأخطاء ، والتي من المحتمل أن تؤخذ في الاعتبار في الحل العام. لذلك إذا كنت بحاجة إليها حقًا ، فمن الأفضل استخدام لغة مطبوعة بشكل ثابت.
- لا تزال الملاءمة الافتراضية ملائمة لملفات التكوين الصغيرة."نعم ، صحيح ، للنصوص الصغيرة وما شابه ذلك."
- ولا تنازلات في هذه الحالة؟- هناك دائما تنازلات. في هذه الحالة ، حل وسط بين البرامج النصية الصغيرة والبرامج الحقيقية ، شيء من هذا القبيل.
- وهنا نعود إلى السؤال الكبير الأول: ما الأشياء الثلاثة التي ستغيرها إذا كانت هناك فرصة كهذه؟ يبدو لي أنك سعيد جدًا بالحالة الراهنة للأمور ، أليس كذلك؟"حسنًا ، لن أسميها تغييرًا كبيرًا ، ولكن ... أحد القرارات غير الناجحة التي تحولت إلى تغيير كبير هو عدم وجود جداول". أنا آسف لذلك. أنا جعلت هذا الاختراق ... هل تعرف ما أتحدث عنه؟ قبل نصف عام أو عام ، قمت بإصدار نسخة من لوا التي لم يكن فيها أحد في الجداول.
- لا شيء القيم؟- بالضبط. أعتقد أن هذا يسمى "لا شيء" في الجداول - أي أنه لاغٍ. قمنا باختراق قواعد اللغة لضمان التوافق.
- لماذا هو مطلوب؟"أنا مقتنع حقًا أن هذه هي المشكلة برمتها ... أعتقد أن معظم المشكلات التي تحدث في الصفائف ستختفي إذا استطعنا [عدم وجود جداول في الجداول] ... بتعبير أدق ، المشكلة ليست في صفائف. يخبرونني أن الصفائف لا يمكن أن تحتوي على شيء ، لذلك يجب فصل المصفوفات عن الجداول. المشكلة الحقيقية هي أنه لا يمكننا أن نبقي في الجداول! لذلك ، لا تكمن المشكلة في كيفية تمثيل المصفوفات ، ولكن في الجداول. إذا استطعنا أن نحصل على صفر في الجداول ، فسنكون في صفائف بدون أي شيء آخر. لذلك أنا آسف جدًا لذلك ، ولا يفهم الكثير من الأشخاص كيف يمكن أن تتغير الأمور إذا سمح لوا بوضعها في الجداول.
- هل أستطيع أن أحكي لك قصة عن Tarantool؟ لدينا تنفيذ الخاصة بنا من null ، وهو CDATA إلى مؤشر فارغة. نستخدمها في الحالات التي تحتاج فيها إلى إنشاء أجزاء فارغة في ذاكرتك لإدراج وسيطات تحديد المواقع للمكالمات عن بُعد ، وما إلى ذلك. ولكن عادة ما تكون هذه مشكلة لأن CDATA يتم تحويله دائمًا إلى صواب. ولا شيء في المصفوفات يحل الكثير من المشاكل.- نعم اعلم. هذا ما أتحدث عنه - سيؤدي ذلك إلى حل الكثير من المشكلات للعديد من الأشخاص ، لكن هذا يؤدي إلى مشكلة توافق أكبر. ليس لدينا الشجاعة لإصدار إصدار غير متوافق تمامًا ، ومن ثم تدمير المجتمع وإصدار وثائق أخرى لـ Lua 5 و Lua 6 ، إلخ. ولكن ربما في يوم من الأيام سنصدر مثل هذا الإصدار. هذه ستكون تغييرات كبيرة جدا. أعتقد أنه كان ينبغي القيام بذلك من البداية ، وبعد ذلك كنا نتحدث عن تغيير تافه في اللغة ، باستثناء التوافق. واليوم سوف كسر العديد من البرامج.
- ما هي أوجه القصور التي تراها إلى جانب مشكلة التوافق؟- سوف تكون هناك حاجة وظيفتين بدائية جديدة. يشبه "حذف المفتاح" ، لأن تعيين لا شيء لن يحذف المفتاح ، لذلك ستحتاج إلى عملية بدائية لإزالته بالفعل من الجدول. وستحتاج إلى "اختبار" للتحقق من المكان الذي يوجد فيه اختلاف واضح بين عدم وجود بيانات.
- هل قمت بتحليل تأثير هذه الابتكارات في التطبيقات العملية؟- نعم ، أصدرنا مثل هذا الإصدار من لوا. كما قلت ، هذا كسر بهدوء الرمز. يستخدم البعض استدعاء دالة
table.insert(f(x))
. ويتم ذلك عن قصد بحيث إذا كانت الوظيفة لا تريد إدراج أي شيء ، فإنها تُرجع إلى الصفر. لذا بدلاً من التحقق المنفصل ، "هل أريد التضمين؟" أدعو
table.insert
، وإذا حصلت على لا شيء ،
table.insert
أنه لن يتم إدراجه. كما هو الحال في أي لغة أخرى ، تحولت الأخطاء إلى ميزة ، ويستخدمها الناس. ولكن إذا قمت بتغيير الميزة ، فسيؤدي ذلك إلى كسر الرمز.
- ماذا عن نوع الفراغ؟ مثل لا شيء ، باطل فقط؟"حسنًا ، لا ، إنه كابوس". أنت فقط تأجيل حل المشكلة. إذا أدخلت "عكازًا" واحدًا ، فستحتاج إلى واحدة أخرى والمزيد والمزيد. هذا ليس حلا. واحدة من المشاكل هي أن لا شيء قد ترسخت بالفعل في العديد من أماكن اللغة. فيما يلي مثال نموذجي: نقول "تجنب عدم وجود صفائف ، أي ثقوب". ثم نكتب دالة تُرجع لا شيء وشيء بعدها ، ونحصل على رمز خطأ. مثل هذا البناء يعني بالفعل ما هو لا شيء ... على سبيل المثال ، إذا كنت أرغب في عمل قائمة بالنتائج التي تم إرجاعها بواسطة الوظيفة ، فقط لأخذها جميعًا.
- لهذا لديك اختراق :)"هذا صحيح ، لكن ليس عليك استخدام المتسللين لحل هذه المهام البسيطة والواضحة." ومع ذلك ، تقوم المكتبات بهذا ... بطريقة ما فكرت في الأمر: ربما ينبغي أن تعيد المكتبات خطأً بدلاً من الصفر ، على الرغم من أن هذا خيار صعب ، إلا أنه لن يحل سوى جزء صغير من المشكلة. المشكلة الحقيقية ، كما قلت ، هي أننا نحتاج إلى عدم وجود في الجداول. خلاف ذلك ، لا ينبغي لنا أن نستخدم لا شيء كما أعتقد. بشكل عام ، ليس واضحا. لذلك إذا قمت بإنشاء الفراغ ، فستظل هذه الدالات لا شيء ، ولن نقوم بحل المشكلة حتى ننشئ نوعًا جديدًا وستعيد الدالات الفراغ بدلاً من لا شيء.
- باستخدام باطل ، يمكنك أن تقول صراحة أنه يجب تخزين المفتاح في الجدول ، والمفتاح مع القيمة باطلة. ولا يمكن أن تعمل كما كان من قبل."نعم ، هذا ما أقصده." يجب أن ترجع كل هذه الوظائف في المكتبات فراغًا أو لا شيء.
"يمكنهم أيضًا إرجاع لا شيء ، لم لا؟"- لأنه في بعض الحالات ، لن نحل مشكلة استحالة التقاط جميع القيم التي ترجعها الوظيفة.
"لكن لن يكون لدينا المفتاح الأول ، بل المفتاح الثاني فقط."- لا ، لن يكون هناك ثانية ، لأنه سيتم إجراء الحساب بشكل غير صحيح وستظهر فتحة في الصفيف.
- إذن أنت تريد أن تقول أنك بحاجة إلى metamethod وهمية؟- نعم. أحلم بهذا:
{f(x)}
تحتاج إلى اعتراض جميع النتائج التي يتم إرجاعها بواسطة
f(x)
. وبعد ذلك أستطيع أن أقول
%x
أو
#x
، وبهذه الطريقة أعرف عدد النتائج التي تم إرجاعها. هذه هي الطريقة التي يجب أن تعمل لغة عادية. لذا لن يؤدي إنشاء الفراغ إلى حل المشكلة حتى تكون هناك قاعدة صارمة جدًا لا تؤدي وظائفها أبدًا إلى الصفر. ولكن لماذا نحتاج حتى لا شيء؟ ربما الأمر يستحق التخلي عنه.
- روبرتو ، هل سيكون هناك دعم أقوى للتحليل الساكن في لوا؟ مثل لوا تحقق على المنشطات؟ بالطبع ، أنا أفهم أن هذا لن يحل جميع المشاكل. قلت إن هذه الميزة ستظهر في الإصدار 6.0 ، إذا كان الأمر كذلك ، أليس كذلك؟ وإذا كان في 5.x سيكون هناك أداة قوية لتحليل ثابت - إذا تم استثمار ساعات العمل فيه - هل سيساعد ذلك؟"لا ، أعتقد أن أداة التحليل الثابت القوية تسمى ... نظام الكتابة!" إذا كنت بحاجة إلى أداة قوية حقًا ، فاستخدم لغة مطبوعة بشكل ثابت مثل Haskell ، أو نوعًا ما من اللغات ذات الأنواع التابعة. ثم سيكون لديك بالتأكيد أداة تحليل قوية.
"ولكن بعد ذلك لن يكون لدي لوا".- هذا صحيح ، هناك حاجة لوا ل ...
- عدم اليقين؟ أنا أحب صورتك مع الزرافة حول أنواع ثابتة وديناميكية.- نعم ، هذه هي الشريحة الأخيرة من العرض التقديمي.
الشريحة الأخيرة من العرض التقديمي لمحادثة روبرتو القدس "لماذا لوا؟ (ولما لا) "في مؤتمر لوا في موسكو 2019.- لطرح السؤال التالي ، دعنا نعود إلى هذه الصورة. إذا فهمت بشكل صحيح ، فأنت تعتقد أن Lua هي أداة صغيرة ملائمة لحل المهام غير الكبيرة جدًا.- لا ، أعتقد أنه يمكنك حل بعض المشاكل الكبيرة ، ولكن لا تنطوي على تحليل ثابت. أعتقد في الاختبارات من كل قلبي. بالمناسبة ، أنا لا أتفق معك فيما يتعلق بالتغطية ، وأنه لا ينبغي لنا أن نلاحق التغطية ... أريد أن أقول ، أنا أتفق تمامًا مع الرأي القائل بأن التغطية لا توفر اختبارًا كاملاً ، لكن عدم وجود تغطية لا يسمح بإجراء الاختبار على الإطلاق. لقد تحدثت في ستوكهولم عن غرفة الاختبار ، كنت هناك. بدأت الاختبار مع [عدة] أخطاء - وهذا أغرب شيء - أحدها معروف على نطاق واسع ، والباقي لم يكن معروفًا تمامًا. حدث شيء ما بالكامل في ملف الرأس Microsoft و C و C ++. لقد فتشت الشبكة ، لكن لم يكن أحد قلقًا بشأنها أو حتى لاحظتها.
على سبيل المثال ، هناك
modfatical function
modf () ، والتي تحتاج إلى تمرير مؤشر إلى قيمة مزدوجة ، لأنها تُرجع زوجي. نقوم بتحويل عدد صحيح أو جزء كسور من عدد. لطالما كانت هذه الميزة جزءًا من المكتبة القياسية. ثم جاءت C 99 ، وهذه الوظيفة مطلوبة الآن للأرقام الطافية. وحفظ ملف رأس Microsoft هذه الوظيفة ببساطة وأعلن عن وظيفة أخرى ماكرو. وهذا هو ، خضع أول وظيفة تحويل نوع الضمني. تم تحويل Double إلى تعويم ، ثم تم تحويل مؤشر إلى مضاعفة إلى مؤشر إلى تعويم!
- هناك خطأ ما في هذه الصورة.- هذا هو ملف الرأس من Visual C ++ و Visual C 2007. إذا قمت بالاتصال بهذه الوظيفة مرة واحدة ، مع أي معلمات ، ثم تحقق من النتيجة ، فستكون خاطئة ، ما لم تكن 0. لن تكون أي قيمة أخرى صحيحة. لا يمكنك أبدًا استخدام هذه الميزة. تغطية الصفر. ثم كان هناك الكثير من النقاش حول الاختبار ... ما عليك سوى استدعاء الوظيفة مرة واحدة والتحقق من النتيجة! هذه المشكلة موجودة لفترة طويلة ، لسنوات عديدة لم تزعج أحدا. كان لدى Apple خلل مشهور جدًا ،
مثل "
if… what… goto… ok
". أدخل شخص ما تعبيرًا آخر هنا ، وأصبح كل شيء طبيعيًا. ثم جادلوا كثيرًا حول ما إذا كانت هناك حاجة للقواعد ، وما إذا كان يجب استخدام الأقواس المعقوفة في نمط الشفرة ، وما إلى ذلك. لا أحد يذكر أن هناك العديد من "IFS" الأخرى. لا أحد فعل ذلك ...
- هناك أيضا مشكلة أمنية ، كما أتذكر.- هذا صحيح. بعد كل شيء ، فإنها اختبار الحالات المؤكدة فقط. إنهم لا يختبرون كل شيء على التوالي ، لأنه سيتم تأكيد كل شيء. هذا يعني أنه في التطبيق الذي يتحقق من الأمان ، لا يوجد اختبار واحد من شأنه التحقق من الفشل في أي اتصالات ، أو ما ينبغي رفضه هناك. والجدل يدور حول الحاجة إلى الأقواس ... نحن بحاجة إلى اختبارات ، على الأقل اختبارات! بعد كل شيء ، لا أحد حتى اختبار ما أعنيه "طلاء". هذا أمر لا يصدق ، فالناس لا يقومون حتى بإجراء الاختبارات الأساسية. بالطبع ، سيكون من الصعب جدًا توفير تغطية للاختبارات الأساسية ، وتشغيل جميع سطور التعليمات البرمجية. يتجنب الناس حتى الاختبارات الأساسية ، وبالتالي فإن التغطية ضئيلة للغاية. أريد أن أحثكم على الاهتمام بأجزاء البرنامج التي نسيتها. شيء مثل تلميح كيفية تحسين الاختبارات الخاصة بك قليلا.
- هل تعرف ما تغطية الاختبار في تارانتول؟ 83٪! ما هي التغطية في لوا؟- حوالي 99.6 ٪. كم عدد سطور الكود لديك؟ مليون ومئات الآلاف؟ هذه كمية ضخمة. 1٪ من مائة ألف عبارة عن ألف سطر من التعليمات البرمجية التي لم يتم اختبارها مطلقًا. أنت لم تنفذها على الإطلاق. لا يختبر المستخدمون أي شيء.
- وهذا هو ، حوالي 17 ٪ من وظائف Tarantool لا تستخدم الآن؟- من غير المحتمل أنك تريد العودة إلى ما كنا نتحدث عنه مرة أخرى ... أعتقد أن إحدى المشكلات في اللغات الديناميكية (واللغات الثابتة أيضًا) هي أن الأشخاص لا يختبرون كودهم. حتى باستخدام لغة ثابتة - ليس مثل Haskell ، ولكن شيئًا مثل Coq - حتى يتوفر لديك نظام تحقق ، فإنك ستغير هذا إلى ذلك. ولا يمكن لأداة التحليل الثابت التقاط هذه الأخطاء ، لذلك تحتاج إلى اختبارات. وإذا كان لديك ، فيمكنك تحديد المشكلات العالمية والأخطاء المطبعية في الأسماء وما إلى ذلك ، وجميع أنواع الأخطاء. تحتاج بالتأكيد الاختبارات. في بعض الأحيان يكون من الصعب تصحيح الأخطاء ، وإلا يكون الأمر بسيطًا - يعتمد على اللغة ونوع الخطأ. لكن خلاصة القول هي أنه لا توجد أداة تحليل ثابتة يمكنها أن تحل محل الاختبارات. من ناحية أخرى ، فإنها لا تضمن عدم وجود أخطاء ، ولكن معهم أشعر بثقة أكبر.
- لدينا سؤال حول اختبار وحدات لوا. كمطور ، أريد اختبار بعض الوظائف المحلية التي يمكنني استخدامها لاحقًا. سؤال: أنت بحاجة إلى تغطية بمستوى 99٪ ، لكن عدد المواقف الوظيفية التي يجب أن تنشئها الوحدة النمطية لواجهة برمجة التطبيقات هو أقل بكثير من مقدار الوظائف التي تدعمها داخليًا.- عفوا ، لماذا؟
- هناك وظيفة غير متوفرة للواجهات العامة."لا ينبغي أن تكون هناك ، فقط احذف هذا الرمز."
- فقط إزالته؟- نعم ، أفعل هذا في بعض الأحيان في لوا. كان هناك نوع من تغطية الرمز ، لم أستطع الوصول إلى هنا ، هناك أو هناك ، قررت أنه كان مستحيلًا وحذفته للتو. نادرا ، لكنه يحدث. إذا كانت بعض المواقف مستحيلة ، فاكتب فقط في التعليقات لماذا هذا غير ممكن. إذا لم تتمكن من الدخول إلى الوظيفة من واجهة برمجة التطبيقات العامة ، فلا ينبغي أن تكون كذلك. من الضروري كتابة واجهات برمجة التطبيقات العامة مع بيانات الإدخال الخاطئ ، وهذا أمر مهم للاختبارات.
- إزالة الشفرة جيدة ، فهي تقلل التعقيد. أقل تعقيدًا - ثبات أعلى وسهولة الصيانة. لا تعقد.- نعم ، في البرمجة المتطرفة هناك مثل هذه القاعدة. إذا تعذر اختبار شيء ما ، فهو غير موجود.
- ما اللغات التي ألهمتها لإنشاء Lua؟ ما النماذج ، أو الميزات الوظيفية ، أو أجزاء اللغات التي تحبها؟- لقد صممت لوا لغرض ضيق للغاية ، لم يكن مشروعًا أكاديميًا. لذلك عندما سألتني عن إعادة إنشاء اللغة ، أجبت أن هناك قصة كاملة وراء ذلك. لم أبدأ في تطوير Lua باستخدام "سأقوم بإنشاء لغة أحبها أو أريد استخدامها أو يحتاجها الجميع." لدي مشكلة: هنا أحتاج إلى لغة تهيئة للجيولوجيين والمهندسين ، يجب أن تكون صغيرة وذات واجهة بسيطة حتى يتمكنوا من استخدامها. لذلك ، كانت واجهة برمجة التطبيقات دائمًا جزءًا لا يتجزأ من اللغة. كانت هذه المهمة. بالنسبة للإلهام ، في ذلك الوقت كنت على دراية بعشر لغات مختلفة.
"أتساءل ما هي اللغات التي تريد تضمينها في لوا".- لقد استعارت أفكارًا من العديد من اللغات ، كل ما هو مناسب لحل مشكلتي. كان لغوي لغة Modula تأثيرًا كبيرًا ، رغم أنه من الصعب القول ، لأن هناك العديد من اللغات. استغرق شيء من AWK. بالطبع ، من Scheme و Lisp ... أنا لست غير مبال إلى Lisp منذ أن بدأت البرمجة.
- وما زالت لا توجد وحدات ماكرو في لوا!- نعم ، بناء الجملة مختلف تماما. ربما كانت اللغة الأولى هي فورتران ... لا ، لغتي الأولى كانت مجمعة ، ثم فورتران. لقد درست ، ولكن لم تستخدم CLU. مبرمجة كثيرا على Smalltalk و SNOBOL. درس أيضًا ، لكن لم يستخدم Icon ، وهي أيضًا لغة مثيرة جدًا للاهتمام. لقد استعارت الكثير من Pascal و C. عندما أنشأت Lua ، كان C ++ معقدًا جدًا بالنسبة لي ، وكان هذا قبل القوالب وأشياء أخرى. بدأت العمل في عام 1991 وأصدرت لوا عام 1993.
- انهار اتحاد الجمهوريات الاشتراكية السوفياتية وبدأت إنشاء Lua :) لم تعجبك الفاصلة المنقوطة والكائنات عندما بدأت Lua؟ يبدو لي أن بناء الجملة سيكون مشابهًا لـ C ، لأن Lua مدمجة فيه. ومع ذلك ...- أعتقد أن بناء الجملة يجب أن يكون مختلفًا ، فلن تشعر بالارتباك لأن هاتين اللغتين مختلفتان.
هذا أمر مضحك حقًا ، وهو مرتبط بالإجابة عن المصفوفات التي تبدأ بواحدة ، والتي لم تسمح لي بالتعبير عنها [في المؤتمر]. كان جوابي طويلاً.
عندما صدر لوا ، كان العالم مختلفًا. لم تكن جميع اللغات مشابهة لـ C. لم يكن هناك جافا وجافا سكريبت ، بيثون كانت طفلة ولم تتجاوز الإصدار 1.0. لذلك لم تكن جميع اللغات متشابهة مع C ؛ بناء جملة كانت واحدة من العديد من اللغات.
نفس الشيء مع المصفوفات. إنه أمر مضحك أن معظم هذا ليس على علم. المصفوفات التي تبدأ بـ 0 و 1 لها مزاياها الخاصة.
بفضل لغة C تستخدم معظم اللغات الشائعة اليوم مصفوفات تبدأ بـ 0. لقد استلهم منشئو C من المبدعين ، ومن المضحك أنه لا يوجد فهرسة في لغة C. , , . , — , (offset). , , , , .
, , . Java, JavaScript — . 0, . , « ».
— , , . -, , , - , , . , Lua ? ?— ?
— .— . , , . . ? , , . . .
— Lua C.— , , . , , … , , - . : , … .
, . , ? , - … ?
— .— . ? C , , … ?
— 16 ?— , .
— , , .— , . , , … , , . — , . , , . , … : ?
— C++ .— , C++ .
— ? ptrdiff_t
?—
ptrdiff_t
— (signed type). , , . ?
, diff , . . , ? لا مفر , , . 2 , .
, . , . diff , .
, ++.
— Lua ?— , C++, - , . , - ++, … .
— , ?— . , . , , . , .
— JVM?— , JVM. , … — , . JVM , .NET, . JVM , Lua. , . JVM, . JVM . Java-, 10 . , JVM , .
— JVM, , Mobile JVM?— , JVM. - Java, Java.
— , Go Oberon? Lua, ?— Oberon… … Go , runtime- Lua. Oberon , . , , . , , const Pascal Oberon. , .
.
, 1994- Oberon Self. Self? JIT- . Self , , . - , — ! — , - . , …
Oberon, , 10 Self, . Oberon , , .
, .
— Haskell?— Haskell, , Lua.
— Python, R Julia Lua?— , .
R . , .
Python , . , . , .
Python , , . , , - . API… , Python, . , , « ».
, -: , , , -. . , API , - . , . , , …
- , (pattern matching). , , , . , , .
: Perl. Lua, . , Python . , , . - .
— ?— Python. Perl : $1, $2, $3. Perl, …
— Python, , ( Tarantool).— , , , API, . Python , .
Julia, LuaJIT, , . , , . , . , , , . , , . : , - . , , - , .
Julia, : , , . , - . , double, []… . .
() «, , , , , . , ». , , .
. R, Python.
— Erlang?— . , . , , , - . Erlang , , . , .
, . , . ? , . .
— , Erlang , Python . Lua?— , . Lua , , Lua , .
— ?— Forth, .
— Lua?— , . , . - , . Lua, Lua, .
Java. Java, ? لا. (reflection)? لا. ? Java, , Java. , , Java, .
, Lua, … , , FFI.
— Lua?— , .
— Lua ? ?— , . , Haskell. , , … Lua, , , , , .
— , Lua.— , , . . , .
— , . Lua ?— , , …
— « »? , ?— , . , , , . , .
— Lua?— . , , LaTex DocBook. , … LaTex, . @, . Gsub , , - - . , , , .
— LaTeX?— LaTeX? -, , . , , LaTex. , inline-. /, . — . , , , . , . , .
— LaTeX?— , . , , . , 3+1, . , , . , . , , . , 1 «and», . . , .
— ?— ,
git .
2html . HTML… , . , , . , , . , TeX. TeX- TeX.
— ?— , . , TeX. , . DocBook, . , .
— 2html DocBook?— , DocBook.
— , , !— .
- ,
Lua Mailing List .