سؤال

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

لتنظر سبيل المثال:

var f = function(int x) : int { return x * 2; }
var my_list = 0..1000000;
var my_mapped_list = witheach (i in mylist) yield f(i);

وسؤالي هو، هل هذا سيكون unintuitive جدا للمبرمجين الذين قد وضع الآثار الجانبية في f؟ وبطبيعة الحال، وأود أن أقول لا للقيام بذلك في وثائق، ولكن معظم المبرمجين لا تقرأ وثائق اللغة. : -)

واعتقد ان السؤال الأكبر، ويمكن للمبرمجين العصر الحديث التكيف مع دلالات تجهيز قائمة موازية ضمنية في لغتهم، أو أنها لا تحتاج أن تكون الأمور أكثر وضوحا؟

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

المحلول

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

وحول ما إذا كان المستخدمون مستعدين لتحمل مسؤولية اختيار تشكل خطرا محتملا، وأود أن الرهان ب "نعم"، طالما أنهم يعرفون مقدما ما هو آمن. العديد من اللغات تجبرك على جعل هذا الاختيار كل يوم (المؤشرات، إدارة الذاكرة اليدوية، وتقاسم التزامن الذاكرة). قد ترغب في جعل جملة بك أقل غموضا (أي نسميها parallelforeach)، حتى أن الناس يعرفون ما يقومون الاشتراك.

نصائح أخرى

هل تعني شيئا مثل PMAP ؟

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