فورتران
المحتويات

قبل الخوض في التفاصيل، فورتران هي لغة برمجة متعددة الاستخدامات واختصار لكلمتين في الإنجليزية (FORmula TRANslation) معناهما ترجمة المعادلات (FORmula TRANslation). وهي لغة برمجة أمرية للأغراض العامة، ومناسبة بشكل خاص للحسابات الرقمية والحوسبة العلمية. كانت هي أولى لغات البرمجة عالية المستوى، ولا تزال تطور وتستعمل حتى الآن. واُسْتُخْدِمَت لأكثر من ستة عقود، في مجالات حاسوبية مكثفة مثل التنبؤ العددي بالطقس، وتحليل العناصر المحدودة، وديناميات السوائل الحسابية، والجيوفيزياء، والفيزياء الحاسوبية، وعلم البلورات، والكيمياء الحسابية. إنها لغة شائعة للحوسبة عالية الاداء وتستعمل للبرامج التي تقيس وتصنف أسرع الحواسيب العملاقة في العالم. ونتناول فيما يلي مزيدًا من التفاصيل.
من جانب آخر، اعتبارًا من يونيو 2021، احتلت فورتران المرتبة 17 في مؤشر فهرس تيوبي للغات البرمجة الأكثر شعبية، وهو مقياس لشعبية لغات البرمجة، حيث صعدت 17 مركزًا من تصنيفها الأخير في يناير 2020.
إضافةً إلى ذلك، كان تصميم فورتران هو الأساس للعديد من لغات البرمجة الأخرى، مثل اللغة المعروفة بيسيك، والتي تستند إلى فورتران اثنان، التي حسنت عمليات القواعد، ولا سيما الهياكل المنطقية الأفضل، والتغييرات الأخرى للعمل بسهولة أكبر في بيئة تفاعلية.
read (*,*) number_of_points
allocate (points(number_of_points))
write (*,*) "Enter the points to average:"
التاريخ
وفي هذا السياق، تزامن تطوير فورتران مع التطور المبكر لتكنولوجيا المترجم، وقد تم تحفيز الكثير من التطورات في نظرية وتصميم المجمعين بشكل خاص من خلال الحاجة إلى إنشاء كود فعال لبرامج فورتران.
وفي السياق ذاته، اُعْتُمِدَت اللغة على نطاق واسع من قبل العلماء لكتابة برامج مكثفة عدديًا، مما شجع كتاب المترجمين على إنتاج مجمعين يمكن أن يولدوا كودًا أسرع وأكثر كفاءة. إن إدراج نوع بيانات رقم معقد في اللغة جعل لغة فورتران مناسبة بشكل خاص للتطبيقات التقنية مثل الهندسة الكهربائية.
في هذا الإطار، بينما كان المجتمع متشككًا في أن هذه الطريقة الجديدة يمكن أن تتفوق على الترميز اليدوي، فقد قللت من عدد عبارات البرمجة اللازمة لتشغيل الجهاز بعامل ٢٠، وحصلت على القبول بسرعة. قال جون باكوس خلال مقابلة عام ١٩٧٩ معThink ، مجلة موظفي اي بي ام، «لقد أتى الكثير من عملي من الكسل. لم أحب كتابة البرامج، وهكذا، عندما كنت أعمل على اي بي ام ٧٠١، كنت أكتب برامج للحوسبة مسارات الصواريخ، بدأت العمل على نظام برمجة لتسهيل كتابة البرامج».
من جانب آخر، تم الانتهاء من مسودة المواصفات لنظام ترجمة الصيغة الرياضية من اي بي ام بحلول نوفمبر ١٩٥٤. ظهر أول دليل لـFORTRAN في أكتوبر ١٩٥٦، مع أول مترجم FORTRAN تم تسليمه في أبريل ١٩٥٧. كان هذا أول مترجم محسن، لأن العملاء كانوا مترددين في استخدام لغة برمجة عالية المستوى ما لم يتمكن المترجم من إنشاء كود بأداء يقترب من لغة التجميع المشفرة يدويًا.
وعلى صعيد آخر، بحلول عام ١٩٦٠، كانت إصدارات FORTRAN متاحة لأجهزة كمبيوتر IBM 709 و 650 و 1620 و 7090. بشكل ملحوظ، دفعت الشعبية المتزايدة لشركة FORTRAN مصنعي أجهزة الكمبيوتر المتنافسين إلى توفير برامج التحويل البرمجي FORTRAN لآلاتهم، حتى أنه بحلول عام ١٩٦٣، كان هناك أكثر من ٤٠ مترجمًا من FORTRAN. لهذه الأسباب، تعتبر FORTRAN أول لغة برمجة متعددة المنصات مستعملة على نطاق واسع.
علاوةً على ذلك، طُوِّرَت فورتران في عام 1954 الأصل من قبل شركة اي بي ام في الخمسينيات من القرن الماضي في أواخر عام ١٩٥٣، قام جون دبليو باكوس اقتراحًا لرؤسائه في شركة اي بي ام لتطوير بديل عملي أكثر للغة التجميع لبرمجة جهاز الكمبيوتر الرئيسيIBM 704. يتكون فريق FORTRAN التاريخي من Backus من المبرمجين ريجارد جولدبيرج، شيلدون بيست، وهارلان هيريك، وبيتر شيريدان، وروي نات، وروبرت نيلسون، وإيرفينغ زيلر، وهارولد ستيرن، ولويس هيبت، وديفيد ساير. تضمنت مفاهيمها الدخول الأسهل للمعادلات في الكمبيوتر، وهي فكرة طورها ج. هالكومب لانينج وتم عرضها في نظام لانينج وزيرلر لعام ١٩٥٢.
اللغات المستندة إلى فورتران
وفي السياق ذاته، تعاونت Lahey و Fujitsu لإنشاء Fortran Microsoft .NET Framework. Silverfrost FTN95 قادر كذلك على إنشاء كود NET.
في هذا الإطار، صُمِّمَت لغة البرمجة F لتكون مجموعة فرعية نظيفة من Fortran 95 التي حاولت إزالة الميزات الزائدة عن الحاجة وغير المهيكلة والمهملة في Fortran ، مثل بيان EQUIVALENCE . تحتفظ F بميزات المصفوفة المضافة في Fortran 90، وتزيل عبارات التحكم التي أصبحت قديمة من خلال تركيبات البرمجة المهيكلة المضافة إلى كل من FORTRAN 77 و Fortran 90. ويصف مطورو F بأنها «لغة برمجة مصفوفة مجمعة ومنظمة ومناسبة بشكل خاص إلى التعليم والحوسبة العلمية».
من جانب آخر، SIMSCRIPT هو معالج فورتران المسبق الخاص بالتطبيق لنمذجة ومحاكاة الأنظمة المنفصلة الكبيرة.
كذلك، واحدة من أقدم إصدارات FORTRAN ، التي تم تقديمها في الستينيات، كانت شائعة الاستخدام في الكليات والجامعات. تم تطويره ودعمه وتوزيعه من قبل جامعة واترلو، وكان WATFOR يعتمد إلى حدّ كبير على FORTRAN IV. يمكن للطالب الذي يستعمل WATFOR إرسال وظيفة FORTRAN المجمعة الخاصة به، وإذا لم تكن هناك أخطاء في بناء الجملة، فسينتقل البرنامج مباشرة إلى التنفيذ. سمح هذا التبسيط للطلاب بالتركيز على بناء جملة البرنامج ودلالاته، أوتدفق منطق التنفيذ، بدلاً من التعامل مع لغة التحكم في وظيفة التقديم (JCL)، أو عملية (عمليات) الترجمة / تحرير الارتباط/ التنفيذ المتتالية، أو التعقيدات الأخرى للحواسيب المركزية / بيئة الحواسيب الصغيرة. كان الجانب السلبي لهذه البيئة المبسطة هو أن WATFOR لم يكن خيارًا جيدًا للمبرمجين الذين يحتاجون إلى القدرات الموسعة للمعالج (المعالجات) المضيفة، مثلًا، كان لدى WATFOR عادةً وصول محدود للغاية إلى أجهزة الإدخال / الإخراج. خلف WATFOR WATFIV وإصداراته الأحدث.program; s=0 i=1,n; s=s+1; stop i; s='s' Stop
(البرمجة الخطية).
إضافةً إلى ذلك، قبل FORTRAN 77، تم استخدام عدد من المعالجات الأولية بشكل شائع لتوفير لغة أكثر ودية، مع ميزة أن الكود المعالج مسبقًا يمكن تجميعه على أي جهاز باستخدام مترجم FORTRAN قياسي. ستدعم هذه المعالجات التمهيدية عادةً البرمجة المنظمة، وأسماء المتغيرات التي تزيد عن ستة أحرف، وأنواع البيانات الإضافية، والترجمة الشرطية، وحتى إمكانيات الماكرو. تضمنت المعالجات الأولية الشائعة FLECS و iftran و MORTRAN و SFtran و S-Fortran و Ratfor وRatfiv. قام راتفور وراتفيف، مثلًا، بتطبيق لغة شبيهة بلغة C ، مما أدى إلى إخراج كود معالج مسبقًا فيمعيار FORTRAN 66. على الرغم من التقدم في لغة فورتران، يستمر استخدام المعالجات الأولية في التجميع الشرطيوالاستبدال الكلي.
وفي هذا الصدد، تم تطوير LRLTRAN في مختبر Lawrence Radiation لتقديم الدعم لحساب المتجهات والتخزين الديناميكي، من بين امتدادات أخرى لدعم برمجة الأنظمة. شمل التوزيع نظام التشغيل LTSS.
ومن جهة أخرى، قام الكثير من برامج التحويل البرمجي لـ Fortran بدمج مجموعات فرعية من المعالج الأولي C في أنظمتهم.
علاوةً على ذلك، يتضمن معيار Fortran-95 جزءًا اختياريًا 3 يحدد قدرة الترجمة الشرطية الاختيارية. غالبًا ما يشار إلى هذه القدرة باسم"CoCo".
العلوم والهندسة
في هذا الإطار، إنها اللغة الأساسية لبعض مهام الحوسبة الفائقة الأكثر كثافة، مثل علم الفلك، ونمذجة المناخ، والكيمياء الحسابية، والاقتصاد الحسابي، وديناميات السوائل الحسابية، والفيزياء الحاسوبية، وتحليل البيانات، والنمذجة الهيدرولوجية، والجبر الخطي العددي والمكتبات العددية (LAPACK و IMSL و NAG)، والتحسين، ومحاكاة الأقمار الصناعية، والهندسة الإنشائية، والتنبؤ بالطقس. الكثير من معايير النقطة العائمة لقياس أداء معالجات الكمبيوترالجديدة، مثل مكونات النقطة العائمة لمعايير SPEC (مثلًا، CFP2006 ، CFP2017) مكتوبة بلغة Fortran. تم توثيق خوارزميات الرياضيات جيدًا في الوصفات العددية.
وفي هذا السياق، بصرف النظر عن هذا، تستعمل الرموز الأكثر حداثة في العلوم الحسابية بشكل عام مكتبات البرامج الكبيرة، مثل METISلتقسيم الرسم البياني، أو PETSc أو Trilinos لإمكانيات الجبر الخطي، أو DUNE أو FEniCS لدعم الشبكة والعناصرالمحدودة، والمكتبات العامة الأخرى. منذ أوائل العقد الأول من القرن الحادي والعشرين، تم كذلك تنفيذ الكثير من مكتبات الدعم المستعملة على نطاق واسع في لغة C ومؤخراً في C ++. من ناحية أخرى، أصبحت اللغات عالية المستوى مثلMATLAB و Python و R شائعة في مجالات معينة من العلوم الحسابية. وبالتالي، فإن جزءًا متزايدًا من البرامج العلمية مكتوب كذلك بلغات البرمجة النصية عالية المستوى. لهذا السبب، تمت إضافة تسهيلات التشغيل البيني مع لغة C إلى Fortran 2003 وتم تحسينها بواسطة المواصفة الفنية ISO / IEC 29113، والتي تم دمجها في Fortran 2018 للسماح بمزيد من المرونة في التعامل مع لغات البرمجة الأخرى.
إضافةً إلى ذلك، على الرغم من أن مقالًا نُشر في مجلة عام ١٩٦٨ من قبل مؤلفي BASIC قد وصف FORTRAN بأنه «قديم الطراز» ، تم استخدام Fortran الآن منذ عدة عقود وهناك مجموعة كبيرة من برامج Fortran قيد الاستخدام اليومي عبر المجتمعات العلمية والهندسية . كتب جاي باساتشوف في عام ١٩٨٤ أن «طلاب الفيزياء وعلم الفلك يجب أن يتعلموا لغة FORTRANبكل بساطة. يوجد الكثير في FORTRAN بحيث يبدو من غير المحتمل أن يتغير العلماء إلى Pascal أو Modula-2 أو أيًاكان». في عام ١٩٩٣، Cecil E. ووصف ليث فورتران بأنها «اللغة الأم للحوسبة العلمية»، مضيفًا أن استبدالها بأي لغة أخرى «قد يظل أملًا بائسًا».Galperin, Boris (1993). "26". Large Eddy Simulation of Complex Engineering and Geophysical Flows. London: Cambridgey.
وفي السياق ذاته، تمت كتابة برنامج مسجات NASA Voyager 1 و Voyager 2 في الأصل في FORTRAN 5، وتم نقله لاحقًا إلى Fortran 77. اعتبارًا من ٢٥ سبتمبر ٢٠١٣، لا تزال بعض البرامج مكتوبة بلغة Fortran وتم نقل بعضها إلى C.
الفكاهة
قائمة لغات البرمجة
إضافةً إلى ذلك، عندما ناقش X3J3 ما إذا كان الحد الأدنى لعدد الرحلات لحلقة DO يجب أن يكون صفرًا أم واحدًا في Fortran 77، اقترحت لورين ميسنر عدد رحلات لا يقل عن اثنين - التفكير (اللسان في الخد) أنه إذا كان أقل من اثنين، فسيكون هناك لايوجد سبب للحلقة!
في هذا الإطار، خلال نفس اجتماع لجنة معايير FORTRAN الذي تم فيه اختيار الاسم "FORTRAN 77"، دُمِج اقتراح تقني ساخرفي التوزيع الرسمي بعنوان «يعتبر الحرف O ضارًا». يهدف هذا الاقتراح إلى معالجة الالتباس الذي ينشأ أحيانًا بين الحرف "O" والصفر الرقمي، من خلال حذف الحرف من أسماء المتغيرات المسموح بها. ومع ذلك، فإن الطريقة المقترحة كانت لإزالة الحرف من مجموعة الأحرف تمامًا (وبالتالي الاحتفاظ بـ ٤٨ كرقم من الأحرف المعجمية، والتي زادت النقطتان إلى ٤٩). وقد اعتبر هذا مفيدًا لأنه سيعزز البرمجة المنظمة، بجعل من المستحيل استخدام عبارة GO TO سيئة السمعة كماكان من قبل. (سيتم كذلك حذف عبارات FORMAT المزعجة). وقد لوحظ أن هذا «قد يبطل بعض البرامج الموجودة» ولكن أغلب هذه «ربما كانت غير متوافقة، على أي حال».
إضافةً إلى ذلك، عندما تمت إضافة المصفوفات ذات الطول المفترض، كان هناك نزاع حول الحرف المناسب لفصل الحدود العليا والسفلى. في تعليق يفحص هذه الحجج، كتب الدكتور والت برينرد مقالًا بعنوان «علم الفلك مقابل أمراض الجهاز الهضمي» لأن بعض المؤيدين اقترحوا استخدام النجمة أو علامة النجمة ("*")، بينما فضل آخرون النقطتين (":").
في هذا الإطار، في FORTRAN 77 (وأغلب الإصدارات السابقة)، كان لأسماء المتغيرات التي تبدأ بالأحرف I-N نوع افتراضي من الأعداد الصحيحة، في حين أن المتغيرات التي تبدأ بأي أحرف أخرى تم تعيينها افتراضيًا إلى حقيقي، على الرغم من أن المبرمجين يمكنهم تجاوز القيم الافتراضية بإعلان صريح. أدى هذا إلى النكتة: «في فورتران، الله حقيقي (ما لم يتم الإعلان عن العدد الصحيح).»
انظر كذلك
write (*,'(a,g12.4)') 'Average = ', average_points
- write (*,'(a,g12.4)') 'Average of positive points = ', positive_average
- write (*,'(a,g12.4)') 'Average of negative points = ', negative_average
- end program average
if (count(points> 0.)> 0) then
وفي هذا الصدد، positive_average = sum(points, points> 0.) / count(points> 0.)
end if
أمثلة برمجية
- program average
- implicit none
- real, dimension, allocatable :: points
كذلك، يوضح البرنامج التالي تخصيص الذاكرة الديناميكي والعمليات القائمة على المصفوفة، وهما ميزتان تم تقديمهما معFortran 90. وتجدر الإشارة بشكل خاص إلى عدم وجود حلقات DO وعبارات IF/THEN في معالجة المصفوفة؛ يتم تطبيق العمليات الحسابية على المصفوفة ككل. ومن الواضح كذلك استخدام أسماء المتغيرات الوصفية وتنسيق الكود العام الذي يتوافق مع أسلوب البرمجة المعاصر. هذا المثال يحسب متوسط البيانات المدخلة بشكل تفاعلي
التعليم
في هذا الإطار، لا زالت تدرس في اغلب الكليات العلمية والهندسية كمثال تُدَرَّس في الوقت الحالي في جميع كليات الهندسة في العراق.
إصداراتها
من جانب آخر، يحتوي فورتران على إصدارات متعددة، كل منها يضيف ملحقات مع الاحتفاظ إلى حد كبير بالتوافق مع الإصداراتالسابقة. أضافت الإصدارات المتتالية دعمًا للبرمجة المهيكلة ومعالجة البيانات المستندة إلى الأحرف (FORTRAN 77)، وبرمجة المصفوفات، والبرمجة المعيارية والبرمجة العامة (Fortran 90)، والأداء العالي لـ (Fortran 95)، والبرمجة الموجهة للكائنات (Fortran 2003)، البرمجة المتزامنة (Fortran 2008)، وقدرات الحوسبة المتوازية الأصلية (Coarray Fortran 2008/2018). تحتوي آخر إصدارات لغة الفورتران على مجموعة من الأوامر التي تفسر نفسها بنفسها مثل اقرأ READ واكتب WRITE وإذهب إلي GO TO وتوقف STOP وتنفذ برامج الفورتران تبعا لتسلسل الجمل بها. ولكن تكمن صعوبتها في تحديد الخطأ عند حدوثه حيث من يستوجب أحيانا تتبع الكود من أوله مما يزيد الامر صعوبة.
قابلية
وعلى صعيد آخر، أصبح من الممكن (والسهل نسبيًا) كتابة برنامج محمول بالكامل بلغة فورتران، حتى بدون اللجوء إلى المعالج المسبق.
علاوةً على ذلك، ظل الوصول إلى بيئة الحوسبة (مثلًا، سطر أوامر البرنامج، ومتغيرات البيئة، والتفسير النصي لظروف الخطأ)يمثل مشكلة حتى تمت معالجتها بواسطة معيار ٢٠٠٣.
ومن ناحية أخرى، لم تكن الملحقات غير المتوافقة هي مشكلة قابلية النقل الوحيدة. بالنسبة للحسابات العددية، من المهم مراعاة خصائص الحساب. تم تناول هذا من قبل فوكس وآخرون. في سياق معيار عام ١٩٦٦ من قبل مكتبة بورت.P. A. Fox (1977). "Port — A portable mathematical subroutine library". A portable mathematical subroutine library. Lecture Notes in Computer Science. 57. pp. 165–177. أصبحت الأفكار الواردة فيه مستعملة على نطاق واسع، وتم دمجها في النهاية في معيار ١٩٩٠ عن طريق وظائف التحقيق الجوهرية. أدى التبني الواسع النطاق (الذي أصبح الآن عالميًا) لمعيار IEEE 754 لحساب الفاصلة العائمة الثنائية إلى إزالة هذه المشكلة بشكل أساسي.
كذلك، كانت قابلية النقل مشكلة في الأيام الأولى لأنه لم يكن هناك معيار متفق عليه - ولا حتى الدليل المرجعي لشركة IBM - وتنافست شركات الكمبيوتر لتمييز عروضها عن العروض الأخرى من خلال توفير ميزات غير متوافقة. لقد حسنت المعايير قابلية النقل. قدم معيار ١٩٦٦ صيغة مرجعية ودلالات، لكن البائعين استمروا في تقديم امتدادات غير متوافقة. على الرغم منأن المبرمجين الحريصين كانوا يدركون أن استخدام الامتدادات غير المتوافقة تسبب في مشاكل باهظة في قابلية النقل، وبالتالي كانوا يستعملون برامج مثل The PFORT Verifier ، لم يكن ذلك إلا بعد معيار ١٩٧٧، عندما كان المكتب الوطني للمعايير (NIST) نشرت FIPS PUB 69، أن المعالجات التي تم شراؤها من قبل حكومة الولايات المتحدة كانت مطلوبة لتشخيص امتدادات المعيار. بدلاً من تقديم معالجين، كان لدى كل مترجم في النهاية خيارًا على الأقل لتشخيص الامتدادات.
ومن ناحية أخرى، مجموعات كبيرة من برامج المكتبات التي يمكن وصفها بأنها غير مرتبطة بشكل وثيق بالحسابات الهندسية والعلمية، مثل مكتبات الرسومات، تمت كتابتها بلغة C ، وبالتالي فإن الوصول إليها يمثل مشكلة في قابلية النقل. تمت معالجة هذا منخلال دمج إمكانية التشغيل البيني C في معيار ٢٠٠٣.
if (count(points <0.)> 0) then
كذلك، negative_average = sum(points, points <0.) / count(points <0.)
read (*,*) points
ومن ناحية أخرى، if (number_of_points> 0) average_points = sum(points) / number_of_points
مميزاتها
علاوةً على ذلك، وتتميز هذه اللغة بالبساطة والإيجاز والمقدرة على التفاعل الحسابي حتى ان شعارها هو شعار الدالة. والاستدامة بالتطوير إذ أنها من أبرز اللغات التي بقيت حية لأكثر من نصف قرن.
end if
deallocate (points)
integer :: number_of_points
write (*,*) "Input number of points to average:"
إضافةً إلى ذلك، real :: average_points=0., positive_average=0., negative_average=0.
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟