سؤال

أنا فقط استمع بودكاست كريس سميث يتحدث عن F# الذي يتحدث عن كيف و# هي اللغة التي تسمح لك نهج المشاكل بطريقة مختلفة في C#/VB.صافي ، أيبدلا من "دفع بت حول" لكم "سلسلة معا البيانات التحولات" ، كيف و# "سوف تصبح مثل XML", شيء التي تستخدمها بالإضافة إلى اللغة التي تختارها (C# أو VB.NET) من أجل حل بعض المشاكل بطريقة أكثر كفاءة.

هذا جعلني أفكر حول علاقة .NET languages, وهنا كيف نفهم منها:

  • C# ، VB.NET هي نحويا ولكن ليس إلى حد كبير مختلفة, أيC# مبرمج لا تعلم VB.NET من أجل "نهج المشاكل بطريقة جديدة"
  • ومع ذلك, C# أو VB.NET مبرمج تعلم F# من أجل "نهج مشاكل البرمجة في وظيفية طريقة"

ولكن ماذا عن IronPython و IronRuby?كريس ذكر أن "F# تعلمت الكثير من روبي وبايثون" لذلك أعتقد أن F# لديها علاقة مماثلة إلى IronRuby/IronPython و C# إلى VB.NET.بيد أن قليلا بالبحث في جميع أنحاء يقول لي أن IronRuby و IronPython على حد سواء بنيت على DLR ولكن F# لا.

كيف هي العلاقات بين F# ، IronRuby و IronPython أن يكون أفضل مفهوم ؟

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

المحلول

F # والكريينثون / الحديد هو سنوات خفيفة بصرف النظر عن منظور اللغة. F # هي لغة تجميعية وظيفية للغاية مكتوبة للغاية. IronRuby / Ironpython مكتوبة ديناميكيا، ولغات مفسورة.

أعتقد أن IronPython يدعم بالإضافة إلى ذلك، لكنني لست متأكدا بنسبة 100٪ وأقل عن روبي.

العلاقة بين vb.net و c # أقرب بكثير.

نصائح أخرى

في العديد من الطرق F # و Ruby / Python متشابهة بشكل سطح. تسمح لك جميع اللغات الثلاث بالتعبير عن الأفكار دون تكسير التعليمات البرمجية الخاصة بك مع العديد من الأنواع. ومع ذلك، F # هو في الواقع مختلف تماما عن Ruby and Python، نظرا لأن F # هي لغة مكتوبة ثابتة، بينما تتم كتابة Ruby و Python بشكل حيوي. نادرا ما يذكر كود IDIOMATIC F # أنواعا، ولكن سيتم وضع علامة على المترجم من المترجم عبر الترجمة من قبل المترجم وأي أخطاء من خلال الترجمة أثناء التحويل البرمجي. بالنسبة ل Ruby و Python، باستخدام قيمة في النوع الخطأ لن يؤدي إلا إلى إنشاء أخطاء في وقت التشغيل. ديناميكية Ruby و Python تعني أن كلاهما أكثر قابلية للكابزون من F # هو (يمكن تعديل أنواع التشغيل في وقت التشغيل، على سبيل المثال). من ناحية أخرى، ستكون F # المزيد من الأداء لمعظم المهام (مماثلة ل C #)، ويقدم العديد من التجريدات الوظيفية لطيفة مثل النقابات التمييز مع مطابقة نمط. من المؤكد أنه صحيح أن تعلم أي من هذه اللغات جيدا سيؤديك إلى التفكير في المشكلات بشكل مختلف عنك في C # أو VB.NET، لكن نهجك قد تختلف كثيرا بين F # و Python / Ruby أيضا.

أنا أقول F# تعلمت الكثير من OCaml مما كان عليه من روبي وبايثون جنبا إلى جنب.الحقيقي الوحيد المقارنة هو أن F# هو يجلب مل .صافي بنفس الطريقة التي IronPython/روبي تجلب بيثون/روبي .صافي.

F # هو أكثر من لغة "أداة" حيث توجد مشاكل محددة يتم معالجتها بشكل أفضل مع نهج وظيفي. F # هو بطبيعته آمنة مؤشر الترابط الذي يعطي الأمل في أن تكون مفيدة في تحجيم تطبيق لاستخدام معالجات متعددة. أرى F # تستخدم لبناء مكونات سيتم استخدامها في VB.NET أو C # للتعامل مع مشاكل محددة.

هناك جوانب من F # مماثلة للغات الديناميكية؛ ومع ذلك، فإن إجابة Jaredpar تبوعها حقا. F # هو في فئة البرمجة الوظيفية حيث تكون الحديد و iRonython لغات ديناميكية ولغات C # / VB OO. يمكنهم أن يفعلوا نفس الأشياء ويعتمد فقط على الطريقة التي تريد القيام بها. لكل منها إيجابيات وسلبيات مشكلة معينة.

ملاحظة: هذا هو في الغالب مجموعة من أفكاري وملاحظاتي حول هذا الموضوع. أنا مبرمج C # يوما بعد يوم وبير في الليل.

نعم أنا أتفق مع بعض الأشياء التي قيل، لكن لدي بعض الوقت وأشعر وكأنها تفصيل وتقاسم أفكاري.

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

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

وبالطبع F # لديه بعض الميزات والأفكار المستعارة من لغة OO بينما C # لديها أفكار وميزات مستعارة من وظيفية.

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

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

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

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