الاختلافات بين coloutines و `goto`؟
سؤال
قرأت دائما عن الشيء الرهيب الذي "انتقل" هو. ولكن اليوم، والقراءة عن لغة برمجة Google اذهب, ، أرى أنه يفرز coroutines (goroutines).
السؤال هو:
Coroutine == GoTo
أو
Coroutine != GoTo?
لماذا ا؟
المحلول
Goroutines ليست هي نفسها ك GOTO - يعملون بالتوازي مع الرمز الرئيسي. عندما تنص على شيء مثل (من مثالهم في http://golang.org/doc/effective_go.html.)
go list.Sort(); // run list.Sort in parallel; don't wait for it.
يستمر رمز الخط الرئيسي في - إنه لا ينتظر هذا النوع حتى النهاية. يبدأ روتين الفرز في مؤشر ترابط الإعدام خفيف الوزن الخاص به وعندما ينتهي الأمر إلى خروج هذا الموضوع.
سيؤدي Goto إلى فرع رمز الخط الرئيسي إلى مسار تنفيذ منفصل - وبالتالي فإن البيانات بعد goto
لن تحصل على المدى أبدا.
نصائح أخرى
الفرق الرئيسي هو ذلك goto
تصريحات بلغات تدعمها تسمح بالقفز إلى أي موقع في البرنامج مع قيود ضئيلة أو معدومة. في حين أن Coroutines قد يبدو على السطح مشابها لأنها مختلفة جدا.
Coloutines تسمح بإعداد الإجراءات (مع كل سياقها) واستئناف المؤكد المواقع. لذلك في حين أن الجمود تفعل وقفة و yield
السيطرة على الإجراءات الأخرى قبل إكمالها ثم استئنافها لاحقا، فإن النقاط التي تستغرقها الإجراءات واستئنافها من قبل الوقت.
لا يمكن ببساطة الانتقال إلى خط تعسفي في إجراء، يجب أن ينتظر الإجراء المعني أن ينتظر استئنافه في موقع معين. في حين أن هذا تمرير السيطرة هو أكثر تنظيما أكثر من goto
من الممكن كتابة رمز مربك من خلال إفراط في استخدام هذه الآلية القوية. ثم مرة أخرى وهذا ليس هو الحال مع كل ميزة لغة البرمجة القوية؟ ؛-)