سؤال

هل تعرف أي مثال على اللغة الباطنية تستخدم لكتابة أي برنامج حقيقي للاستخدام العملي؟ هل هناك أي، مهما كانت غامضة، مجال علوم الكمبيوتر حيث ثبت أن اللغة الباطنية مفيدة بالفعل لحل مشكلة محددة؟

هل كانت مفيدة؟

المحلول

تطبيقات العالم الحقيقي، إيه؟

اللعبة المملكة المفقودة فاز في منافسة مغامرة نصية كلاسيكية سنوية سنوية في عام 2004، وكانت (إعادة) مكتوب ومحسن من المؤلف الأصلي في brainfuck.

ماذا عن IRC BOT في Befunge أو هذا محرر النصب وأفترض إذا كنت ترغب في الكتابة باللغات الباطنية، فقد تنظر befunge إلى c copiler أو أ brainfuck إلى c مترجم مفيد جدا...

نصائح أخرى

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

TL؛ DR:

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

خذ لغات البرمجة الباطنية غير المحددة. هذه لغات البرمجة التي لم يتم تحديد دلالات تقييم تعبيرات معينة للحتمية، ولكن على سبيل المثال بشكل احتمال أو استنادا إلى مرحلة القمر أو شيء من هذا القبيل. إذا نظرت إلى تعريف مثل هذه اللغة، فستفكر على الفور: "حسنا، هذا غبي". و هو! (على سبيل المثال، يكون برنامج Hello World في Java2K تقريبا صفحة من التعليمات البرمجية، وليس مضمونا حتى طباعة "Hello World" في كل مرة، معظم الوقت فقط.) وحتى الآن، معظم لغات البرمجة السائدة اليوم لديها نماذج التزامن غير الحاسوبية. Iow: بمجرد أن تبدأ موضوع في Java، C #، Python، Ruby، Perl، حتى Erlang أو Clojure، يصبح برنامجك بشكل عشوائي كما هو الحال في اللغة الباطنية Java2K. لذلك، لماذا نعتقد أن المرء غبي وقبول الآخر كالمعتاد، على الرغم من أنهم في الأساس نفس الشيء؟ من خلال أخذ عدم الحتمية إلى أقصى الحدود، وتعبئة التعبئة بطريقة ممتعة، تسمح لنا Esolangs بالطرح هذا السؤال.

مثال آخر هو تورينج القطع المشوئية. قماش تورينج هو إكسولانج الذي لا يوجد لديه أي ميزات تقريبا ولكن لا يزال تورينج كاملة. يمكن استخدام مثل Tines Tining Tarpit لإظهار شيئين مختلفين: يمكنك استخدامه لإظهار ما هو بالضبط الذي يجعل بعض اللغات أكثر "قوية" (بمعنى القوة التعبيرية) من غيرها. إذا كنت تبحث حولها حولها على الويب، فستجد أشخاصا يسألون "إذا كان LISP أفضل بكثير من جافا، فلماذا لا تظهر لي بعض البرامج التي يمكنك الكتابة بها في Lisp ولكن لا يمكنني الكتابة في Java." وبالطبع، هذا غبي: كلتا اللغتين تتلينج، لذلك لا يوجد مثل هذا البرنامج. ومع ذلك، من خلال النقيض من جافا مع، قل، برنكوك، يمكنك أن تظهر أن هذا ليس مجرد سؤال مغزى أن نسأل.

والشيء الآخر الذي يمكنك إظهاره مع Turing Tarpits هو أنه لا يمكنك أبدا إنشاء لغة أكثر قوة (في كلا الحواس لكلمة الكلمة: الطاقة الحاسوبية والقوة التعبيرية) عن طريق إزالة الميزات. يبدو واضحا، ولكن هناك أشخاص يعتقدون فعلا أن مايكروسوفت يجب أن تزيل حالة قابلة للتغيير من C #، وسوف تصبح بطريقة سحرية أكثر قوة.

بشكل عام، Turing Tining Barpits جيدة لإظهار التمييز بين القوة الحاسوبية والقوة التعبيرية لغوية البرمجة.

طرق أخرى يمكن أن تكون فيها Esolangs مفيدة هي أنه يمكن أن تكون بمثابة إلهام لأبحاث لغة البرمجة. فكر في UNLAMBDA، والتي، كما يعني الاسم، هي لغة وظيفية هي ليس بناء على حساب التفاضل والتكامل Lambda. بمعنى آخر: إنها لغة وظيفية لا تحتوي على وظائف.

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

الأمن الوظيفي!!!

إذا كان هناك عملي استخدم لغة لن يتم استدعاؤها الباطن. وبعد الشروطان حصرية بشكل متبادل.

فهم آلة تورينج والحساب والحاجة إلى شعور عملي بما هو ضمني نظرية الحساب. يمكن جمع جميع الفوائد العملية إذا كنت تستخدم لغة باطنية مثل الدماغ ****.

أنا متأكد من أن هناك آخرون أيضا.

تحتوي بعض فئات لغات البرمجة الباطنية على تطبيقات في علوم الكمبيوتر النظري.

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

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

المنطق المشترك الثنائي هي أداة مفيدة لتحليلها تعقيد Kolmogorov.

مستوحاة من هذا السؤال, ، وجوابها، لقد وجدت أيضا استخداما عمليا لهذه اللغة: GolfScript, ، لغة مصممة خصيصا لرمز الجولف:

GolfScript هي لغة برمجة بترقية موجهة نحو المكدس تهدف إلى حل المشكلات (الثقوب) في عدد قليل من المفاتيح ممكنة. كما يهدف إلى أن تكون بسيطة وسهلة الكتابة.

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

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

في العام الماضي، قرأت تشارلز بيتزولد تورينجولد. بالتأكيد ليس لدي أي نية لبرمجة آلة تورينج، على الأقل كما يصفها. لكن التفكير في حل المشاكل مع "لغته" امتدت عقلي. أنا أفضل مبرمج C # لذلك.

بالتأكيد؛ الفطريات، الروبوت IRC: http://zem.fi/~fis/fungot.b98.txt.

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

إذا كنت تحكم فقط رابط ويكيبيديا:

لغة البرمجة الباطنية (تقصير أحيانا إلى ESOLANG) هي لغة برمجة صممت كاختبار لحدود تصميم لغة برمجة الكمبيوتر، كدليل على المفهوم، أو مزحة. عادة لا توجد نية للغة المعتمدة للبرمجة في العالم الحقيقي.

ومن بعد، رقم, ، لا يوجد تطبيق عملي لهذه اللغة لمشكلة حقيقية.

الأسباب ليست إهانة للغات، وهي تركز على "عملية":

  1. في الممارسة العملية، إذا كنت تحل مشكلة، فأنت بحاجة إلى أن تكون قادرا على إقناع نفسك بأنك حلها. إذا كنت تستخدم لغة مصممة خصيصا لتكون من الصعب قراءتها، فسيكون من الصعب فحص حلكم بصريا وقول "نعم، هذا صحيح".
  2. في الممارسة العملية، أنت لا تعمل في فراغ. في الحياة الحقيقية، كنت تعمل دائما مع مجموعة غير صفرية من الأشخاص الآخرين (حتى لو كانت في المستقبل فقط). سيتعين على شخص آخر الحفاظ على الحل الخاص بك، وإضافة ميزة هنا، وإصلاح مشكلة هناك أو أسوأ، في محاولة توثيق ما فعلته ولماذا.
  3. إذا لم تنطبق أي شخص 1 ولا 2، فقد أنشأت حلا لمشكلة (أ) سهلة الاستخدامات بشكل تافه و (ب) لا تتطلب أبدا صيانة لأنه لا يتم استخدامه أبدا في الممارسة. لذلك، مشكلة تافهة / غير عملية.

colorforth. قوية جدا، وهذا عملي.

أوكاد و Ga4 في 290K

رمز Opfuscation هو الاستخدام العملي شائع جدا :-P

ولا أعرف إذا كانت عائلة APL / J / K قد تسمى الباطنية، لكن تم استخدامها في أنظمة الإنتاج من وقت طويل.

يوجد لغة تسمى الطيار. إنها لغة تفسير مكتوبة في Dartmouth Basic (لغة فادعة). كان الاستخدام الأولي للمدرسين غير البرمجي قادرين على برنامج اختباراتهم. جميع الأوامر باللغة هي أحرف مفردة والحرف المستخدمة يحدد الخيارات المتاحة. إنه قديم، (تعلمت ذلك عام 1976) وبقدر ما أستطيع أن أقول، لم يعد لديه أي استخدام.

من بين الاستخدامات الأخرى، يمكن استخدام المزيد من الحد الأدنى كمربعات سوداء) / (لغات خوارزمية SandBoxed) بحثا عن عمليات البحث عن الخوارزميات، لاستخدامات البحث مثل القيود البرمجة القائمة على البرمجة والمحلول المتطورة.

تعالج هذه الإجابة 3 أنواع من لغات البرمجة الباطنية:

  • لغات الغولف
  • تورينج التعقيط
  • اللغات في الألعاب

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

تورينج التعقيط مفيدة للإبداع. عليك أن تفكر خارج الصندوق مع الأوامر القليلة التي تحتوي عليها القماش المشبك. في BF كيف ستذهب حول تحويل الأعداد الصحيحة التي تعطى لك عبر البرنامج (والتي تعد مجرد مجموعة من قيم ASCII) إلى شيء يمكنك التعامل معه (مثل قيمة خلية واحدة)؟ كيف يمكنك التحقق من المساواة؟ كيف تضيف رقمين؟

Turing Tarpits مفيدة أيضا لمنظمة التعليمات البرمجية الممارسين. عندما تأخذك مهمة بسيطة مثل إضافة رقمين لجعل رمز PSuDo ولديه تخطيط البرنامج بأكمله، يجب عليك تنظيم البرنامج الخاص بك. في BF لإضافة قيمتين الخلية، ستحتاج إلى: 1. قم بتناقص الإضافة الأولى 2. زيادة الإضافة الثانية 3. حلقة حتى الإضافة الأولى فارغة.

أصبحت اللغات في الألعاب مفيدة لتعزيز الخبرة في العالمين / المستويات للاعبين في هذا العالم / المستوى. في ROBLOX (على الرغم من أنني لن أسميها لغة البرمجة النصية "esoteric")، إذا كنت قد وضعت بعض الأجزاء والنماذج في عالمك، فهل ستكون ممتعة؟ لا. إذا كتبت هذه النماذج لمحاربةكم وتجهيز نفسك بمسدس؟ يمكن. في الهندسة داش، يمكنك أن تجعل المستوى أكثر صعوبة من خلال مطالبةك بالنقر فوق كمية معينة من المرات الموجودة في "لغة البرمجة"، أو اجعلها تستخدم هجمات عشوائية زائفة في معركة مدرب. لغات البرمجة الباطنية في الألعاب يمكن أن تعزز بشكل كبير عالم الاحتمالات في المستوى / العالم.

Eiffel، Erlang، Ocaml، Haskell. هذه هي جميع اللغات "المتخصصة" بالنسبة لمعظم المبرمجين هناك، لكنهم عمليون داخل مجالاتهم. سؤالك ببساطة لا معنى له، فقد يسأل جيدا "هل هناك أي لغات جيدة لا نستخدمها في مجالات المشكلات الشائعة؟"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top