عندما هو لغة جديدة الأداة المناسبة لهذا المنصب ؟

StackOverflow https://stackoverflow.com/questions/193941

  •  10-07-2019
  •  | 
  •  

سؤال

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

  • بنيت على أعلى من ذلك .NET أو .صافي تنفيذ
  • لديها عدد قليل من تبعيات على .NET runtime سواء في تجميع الوقت و وقت التشغيل (وهذا هو المهم لأن أحد أهم حالات الاستخدام في التنمية جزءا لا يتجزأ فيها .NET runtime هو مخصص تماما)
  • وقد مترجم 100% .رمز الشبكة مع أي تبعيات غير المدارة
  • يدعم التعسفي التعبير التعشيش (انظر أدناه)
  • يدعم مخصص مشغل التعاريف
  • يدعم نوع الاستدلال
  • يحسن ذيل المكالمات
  • وقد صريح غير قابل للتغيير/قابلة للتغيير التعاريف (دقة -- لقد وقعت في حب هذا ولكن يمكن أن يعيش بدونها)
  • يدعم الحقيقي وحدات الماكرو قوية metaprogramming (المطلق يجب أن يكون)

الرئيسية لغتين لقد تم العمل مع بو Nemerle, ولكن أنا أيضا لعبت حوالي مع F#.

الرئيسية الشكاوى ضد Nemerle:المترجم له البشعين عن الخطأ ، وتنفيذ عربات التي تجرها الدواب كما الجحيم (مترجم و المكتبات) ، وحدات الماكرو لا يمكن إلا أن تطبق داخل وظيفة أو الصفات ، وانها ثقيلة إلى حد ما الاعتماد على الحكمة (على الرغم من أن لا يكفي أنه يجب أن تتركيه).
الرئيسية الشكاوى ضد بوو:لا التعسفي التعبير التعشيش (يجب أن تتركيه), وحدات الماكرو من الصعب أن يكتب ، لا مخصص المشغل تعريف (المحتملة يجب أن تتركيه).
الرئيسية الشكاوى ضد F#:القبيح جملة من الصعب أن نفهم metaprogramming غير رخصة حرة (ملحمة يجب أن تتركيه).

لذلك كلما كنت تفكر في ذلك ، وكلما فكرت في تطوير لغتي الخاصة.

الايجابيات:

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

سلبيات:

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

مستندا في ذلك على كل هذا ما هو التوافق العام في الآراء هو فكرة جيدة أو فكرة سيئة ؟ وربما أكثر مفيد, هل فاتني أي إيجابيات أو سلبيات?

تحرير:نسيت أن أضيف التعشيش سبيل المثال -- هنا قضية في Nemerle:

def foo = 
    if(bar == 5)
        match(baz) { | "foo" => 1 | _ => 0 }
    else bar;

تحرير #2:أحسب أنه لن يضر أن تعطي مثالا على نوع من التعليمات البرمجية التي سيتم تحويلها إلى هذه اللغة لو كان في الوجود (S.لوت الجواب وحدها قد تكون كافية لتخويف لي من القيام بذلك).قانون يجعل الاستخدام المكثف من العرف اللغوي (شفرة التشغيل, :=, quoteblock ، الخ) ، التعبير التعشيش ، إلخ.يمكنك التحقق من مثال جيد هنا: هنا.

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

المحلول

للأسف, لا توجد مقاييس أو القصص حول فشل اللغات.فقط ناجحة اللغات.ومن الواضح أن الفشل يفوق عدد النجاحات.

ماذا قاعدة هذا ؟ اثنين من الخبرات المشتركة.

  1. مرة أو مرتين في السنة, يجب أن تحمل الملعب المنتج/اللغة/أداة/إطار الاطلاق تغيير كل شيء.كان جوابي المستمر لمدة 20 أو حتى سنوات.تبين لي شخص يحتاج إلى دعم و الشركة وتقديم الدعم لهم.وهذا هو ذلك.لم نسمع منهم مرة أخرى.دعونا نقول كنت قد سمعت 25 من هذه.

  2. مرة أو مرتين كل عام ، يجب العمل مع العملاء الذين تيتموا التكنولوجيا.في بعض نقطة في الماضي بعض ذكي البرمجة ببناء أداة/إطار/المكتبة/الحزمة التي تم استخدامها داخليا لعدة مشاريع.ثم أن مبرمج اليسار.لا أحد يستطيع معرفة ذلك الشيء الرتق ، ويريدون منا أن استبدال/إعادة كتابتها.للأسف لا يمكننا معرفة ذلك سواء ، اقتراحنا هو إعادة كتابة من الصفر.وهم يشكون أن عبقرية بنيت مجموعة من التطبيقات في فترة من أسابيع لا يمكن أن تأخذنا أشهر إلى إعادة كتابة لهم في جافا/Python/VB/C#.دعونا نقول كنت قد كتبت في 25 من هذه الأنواع من المقترحات.

هذا مجرد لي استشاري.

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

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

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

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

كان غارقا في رؤية مثالية اللغة التي لم يستطع التكيف مع شائعة نسبيا ، المتفشي التكنولوجيا الجديدة.

نصائح أخرى

أقول لأنها تذهب.

  • ستكون تجربة رهيبة بغض النظر عن الطقس يجعل الإنتاج أم لا.
  • إذا كنت تجعل من تجميع وصولا إلى IL ثم لم يكن لديك ما يدعو للقلق حول عدم القدرة على إعادة استخدام جمعت الجمعيات مع C#
  • إذا كنت تعتقد أن لديك الشكاوى صحيحة عن اللغات المذكورة أعلاه ، فمن المرجح أن الكثير سوف يفكرون مثلك.بالطبع لكل 1000 شخص مهتم قد يكون هناك 1 على استعداد لمساعدتك في الحفاظ على ذلك - ولكن هذا هو دائما خطر

ولكن هنا هي عدد قليل من الأشياء أن تكون حذر حول:

  • الحصول على مواصفات اللغة في الحجر قبل التنمية.تأكد من أي ميزات اللغة احسب من قبل جهة - حتى الأشياء التي قد ترغب فقط في المستقبل.في رأيي, C# ببطء الوقوع في "أوه-واحدة-اللغة-امتداد" فخ التي من شأنها أن تؤدي في نهاية المطاف الموت.
  • تأكد من أن تجعل الأمثل.أنا لا أعرف ما كنت تعرف بالفعل ؛ ولكن إذا كنت لا تعلم ثم تعلم ;) لا أحد يريد لغة جميلة الجملة ولكن يعمل بطيئة مثل أي جافا سكريبت التنفيذ.

بالتوفيق :D

عندما بدأت حياتي المهنية في وقت مبكر 90s ، ويبدو أن هذا الهوس من الجميع وضع الخاصة بهم في المنزل اللغات.أول 3 فرص عمل مع الشركات التي فعلت هذا.شركة واحدة قد وضعت نظام التشغيل الخاص بهم!

من تجربة, أود أن أقول هذا هو فكرة سيئة للأسباب التالية:

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

السبب الرئيسي تركت تلك ثلاث وظائف لأنها كانت الملكية اللغات و ستلاحظ أن العديد من الشركات تأخذ هذا الطريق أي أكثر من ذلك :).

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

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

أرى مشاركتك قد كتب منذ أكثر من عامين.أنصحك تحاول Nemerle اللغة اليوم.مترجم مستقرة.لا يوجد مانع الحشرات لهذا اليوم.VS التكامل لديها الكثير من التحسينات ، أيضا هناك SharpDevelop التكامل.

إذا كنت تعطيه فرصة ، فلن تكون بخيبة أمل.

أبدا من أي وقت مضى تطوير اللغة الخاصة بك.

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

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

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

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

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

وهي ذات النصيحة ، تبدأ صغيرة, فقط تحديد الميزات التي تحتاج على الاطلاق ومن ثم بناء عليها للحصول على بقية.

كتابة اللغة الخاصة بك ليست سهلة المشروع..وخاصة تلك التي تستخدم في أي نوع من "الإعداد المهني"

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

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

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

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

أعتقد أن معظم اللغات لن تناسب كل من مشروع القانون.

قد ترغب في الجمع بين 2 اللغات المفضلة (في حالتي C# ، مخطط) واستخدامها معا.

من وجهة نظر مهنية ، وهذا ربما ليست فكرة جيدة على الرغم من.

سيكون من المثير للاهتمام أن نسمع بعض الأشياء التي كنت تشعر بأنك لا تستطيع أن تفعل في اللغات الحالية.ما نوع المشاريع التي تعمل على هذا لا يمكن القيام به في C# ؟

أنا فقط التحف!

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