هل من الممكن أن F# سوف يكون الأمثل أكثر من غيرها .Net languages في المستقبل ؟

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

سؤال

هل من الممكن أن مايكروسوفت سوف تكون قادرة على جعل F# برامج, إما في VM وقت التنفيذ ، أو على الأرجح في وقت الترجمة ، كشف هذا البرنامج تم بناؤه مع لغة وظيفية تلقائيا يوازي ذلك أفضل ؟

الآن أعتقد أن هناك أي جهد من هذا القبيل في محاولة تنفيذ البرنامج الذي بنيت واحدة مترابطة برنامج متعدد الخيوط البرنامج تلقائيا.

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

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

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

المحلول

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

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

على كل حال هذا كل ما في المضاربة ، من يستطيع أن يقول ما سيجلبه المستقبل ؟ وإنني أتطلع إلى معرفة (ونأمل أن جعل بعض ذلك).:)

نصائح أخرى

أن F# مشتق من Ocaml و Ocaml المجمعين يمكن تحسين البرامج الخاصة بك أفضل بكثير من غيرها من المجمعين ، ربما يمكن القيام به.

أنا لا أعتقد أنه من الممكن أن autovectorize رمز في عام-طريقة مفيدة و البرمجة الوظيفية جانب من جوانب F# هو أساسا غير ذات صلة في هذا السياق.

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

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

الهتافات ، جون هاروب.

أعتقد أن السؤال يفتقد نقطة .صافي العمارة-- F#, C# و VB (.... الخ) كل على تجميع IL, ثم يحصل المترجمة إلى رمز الجهاز عن طريق برنامج التحويل البرمجي JIT.حقيقة أن تم كتابة برنامج في لغة وظيفية ليست ذات الصلة-- إذا كان هناك تحسينات (مثل ذيل العودية ، إلخ.) المتاحة مترجم JIT من IL, مترجم ينبغي الاستفادة منه.

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

لذلك ليس هناك حاجة إلى العلم IL تأتي F# لدراسة الأمر المحتملة التوازي ، ولا شيء من هذا القبيل يكون من المرغوب فيه.

هناك البحث النشط عن autoparallelization والسيارات كمية موجهة لمجموعة متنوعة من اللغات.و يمكن للمرء أن الأمل (منذ أن كنت حقا مثل F#) بأنهم concive طريقة لتحديد ما إذا كان "نقية" الآثار الجانبية الحرة فرعية استخدمت ثم يوازي ذلك.أيضا منذ سيمون بيتون جونز والد هاسكل يعمل في مايكروسوفت لدي الوقت الصعب لا beliving هناك بعض الاشياء رائعة نازلة.

من الممكن ولكن من غير المحتمل.مايكروسوفت تنفق معظم الوقت حان دعم وتنفيذ الميزات المطلوبة من قبل أكبر العملاء.التي عادة ما يعني C# ، VB.Net و C++ (ليس بالضرورة في هذا النظام).F# لا يبدو انها عالية على قائمة الأولويات.

مايكروسوفت حاليا على تطوير 2 السبل parallelisation من التعليمات البرمجية:PLINQ (Pararllel Linq التي تدين بالكثير إلى اللغات الوظيفية) و مهمة موازية مكتبة (TPL) التي كانت في الأصل جزء من Robotics Studio.بيتا من PLINQ متاح هنا.

أود أن أضع أموالي في PLINQ أصبحت قاعدة لصناعة السيارات parallelisation من .صافي رمز.

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