لا أعرف كيف ستبدو لغة البرمجة في عام 2000 ، لكني أعلم أنها ستطلق عليها FORTRAN.
- تشارلز أنتوني ريتشارد هوار ، تقريبًا. 1982
في الصناعة ، نادرًا ما يتم استخدام فورتران اليوم - في إحدى قوائم اللغات الشعبية ، احتلت المرتبة 28 . لكن فورتران لا تزال اللغة الرئيسية للمحاكاة واسعة النطاق للأنظمة الفيزيائية - أي لأشياء مثل النمذجة الفيزيائية الفلكية للنجوم والمجرات (مثل الفلاش ) ، والديناميات الجزيئية واسعة النطاق ، ورموز حساب البنية الإلكترونية ( SIESTA ) ، والنماذج المناخية ، إلخ. في مجال الحوسبة عالية الأداء ، ومجموعة فرعية منها عبارة عن محاكاة رقمية واسعة النطاق ، يتم استخدام لغتين اليوم فقط - C / C ++ و "فورتران الحديثة" (Fortran 90/95/03/08). مكتبات MPI المفتوحة الشعبيةتم تطوير أدوات موازاة الكود لهاتين اللغتين. بشكل عام ، إذا كنت بحاجة إلى رمز سريع يعمل على معالجات متعددة ، فلديك خياران فقط. في فورتران الحديثة ، هناك ميزة مثل " coarray " ، والتي تسمح بالعمل مباشرة مع اللغة في البرمجة المتوازية. ظهر Coarray في ملحق Fortran 95 وتم إدماجه لاحقًا في Fortran 2008.غالبًا ما يؤدي الاستخدام النشط لـ Fortran من قبل الفيزيائيين إلى إرباك علماء الكمبيوتر وغيرهم من الأشخاص غير المرتبطين بهذه المنطقة الذين يعتقدون أن Fortran هو مفارقة تاريخية.أود أن أشرح لماذا لا يزال فورتران مفيدًا. أنا لا أشجع الطلاب الذين يدرسون الفيزياء على تدريس فورتران - نظرًا لأن معظمهم سيقومون بالبحث ، فمن الأفضل أن يدرسوا C / C ++ (أو يتوقفون في Matlab / Octave / Python). أود أن أشرح لماذا لا يزال يستخدم فورتران ، ولأثبت أن هذا ليس فقط لأن الفيزيائيين "متأخرين" (على الرغم من أن هذا هو الحال في بعض الأحيان - في العام الماضي رأيت طالبًا في الفيزياء يعمل مع التعليمات البرمجية فورتران 77 ، بينما لم يسمع هو أو مديره أي شيء عن فورتران 90). يجب أن ينظر علماء الكمبيوتر إلى هيمنة فورتران في الحوسبة العددية كتحدي.قبل أن أتطرق إلى الموضوع ، أريد أن أناقش القصة ، لأنه عندما يسمع الناس كلمة "فورتران" ، فإنهم يتخيلون على الفور بطاقات لكمة ورمز مع أسطر مرقمة. تمت كتابة مواصفات فورتران الأولى في عام 1954. كانت فورتران المبكرة (التي كان اسمها مكتوبًا بأحرف كبيرة ، FORTRAN) ، وفقًا للمعايير الحديثة ، لغة جهنم ، لكنها كانت خطوة لا تصدق إلى الأمام من برمجة المجمع السابقة. غالبًا ما تمت برمجة FORTRAN باستخدام بطاقات اللكم ، كما تتذكر الأستاذة ميريام فورمان من جامعة ستوني بروك دون متعة. كان لدى فورتران العديد من الإصدارات ، وأشهرها المعايير 66 و 77 و 90 و 95 و 03 و 08.وغالبًا ما يقال أن فورتران لا يزال يستخدم بسبب سرعته. لكن هل هو الأسرع؟ في benchmarksgame.alioth.debian.orgهناك مقارنة بين C و Fortranفي العديد من الاختبارات بين العديد من اللغات. في معظم الحالات ، تعد Fortran و C / C ++ هي الأسرع. غالبًا ما يتخلف المبرمجون المفضلون في Python في السرعة 100 مرة ، ولكن هذا في ترتيب الأشياء للشفرة المفسرة. Python غير مناسب للحسابات العددية المعقدة ، ولكنه مناسب تمامًا لآخر. ومن المثير للاهتمام ، أن C / C ++ يتفوق على فورتران في جميع الاختبارات باستثناء اختبارين ، على الرغم من أنها تختلف بشكل عام في النتائج. الاختبارات التي يفوز فيها فورتران ، أكثرها "فيزيائية" هي محاكاة نظام الأجسام n وحساب الطيف. تعتمد النتائج على عدد نوى المعالج ، على سبيل المثال ، تخلف Fortran عن C / C ++ على النواة الرباعية. الاختبارات ، التي يتأخر فيها فورتران كثيرًا عن C / C ++ ، يقرأ ويكتب البيانات معظم الوقت ، وفي هذا الصدد فإن بطء فورتران معروف.لذا فإن C / C ++ سريع مثل Fortran ، وأحيانًا أسرع قليلاً. نحن مهتمون بـ "لماذا يواصل أساتذة الفيزياء تقديم المشورة لطلابهم لاستخدام فورتران بدلاً من سي / سي ++؟"فورتران لديه رمز إرث
بفضل تاريخ فورتران الطويل ، ليس من المستغرب كتابة جبال من كود الفيزياء عليها. يحاول الفيزيائيون تقليل وقت البرمجة ، لذا إذا وجدوا رمزًا سابقًا ، فسيستخدمونه. حتى إذا كان الرمز القديم غير قابل للقراءة ، وموثقًا بشكل سيئ ، ولم يكن الأكثر فاعلية ، فمن المرجح أن يستخدم الرمز القديم المثبت بدلاً من كتابة رمز جديد. مهمة الفيزيائيين ليست كتابة التعليمات البرمجية ، إنهم يحاولون فهم طبيعة الواقع. يمتلك الأساتذة دائمًا الرمز الموروث في متناول اليد (غالبًا ما يكتبون هذا الرمز قبل عقود) ، وينقلونه إلى طلابهم. هذا يوفر لهم الوقت ويزيل الشكوك من عملية تصحيح الخطأ.يتعلم طلاب الفيزياء فورتران أسهل من C / C ++
أعتقد أن Fortran أسهل في التعلم من C / C ++. فورتران 90 و سي متشابهتان للغاية ، لكن فورتران أسهل في الكتابة. لغة C هي لغة بدائية نسبيًا ، لذلك يشارك الفيزيائيون الذين يختارون C / C ++ في البرمجة الشيئية. يمكن أن يكون OOP مفيدًا ، خاصةً في مشاريع البرامج الكبيرة ، ولكن ادرسه لفترة أطول. تحتاج إلى دراسة التجريدات مثل الطبقات والميراث. يختلف نموذج OOP تمامًا عن النموذج الإجرائي الذي تستخدمه فورتران. يعتمد Fortran على نموذج إجرائي بسيط أقرب إلى ما يحدث تحت غطاء الكمبيوتر. عندما تقوم بتحسين / توجيه التعليمات البرمجية لزيادة السرعة ، يكون من السهل العمل مع النموذج الإجرائي. عادة ما يفهم الفيزيائيون كيفية عمل أجهزة الكمبيوتر ، ويفكرون فيما يتعلق بالعمليات الفعلية ، على سبيل المثال ، نقل البيانات من القرص إلى ذاكرة الوصول العشوائي ، ومن ذاكرة الوصول العشوائي إلى ذاكرة التخزين المؤقت للمعالج.وهي تختلف عن علماء الرياضيات الذين يفضلون التفكير من حيث الوظائف المجردة والمنطق. أيضا ، هذا التفكير يختلف عن المنحى الشيئي. تحسين كود OOP أكثر تعقيدًا من وجهة نظري من الإجرائي. الأجسام هي هياكل ضخمة للغاية مقارنة بهياكل البيانات المفضلة لدى الفيزيائيين: المصفوفات.الخفة واحد: عمل صفيف فورتران
المصفوفات ، أو المصفوفات ، كما يسميها الفيزيائيون ، هي أساس كل الحوسبة الفيزيائية. في Fortran 90+ ، يمكنك العثور على العديد من الفرص للعمل معهم ، على غرار APL و Matlab / Octave. يمكن نسخ المصفوفات ، مضروبًا في عدد ، مضروبًا فيما بينها بطريقة بديهية جدًا:A = B
A = 3.24*B
C = A*B
B = exp(A)
norm = sqrt(sum(A**2))
هنا ، A ، B ، C هي مصفوفات من بعض الأبعاد (على سبيل المثال ، 10x10x10). يعطينا C = A * B الضرب عنصريًا للمصفوفات إذا كان A و B متساويين في الحجم. لضرب المصفوفة ، يتم استخدام C = matmul (A، B). تقريبا جميع الوظائف الداخلية فورتران (Sin () ، Exp () ، Abs () ، Floor () ، وما إلى ذلك) تأخذ المصفوفات كوسيطات ، مما يؤدي إلى كود بسيط ونظيف. ببساطة لا يوجد كود مشابه في C / C ++. في تطبيق C / C ++ الأساسي ، ببساطة نسخ مصفوفة يتطلب تشغيل حلقات عبر جميع العناصر أو استدعاء وظيفة مكتبة. إذا قمت بتغذية صفيف من وظيفة المكتبة الخاطئة في C ، فسيحدث خطأ. الحاجة إلى استخدام المكتبات بدلاً من الوظائف الداخلية تعني أن الشفرة الناتجة لن تكون نظيفة ومحمولة ، أو سهلة التعلم.في Fortran ، يعمل الوصول إلى عناصر المصفوفة من خلال بناء الجملة البسيط A [x، y، z] ، عندما تحتاج في C / C ++ إلى كتابة A [x] [y] [z]. تبدأ عناصر المصفوفات بـ 1 ، وهو ما يتوافق مع فهم الفيزيائيين للمصفوفات ، وفي صفائف C / C ++ ، يبدأ الترقيم من الصفر. فيما يلي بعض الميزات الأخرى للعمل مع المصفوفات في فورتران.A = (/ i , i = 1,100 /)
B = A(1:100:10)
C(10:) = B
أولاً ، يتم إنشاء المتجه A من خلال حلقة فعل ضمنية ، تُعرف أيضًا باسم مُنشئ الصفيف. ثم يتم إنشاء متجه B ، يتألف من كل عنصر 10 من A ، باستخدام الخطوة 10. وأخيرًا ، يتم نسخ الصفيف B إلى الصفيف C ، بدءًا من العنصر العاشر. يدعم Fortran تعريف المصفوفات بدون مؤشرات أو مؤشرات سلبية:double precision, dimension(-1:10) :: myArray
يبدو المؤشر السلبي في البداية سخيفًا ، لكنني سمعت عن فائدته - على سبيل المثال ، تخيل أن هذه منطقة إضافية لنشر أي توضيحات. يدعم Fortran أيضًا فهارس المتجهات . على سبيل المثال ، يمكنك نقل العناصر 1،5 و 7 من صفيف A من البعد N × 1 إلى صفيف B من البعد 3 × 1:subscripts = (/ 1, 5, 7 /)
B = A(subscripts)
يدعم فورتران أقنعة المصفوفة في جميع الوظائف الداخلية. على سبيل المثال ، إذا احتجنا إلى حساب لوغاريتم جميع عناصر المصفوفة أكبر من الصفر ، فإننا نستخدم:log_of_A = log(A, mask= A .gt. 0)
أو يمكننا إبطال جميع العناصر السلبية للصفيف في سطر واحد:where(my_array .lt. 0.0) my_array = 0.0
يسهل فورتران تخصيص المصفوفات وتحريرها بشكل ديناميكي. على سبيل المثال ، لوضع مصفوفة ثنائية الأبعاد:real, dimension(:,:), allocatable :: name_of_array
allocate(name_of_array(xdim, ydim))
في C / C ++ ، يتطلب هذا الإدخال التالي :int **array;
array = malloc(nrows * sizeof(double *));
for(i = 0; i < nrows; i++){
array[i] = malloc(ncolumns * sizeof(double));
}
لتحرير صفيف في فورترانdeallocate(name_of_array)
في C / C ++ لهذاfor(i = 0; i < nrows; i++){
free(array[i]);
}
free(array);
:
في لغات مثل C / C ++ ، يتم تمرير جميع المتغيرات حسب القيمة ، باستثناء المصفوفات التي يتم تمريرها حسب المرجع. ولكن في كثير من الحالات ، يعد تمرير صفيف حسب القيمة أكثر منطقية. على سبيل المثال ، دع البيانات تتكون من مواقع 100 جزيء في فترات زمنية مختلفة. نحن بحاجة إلى تحليل حركة جزيء واحد. نأخذ شريحة من المصفوفة (صفيف) المقابلة لإحداثيات الذرات في هذا الجزيء ونمررها إلى الوظيفة. في ذلك ، سوف نتعامل مع تحليل معقد للصفقة المرسلة. إذا مررنا بها كمرجع ، فلن يتم وضع البيانات المنقولة في الذاكرة على التوالي. نظرًا لطبيعة الوصول إلى الذاكرة ، سيكون العمل مع هذا الصفيف بطيئًا. إذا قمنا بتمريرها بالقيمة ، فسننشئ في الذاكرة مجموعة جديدة مرتبة في صف. لإسعاد الفيزيائيين ، يقوم المترجم بجميع الأعمال القذرة لتحسين الذاكرة.في فورتران ، عادة ما يتم تمرير المتغيرات حسب المرجع ، وليس بالقيمة. تحت غطاء المحرك ، يقوم مترجم Fortran بتحسين انتقاله تلقائيًا لزيادة الكفاءة. من وجهة نظر الأستاذ في مجال تحسين استخدام الذاكرة ، يجب أن يكون المترجم أكثر ثقة من الطالب! ونتيجة لذلك، الفيزيائيين نادرا ما تستخدم المؤشرات، على الرغم من فورتران 90 + لديهم .بعض الأمثلة الأخرى عن الاختلافات بين فورتران وجيم
لدى فورتران عدة خيارات لإدارة المترجم عند استكشاف الأخطاء وإصلاحها والتحسين. يمكن اكتشاف الأخطاء في التعليمات البرمجية في مرحلة التجميع ، وليس أثناء التنفيذ. على سبيل المثال ، يمكن الإعلان عن أي متغير كمعلمة ، أي ثابت.double precision, parameter :: hbar = 6.63e-34
إذا تغيرت المعلمة في الكود ، فإن المترجم يعيد خطأ. في C يسمى هذا constdouble const hbar = 6.63e-34
المشكلة هي أن كونست ريال الحقيقي يختلف عن ريال بسيط. إذا حصلت دالة قبول حقيقية على ثابت حقيقي ، فسوف تُرجع خطأ. من السهل تخيل كيف يمكن أن يؤدي هذا إلى مشاكل إمكانية التشغيل المتداخل في التعليمات البرمجية.يحتوي فورتران أيضًا على مواصفات intent تخبر المترجم بما إذا كانت الوسيطة التي تم تمريرها إلى الدالة هي إدخال أو إخراج أو معلمة إدخال ومخرج. هذا يساعد المترجم على تحسين الكود ويزيد من سهولة القراءة والموثوقية.لدى فورتران ميزات أخرى تستخدم بترددات مختلفة. على سبيل المثال ، لدى Fortran 95 القدرة على إعلان الوظائف باستخدام المعدل النقي. هذه الوظيفة ليس لها آثار جانبية - فهي تغير فقط حججها ، ولا تغير المتغيرات العالمية. حالة خاصة لمثل هذه الوظيفة هي الوظيفة الأولية ، والتي تقبل وترجع المقاييس. يتم استخدامه لمعالجة عناصر الصفيف. تسمح المعلومات بأن الوظيفة نقية أو عنصرية للمترجم بأداء تحسين إضافي ، خاصة عند موازاة التعليمات البرمجية.ماذا تتوقع في المستقبل؟
في الحسابات العلمية ، لا تزال فورتران هي اللغة الرئيسية ، ولن تختفي في المستقبل القريب. في المسحمن بين زوار مؤتمر الحوسبة الفائقة لعام 2014 الذين يستخدمون هذه اللغة ، قال 100٪ منهم إنهم سيستخدمونها في السنوات الخمس القادمة. يستتبع أيضًا من الاستطلاع أن 90 ٪ استخدموا مزيجًا من فورتران وجيم. توقعًا لزيادة في خلط هذه اللغات ، فإن منشئوا مواصفات فورتران 2015 يتضمنون المزيد من الميزات لقابلية التشغيل البيني للكود. يتم استدعاء رمز فورتران بشكل متزايد من كود Python. علماء الكمبيوتر الذين ينتقدون استخدام فورتران لا يفهمون أن هذه اللغة لا تزال متكيفة بشكل فريد مع ما سمي بعد - FOrmula TRANslation ، ترجمة الصيغ ، أي تحويل الصيغ المادية إلى رمز. لا يدرك الكثير منهم أن اللغة تتطور وتتضمن ميزات جديدة باستمرار.إن الحديث عن Fortran 90+ القديم يشبه استدعاء C ++ القديم لأن C تم تطويره في عام 1973. من ناحية أخرى ، حتى أحدث معايير Fortran 2008 لديها توافق عكسي مع Fortran 77 ومعظم Fortran 66. لذلك ، يرتبط تطور اللغة بصعوبات معينة. في الآونة الأخيرة ، قرر الباحثون في معهد ماساتشوستس للتكنولوجيا (MIT) التغلب على هذه الصعوبات من خلال تطوير لغة HPC تسمى جوليا ، والتي تم إصدارها لأول مرة في عام 2012. ما إذا كانت جوليا تحل محل فورتران يبقى أن نرى. على أي حال ، أعتقد أن هذا سيستغرق وقتًا طويلاً جدًا.