فورتران

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

كان تصميم فورتران هو الأساس للعديد من لغات البرمجة الأخرى، مثل اللغة المعروفة بيسيك، والتي تستند إلى فورتران اثنان، التي حسنت عمليات القواعد، ولا سيما الهياكل المنطقية الأفضل، والتغييرات الأخرى للعمل بسهولة أكبر في بيئة تفاعلية.

اعتبارًا من يونيو 2021، احتلت فورتران المرتبة 17 في مؤشر فهرس تيوبي للغات البرمجة الأكثر شعبية، وهو مقياس لشعبية لغات البرمجة، حيث صعدت 17 مركزًا من تصنيفها الأخير في يناير 2020.

التاريخ 
تم تطوير فورتران في عام  1954 الأصل من قبل شركة اي بي ام في الخمسينيات من القرن الماضي في أواخر عام ١٩٥٣، قام جون دبليو باكوس اقتراحًا لرؤسائه في شركة اي بي ام لتطوير بديل عملي أكثر للغة التجميع لبرمجة جهاز الكمبيوتر الرئيسيIBM 704. يتكون فريق FORTRAN التاريخي من Backus من المبرمجين ريجارد جولدبيرج، شيلدون بيست، وهارلان هيريك، وبيتر شيريدان، وروي نات، وروبرت نيلسون، وإيرفينغ زيلر، وهارولد ستيرن، ولويس هيبت، وديفيد ساير. تضمنت مفاهيمها الدخول الأسهل للمعادلات في الكمبيوتر، وهي فكرة طورها ج. هالكومب لانينج وتم عرضها في نظام لانينج وزيرلر لعام ١٩٥٢.

تم الانتهاء من مسودة المواصفات لنظام ترجمة الصيغة الرياضية من اي بي ام بحلول نوفمبر ١٩٥٤. ظهر أول دليل لـFORTRAN في أكتوبر ١٩٥٦، مع أول مترجم FORTRAN تم تسليمه في أبريل ١٩٥٧. كان هذا أول مترجم محسن، لأن العملاء كانوا مترددين في استخدام لغة برمجة عالية المستوى ما لم يتمكن المترجم من إنشاء كود بأداء يقترب من لغة التجميع المشفرة يدويًا.

بينما كان المجتمع متشككًا في أن هذه الطريقة الجديدة يمكن أن تتفوق على الترميز اليدوي، فقد قللت من عدد عبارات البرمجة اللازمة لتشغيل الجهاز بعامل ٢٠، وحصلت على القبول بسرعة.  قال جون باكوس خلال مقابلة عام ١٩٧٩ معThink ، مجلة موظفي اي بي ام، «لقد أتى الكثير من عملي من الكسل. لم أحب كتابة البرامج، وهكذا، عندما كنت أعمل على اي بي ام ٧٠١، كنت أكتب برامج للحوسبة  مسارات الصواريخ، بدأت العمل على نظام برمجة لتسهيل كتابة البرامج».

تم اعتماد اللغة على نطاق واسع من قبل العلماء لكتابة برامج مكثفة عدديًا، مما شجع كتاب المترجمين على إنتاج مجمعين يمكن أن يولدوا كودًا أسرع وأكثر كفاءة.  إن إدراج نوع بيانات رقم معقد في اللغة جعل لغة فورتران مناسبة بشكل خاص للتطبيقات التقنية مثل الهندسة الكهربائية.

بحلول عام ١٩٦٠، كانت إصدارات FORTRAN متاحة لأجهزة كمبيوتر IBM 709 و 650 و 1620 و 7090.  بشكل ملحوظ، دفعت الشعبية المتزايدة لشركة FORTRAN مصنعي أجهزة الكمبيوتر المتنافسين إلى توفير برامج التحويل البرمجي FORTRAN لآلاتهم، حتى أنه بحلول عام ١٩٦٣، كان هناك أكثر من ٤٠ مترجمًا من FORTRAN.  لهذه الأسباب، تعتبر FORTRAN أول لغة برمجة متعددة المنصات مستخدمة على نطاق واسع.

تزامن تطوير فورتران مع التطور المبكر لتكنولوجيا المترجم، وقد تم تحفيز العديد من التطورات في نظرية وتصميم المجمعين بشكل خاص من خلال الحاجة إلى إنشاء كود فعال لبرامج فورتران.

مميزاتها 
وتتميز هذه اللغة بالبساطة والإيجاز والمقدرة على التفاعل الحسابي حتى ان شعارها هو شعار الدالة. والاستدامة بالتطوير إذ أنها من أبرز اللغات التي بقيت حية لأكثر من نصف قرن.

إصداراتها 
يحتوي فورتران على إصدارات متعددة، كل منها يضيف ملحقات مع الاحتفاظ إلى حد كبير بالتوافق مع الإصداراتالسابقة.  أضافت الإصدارات المتتالية دعمًا للبرمجة المهيكلة ومعالجة البيانات المستندة إلى الأحرف (FORTRAN 77)، وبرمجة المصفوفات، والبرمجة المعيارية والبرمجة العامة (Fortran 90)، والأداء العالي لـ (Fortran 95)، والبرمجة الموجهة للكائنات (Fortran 2003)،  البرمجة المتزامنة (Fortran 2008)، وقدرات الحوسبة المتوازية الأصلية (Coarray Fortran 2008/2018). تحتوي آخر إصدارات لغة الفورتران على مجموعة من الأوامر التي تفسر نفسها بنفسها مثل اقرأ READ واكتب WRITE وإذهب إلي GO TO وتوقف STOP'' وتنفذ برامج الفورتران تبعا لتسلسل الجمل بها. ولكن تكمن صعوبتها في تحديد الخطأ عند حدوثه حيث من يستوجب أحيانا تتبع الكود من أوله مما يزيد الامر صعوبة.

 التعليم 
لا زالت تدرس في اغلب الكليات العلمية والهندسية كمثال يتم حاليا تدريسها في جميع كليات الهندسة في العراق.

 العلوم والهندسة 
على الرغم من أن مقالًا نُشر في مجلة عام ١٩٦٨ من قبل مؤلفي BASIC قد وصف FORTRAN بأنه «قديم الطراز» ، تم استخدام Fortran الآن منذ عدة عقود وهناك مجموعة كبيرة من برامج Fortran قيد الاستخدام اليومي عبر المجتمعات العلمية والهندسية  . كتب جاي باساتشوف في عام ١٩٨٤ أن «طلاب الفيزياء وعلم الفلك يجب أن يتعلموا لغة FORTRANبكل بساطة. يوجد الكثير في FORTRAN بحيث يبدو من غير المحتمل أن يتغير العلماء إلى Pascal أو Modula-2 أو أيًاكان». في عام ١٩٩٣، Cecil E.  ووصف ليث فورتران بأنها «اللغة الأم للحوسبة العلمية»، مضيفًا أن استبدالها بأي لغة أخرى «قد يظل أملًا بائسًا».

إنها اللغة الأساسية لبعض مهام الحوسبة الفائقة الأكثر كثافة، مثل علم الفلك، ونمذجة المناخ، والكيمياء الحسابية، والاقتصاد الحسابي، وديناميات السوائل الحسابية، والفيزياء الحاسوبية، وتحليل البيانات، والنمذجة الهيدرولوجية، والجبر الخطي العددي والمكتبات العددية (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 للسماحبمزيد من المرونة في التعامل مع لغات البرمجة الأخرى.

تمت كتابة برنامج مسجات NASA Voyager 1 و Voyager 2 في الأصل في FORTRAN 5، وتم نقله لاحقًا إلى Fortran 77. اعتبارًا من ٢٥ سبتمبر ٢٠١٣، لا تزال بعض البرامج مكتوبة بلغة Fortran وتم نقل بعضها إلى C.

 أمثلة برمجية 
يوضح البرنامج التالي تخصيص الذاكرة الديناميكي والعمليات القائمة على المصفوفة، وهما ميزتان تم تقديمهما معFortran 90. وتجدر الإشارة بشكل خاص إلى عدم وجود حلقات DO وعبارات IF/THEN  في معالجة المصفوفة؛  يتم تطبيق العمليات الحسابية على المصفوفة ككل.  ومن الواضح أيضًا استخدام أسماء المتغيرات الوصفية وتنسيق الكود العامالذي يتوافق مع أسلوب البرمجة المعاصر.  هذا المثال يحسب متوسط البيانات المدخلة بشكل تفاعلي
program average

  ! Read in some numbers and take the average
  ! As written, if there are no data points, an average of zero is returned
  ! While this may not be desired behavior, it keeps this example simple

  implicit none

  real, dimension(:), allocatable :: points
  integer                         :: number_of_points
  real                            :: average_points=0., positive_average=0., negative_average=0.

  write (*,*) "Input number of points to average:"
  read  (*,*) number_of_points

  allocate (points(number_of_points))

  write (*,*) "Enter the points to average:"
  read  (*,*) points

  ! Take the average by summing points and dividing by number_of_points
  if (number_of_points> 0) average_points = sum(points) / number_of_points

  ! Now form average over positive and negative points only
  if (count(points> 0.)> 0) then
     positive_average = sum(points, points> 0.) / count(points> 0.)
  end if
  if (count(points <0.)> 0) then
     negative_average = sum(points, points <0.) / count(points <0.)
  end if

  deallocate (points)

  ! Print result to terminal
  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

 قابلية 
كانت قابلية النقل مشكلة في الأيام الأولى لأنه لم يكن هناك معيار متفق عليه - ولا حتى الدليل المرجعي لشركة IBM - وتنافست شركات الكمبيوتر لتمييز عروضها عن العروض الأخرى من خلال توفير ميزات غير متوافقة.  لقد حسنت المعايير قابلية النقل.  قدم معيار ١٩٦٦ صيغة مرجعية ودلالات، لكن البائعين استمروا في تقديم امتدادات غير متوافقة.  على الرغم منأن المبرمجين الحريصين كانوا يدركون أن استخدام الامتدادات غير المتوافقة تسبب في مشاكل باهظة في قابلية النقل، وبالتالي كانوا يستخدمون برامج مثل The PFORT Verifier ، لم يكن ذلك إلا بعد معيار ١٩٧٧، عندما كان المكتب الوطني للمعايير (NIST) نشرت FIPS PUB 69، أن المعالجات التي تم شراؤها من قبل حكومة الولايات المتحدة كانت مطلوبة لتشخيص امتدادات المعيار.  بدلاً من تقديم معالجين، كان لدى كل مترجم في النهاية خيارًا على الأقل لتشخيص الامتدادات.

لم تكن الملحقات غير المتوافقة هي مشكلة قابلية النقل الوحيدة.  بالنسبة للحسابات العددية، من المهم مراعاة خصائص الحساب.  تم تناول هذا من قبل فوكس وآخرون.  في سياق معيار عام ١٩٦٦ من قبل مكتبة بورت.  أصبحت الأفكار الواردة فيه مستخدمة على نطاق واسع، وتم دمجها في النهاية في معيار ١٩٩٠ عن طريق وظائف التحقيق الجوهرية.  أدى التبني الواسع النطاق (الذي أصبح الآن عالميًا) لمعيار IEEE 754 لحساب الفاصلة العائمة الثنائية إلى إزالة هذه المشكلة بشكل أساسي.

ظل الوصول إلى بيئة الحوسبة (على سبيل المثال، سطر أوامر البرنامج، ومتغيرات البيئة، والتفسير النصي لظروف الخطأ)يمثل مشكلة حتى تمت معالجتها بواسطة معيار ٢٠٠٣.

مجموعات كبيرة من برامج المكتبات التي يمكن وصفها بأنها غير مرتبطة بشكل وثيق بالحسابات الهندسية والعلمية، مثل مكتبات الرسومات، تمت كتابتها بلغة C ، وبالتالي فإن الوصول إليها يمثل مشكلة في قابلية النقل.  تمت معالجة هذا منخلال دمج إمكانية التشغيل البيني C في معيار ٢٠٠٣.

أصبح من الممكن (والسهل نسبيًا) كتابة برنامج محمول بالكامل بلغة فورتران، حتى بدون اللجوء إلى المعالج المسبق.

 اللغات المستندة إلى فورتران 
قبل FORTRAN 77، تم استخدام عدد من المعالجات الأولية بشكل شائع لتوفير لغة أكثر ودية، مع ميزة أن الكود المعالج مسبقًا يمكن تجميعه على أي جهاز باستخدام مترجم FORTRAN قياسي.  ستدعم هذه المعالجات التمهيدية عادةً البرمجة المنظمة، وأسماء المتغيرات التي تزيد عن ستة أحرف، وأنواع البيانات الإضافية، والترجمة الشرطية، وحتى إمكانيات الماكرو.  تضمنت المعالجات الأولية الشائعة FLECS و iftran و MORTRAN و SFtran و S-Fortran و Ratfor وRatfiv.  قام راتفور وراتفيف، على سبيل المثال، بتطبيق لغة شبيهة بلغة C ، مما أدى إلى إخراج كود معالج مسبقًا فيمعيار FORTRAN 66. على الرغم من التقدم في لغة فورتران، يستمر استخدام المعالجات الأولية في التجميع الشرطيوالاستبدال الكلي.

واحدة من أقدم إصدارات 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'''

(البرمجة الخطية).

تم تطوير LRLTRAN في مختبر Lawrence Radiation لتقديم الدعم لحساب المتجهات والتخزين الديناميكي، من بينامتدادات أخرى لدعم برمجة الأنظمة.  شمل التوزيع نظام التشغيل LTSS.

يتضمن معيار Fortran-95 جزءًا اختياريًا 3 يحدد قدرة الترجمة الشرطية الاختيارية.  غالبًا ما يشار إلى هذه القدرة باسم"CoCo".

قام العديد من برامج التحويل البرمجي لـ Fortran بدمج مجموعات فرعية من المعالج الأولي C في أنظمتهم.

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

تم تصميم لغة البرمجة F لتكون مجموعة فرعية نظيفة من Fortran 95 التي حاولت إزالة الميزات الزائدة عن الحاجة وغير المهيكلة والمهملة في Fortran ، مثل بيان EQUIVALENCE .  تحتفظ F بميزات المصفوفة المضافة في Fortran 90، وتزيل عبارات التحكم التي أصبحت قديمة من خلال تركيبات البرمجة المهيكلة المضافة إلى كل من FORTRAN 77 و Fortran 90. ويصف مطورو F بأنها «لغة برمجة مصفوفة مجمعة ومنظمة ومناسبة بشكل خاص  إلى التعليم والحوسبة العلمية».

تعاونت Lahey و Fujitsu لإنشاء Fortran Microsoft .NET Framework.  Silverfrost FTN95 قادر أيضًا على إنشاء كود NET.

الفكاهة 
خلال نفس اجتماع لجنة معايير FORTRAN الذي تم فيه اختيار الاسم "FORTRAN 77"، تم دمج اقتراح تقني ساخرفي التوزيع الرسمي بعنوان «يعتبر الحرف O ضارًا».  يهدف هذا الاقتراح إلى معالجة الالتباس الذي ينشأ أحيانًا بين الحرف "O" والصفر الرقمي، من خلال حذف الحرف من أسماء المتغيرات المسموح بها.  ومع ذلك، فإن الطريقة المقترحة كانت لإزالة الحرف من مجموعة الأحرف تمامًا (وبالتالي الاحتفاظ بـ ٤٨ كرقم من الأحرف المعجمية، والتي زادت النقطتان إلى ٤٩).  وقد اعتبر هذا مفيدًا لأنه سيعزز البرمجة المنظمة، بجعل من المستحيل استخدام عبارة GO TO سيئة السمعة كماكان من قبل.  (سيتم أيضًا حذف عبارات FORMAT المزعجة). وقد لوحظ أن هذا «قد يبطل بعض البرامج الموجودة» ولكن معظم هذه «ربما كانت غير متوافقة، على أي حال».

عندما ناقش X3J3 ما إذا كان الحد الأدنى لعدد الرحلات لحلقة DO يجب أن يكون صفرًا أم واحدًا في Fortran 77، اقترحت لورين ميسنر عدد رحلات لا يقل عن اثنين - التفكير (اللسان في الخد) أنه إذا كان أقل من اثنين، فسيكون هناك  لايوجد سبب للحلقة!

عندما تمت إضافة المصفوفات ذات الطول المفترض، كان هناك نزاع حول الحرف المناسب لفصل الحدود العليا والسفلى. في تعليق يفحص هذه الحجج، كتب الدكتور والت برينرد مقالًا بعنوان «علم الفلك مقابل أمراض الجهاز الهضمي» لأن بعض المؤيدين اقترحوا استخدام النجمة أو علامة النجمة ("*")، بينما فضل آخرون النقطتين (":").

في FORTRAN 77 (ومعظم الإصدارات السابقة)، كان لأسماء المتغيرات التي تبدأ بالأحرف I-N نوع افتراضي من الأعداد الصحيحة، في حين أن المتغيرات التي تبدأ بأي أحرف أخرى تم تعيينها افتراضيًا إلى حقيقي، على الرغم من أن المبرمجين يمكنهم تجاوز القيم الافتراضية بإعلان صريح. أدى هذا إلى النكتة: «في فورتران، الله حقيقي (ما لم يتم الإعلان عن العدد الصحيح).»

انظر أيضًا 
 قائمة لغات البرمجة

مراجع 

 
أدوات برمجة يونكس
اختراعات أمريكية
برمجيات 1957
برمجيات آي‌ بي‌ إم
حوسبة متوازية
لغات برمجة أنشئت في 1957
لغات برمجة إجرائية
لغات برمجة إستاتيكية
لغات برمجة عالية المستوى
لغات برمجة عددية
لغات برمجة كائنية التوجه
معايير الحاسوب