سؤال

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

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

مهم:

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

مهم نوعا ما:

  1. أداء.سيكون من الرائع أن يكون الأداء لائقًا، ولكن عندما يكون الأداء أولوية حقيقية، سأستخدم D بدلاً من ذلك.
  2. وثق بشكل جيد.

غير مهم:

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

المحلول

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

نصائح أخرى

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

أليس كذلك نحن جميعا.

الحد الأدنى من التمييز بين التعليمات البرمجية والبيانات، أسلوب Lisp

للأسف، الحد الأدنى من التمييز بين التعليمات البرمجية والبيانات وبناء الجملة "الغريب" هما نتيجة لبعضهما البعض.

إذا كنت تريد بناء جملة سهل القراءة، فلديك لغة Python.ومع ذلك، فإن الرمز هو لا ممثلة في أي من بنيات البيانات المضمنة شائعة الاستخدام.لقد فشل - كما تفعل معظم اللغات - في العنصر رقم 1 من قائمتك "المهم".وهذا يجعل من الصعب تقديم مساعدة مفيدة.

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

بصراحة، فيما يتعلق بمرافق البرمجة الفوقية، فإن Ruby وPython متشابهتان كثيرًا مما يرغب بعض أتباعهما في الاعتراف به.تقدم هذه المراجعة لكلتا اللغتين مقارنة/مراجعة جيدة جدًا:

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

تنصل:أنا أشتغل فقط بأي من اللغتين، لكني على الأقل كتبت برامج عمل صغيرة (ليس فقط نصوص سريعة، والتي أستخدم Perl أو bash أو GNU make لها) في كليهما.

يمكن أن تكون روبي مفيدة حقًا بالنسبة للنقطة 3 من "النماذج المتعددة"، لأنها تعمل بجد لتسهيل إنشاء لغات خاصة بالمجال.على سبيل المثال، تصفح الإنترنت وانظر إلى بضع بتات من كود Ruby on Rails، وبضع بتات من كود Rake.كلاهما روبي، ويمكنك رؤية أوجه التشابه، لكنهما لا تبدوان كما تعتقد عادةً على أنها نفس اللغة.

يبدو لي أن بايثون أكثر قابلية للتنبؤ بها (ربما ترتبط بالنقطة "النظيفة" و"العقلانية" 2)، لكنني لا أعرف حقًا ما إذا كان ذلك بسبب اللغة نفسها أم أنها تستخدم عادةً من قبل أشخاص ذوي قيم مختلفة .لم أحاول مطلقًا استخدام السحر العميق في بايثون.أود بالتأكيد أن أقول إن كلتا اللغتين مدروستان جيدًا.

كلاهما يسجل نتائج جيدة في 1 و 4.[يحرر:في الواقع 1 أمر قابل للنقاش إلى حد كبير - هناك "تقييم" في كليهما، كما هو شائع في اللغات المفسرة، لكنها بالكاد نقية من الناحية المفاهيمية.يمكنك تحديد عمليات الإغلاق وتعيين أساليب للكائنات وما إلى ذلك.لست متأكدًا مما إذا كان هذا يصل إلى الحد الذي تريده.]

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

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

هل فكرت في Smalltalk؟فهو يقدم صيغة بسيطة للغاية وواضحة وقابلة للتوسيع مع قدرات التأمل والاستبطان وبيئة تطوير متكاملة تمامًا تستفيد من تلك القدرات.القي نظرة على بعض الأعمال التي يتم إنجازها في صرير الحديث الصغير على سبيل المثال.هناك الكثير من الباحثين الذين يستخدمون Squeak يتسكعون في صرير القائمة البريدية و#squeak على freenode، حتى تتمكن من الحصول على المساعدة بشأن المشكلات المعقدة بسهولة بالغة.

مؤشرات أخرى لأهميتها الحالية:يتم تشغيله على أي نظام أساسي ترغب في تسميته (بما في ذلك ايفون);جلعاد براخا يعتمد في عمله على لغة الأخبار على صرير؛قام فريق V8 بقطع أسنانهم أجهزة المحادثة الافتراضية الصغيرة;وقد عاد دان إنجالس وراندال شوارتز مؤخرًا إلى عمل Smalltalk بعد سنوات في البرية.

حظًا موفقًا في بحثك - أخبرنا بما قررته في النهاية.

تلبي Lisp جميع معاييرك، بما في ذلك الأداء، وهي اللغة الوحيدة التي لا تحتوي على بناء جملة (غريب).إذا تجنبت ذلك على أساس غير مدروس / خاطئ بشكل مذهل وبالتالي تفوت تجربة الاستخدام على سبيل المثال.Emacs+SLIME+CL، ستسبب لنفسك ضررًا كبيرًا.

النقاط الأربع "المهمة" الخاصة بك تؤدي إلى روبي بالضبط، في حين أن النقطتين "المهمة إلى حد ما" تحكمهما بايثون.ليكن.

أنت تصف روبي.

  • البرمجة الفوقية جيدة.القدرة على إنشاء فئات ، طرق ، وظائف ، إلخ.في وقت التشغيل.ويفضل ، الحد الأدنى من التمييز بين الكود والبيانات ، نمط LISP.

من السهل جدًا تمديدها و تعديل البدائيات الموجودة في وقت التشغيل.في روبي، كل شيء عبارة عن كائن، وسلاسل، وأعداد صحيحة، وحتى وظائف.

يمكنك أيضًا إنشاء اختصارات للسكر النحوي، على سبيل المثال باستخدام class_eval.

  • بناء جملة لطيف ونظيف ومعقول ودلالات متسقة وبديهية.في الأساس لغة مدروسة وممتعة للاستخدام ، اللغة الحديثة.

روبي يتبع مبدأ أقل مفاجأة, ، وعند مقارنة كود روبي مع ما يعادله في لغة أخرى، يعتبره العديد من الأشخاص أكثر "جمالاً".

  • نماذج متعددة.لا يوجد نموذج واحد مناسب لكل مشروع ، أو حتى كل مشكلات فرعية صغيرة داخل المشروع.

يمكنك اتباع الأمور الحتمية والموجهة للكائنات والوظيفية والانعكاسية.

  • لغة مثيرة للاهتمام تؤثر فعليًا على الطريقة التي يفكر بها المرء في البرمجة.

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

لقد قمت بتجريب بايثون وهي لا تناسب نقاطك المهمة.

يقارن أمثلة التعليمات البرمجية التي تفعل الشيء نفسه (انضم مع سطر جديد غير فارغ لأوصاف العناصر من a myList list) بلغات مختلفة (يتم ترتيب اللغات بترتيب أبجدي عكسي):

روبي:

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

أو

myList.map(&:description).reject(&:empty?).join("\n")

بايثون:

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

أو

"\n".join(f.description() for f in mylist if f.description())

بيرل:

join "\n", grep { $_ } map { $_->description } @myList;

أو

join "\n", grep /./, map { $_->description } @myList;

جافا سكريبت:

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

آيو:

myList collect(description) select(!="") join("\n")

هنا دليل ايو.

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

من المؤكد أن Lisp رائع جدًا ويستحق النظر فيه؛كما قلت، حجم المجتمع، الخ.يمكن أن تتغير بسرعة كبيرة.ومع ذلك، فإن الحجم نفسه ليس بنفس أهمية الحجم جودة من المجتمع.على سبيل المثال، #ruby-lang لا تزال القناة مليئة ببعض الأشخاص الأذكياء بشكل لا يصدق.يبدو أن Lisp يجذب بعض الأشخاص الأذكياء أيضًا.لا أستطيع التحدث كثيرًا عن مجتمع بايثون لأنه ليس لدي الكثير من الخبرة المباشرة، ولكن يبدو أنه "كبير جدًا" في بعض الأحيان.(أتذكر أن الناس كانوا وقحين جدًا على قناة IRC الخاصة بهم، ومما سمعته من الأصدقاء المهتمين حقًا ببايثون، يبدو أن هذه هي القاعدة وليس الاستثناء.)

على أية حال، بعض الموارد التي قد تجدها مفيدة هي:

1) سلسلة روبي ميتابرمجنج للمبرمجين العمليين (http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming) -- ليست مجانية، ولكن الحلقات اللاحقة مثيرة للاهتمام للغاية.(الكود مجاني، إذا كنت تريد تنزيله ومعرفة ما ستتعلم عنه.)

2) أون ليسب بقلم بول جراهام (http://www.paulgraham.com/onlisp.html).إنه قديم بعض الشيء، لكنه كلاسيكي (ويمكن تنزيله مجانًا).

أنا أستخدم لغة Python في العديد من المشاريع وأعتقد أن لغة Python توفر جميع الميزات التي طلبتها.

مهم:

  1. البرمجة الفوقية:تدعم Python الفئات الوصفية وإنشاء فئة/طريقة وقت التشغيل وما إلى ذلك
  2. بناء الجملة:حسنًا، هذا أمر شخصي إلى حدٍ ما.أنا أحب بناء جملة بايثون لبساطته، ولكن بعض الناس يشكون من أن بايثون حساسة للمسافات البيضاء.
  3. النماذج:تدعم Python البرمجة الوظيفية الإجرائية والموجهة للكائنات والأساسية.
  4. أعتقد أن بايثون لديها أسلوب عملي للغاية، وكان ملهمًا جدًا بالنسبة لي.

مهم نوعا ما:

  1. أداء:حسنًا، إنها لغة البرمجة النصية.لكن كتابة امتدادات C لـ Python هي ممارسة تحسين شائعة.
  2. توثيق:لا يمكنني أن أشكي.إنها ليست مفصلة كما قد يعرف شخص ما من Java، ولكنها جيدة بما فيه الكفاية.

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

التحيات ، دينيس

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

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

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

استخدام self.name يصل إلى metaclass الخاصة بفئات Ninja اسم طريقة لإرجاع اسم فئة Ninja.هل زهرة البرمجة الفوقية جميلة جدًا في بايثون؟أنا أشك في ذلك بصدق!

حسنًا، إذا كنت لا تحب بناء جملة lisp، فربما يكون المجمّع هو الحل الأمثل.:-)

من المؤكد أنها تتميز بأقل قدر من التمييز بين التعليمات البرمجية والبيانات، فهي متعددة النماذج (أو ربما لا تعد نموذجًا) وهي تجربة توسعية (إذا كانت مملة) سواء من حيث التعلم أو الحيل التي يمكنك القيام بها.

يرضي Io جميع نقاطك "المهمة".لا أعتقد أن هناك لغة أفضل للقيام بالقرصنة الفوقية المجنونة.

واحد يدعم اختراق البرمجة الوصفية فقط لا يمكن القيام به بلغة مترجمة بشكل ثابت

أحب أن أجد لغة تسمح ببعض الأشياء الرائعة اللثغة يفعل

يمكن تجميع Lisp.

هل جربت ريبول؟

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

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

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

إذا كنت تحب مفهوم Code-is-data بنمط lisp، لكنك لا تحب بناء جملة Lispy، فربما مقدمة سيكون اختيارا جيدا.

وسواء كان ذلك مؤهلاً ليكون "لغة حديثة وممتعة في الاستخدام"، فسوف أترك الحكم للآخرين.؛-)

روبي هو خياري بعد استكشاف Python وSmalltalk وRuby.

ماذا عن أوكامل ؟

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

أعتقد أنه يفي بما يلي:

مهم:

  1. بناء جملة لطيف ونظيف ومعقول ودلالات متسقة وبديهية.في الأساس، لغة حديثة مدروسة جيدًا وممتعة للاستخدام.
  2. نماذج متعددة.لا يوجد نموذج واحد مناسب لكل مشروع، أو حتى لكل مشكلة فرعية صغيرة داخل المشروع.
  3. لغة مثيرة للاهتمام تؤثر فعليًا على طريقة تفكير المرء في البرمجة.

مهم نوعا ما:

  1. أداء.سيكون من الرائع أن يكون الأداء لائقًا، ولكن عندما يكون الأداء أولوية حقيقية، سأستخدم D بدلاً من ذلك.
  2. وثق بشكل جيد.

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

إذا رأيت جميع نقاطك الأربع، فيمكنك على الأقل التحقق من:http://www.iolanguage.com/

وقد يكون موزارت/أوز مثيرًا للاهتمام بالنسبة لك أيضًا:http://mozart.github.io/

تحياتي فريدريش

للحصول على بناء جملة بأسلوب بايثون ووحدات الماكرو الشبيهة بـ lisp (وحدات الماكرو التي تمثل رمزًا حقيقيًا) وDSL الجيد، راجع تتلاقى.

لست متأكدًا من أن بايثون ستحقق كل ما تريده (خاصة النقطة المتعلقة بالحد الأدنى من التمييز بين الكود والبيانات)، ولكن هناك حجة واحدة لصالح بايثون.يوجد مشروع يسهل عليك برمجة ملحقات لغة python بتنسيق D، حتى تتمكن من الحصول على أفضل ما في كلا العالمين. http://pyd.dsource.org/celerid.html

إذا كنت تحب الورد، عليك أن تتعلم كيف تعيش مع أشواكه :)

أنصحك بالذهاب مع روبي.

عندما بدأت في تعلمها لأول مرة، وجدت أنه من السهل جدًا تعلمها.

لا تخلط لغة برمجة روبي مع تطبيقات روبي، معتقدًا أن سلاسل POSIX غير ممكنة في روبي.

يمكنك ببساطة التجميع باستخدام دعم pthread، و كان هذا ممكنًا بالفعل في وقت إنشاء هذا الموضوع, ، إذا عفوت عن التورية.

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

أقترح عليك تجربة اللغتين واختيار اللغة التي تناسبك.يمكن لكل من بايثون وروبي فعل ما تريد.

اقرأ أيضا هذا الموضوع.

استخدم JS، فقط قم بمراجعة AJS (بناء جملة JavaScript البديل) على موقع github الخاص بي http://github.com/visionmedia سيعطيك بعض عمليات الإغلاق ذات المظهر الأنظف وما إلى ذلك: د

فيما يتعلق بالنقطة الرئيسية (البرمجة الفوقية):يحتوي الإصدار 1.6 من Groovy على برمجة AST (شجرة بناء الجملة المجردة) المضمنة كميزة قياسية ومتكاملة.لدى روبي RubyParser، لكنها وظيفة إضافية.

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