البث القياسي

في برمجة الحاسوب ، تُعدّ التدفقات القياسية قنوات اتصال مُجهزة مسبقًا للإدخال والإخراج [ 1 ] بين برنامج الحاسوب وبيئته عند بدء تنفيذه. تُسمى وصلات الإدخال/الإخراج الثلاثة: الإدخال القياسي ( stdinوالإخراج القياسي ( stdoutوالخطأ القياسي ( stderr ). في الأصل، كان الإدخال/الإخراج يتم عبر وحدة تحكم النظام المتصلة فعليًا (الإدخال عبر لوحة المفاتيح، والإخراج عبر الشاشة)، لكن التدفقات القياسية تُجرّد هذه العملية. عند تنفيذ أمر عبر واجهة سطر أوامر تفاعلية ، عادةً ما تكون التدفقات متصلة بطرفية النص التي تعمل عليها الواجهة، ولكن يمكن تغيير ذلك باستخدام إعادة التوجيه أو خط الأنابيب . وبشكل عام، يرث البرنامج الفرعي التدفقات القياسية من البرنامج الرئيسي .

طلب

التدفقات القياسية للإدخال والإخراج والخطأ في تكوين افتراضي مشترك

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

يمكن استخدام التدفقات لربط التطبيقات، ما يعني إمكانية إعادة توجيه تدفق الإخراج لبرنامج ما ليصبح تدفق إدخال لتطبيق آخر. في العديد من أنظمة التشغيل، يُعبَّر عن ذلك بسرد أسماء التطبيقات مفصولة بخط عمودي، ولذلك يُطلق عليه غالبًا رمز خط الأنابيب . ومن الأمثلة الشائعة استخدام تطبيق ترقيم الصفحات ، مثل more ، الذي يتيح للمستخدم التحكم في عرض تدفق الإخراج على الشاشة.

خلفية

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

كان أحد أبرز إنجازات يونكس الرائدة هو مفهوم الأجهزة المجردة ، الذي ألغى حاجة البرنامج لمعرفة نوع الأجهزة التي يتواصل معها أو الاهتمام بها . كانت أنظمة التشغيل القديمة تفرض على المبرمج بنية سجلات، وغالبًا ما كانت دلالات البيانات والتحكم في الأجهزة غير متعامدة . تخلص يونكس من هذا التعقيد بمفهوم تدفق البيانات: وهو عبارة عن تسلسل مُرتب من بايتات البيانات التي يمكن قراءتها حتى نهاية الملف . كما يمكن للبرنامج كتابة البايتات حسب الحاجة، ولا يمكنه بسهولة تحديد عددها أو تجميعها.

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

بما أن نظام يونكس يوفر تدفقات قياسية، فقد كان من الضروري أن تدعم بيئة تشغيل لغة سي في يونكس هذه التدفقات أيضًا. ونتيجة لذلك، فإن معظم بيئات تشغيل لغة سي (واللغات المشتقة منها )، بغض النظر عن نظام التشغيل، توفر وظائف مكافئة.

المدخلات القياسية (stdin)

المدخلات القياسية هي عبارة عن دفق بيانات يقرأ منه البرنامج بيانات الإدخال. يطلب البرنامج نقل البيانات باستخدام عملية القراءة . لا تتطلب جميع البرامج مدخلات من الدفق. على سبيل المثال، قد يقبل برنامجا dir و ls (اللذان يعرضان أسماء الملفات الموجودة في دليل) وسائط سطر الأوامر ، لكنهما ينفذان عملياتهما دون أي مدخلات من بيانات الدفق.

ما لم يتم إعادة توجيهها ، فإن المدخلات القياسية تُورَث من العملية الأصلية. في حالة الصدفة التفاعلية، ترتبط هذه المدخلات عادةً بجهاز الإدخال الخاص بالطرفية (أو الطرفية الوهمية ) المرتبطة بدورها بلوحة مفاتيح المستخدم .

في أنظمة POSIX ، يكون مُعرِّف الملف للإدخال القياسي هو 0 (صفر)؛ تعريف POSIX<unistd.h> هو STDIN_FILENO; [ 2 ]<stdio.h> يتم توفير التجريد المقابل في لغة C عبر المتغير العام stdin(من النوع FILE*). وبالمثل في لغة C++ ، يوفر الكائن العام std::cin(من النوع std::istream) المُقدَّم في <iostream>، تجريدًا عبر تدفقات C++ . توجد تجريدات مماثلة في مكتبات الإدخال/الإخراج القياسية لجميع لغات البرمجة تقريبًا .

المخرجات القياسية (stdout)

المخرجات القياسية هي عبارة عن دفق يكتب إليه البرنامج بياناته. ويطلب البرنامج نقل البيانات مع عملية الكتابة . لا تُنتج جميع البرامج مخرجات. على سبيل المثال، لا يُصدر أمر إعادة تسمية الملف (الذي يُسمى أيضًا mv أو move أو ren ) أي إشارة عند نجاح العملية.

ما لم يتم إعادة توجيهها ، فإن المخرجات القياسية تُورَث من العملية الأصلية. في حالة الصدفة التفاعلية، عادةً ما تكون هذه العملية هي طرفية النصوص التي بدأت البرنامج.

مُعرّف الملف للإخراج القياسي هو 1 (واحد)؛ تعريف POSIX<unistd.h> هو STDOUT_FILENO؛ [ 2 ] المتغير C المقابل <stdio.h>هو stdout(من النوع FILE*؛ وبالمثل في C++ ، الكائن العام std::cout(من النوع std::ostream)، المقدم في <iostream>، يُجرّد دفق الإخراج.

الخطأ المعياري (stderr)

الخطأ القياسي هو مسار إخراج آخر تستخدمه البرامج عادةً لعرض رسائل الخطأ أو التشخيصات. وهو مسار مستقل عن الإخراج القياسي ويمكن إعادة توجيهه بشكل منفصل.

يحل هذا مشكلة شبه المسند ، مما يسمح بالتمييز بين المخرجات والأخطاء، وهو مشابه لدالة تُرجع زوجًا من القيم - انظر مشكلة شبه المسند §  الإرجاع متعدد القيم . الوجهة المعتادة هي طرفية النص التي بدأت البرنامج لتوفير أفضل فرصة للرؤية حتى لو تم إعادة توجيه المخرجات القياسية (وبالتالي لا يمكن ملاحظتها بسهولة). على سبيل المثال، يتم إعادة توجيه مخرجات برنامج في سلسلة من العمليات إلى مدخلات البرنامج التالي أو ملف نصي، لكن مطالبات المستخدم والأخطاء من كل برنامج لا تزال تذهب مباشرة إلى طرفية النص حتى يتمكن المستخدم من مراجعتها في الوقت الفعلي.

من المقبول والطبيعي توجيه كل من المخرجات القياسية والخطأ القياسي إلى نفس الوجهة، مثل شاشة العرض النصية. تظهر الرسائل بنفس ترتيب كتابتها في البرنامج، إلا في حالة استخدام التخزين المؤقت . على سبيل المثال، في الحالات الشائعة، يكون دفق الخطأ القياسي غير مُخزَّن مؤقتًا، بينما يكون دفق المخرجات القياسية مُخزَّنًا مؤقتًا سطريًا؛ في هذه الحالة، قد يظهر النص المكتوب إلى الخطأ القياسي لاحقًا على شاشة العرض النصية في وقت أبكر، إذا لم يكن مخزن دفق المخرجات القياسي ممتلئًا بعد.

يُعرّف معيار POSIX مُعرّف الملف للخطأ القياسي بالرمز 2 (اثنان)؛ ويُوفّر ملف الرأس < unistd.h> الرمز ; [ 2 ] والمتغير المقابل في لغة C هو (من النوع ). وبالمثل، تُوفّر لغة C++ كائنين عامين مرتبطين بهذا التدفق: و (كلاهما من النوع )، في ، حيث يكون الأول غير مُخزّن مؤقتًا، بينما يستخدم الثاني آلية التخزين المؤقت نفسها المُستخدمة في جميع تدفقات C++ الأخرى.STDERR_FILENO<stdio.h>stderrFILE*std::cerrstd::clogstd::ostream<iostream>

تسمح واجهات الأوامر من نمط بورن بإعادة توجيه الخطأ القياسي إلى نفس الوجهة التي يتم توجيه الإخراج القياسي إليها باستخدام

2 > & 1

تسمح صدفة الأوامر من نوع csh بإعادة توجيه الخطأ القياسي إلى نفس الوجهة التي يتم توجيه الإخراج القياسي إليها باستخدام

> &

أُضيف الخطأ القياسي إلى نظام يونكس في سبعينيات القرن العشرين بعد أن انتهت عدة عمليات طباعة ضوئية فاشلة بظهور رسائل الخطأ مطبوعة بدلاً من عرضها على شاشة المستخدم. [ 3 ]

الجدول الزمني

خمسينيات القرن العشرين: فورتران

يحتوي فورتران على ما يُعادل مُعرّفات الملفات في يونكس: فبحسب الاصطلاح، تستخدم العديد من تطبيقات فورتران أرقام الوحدات UNIT=5للمدخلات القياسية (stdin) UNIT=6والمخرجات القياسية (stdout) والأخطاء UNIT=0القياسية (stderr). [ 4 ] في فورتران 2003، ISO_FORTRAN_ENVتم توحيد الوحدة المضمنة لتشمل الثوابت المُسماة INPUT_UNIT، OUTPUT_UNITولتحديد ERROR_UNITأرقام الوحدات بشكل قابل للنقل. [ 5 ]

مثال على برنامج FORTRAN 77 الرئيسي: INTEGER NUMBER READ ( UNIT = 5 , * ) NUMBER WRITE ( UNIT = 6 , '(A,I3)' ) ' NUMBER IS: ' , NUMBER END
! برنامج مثال Fortran 2003 الرئيسي يستخدم iso_fortran_env ضمنيًا لا شيء عدد صحيح :: رقم اقرأ ( الوحدة = وحدة الإدخال ، * ) رقم اكتب ( الوحدة = وحدة الإخراج ، '(a,i3)' ) 'الرقم هو: ' ، رقم نهاية البرنامج

1960: ALGOL 60

تعرض برنامج ALGOL 60 لانتقادات بسبب عدم وجود وصول قياسي إلى الملفات.

1968: ALGOL 68

كانت مرافق الإدخال والإخراج في لغة ALGOL 68 تُعرف مجتمعةً باسم "التحويل". [ 6 ] قام كوستر بتنسيق تعريف معيار التحويل . تضمن النموذج ثلاث قنوات قياسية: stand in، stand out، و stand back.

مثال
# مثال ALGOL 68 # رئيسي:( عدد حقيقي؛ getf(stand in,($g$,number)); printf(($"العدد هو: "g(6,4)"OR "$,number)); # أو # putf(stand out,($" Number is: "g(6,4)"!"$,number)); سطر جديد (بارز) ) 
مدخل:الناتج:
3.14159
الرقم هو: +3.142 أو الرقم هو: +3.142!

1968: سيمولا

ومن الأمثلة الأخرى لغة البرمجة الكائنية التوجه. [ 7 ]

class BASICIO ( LINELENGTH ) ; integer LINELENGTH ; begin ref ( infile ) SYSIN ; ref ( infile ) procedure sysin ; sysin :- SYSIN ; ref ( printfle ) SYSOUT ; ref ( printfle ) procedure sysout ; sysout :- SYSOUT ;صنف ملف ....................; صنف ملف إدخال ............; صنف ملف إخراج ...........; صنف ملف مباشر ........; صنف ملف إخراج طباعة .......;SYSIN :- new infile ( " SYSIN " ) ; SYSOUT :- new printfle ( " SYSOUT " ) ; SYSIN . open ( blanks ( 80 ) ; SYSOUT . open ( blanks ( LINELENGTH ) ) ; inner ; SYSIN . close ; SYSOUT . close ; end BASICIO ;

سبعينيات القرن العشرين: لغة سي ونظام يونكس

في لغة البرمجة C ، تُربط مسارات الإدخال والإخراج والخطأ القياسية بمؤشرات الملفات الموجودة في نظام يونكس، وهي 0 و1 و2 على التوالي. [ 8 ] في بيئة POSIX، يُنصح باستخدام تعريفات < unistd.h > ، وهي STDIN_FILENO و STDOUT_FILENO و STDERR_FILENO، بدلاً من الأرقام الثابتة . كما تُوفّر مؤشرات الملفات stdin و stdout و stderr .

قام كين تومسون (مصمم ومطور نظام التشغيل يونكس الأصلي) بتعديل وظيفة الفرز في الإصدار الخامس من يونكس لقبول الرمز "-" كمدخل قياسي، وقد انتشر هذا التعديل إلى أدوات أخرى وأصبح جزءًا من نظام التشغيل كملف خاص في الإصدار الثامن . وكانت أدوات التشخيص جزءًا من المخرجات القياسية حتى الإصدار السادس ، وبعد ذلك ابتكر دينيس إم. ريتشي مفهوم الخطأ القياسي. [ 9 ]

التسعينيات: لغة C++، لغة Java

في لغة C++ ، كانت الكتابة إلى التدفقات القياسية تتم في الأصل باستخدام ملف <iostream>الرأس وتدفقاته، إلى أن تم إصدار <print>نسخة مبسطة من مكتبة C++ سهّلت عمليات الإدخال والإخراج باستخدام دوال الطباعة. [ 10 ] ترث C++ إمكانيات الإدخال والإخراج ، ولكن يُعتبر استخدام إمكانيات C++ الأحدث أكثر شيوعًا. [ 11 ]

#include <iostream> #include <string>باستخدام std :: cerr ؛ باستخدام std :: cin ؛ باستخدام std :: cout ؛ باستخدام std :: endl ؛ باستخدام std :: string ؛int main () { string input ; cout << "اكتب جملة: " << endl ; cin >> input ; int inputLength = input . length (); cout << "الجملة: " << input << "، بطول " << inputLength << endl ; cerr << "تمت كتابة الجملة إلى الخطأ القياسي: " << input << endl ; }

في لغة جافا ، يُشار إلى التدفقات القياسية بـ System.in(للمدخلات القياسية stdin)، System.outو(للمخرجات القياسية stdout)، و System.err(للخطأ القياسي stderr). [ 12 ] كما يُمكن القراءة من أي تدفق إدخال باستخدام Scanner.

package org.wikipedia.examples ;استيراد java.io.BufferedReader ؛ استيراد java.io.IOException ؛ استيراد java.io.InputStreamReader ؛public class Example { public static void main ( String args [] ) { try { BufferedReader br = new BufferedReader ( new InputStreamReader ( System . in )); String s = br . readLine (); double number = Double . parseDouble ( s ); System . out . printf ( "الرقم هو: %d%n" , number );// قراءة المدخلات للاسم والعمر: Scanner input = new Scanner ( System.in ) ; System.out.printf ( " %nأدخل الاسم: " ) ; String name = input.nextLine ( ) ; System.out.printf ( " % nأدخل العمر: " ) ; int age = input.nextInt ( ) ; System.out.printf ( " مرحباً ، %s! عمرك %d سنة.", name , age ) ; } catch ( IOException e ) { System.err.printf ( " خطأ في الإدخال / الإخراج : % s % n " , e.getMessage ( ) ) ; } catch ( Exception e ) { System.err.printf ( " خطأ : %s%n" , e.getMessage ()) ; } } }

العقد الأول من الألفية الثانية: .NET

في لغة C# ولغات .NET الأخرى ، يُشار إلى التدفقات القياسية بـ System.Console.In(للمدخلات القياسية stdin)، و System.Console.Out(للمخرجات القياسية stdout)، و System.Console.Error(للخطأ القياسي stderr). [ 13 ] كما يمكن الوصول إلى إمكانيات القراءة والكتابة الأساسية لتدفقات stdin وstdout مباشرةً من خلال الفئة System.Console(على سبيل المثال، System.Console.WriteLine()يمكن استخدامها بدلاً من System.Console.Out.WriteLine()).

System.Console.Inو هما على التوالي كائنات (stdin) و System.Console.Out( stdout, stderr)، والتي تسمح فقط بالوصول إلى التدفقات القياسية الأساسية على أساس نصي. يجب إجراء الوصول الثنائي الكامل إلى التدفقات القياسية من خلال الكائنات التي تُرجعها و على التوالي.System.Console.ErrorSystem.IO.TextReaderSystem.IO.TextWriterSystem.IO.StreamSystem.Console.OpenStandardInput()System.Console.OpenStandardOutput()System.Console.OpenStandardError()

namespace Wikipeda.Examples ;باستخدام النظام ؛public class Example { static int Main ( string [] args ) { try { string s = Console . In . ReadLine (); double number = Double . Parse ( s ); Console . Out . WriteLine ( "الرقم هو: {0:F3}" , number ); } // إذا أدى Parse() إلى استثناء catch ( ArgumentNullException e ) { Console . Error . WriteLine ( $"لم يتم إدخال رقم: {e.Message}" ); return 1 ; } catch ( FormatException e ) { Console . Error . WriteLine ( $"القيمة المحددة ليست رقمًا صالحًا: {e.Message}" ); return 2 ; } catch ( OverflowException e ) { Console . Error . WriteLine ( $"الرقم المحدد كبير جدًا: {e.Message}" ); return 3 ; } catch ( Exception ex ) { Console . Error . WriteLine ( $"حدث استثناء غير معروف: {e.Message}" ) ; return -1 ; } return 0 ; }
مثال فيجوال بيسك دوت نتPublic Function Main ( ) As Integer Try Dim s As String = System.Console . [ In ] .ReadLine ( ) Dim number As Double = Double.Parse ( s ) System.Console.Out.WriteLine ( " الرقم هو : { 0 : F3 } " , number ) Return 0إذا أطلقت الدالة Parse() استثناءً، فاستخدم الكود التالي: `Catch ex As System.ArgumentNullException System.Console. [ Error ] .WriteLine ( " لم يتم إدخال أي رقم ! " ) ` ، ` Catch ex2 As System.FormatException System.Console . [ Error ] .WriteLine ( " القيمة المُدخلة ليست رقمًا صالحًا !" ) ` ، ` Catch ex3 As System.OverflowException System.Console . [ Error ] .WriteLine ( " الرقم المُدخل كبير جدًا! " ) ` .إرجاع - 1 نهاية الدالة

عند تطبيق System.Diagnostics.Processالفئة، يمكن استخدام خصائصStandardInput المثيل ، StandardOutputو، و StandardErrorلتلك الفئة للوصول إلى التدفقات القياسية للعملية.

من عام 2000 فصاعدًا: بايثون، سي++

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

#!/usr/bin/env pythonاستيراد sysمن typing استورد TextIOإذا كان __name__ يساوي "__main__" :# احفظ مخرجات النظام الحالية (stdout) حتى نتمكن من استعادة مخرجات النظام (sys.stdout).# بعد إتمام عملية إعادة التوجيهstdin_fileno : TextIO = sys . com.stdinstdout_fileno : TextIO = sys . stdout# إعادة توجيه مخرجات sys.stdout إلى الملفsys.stdout : TextIO = open ( "myfile.txt" , " w " )ctr : int = 0for inps in stdin_fileno :ctrs : str = str ( ctr )# يطبع إلى مخرج stdout المعاد توجيهه ()sys.stdout.write ( f " { ctrs } " ) this is to the redirected ---> { inps } \ n " " )# يطبع إلى معالج الإخراج القياسي المحفوظ فعليًاstdout_fileno.write ( f " { ctrs } ") this is to the actual ---> { inps } \ n " " )ctr = ctr + 1ثم أغلق الملفsys.stdout.close ( )# استعادة sys.stdout إلى معالج الملفات المحفوظة القديمsys.stdout = stdout_fileno

في لغة C++23 ، تم إنشاء واجهة طباعة محدثة للكتابة إلى دفق الإخراج، باستخدام std::printالدوال. [ 14 ]

استيراد std ؛باستخدام std :: string ;int main () { string s = "Hello, world!" ; std :: println ( stdout , "My string: {}" , s ); std :: println ( stderr , "String to error stream: {}" , s ); }

واجهات المستخدم الرسومية

لا تستخدم واجهات المستخدم الرسومية (GUIs) دائمًا التدفقات القياسية؛ بل تستخدمها عندما تكون عبارة عن أغلفة لبرامج نصية أو برامج سطر أوامر، مثل واجهة مدير حزم Synaptic ، التي تغلف أوامر apt في Debian و/أو Ubuntu. أما واجهات المستخدم الرسومية المُنشأة باستخدام أدوات البرمجة النصية مثل Zenity وKDialog من مشروع KDE [ 15 ] فتستخدم stdin وstdout وstderr، وتعتمد على برامج نصية بسيطة بدلًا من واجهة مستخدم رسومية كاملة مُبرمجة ومُجمّعة بلغة C/C++ باستخدام Qt أو GTK أو أي إطار عمل مماثل للأدوات الاحتكارية.

تُشابه قائمة الخدمات ، كما هي مُطبقة في نظامي التشغيل NeXTSTEP و Mac OS X ، التدفقات القياسية. في هذه الأنظمة، يُمكن للتطبيقات الرسومية توفير وظائف من خلال قائمة على مستوى النظام تعمل على التحديد الحالي في واجهة المستخدم الرسومية، بغض النظر عن التطبيق المُستخدم.

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

يمكن لخادم GTK استخدام stdin كواجهة اتصال مع برنامج مُفسَّر لتحقيق واجهة مستخدم رسومية.

يقوم نموذج إدارة واجهة Common Lisp "بتقديم" عناصر واجهة المستخدم الرسومية المرسلة إلى دفق إخراج موسع.

انظر أيضاً

مراجع

  1. ريتشي، دينيس م. (أكتوبر 1984). "نظام إدخال وإخراج متدفق" (ملف PDF) . المجلة التقنية لمختبرات AT&T Bell . 68 (8): 1897-1910 .
  2. 1 2 3 ستيفنز، دبليو. ريتشارد ؛ راغو، ستيفن أ. (2013). البرمجة المتقدمة في بيئة يونكس ( الطبعة الثالثة). أديسون-ويسلي . ص 62. ISBN   978-0-321-63773-4تم الاطلاع عليه بتاريخ 13 يونيو 2026 .
  3. جونسون، ستيف (11 ديسمبر 2013). " [ TUHS ] Graphic Systems C/A/T phototypesetter" (قائمة بريدية). مؤرشف من الأصل في 25 سبتمبر 2020. تم الاطلاع عليه في 7 نوفمبر 2020 .
  4. فيلدمان، إس آي ؛ واينبرغر، بي جيه (أغسطس 1978). "مترجم فورتران 77 محمول" (ملف PDF) . دليل مبرمج يونكس . المجلد 2 ( الطبعة السابعة). مختبرات بيل (نُشر عام 1983). الصفحات 410، 415-416 . ISBN    0-03-061743-Xأُرشف من المصدر الأصلي بتاريخ 16 يونيو 2026. تم الاطلاع عليه بتاريخ 13 يونيو 2026 .{{cite book}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  5. ريد، جون (أبريل 2007). "الميزات الجديدة في فورتران 2003" . منتدى فورتران . 26 (1). SIGPLAN : 21. doi : 10.1145/1243413.1243415 .
  6. فان ويجنجاردن، أ . الأماكن القريبة : الأماكن القريبة : الأماكن القريبة : سينتزوف، م . ليندسي, CH ; الأماكن القريبة : فيسكر، تقرير RG المنقح عن اللغة الخوارزمية Algol 68 (PDF) (أبلغ عن). ثانية. 10.3.
  7. ^ دال، أولي-جوهان ؛ ميرهوغ، بيورن؛ نيجارد ، كريستين (1970). اللغة الأساسية المشتركة (PDF) (أبلغ عن). مركز الحوسبة النرويجي . ص. 11. مؤرشفة من الأصلي في 19 سبتمبر 2024 . تم الاسترجاع في 20 أغسطس 2025 . 
  8. "Stdin(3): Standard I/O streams - Linux man page" . die.net . مؤرشف من الأصل في 8 يونيو 2023. تم الاطلاع عليه في 13 يونيو 2026 .
  9. ماكيلروي، دكتور في الطب (1987). قارئ أبحاث يونكس: مقتطفات مشروحة من دليل المبرمج، 1971-1986 (ملف PDF) (تقرير فني). مختبرات بيل، قسم أبحاث الحوسبة والكيمياء. 139. مؤرشف (ملف PDF) من الأصل في 15 ديسمبر 2023.
  10. ^ ستروستروب، بيارن (1993). "تاريخ لغة C++: 1979-1991" (PDF) . دوى : 10.1145/154766.155375 .
  11. ستروستروب، بيارن (1997). لغة البرمجة سي++ ( الطبعة الثالثة). أديسون-ويسلي . الصفحات 637-640 . ISBN   0-201-88954-4.
  12. "النظام (منصة جافا SE 7)" . مركز مساعدة أوراكل . تم الاطلاع عليه بتاريخ 20 يوليو 2012 .
  13. ".NET Framework 4.7.1، mscorlib، console.cs" . المصدر المرجعي - مايكروسوفت . مؤرشف من الأصل بتاريخ 10 ديسمبر 2017. تم الاطلاع عليه بتاريخ 10 ديسمبر 2017 .
  14. زفيروفيتش، فيكتور (25 مارس 2022). مخرجات منسقة . open-std.org (تقرير). فريق العمل 21 .
  15. كيسلينغ، كريستيان (فبراير 2009). "إضافة عناصر رسومية إلى نصوصك البرمجية باستخدام زينيتي وكي ديالوج" . مجلة لينكس . العدد 99. ص. تم الاطلاع عليه بتاريخ 11 أبريل 2021 .  

للمزيد من القراءة