جوس
| النماذج | غير منظم ، إجرائي ، حتمي |
|---|---|
| عائلة | جوس |
| صمم بواسطة | كليف شو |
| المطور | مؤسسة راند |
| ظهرت لأول مرة | 1963 |
| نِطَاق | معجمي |
| لغة التنفيذ | لغة التجميع |
| منصة | جونياك ، PDP-6 |
| متأثر | |
| TELCOMP ، CAL ، FOCAL ، MUMPS | |

direct mode. لاحظ الفرق بين النقطة في نهاية البيانات وعلامة الوصل للضرب.كانت لغة البرمجة JOSS (اختصارًا لـ JOHNNIAC Open Shop System ) [a] واحدة من أولى لغات البرمجة التفاعلية التي تعتمد على تقاسم الوقت . وقد كانت رائدة في العديد من الميزات التي أصبحت شائعة في اللغات من الستينيات إلى الثمانينيات، بما في ذلك استخدام أرقام الأسطر كتعليمات تحرير وأهداف للفروع ، والعبارات التي تستند إلى قرارات منطقية ، ومحرر كود مصدر مدمج يمكنه تنفيذ التعليمات في الوضع المباشر أو الفوري، وهو ما أطلقوا عليه واجهة مستخدم محادثة .
تم تنفيذ JOSS في البداية على جهاز JOHNNIAC في شركة RAND وتم تشغيله على الإنترنت في عام 1963. وقد أثبت شعبيته الكبيرة، وسرعان ما أبطأ المستخدمون الجهاز. وبحلول عام 1964، تم البحث عن بديل يتمتع بأداء أعلى. تم إيقاف تشغيل JOHNNIAC في عام 1966 واستبداله بجهاز PDP-6 ، والذي نما في النهاية لدعم مئات من محطات الكمبيوتر المستندة إلى IBM Selectric . استخدمت المحطات الحبر الأخضر لإدخال المستخدم والأسود لاستجابة الكمبيوتر. أي أمر لم يتم فهمه يستدعي الاستجابة Eh?.
كان للنظام تأثير كبير، حيث أدى إلى ظهور مجموعة متنوعة من المنافذ والفروع. وظل بعضها مشابهًا للنظام الأصلي، مثل TELCOMP و STRINGCOMP و CAL وCITRAN وISIS وPIL/I و JEAN ( سلسلة ICT 1900 ) وAlgebraic Interpretive Dialogue (AID، على PDP-10 ). وتطورت أنظمة أخرى، مثل FOCAL و MUMPS ، في اتجاهات مميزة. كما أن JOSS يشبه إلى حد كبير مفسرات BASIC الموجودة على أجهزة الكمبيوتر الصغيرة في الثمانينيات، وتختلف بشكل أساسي في تفاصيل بناء الجملة .
تاريخ
الفكرة الأولية
في عام 1959، كتب ويليس وير مذكرة إلى مؤسسة راند حول موضوع الحوسبة، حيث ذكر أن أجهزة الكمبيوتر المستقبلية ستحتوي على "عدد كبير من محطات الإدخال والإخراج الشخصية، بحيث يمكن للعديد من الأشخاص التفاعل مع الجهاز في نفس الوقت". [2] اكتسبت المذكرة اهتمام القوات الجوية الأمريكية ، الرعاة الأساسيين لمؤسسة راند، وفي عام 1960، شكلوا مشروع معالج المعلومات لاستكشاف هذا المفهوم، والذي سيُعرف قريبًا باسم تقاسم الوقت . لم يكن المشروع يتعلق على وجه التحديد بتقاسم الوقت، بل كان يهدف إلى تحسين التفاعل بين الإنسان والحاسوب بشكل عام. كانت الفكرة في ذلك الوقت هي أن التفاعل المستمر بين المستخدم والحاسوب بطريقة ذهابًا وإيابًا من شأنه أن يجعل مثل هذه التفاعلات أكثر طبيعية. [2] كما قال مدير مؤسسة راند كيث أونكافر لاحقًا:
كان هناك تصوران أعتقد أنهما كانا وراء التجربة. الأول هو أنه منذ عام 1950 على الأقل، عندما انضممت إلى راند، كان هناك دائمًا تركيز في قسم علوم الكمبيوتر في راند على التفاعل السلس مع المستخدم. لقد تم بناؤه ببساطة فينا. لقد تعلمناه من جونينج ... كل ما فكرنا فيه. والثاني هو رؤية علماء الرياضيات يكافحون مع آلات حاسبة مارشانت، وعدم قدرتهم على استخدام JOHNNIAC في شكله الخام. كان الأمر صعبًا للغاية. كان عليهم أن يتعلموا كيف يصبحون مبرمجين. كانت مجرد تجربة محبطة بالنسبة لهم. أردنا شيئًا يبدو لهم كطريقة طبيعية للتفكير في مساعدة لحل مشاكلهم دون الكثير من التدريب، ودون أي تصور ليصبحوا مبرمجين، لأن هذا كان سيبعدهم. [3]
تم قبول اقتراح رسمي لتطوير ما أصبح JOSS على جهاز الكمبيوتر JOHNNIAC في مارس 1961. [2]
جوس-1
تم تنفيذ JOSS بالكامل تقريبًا بواسطة J. Clifford Shaw ، وهو عالم رياضيات عمل في قسم الحوسبة المتنامي في Rand. وقد تم كتابته بلغة تجميع رمزية تسمى EasyFox (E وF في الأبجدية الصوتية للجيش الأمريكي آنذاك)، والتي طورها Shaw أيضًا. [4]
تم طرح نظام JOSS رسميًا لأول مرة في مايو 1963، حيث كان يدعم خمس وحدات تحكم، واحدة في غرفة الآلات وأربع وحدات أخرى في المكاتب المحيطة بالمبنى. [5] كانت وحدات التحكم المبكرة تعتمد على آلة كاتبة IBM Model 868 Transmitting Typewriter، حيث لم يتم طرح Selectric في السوق بعد عندما بدأ التطوير. [6] نُشر الجدول الزمني الأول في 17 يونيو، مع تشغيل JOSS لمدة ثلاث ساعات من الساعة 9 صباحًا حتى 12 كل يوم. [7] تم الإعلان عن تشغيله بالكامل على ثمانية محطات في يناير 1964. [1] تم نشر الإصدار النهائي في يناير 1965. [8]
بحلول هذا الوقت، كان عمر جهاز JOHNNIAC قد تجاوز العقد من الزمان، ولم يكن منطقه القائم على الأنابيب موثوقًا به على الإطلاق في البداية. وحتى عندما كان يعمل بشكل جيد، أصبح النظام شائعًا للغاية لدرجة أنه سرعان ما توقف عن العمل. كان المستخدمون متحمسين، وذكر أحدهم:
يضبط الناس حياتهم لتتلاءم مع جوس... لا فائدة من القدوم إلى RAND قبل الساعة 10:00 صباحًا عندما يصل جوس، في الواقع الظهر أو بعد الساعة 5:00 مساءً هو وقت أفضل، حيث يكون جوس أقل انشغالًا. عندما يبدأ جوس في كتابة الإجابات، فإن المتعة المثيرة لا تعادل سوى الألم الذي يليه عندما يتوقف جوس عن الكلام [ كذا ] أو يرحل ويوصي برمزك إلى النسيان. بالكاد يمكننا العيش مع جوس، لكننا لا نستطيع العيش بدونه. [9]
وقال آخر بشكل أكثر إيجازا:
إنه أفضل من البيرة - لقد أصبحنا مدمنين عليه. [1]
التحول إلى JOSS-2
في مايو 1964، تم اتخاذ القرار بالبحث عن جهاز جديد ليحل محل JOHNNIAC وتخصيصه بالكامل لتشغيل نسخة موسعة من JOSS. وكان لابد أن يدعم الجهاز أيضًا محطات جديدة مصنوعة وفقًا لمواصفات Rand، وأن يتم تسليمه بحلول 31 أكتوبر 1965. [7]
تم استلام تسعة عروض لشراء الآلة الجديدة. فازت شركة Digital Equipment Corporation (DEC) بالمسابقة بنظام PDP-6 الجديد ، وتم إصدار تمويل القوات الجوية للشراء. كما وافقت شركة Digital Equipment Corporation على بناء ثلاثين محطة تعتمد على آلة كاتبة IBM Selectric المعدلة بآلية خاصة للتقدم إلى الصفحة التالية في تغذية الورق القابلة للطي. تم تسليم العديد من الأجزاء الأخرى من النظام الإجمالي من شركات أخرى. [10]
وصل جهاز PDP-6 في أواخر يوليو 1965، وتم اختباره في البداية باستخدام أجهزة Teletype Model 33 كأجهزة طرفية. تم تطوير الإصدار الجديد من الكود بواسطة تشارلز إل. بيكر وجوزيف دبليو سميث وإيروين دي. جرينوالد وجي إدوارد برايان. تم الإعلان عن تشغيل النظام لأول مرة في أكتوبر، على الرغم من أن هذا تضمن ست ساعات من الصيانة المجدولة أسبوعيًا. [11] وصل النموذج الأولي الأول للجهاز في نوفمبر. في ديسمبر، تم توصيل جهاز طرفي في لاس فيجاس بالجهاز عن بُعد لأول مرة. [10] في فبراير 1966، تم إرساله إلى قاعدة ماكليلان الجوية ، تلا ذلك جهاز طرفي في أغسطس إلى أكاديمية القوات الجوية واثنان في سبتمبر إلى وكالة مشاريع البحوث المتقدمة ومكتب القوات الجوية في البنتاغون . تم تركيب أول اتصال دائم بجهاز Teletype خارج الموقع لجهاز Teletype Model 35 في قاعدة لانجلي الجوية في فبراير 1967. [11]
مع تشغيل الآلة الجديدة، تم إيقاف تشغيل JOHNNIAC في 11 فبراير 1966، وتم إيقاف تشغيله رسميًا في 18 فبراير. تم كتابة آخر برنامج تشغيل له بلغة JOSS وكان يعد الثواني حتى يتم إيقاف تشغيله. تم إرسال الآلة إلى متحف مقاطعة لوس أنجلوس ، [12] وانتهى بها الأمر في النهاية في متحف تاريخ الكمبيوتر خارج سان فرانسيسكو . [13] بعد استبداله بنظام JOSS-2، عُرف النظام الأصلي بأثر رجعي باسم JOSS-1. [14]
استخدام JOSS-2
بحلول نهاية عام 1966، كان نظام JOSS-2 الجديد يعمل بكامل طاقته وتم تسليمه لاستخدام JOSS على مدار الساعة طوال أيام الأسبوع. قدم الجهاز الجديد حوالي 30 ضعف السرعة الحسابية، وخمسة أضعاف مساحة التخزين لكل مستخدم، والعديد من الميزات الجديدة في اللغة نفسها. [15] [1] يمكن للمنصة الجديدة في النهاية دعم ما يصل إلى 100 محطة في الاستخدام المتزامن. [16] ظلت القوات الجوية مالكة للنظام، مع عمل راند وآخرين كمستشارين. تم محاسبة وقت وحدة المعالجة المركزية للمستخدمين الخارجيين بمعدل حوالي 1 دولار في الدقيقة، على الرغم من أن ذلك كان فقط أثناء التنفيذ الفعلي، وكان الوقت المستغرق في الكتابة والطباعة مجانيًا. [17]
بحلول عام 1970، كان هناك ما بين 500 و600 مستخدم في راند ومواقع مختلفة للقوات الجوية في جميع أنحاء البلاد. [18] كان العديد من هؤلاء مستخدمين عرضيين، وهو بالضبط ما كان النظام مخصصًا له. لدعمهم، تم تجهيز المحطات المخصصة بـ "مقابس JOSS" خاصة حتى يمكن نقلها من مكتب إلى آخر وتوصيلها بمنافذ مخصصة. تم تركيب مائتي قابس حول راند، وتم تصميم هيكل المحطة ليكون ضيقًا بما يكفي ليتناسب مع الأبواب مع ترك مساحة للقهوة على جانب واحد. [19] أدى تبديل مفتاح الطاقة في المحطة إلى توصيلها بالموقع الجديد. [16]
تم تصميم المحطات الطرفية المخصصة لشركة JOSS لأن المهندسين شعروا أن "وظائف الاتصالات عن بعد في الطراز 33 هي لغز للشخص غير المدرب" وستكون مربكة للغاية بحيث لا يكلف المستخدمون العرضيون أنفسهم عناء تعلمها. [20] في الممارسة العملية، أثبتت الآليات القائمة على Selectric أنها هشة للغاية للاستخدام المستمر الذي رأوه وكان يتم إصلاحها بشكل متكرر في الميدان من قبل أفراد خدمة IBM. في عام 1970، تم إعادة بناء ثلث المحطات الطرفية بالكامل، وتباطأ إنتاج الكمبيوتر لتحسين الموثوقية. بحلول هذا الوقت، قررت القوات الجوية استخدام الطراز 35 بدلاً من ذلك، لأنه كان متاحًا بسهولة وأقل تكلفة بكثير. [21] [11]
كان العملاء متحمسين ولخدمتهم، بدأت راند في نشر نشرة JOSS الإخبارية ، التي حررتها شيرلي ماركس. وفي النهاية، تم نشر 44 إصدارًا بين نوفمبر 1967 ويونيو 1971. [22]
جوس-3
في أوائل سبعينيات القرن العشرين، قام المبرمجون في أحد مرافق IBM على الساحل الغربي ببناء JOSS-3 لجهاز IBM 370/158 الذي يعمل بنظام OS/360 . لا توجد معلومات كثيرة عن هذا النظام، باستثناء أن JOSS تم إيقافه أخيرًا على هذا الجهاز. [23] وفقًا لملاحظة في لمحة عامة تاريخية، كانت شركة Rand مترددة في السماح لشركة IBM باستخدام اسم JOSS، ونتيجة لذلك "لم يتم استخدام إصدار IBM على نطاق واسع أبدًا". [24]
تطبيق

تم تقسيم JOSS-II على PDP-6 إلى قسمين، بما يتوافق مع تخطيط الذاكرة الداخلية للجهاز. تم تجهيز الجهاز ببنكين من الذاكرة الأساسية ، مع 16 ألف كلمة 36 بت في كل بنك. استخدم نظام JOSS نفسه، والذي تضمن نظام التشغيل ، ورمز إدارة المستخدم والملفات، ومعالج المحطة الطرفية والمترجم، الكثير من أول هذه البنوك. تم استخدام البنك الثاني لبرامج المستخدم. على الرغم من أن هذه كانت كمية كبيرة نسبيًا من الذاكرة في ذلك العصر، إلا أن النظام كان مستخدمًا بكثافة لدرجة أن مخزن المستخدم الذي يبلغ 16 ألف كلمة لم يكن كافيًا، وتم نسخه احتياطيًا بأسطوانة مغناطيسية لدعم الترحيل . [16] تم تشغيل الأسطوانة بواسطة أجهزة خارجية ولم تتطلب اهتمامًا من المعالج الرئيسي. [25]
من أجل دعم برامج المستخدم المتعددة، تم تعديل أجهزة PDP-6 لفحص البت 20 لأي مرجع عنوان. إذا تم تعيين هذا البت، فإن العنوان يكون في "مساحة المستخدم" وتم تعديله بحيث يشير العنوان صفر إلى العنوان الأساسي لذلك المستخدم. بهذه الطريقة، يمكن نقل برامج المستخدم في الذاكرة دون التسبب في مشاكل للنظام، ويمكن لنظام التشغيل التبديل من مستخدم إلى مستخدم ببساطة عن طريق تغيير سجل داخلي واحد. [16]
تم توفير التخزين الدائم بواسطة محرك أقراص ثابت من منتجات التخزين بسعة تخزين 5.7 مليون كلمة. مثل الأسطوانة، تم التعامل مع الإدخال/الإخراج الفعلي من الأسطوانة وإليها خارجيًا، على الرغم من أنه في هذه الحالة تم تشغيل الحركة من خلال تصرفات المستخدم لتحميل وتخزين برامجه. تم استخدام محرك شريط متوافق مع IBM لنقل البيانات من وإلى المحرك حسب الحاجة، وهي عملية كانت أيضًا مستقلة عن وحدة المعالجة المركزية. كانت وحدتا DECtape متاحتين أيضًا وعملتا بنفس طريقة محرك IBM. [26] كانت برامج العرض التوضيحي متاحة، مثل حاسبة الرهن العقاري وألعاب الحاسوب المركزي المبكرة . [27] نظرًا لأن البرامج الكبيرة تسببت في الترقيم الذي أبطأ الكمبيوتر للجميع، فقد طلبت نشرة JOSS الإخبارية غالبًا من المستخدمين استخدام مساحة تخزين أقل. [28]
تم التعامل مع المحطات الطرفية من خلال "مركز" مخصص يتكون من مفتاح ميكانيكي من نوع Strowger يمكنه توصيل أي من 300 إلى 400 موصل طرفي محتمل بأي من 40 مخرجًا. تم تخصيص ثمانية خطوط أخرى لمدخلات طراز Teletype Model 33 ، على عكس Selectrics على غرار JOSS. تم بعد ذلك توصيل هذه الخطوط الـ 48 بمجمع إلكتروني متصل بوحدة المعالجة المركزية. تم تشغيل المجمع عن طريق المقاطعة ، مما يعني أن المحطات الطرفية الخاملة لم تستخدم أي دورات. [26]
تم بناء محطات JOSS المخصصة بواسطة DEC. تتكون هذه من آلية Selectric مدمجة في هيكل مخصص يحتوي على نظام الاتصالات ومصدر الطاقة ومكونات أخرى. تم استخدام كرة خط مخصصة لتوفير رموز رياضية أساسية مثل ≠ حتى لا يكون من الضروري استخدام مجموعات مكونة من حرفين مثل <>. كان نظام الاتصالات يعتمد على رمز حرف مكون من 6 بتات في حزمة مكونة من 8 بتات مع بتات بداية وإيقاف. تم تشغيل الخطوط بسرعة 120 بت/ثانية لتتناسب مع أقصى سرعة 15 حرفًا في الثانية لآلية Selectric. تم استخدام أكواد التحويل للداخل والخارج لتحريك الشريط من الأخضر إلى الأسود والعكس. لاحظ نظام الاتصالات أيضًا هذه الرموز وأضاءت الأضواء المتغيرة على اللوحة الأمامية للإشارة إلى ما إذا كان الكمبيوتر أو المستخدم لديه سيطرة على المحطة في تلك اللحظة. [29]
لغة
لقد أكد برنامج JOSS على سهولة الاستخدام لدرجة أن عبارة "مثل برنامج JOSS" أصبحت وصفًا لمستخدم جديد يتفاعل مع نظام تقاسم الوقت. قال الأطفال وغيرهم إنه على عكس الكمبيوتر "المعقد"، كان برنامج JOSS "ودودًا" و"لطيفًا" مثل "شخص حقيقي يتمتع بروح الدعابة"، مع ردود مضحكة مثل Eh?. [30]
الوضع المباشر والوضع غير المباشر
قدمت شركة جوس فكرة محرر سطر أوامر واحد يعمل كلغة تفاعلية ومحرر برامج. يتم تنفيذ الأوامر التي تتم كتابتها دون رقم سطر على الفور، في ما أشارت إليه شركة جوس باسم " الوضع المباشر ". إذا تم وضع بادئة رقم سطر على نفس السطر، يتم نسخه بدلاً من ذلك إلى منطقة تخزين كود البرنامج، والتي أطلقت عليها شركة جوس اسم "الوضع غير المباشر". تتم إضافة أسطر جديدة إلى البرنامج إذا كان رقم السطر فريدًا، أو استبدال الأسطر الموجودة بنفس الرقم، أو إزالتها من البرنامج إذا تم كتابة رقم سطر موجود دون وجود كود يتبعه. [31]
على النقيض من معظم لغات البرمجة الأساسية، فإن لغة برمجة جوس تحفظ مدخلات المستخدم بالكامل في ملفات، وليس فقط كود البرنامج. وعند التحميل، تقوم لغة برمجة جوس بكتابة الأسطر مرة أخرى. وهذا يعني أن ملفات البرنامج يمكن أن تحتوي على كل من عبارات البرنامج وتعليمات الوضع المباشر. على سبيل المثال، كان من الشائع رؤية برامج تسرد أسطر العبارات ثم ينتهي الملف بـ Go.لتشغيل البرنامج فورًا بمجرد اكتمال التحميل. كانت هناك بعض الميزات التي لا يمكن استخدامها إلا في الوضع المباشر، مثل Letو Form، والتي تم إدخالها بدون أرقام الأسطر ولكنها لا تزال تعود عند تحميل البرنامج. [32]
يمكن خلط التعليمات المباشرة وغير المباشرة بحرية في مساحة العمل. سمح هذا بإدراج التعليقات في الكود المصدر عن طريق إضافة أسطر مباشرة تبدأ بـ *، [33] أو عن طريق وضع تعليق في نهاية سطر من الكود ثم إضافة تعليق بعده. تم تجاهل الأسطر الفارغة أيضًا، مما يسمح بتقسيم البرنامج من أجل الوضوح. [34]
بيانات البرنامج
يجب أن يبدأ كل سطر في برنامج JOSS برقم سطر. أرقام الأسطر هي أرقام ثابتة تتكون من عددين صحيحين مكونين من رقمين مفصولين بنقطة. كما هو الحال في BASIC، تُستخدم أرقام الأسطر كعلامات للاستهداف من Toوعبارات Do، ولدعم التحرير. يؤدي إدخال سطر من التعليمات البرمجية برقم سطر جديد إلى إدراجه في برنامج، بينما يؤدي إدخال سطر برقم سطر موجود إلى استبدال الإصدار السابق أو حذفه إذا كان فارغًا.
يُطلق على الجزء من رقم السطر الموجود على يسار النقطة اسم الصفحة أو الجزء ، بينما يُطلق على الجزء الموجود على اليمين اسم السطر . وبالتالي يشير رقم السطر 10.12إلى الصفحة 10 والسطر 12. يمكن للفروع استهداف صفحة أو سطر داخل صفحة. عند استخدام التنسيق اللاحق، يُطلق على الصفحة والسطر المدمجين اسم الخطوة .
تُستخدم الصفحات لتحديد البرامج الفرعية ، والتي تعود عندما يكون السطر التالي في صفحة مختلفة. على سبيل المثال، إذا كان برنامج فرعي لحساب الجذر التربيعي لرقم موجودًا في الصفحة 3، فقد يكون لدينا ثلاثة أسطر من التعليمات البرمجية 3.1 و3.2 و3.3، وسيتم استدعاؤها باستخدام Do part 3.التعليمات البرمجية ستعود إلى العبارة بعد Do عندما تصل إلى السطر التالي في صفحة مختلفة، على سبيل المثال، 4.1. لا توجد حاجة لما يعادل a RETURNفي النهاية، على الرغم من أنه إذا كان مطلوبًا إرجاع مبكر، Doneفإنه يحقق ذلك.
يجب أن يبدأ كل سطر بكلمة مفتاحية للأمر تتبع رقم السطر. لا يوجد مفهوم للأمر الافتراضي كما هو الحال في لغة BASIC مع LETبيانها الاختياري. يمكن وضع بيانات متعددة في سطر واحد، مفصولة بفواصل منقوطة أو نقطتين. يجب أن ينتهي كل سطر بنقطة.
الحلقات والشروط
تستخدم لغة JOSS تدوين البادئة للإشارة إلى التقييم الشرطي، "افعل هذا إذا كان هذا صحيحًا"، على النقيض من معظم اللغات التي تضع الشرط أمام تدوين البادئة، "إذا كان هذا صحيحًا، فافعل هذا". على عكس FORTRAN أو FOCAL ، يمكن تقييم أي بيان شرطيًا بهذه الطريقة. على سبيل المثال، لطباعة سلسلة فقط إذا تم استيفاء شرط، يمكن للمرء الجمع بين if مع Type:
1.1 اكتب "مرحبا بالعالم!" إذا كان X=5.
دعمت لغة JOSS ستة مقارنات بين البادئات =، و ≠، ≥و، ≤و، >و <، والمشغلات المنطقية or، andو، و not. [35]
تم التعامل مع الحلقات بطريقة مماثلة، باستخدام Forالأمر وتنسيق غامض إلى حد ما لتحديد حدود الحلقة وقيمة الخطوة، start(step)end. على سبيل المثال، للانتقال من 1 إلى 10 بمقدار 2، يكون التنسيق هو 1(2)10. مثل If، Forيمكن تطبيقه على أي بيان آخر:
1.2 اكتب "مرحبًا، ويكيبيديا!" لـ i=1(2)10.
لاحظ أن for ينطبق فقط على عبارة واحدة؛ إذا أراد المرء تشغيل عبارات متعددة في حلقة، فسيتم فصلها إلى جزء آخر واستدعاؤها باستخدام do:
1.3 قم بالجزء الخامس لـ i=1(1)100. 5.1 اكتب "مرحبا، ويكيبيديا!". 5.2 اكتب "هذا هو JOSS".
كما هو الحال في BASIC، يمكن لأي من المدخلات إلى حلقة for أن تكون ثوابت أو متغيرات أو تعبيرات أخرى.
نظرًا لأن هذه الأنواع من النطاقات يمكن تطبيقها على أي سطر من التعليمات البرمجية، فقد كان من الممكن تحديد الحدود والحلقات عند استدعاء البرنامج. على سبيل المثال، ضع في اعتبارك البرنامج:
1.1 النوع X.
عادةً إذا تم استدعاء هذا بطريقة مشابهة لـ BASIC RUN:
افعل الجزء الأول.
سوف ينتج:
0
ومع ذلك، يمكنك تعديل هذا السلوك عن طريق إضافة بنية حلقة إلى الاستدعاء:
قم بالجزء الأول لـ X = 1(1)5.
والتي من شأنها أن تنتج:
1 2 3 4 5
يتيح هذا إنشاء الصيغ في البرامج دون الحاجة إلى وضعها داخل حلقات. يمكن للمستخدم توفير الحلقات، إذا رغب في ذلك، عند بدء تشغيل البرنامج.
التعابير والقضايا
كانت إحدى السمات الفريدة للغة JOSS هي تعاملها مع التعبيرات المنطقية. تقدم معظم لغات الكمبيوتر بعض الطرق لتشكيل تعبير رياضي متعدد الأجزاء، على سبيل المثال، Set x=(1+2)·3.والذي يضبط المتغير x على القيمة 9. توسعت لغة JOSS في هذا المفهوم من خلال تعريف مفهوم "الاقتراح" بوضوح، وهو تعبير يعيد قيمة منطقية، سواء كانت صحيحة أو خاطئة، بدلاً من القيمة العددية. شوهدت في الغالب في Ifالعبارات، كما في الأمثلة أعلاه، ولكن يمكن أيضًا تخزين القيمة المنطقية في متغير مباشرةً، [36] أو يمكن للمرء تحويل القيمة الصحيحة إلى 1 والقيمة الخاطئة إلى 0 باستخدام tvدالة (قيمة الحقيقة). [37]
بالإضافة إلى المقترحات، كان لدى JOSS أيضًا مفهوم "التعبيرات الشرطية". تتكون هذه من سلاسل من المقترحات جنبًا إلى جنب مع التعليمات البرمجية التي سيتم تشغيلها إذا كانت هذه المقترحات صحيحة. سمح هذا بكتابة أشجار القرار متعددة الخطوات في سطر واحد. إنها تخدم غرضًا مشابهًا للمشغل الثلاثي الموجود في اللغات الحديثة مثل C أو Java ، حيث تُستخدم لإرجاع قيمة من بنية مضغوطة تنفذ if-then-else . تحتوي نسخة JOSS على أي عدد من الشروط، وليس ثلاثة فقط، لذا فهي عبارة عن عبارة تبديل مضغوطة أكثر من عبارة if-then مضغوطة. [38]
يعيد هذا المثال إنشاء دالة الدالة sgn: [39]
دع s(x)=[x=0:0; x>0:1; x<0:-1].
يحدد هذا دالة "s" تأخذ معلمة واحدة، "x"، وتجري ثلاثة اختبارات متتالية عليها. أيهما ينجح أولاً يعيد القيمة المقابلة بعد النقطتين. [40]
النطاقات
كانت إحدى الميزات المتقدمة الأخرى في لغة JOSS هي أنها كانت تتضمن مفهوم النطاق كنوع مدمج يمكن تخزينه ومعالجته. عادةً ما يتم العثور على النطاقات كمدخلات لحلقات for ، حيث تكون جزءًا من بناء جملة الحلقة نفسها. على سبيل المثال، في لغة BASIC، يكتب المرء حلقة for باستخدام بناء الجملة الأساسي هذا:
بالنسبة إلى I = 1 إلى 5 الخطوة 2
سيؤدي هذا إلى تنفيذ حلقة تقوم بتعيين القيم 1، 3، 5 ثم الخروج.
استخدمت لغة برمجة JOSS تنسيقًا غامضًا إلى حد ما لتحديد حدود الحلقة. سيكون الكود المكافئ في لغة برمجة JOSS هو:
أنا=1(2)5
لاحظ أن هذا الكود لا يتضمن for. وذلك لأن النطاقات في JOSS هي مواطنون من الدرجة الأولى للغة، وليست شيئًا يشكل جزءًا من حلقة كما في BASIC. يمكن تعريف النطاقات واستخدامها في العديد من السياقات خارج الحلقات. على سبيل المثال، إليك تعبير شرطي يقيم عاملي المعلمة x: [38]
ليكن f(x)=[x=0:1؛ fp(x)=0:prod(i=1(1)x:i)].
في هذا المثال، هناك اقتراحان رئيسيان، يفصل بينهما الفاصلة المنقوطة. الأول، على اليسار، ينص على أنه إذا كان المعامل x يساوي 0، فيجب أن يعيد الشرط 1 على الفور. إذا فشل هذا الاقتراح، فإنه ينتقل إلى الاختبار الثاني، على اليمين. يتحقق هذا الاختبار مما إذا كان الجزء الكسري من x يساوي صفرًا (أي أنه عدد صحيح)، وإذا كان الأمر كذلك، فإنه يستدعي الدالة prodلضرب نطاق من القيم. prodمعامل 's هو أيضًا اقتراح، ولكن في هذه الحالة، يتم استبدال الاختبار بمكرر حلقة يعمل من 1 إلى x متدرجًا بمقدار 1. إذا كان هذا الاقتراح صحيحًا، وهو صحيح بالنسبة لجميع قيم الحلقة، فإنه يعيد الفهرس i. يتسبب هذا في إرسال سلسلة من القيم prodمن 1 إلى x. [38]
إن الجمع بين هذه الميزات يسمح بكتابة وظائف معقدة في بضعة أوامر. لم يصبح هذا النوع من الوظائف شائعًا إلا في اللغات الأكثر حداثة، والتي تستخدم عادةً متكررات أو دالة خريطة لتوفير نفس النتائج. إن قدرة JOSS على الجمع بين القرارات والحلقات في شكل مضغوط غير معروفة في لغات أخرى من ذلك العصر، بما في ذلك الفروع مثل FOCAL.
الأوامر
تعيين
يقوم الأمر Setبتعيين نتائج تعبير إلى المتغير المحدد. وهو ما يعادل الأمر . في لغة BASIC LET.
01.30 مجموعة ص=3.14156. 01.60 تعيين i=l*(r/100)*t.
Setكان اختياريًا عند استخدامه في الوضع المباشر، حيث يمكن للمرء الكتابة x=5.دون استخدام أمر Set. لم يكن هذا مسموحًا به في الوضع غير المباشر، على عكس لغة BASIC. [41]
يترك
Letتم استخدامه لتحديد الوظائف التي يحددها المستخدم. [42] مكافئ لـ BASIC DEF FN. [33]
ليكن t(x)=sin(x)/cos(x). مجموعة j=t(1.1). النوع ج.
Letيمكن أيضًا استخدامها لتعيين قيمة متغير باستخدام صيغة تتكون من ثابت:
ليكن x=5.
من هذه النقطة، يمكن استخدامه بشكل مماثل للذي تم إنشاؤه باستخدام Set. ومع ذلك، هناك فرق دقيق، عندما يتم الرجوع إلى هذا X في الكود، سيتم حساب القيمة عن طريق تقييم الجانب الأيمن. Setيتم تقييم A مرة واحدة فقط، لذا فهو أسرع كثيرًا. [43]
يقترح النظام بشكل عام استخدام هذه Letالأوامر في الوضع المباشر فقط، وحفظها للاستخدام في برنامج ما عن طريق إدخالها في أعلى أو أسفل الملف. وقد أدى هذا إلى تجنب استدعائها Letعدة مرات أثناء التنفيذ، حيث سيتم استدعاؤها مرة واحدة فقط أثناء عملية التحميل. [44]
يطلب
يأخذ Demandقائمة من المتغيرات ويخزن إدخال المستخدم في المتغيرات. asأضاف المؤهل الاختياري موجهًا مخصصًا. مكافئ لـ . في لغة BASIC INPUT.
01.01 اكتب "ما هو عمرك؟". 01.02 الطلب أ. 01.03 نوع "أنت"، أ. 01.04 اطلب من H أن يقول "ما هو طولك؟". 01.05 نوع H، "؟ هذا طويل القامة؟".
يكتب
يقوم الأمر Typeبإخراج عنصر واحد أو أكثر مفصولاً بفواصل. في شكله الأساسي، يكون معادلاً لـ . في لغة BASIC PRINT. ومع ذلك، Typeيتضمن عددًا من الأشكال الاختيارية التي تجعله مثقلًا للغاية، حيث يؤدي مجموعة من مهام الإخراج غير ذات الصلة. [45]
عند استخدامها لطباعة القيم، يمكن أن تكون المعلمات عبارة عن متغيرات، وسلاسل نصية محاطة بعلامات اقتباس مزدوجة، والحرف الخاص _الذي ينتج سطرًا. [46] Type كما تدعم أيضًا الإخراج المنسق باستخدام سلاسل التنسيق. راجع القسم Formأدناه للحصول على التفاصيل. [45]
يُستخدم النوع أيضًا كمعادل LISTلبيان BASIC، حيث يكتب البرنامج. على سبيل المثال، Type step 1.1.سيطبع سطرًا واحدًا من التعليمات البرمجية، بينما Type part 1.سيطبع الجزء بالكامل، Type all.ويطبع البرنامج بالكامل. [45]
علاوة على ذلك، يمكن استخدامه أيضًا لطباعة قوائم القيم الداخلية. Type all values.ينتج قائمة بجميع المتغيرات وقيمها، بينما Type size.يطبع حجم البرنامج. تتضمن الكلمات الأساسية sizeو timeو users. [45]
صفحة
Pageيؤدي ذلك إلى تشغيل تغذية الصفحة على محطات JOSS الخاصة. [36] عادةً ما ترسل JOSS تغذية الصفحة عندما تصل المحطة إلى السطر 54 على الورقة، لذلك إذا أراد المرء التأكد من عدم تقسيم كتلة البيانات إلى نصفين، فيمكنه: [47]
1.10 الصفحة إذا كانت $>44.
$هو متغير وهمي يعيد رقم السطر الحالي. [47]
خط
Lineيؤدي إلى تشغيل تغذية خطية على محطات JOSS الخاصة. [36]
ل
يقفز الأمر Toبتنفيذ البرنامج إلى الجزء المحدد أو رقم الخطوة، باستخدام To part 1.أو To step 1.1.على التوالي. [48] وهو يعادل . في لغة BASIC GOTO. على النقيض من Go، وهو أمر غير مباشر يستخدم من سطر الأوامر لبدء تشغيل البرامج، وهو يعادل RUN.
في لغة BASIC.
01.01 اطلب A كـ "رقم من النوع A". 01.05 إلى الخطوة 1.01. 01.10 إلى الجزء 1.
يفعل
Doيشبه To، لكنه يتفرع إلى برنامج فرعي. كما هو الحال مع To، يمكنك Do partأو Do step. إذا تم توفير خطوة، يتم تشغيل هذا السطر الفردي ثم يعود إلى العبارة بعد Do. إذا تم توفير جزء، يبدأ التنفيذ عند السطر الأول من الكتلة ويستمر حتى الوصول إلى نهاية الكتلة أو Doneمواجهة عبارة.
01.15 قم بالخطوة 7.24. 01.16 قم بالجزء 8.
Doكان له شكل مختصر خاص للبحث بما يتماشى مع شيوعه في معظم البرامج. وقد استخدم هذا timesالمعدِّل بدلاً من "،" العادي forفي حالة الحلقات البسيطة. لذا فإن الأسطر التالية متكافئة: [45]
قم بالجزء الأول لـ i=1(1)5. كرر الجزء الأول 5 مرات.
تحتفظ لغة البرمجة JOSS بمؤشر إلى السطر الجاري تنفيذه حاليًا، والذي Doقد يتغير. ومع ذلك، فقد تضمنت "إشارة do" خاصة يمكن استخدامها في الوضع المباشر لاختبار أقسام معينة من الكود دون تغيير المؤشر الرئيسي. على سبيل المثال، إذا توقف البرنامج بسبب خطأ ولم يكن من الواضح أي قسم تسبب في المشكلة، فقد يختبر المرء برنامجًا فرعيًا معينًا باستخدام: [49]
(قم بالجزء الثاني.)
منتهي
يعود الأمر Doneمن استدعاء برنامج فرعي. نظرًا لأن البرامج الفرعية تعود تلقائيًا عند الوصول إلى نهاية الجزء، Doneفهي مطلوبة فقط للعودة المبكرة، وغالبًا ما تُستخدم مع شرط. مكافئ لـ BASIC RETURN.
* روتين يطلب من المستخدم قيمة موجبة ويكرر ذلك حتى يحصل على واحدة 01.10 اطلب X كـ "أدخل قيمة موجبة أكبر من الصفر". 01.20 تم ذلك إذا كانت X>0. 01.30 إلى الخطوة 1.1
قف
يقوم الأمر Stopبإنهاء تنفيذ البرنامج وإعادة التحكم إلى بيئة التحرير. وهو ما يعادل BASIC ENDأو STOP، على الرغم من أن BASIC STOPيهدف إلى السماح CONTبالتقاط التنفيذ في نفس الموقع، وهي ميزة لا يوجد لها معادل مباشر في نظام JOSS الموجه نحو مساحة العمل.
01.10 النوع X. 01.20 توقف.
يذهب
متوفر في الوضع المباشر فقط، Goوهو يعادل لغة BASIC RUNو CONT، اعتمادًا على ما إذا كان البرنامج متوقفًا حاليًا بسبب خطأ أو Stopأمر يتم مواجهته. [50]
يلغي
هناك أمر آخر يستخدم في الوضع المباشر فقط، Cancelوهو يستخدم عندما يتوقف البرنامج بسبب خطأ ويريد المستخدم إعادة تعيين البرنامج، وهو ما يفعله عن طريق مسح عداد البرنامج . Goسيبدأ الأمر A في آخر موقع، ولكن إصدار الأمر a Cancelيجعل Goالأمر يبدأ من الأعلى مرة أخرى. [51] إذا كانت نقطة التوقف الحالية بسبب أمر بين قوسين (Do.)، فيمكن للمرء إصدار أمر إلغاء بين قوسين، (Cancel.)لإيقاف هذا التنفيذ الفرعي فقط والسماح للأمر a Goبالاستمرار في آخر سطر غير بين قوسين. [49]
الرياضيات
قام JOSS بتخزين جميع الأرقام كنقطة عائمة ذات أساس 10. [52]
احتوى برنامج JOSS على ستة مشغلات رياضية: [52]
+للإضافة-للطرح·للضرب (النقطة الفاصلة وليس النقطة)/للتقسيم*للأسس|...|للقيمة المطلقة، مع وجود تعبير في المنتصف
يمكن أن تستخدم التعبيرات الرياضية () و[] بالتبادل في الأزواج المتطابقة لتحديد الأسبقية. على سبيل المثال:
1.30 المجموعة أ=|-10·[5+1]·(1+5)|.
سوف تنتج 360. [35]
الوظائف
تحتوي اللغة على الوظائف المضمنة التالية:
الرياضيات
sin()- جيب الزاوية المعطى بالراديانcos()- جيب التمامarg()- يأخذ قيم X وY لنقطة ويعيد الزاوية بين تلك النقطة والمحور xlog()- سجل نابيريانexp()- قاعدة طبيعية لقوة الحجةsqrt()- الجذر التربيعيsgn()- علامة الحجة، 0 ترجع 0، -ve القيم -1، +ve +1ip()- جزء صحيح من الحجة،ip(22026.4658)يعود 22026fp()- الجزء الكسري، يعود بـ .4658dp()- جزء رقمي، يعود 2.20264658ep()- جزء الأس، يعود 4، موقع العدد العشري
منطقي
tv()- قيمة الحقيقة، ترجع 1 إذا كان التعبير صحيحًا، و0 بخلاف ذلك
وظائف التكرار
كما قامت لغة JOSS بتعريف عدد من الوظائف التي تقوم بتنفيذ التكرار داخليًا، وذلك لتجنب اضطرار المبرمج إلى كتابة Forتكرار لأداء مهام بسيطة مثل جمع سلسلة من الأرقام. يمكن أن تكون المعلمات عبارة عن قائمة من التعبيرات البسيطة المفصولة بفواصل، أو بنية نطاق يمكن أن يكون أمرها أي عبارة أو استدعاء وظيفة.
max()- الحد الأقصى لقيمة التعبيرات المقدمةmin()- الحد الأدنىsum()- مجموعprod()- منتجfirst()- أول عنصر في القائمة يتطابق مع شرط ما، يعيد تلك النتيجة
إدارة الملفات
استخدم نظام JOSS قرصًا صلبًا لتخزين برامج المستخدم في مساحة مخصصة. داخل تلك المساحة كان هناك عدد من الملفات التي تمت الإشارة إليها باستخدام اسم ملف متعدد الأجزاء يتكون من عدد صحيح واسم مكون من خمسة أحرف بين قوسين، على سبيل المثال، . 123 (hello)الجزء الصحيح هو المعادل للدليل، والاسم هو الملف الفرعي داخله، والذي تحتفظ به JOSS نفسها. [53]
تتم كتابة الملفات File all as item filename.وتحميلها باستخدام Recall item filename.. ويمكن للمرء أيضًا قراءة أو حفظ أجزاء معينة فقط من مساحة العمل، على سبيل المثال File part 1 as item filename.لحفظ روتين واحد في ملف. [54] بالإضافة إلى ذلك، يمكن للمرء تعيين ملف افتراضي يتم افتراض جميع المراجع إليه باستخدام Use item filename.يمكن حذف الملفات باستخدام Discard. [54]
برنامج العينة
1.1 الطلب ص،س. 1.2 توقف إذا كان q<0 أو r(q,2)=0. 1.3 ضع a=1. 1.4 قم بالجزء الثاني عندما تكون q>1 وa≠0. 1.5 اكتب a في النموذج 3. 1.6 توقف. 2.1 قم بالجزء 20. 2.1 قم بالجزء 11 إذا كانت p <0. 2.2 قم بالجزء 12 إذا كان p ≥ q. 2.3 قم بالجزء 13 إذا كانت p=0. 2.4 تم ذلك إذا كان a=0. 2.5 ضع p=p/4 بينما r(p,4)=0. 2.6 قم بالجزء 14 إذا كان r(p,2)=0. 2.7 قم بالجزء 20. 2.8 ضع a=-a إذا كان r(p,4)=r(q,4)=3. 2.9 ضع s=p، p=q، q=s. 2.95 قم بالجزء 20. 11.1 ضع a=-a إذا r(q,4)=3. 11.2 تعيين p=|p|. 11.3 قم بالجزء 20. 12.1 ضع p=r(p,q). 12.2 قم بالجزء 20. 13.1 ضع a=0، p=1، q=1. 14.1 ضع a=-a إذا كان r(q,8)=3 أو r(q,8)=5. 14.2 مجموعة p=p/2. 20.1 اكتب p, q في النموذج 1 إذا كان a=1. 20.2 اكتب p, q في النموذج 2 إذا كان a=-1. النموذج 1: " L(%.0f,%.0f) =" النموذج 2: " -L(%.0f,%.0f) =" النموذج 3: "%.0f\n"
لاحظ أن هذه ليست عينة أصلية، بل هي عينة من محاكي حديث. هناك بعض الاختلافات النحوية عن لغة JOSS الأصلية.
ملحوظات
- ^ عندما تم نقله من JOHNNIAC، تم اقتراح تغيير الاختصار إلى "JOSS Open Shop System"، مما يجعله مثالًا مبكرًا للاسم المتكرر. [1]
مراجع
الاستشهادات
- ^ abcd برايان 1966، ص 2.
- ^ abc Marks 1971، ص 1.
- ^ نوربيرج، آرثر (10 يوليو 1989). "مقابلة مع كيث أونكافر" (PDF) (مقابلة). ص 7.
- ^ وير 2008، ص 62.
- ^ ماركس 1971، ص. 3.
- ^ شاو 1965، ص 3.
- ^ ab Marks 1971، ص 2.
- ^ Smith, JW (أغسطس 1967). JOSS: Central Processing Routines (دليل المستخدم المرجعي). RAND. RM 5270 PR . تم الاسترجاع في 2012-04-16 .
- ^ شاو 1965، ص 14.
- ^ ab Marks 1971، ص 3.
- ^ abc Marks 1971، ص 9.
- ^ ماركس 1971، ص 4.
- ^ "JOHNNIAC". متحف تاريخ الكمبيوتر .
- ^ وير 2008، ص 15، 109.
- ^ ماركس 1971، ص 5.
- ^ abcd Bryan 1966، ص 3.
- ^ ماركس 1971، ص 32.
- ^ ماركس 1971، ص 10.
- ^ ماركس 1971، ص 15.
- ^ ماركس 1971، ص 14.
- ^ برايان 1966، ص 12.
- ^ ماركس 1971، ص 47.
- ^ وير 2008، ص 65.
- ^ وير 2008، ص 16.
- ^ برايان 1966، ص 4.
- ^ ab Bryan 1966، ص 5.
- ^ ماركس 1971، ص 26.
- ^ ماركس 1971، ص 32-33.
- ^ برايان 1966، ص 6.
- ^ ماركس 1971، ص 35-36، 43.
- ^ جيمبل 1967، ص.
- ^ جيمبل 1967، ص. السادس.
- ^ ab Gimble 1967، ص 65.
- ^ ماركس 1971، ص 42.
- ^ ab Gimble 1967، ص 70.
- ^ abc Gimble 1967، ص 77.
- ^ جيمبل 1967، ص 24، 69.
- ^ abc Gimble 1967، ص 75.
- ^ ماركس 1971، ص 41.
- ^ جيمبل 1967، ص 25.
- ^ جيمبل 1967، ص 68.
- ^ جيمبل 1967، ص 74-75.
- ^ جيمبل 1967، ص 45.
- ^ جيمبل 1967، ص 63.
- ^ abcde Gimble 1967، ص 66.
- ^ جيمبل 1967، ص 7.
- ^ ab Gimble 1967، ص 49.
- ^ جيمبل 1967، ص 67.
- ^ ab Gimble 1967، ص 58.
- ^ جيمبل 1967، ص 57.
- ^ جيمبل 1967، ص 53.
- ^ ab Gimble 1967، ص 69.
- ^ جيمبل 1967، ص 59.
- ^ ab Gimble 1967، ص 61.
مصادر
- جيمبل، إي بي (مايو 1967). جوس: حل المشكلات للمهندسين (PDF) (تقرير فني). راند.
- بريان، جي إي (4 نوفمبر 1966). جوس: مقدمة لتطبيق النظام. مختبر لورنس للإشعاع، بيركلي كاليفورنيا: ديكوس. ص. 19. تم الاسترجاع في 2019-06-19 .
- ماركس، شيرلي (ديسمبر 1971). سنوات مشروع جوس: تأملات في تجربة (PDF) (تقرير فني). راند . تم الاسترجاع في 2019-06-19 .
- ساميت، جان (1969). لغات البرمجة: التاريخ والأساسيات . برنتيس هول . ص 217-226. ISBN 0-13-729988-5.
- شو، جيه سي (مايو 1965). جوس: تجربة مع خدمة الحوسبة التجريبية للمستخدمين في لوحات التحكم عن بعد للآلة الكاتبة (PDF) (تقرير فني). راند.
- وير، ويليس، محرر. (2008). مؤسسة راند وتطور المعلومات (PDF) . مؤسسة راند. رقم ISBN 9780833048165.
قراءة إضافية
- "دليل مرجعي لمستخدمي JOSS"، RL Clark، تقرير R-1555/9، شركة RAND (يناير 1975)
- مقابلة تاريخية شفوية مع كيث دبليو أونكافر، معهد تشارلز باباج ، جامعة مينيسوتا. مراجعة المشاريع في مؤسسة راند عندما تم تعيين كيث أونكافر في عام 1950 وحتى أوائل السبعينيات، مثل JOHNNIAC ، وJOSS، وشبكة وطنية قابلة للبقاء، وبعض الأعمال المتعلقة بشبكة ARPANET .
روابط خارجية
- JOSS: نظام حوسبة عبر الإنترنت (VPRI-0270)، وهو فيلم يوضح نظام JOSS الذي أنتجته مؤسسة RAND في مارس 1964 عندما كان لا يزال يعمل على جهاز JOHNNIAC.
