مترجم لغة مبتدئة

مترجم لغة BASIC هو برنامج مترجم يمكّن المستخدمين من إدخال وتشغيل البرامج بلغة BASIC ، وكان، خلال الجزء الأول من عصر الحواسيب الصغيرة ، التطبيق الافتراضي الذي تُشغّله الحواسيب. وكان يُتوقع من المستخدمين استخدام مترجم BASIC لكتابة البرامج أو تحميلها من وحدات التخزين (في البداية أشرطة الكاسيت ثم الأقراص المرنة ).
تُعدّ مُفسّرات لغة BASIC ذات أهمية تاريخية. كان أول منتج طرحته مايكروسوفت للبيع مُفسّرًا للغة BASIC ( Altair BASIC )، مما مهّد الطريق لنجاح الشركة. قبل Altair BASIC، كانت الحواسيب الصغيرة تُباع كمجموعات تحتاج إلى برمجتها بلغة الآلة (على سبيل المثال، Apple I ). خلال فترة Altair، بيعت مُفسّرات BASIC بشكل منفصل، لتصبح بذلك أول برنامج يُباع للأفراد بدلًا من المؤسسات؛ وكان Apple BASIC أول منتج برمجي لشركة Apple. بعد جهاز MITS Altair 8800 ، أصبح من المتوقع أن تُشحن الحواسيب الصغيرة مُرفقة بمُفسّرات BASIC خاصة بها (مثل Apple II ، الذي كان يحتوي على تطبيقات متعددة للغة BASIC). كما أدّى رد الفعل السلبي تجاه سعر Altair BASIC من مايكروسوفت إلى ظهور تطوير برمجيات تعاوني مبكر، لتطبيقات Tiny BASIC بشكل عام، ولـ Palo Alto Tiny BASIC بشكل خاص.
تراجع استخدام مترجمات لغة BASIC مع ازدياد قوة الحواسيب وتطور برامجها لتصبح طويلة جدًا بحيث يصعب توزيعها كتابيًا. أصبحت البرامج تُنقل مُجمّعة مسبقًا على أقراص مرنة أو عبر أنظمة لوحات الإعلانات ، مما قلل الحاجة إلى قوائم الشفرة المصدرية. بالإضافة إلى ذلك، أصبحت واجهات سطر الأوامر المتطورة ، مثل MS-DOS وواجهة المستخدم الرسومية لنظام Mac ، هي واجهة المستخدم الرئيسية ، واختفت الحاجة إلى BASIC كواجهة سطر أوامر. وبحلول منتصف ثمانينيات القرن العشرين، اختفى استخدام مترجمات BASIC كلغة أساسية وواجهة للأنظمة إلى حد كبير.
تاريخ
ساعدت لغة BASIC في إطلاق عصر المشاركة الزمنية، وأصبحت سائدة في عصر الحواسيب الصغيرة، ثم تلاشت لتصبح مجرد تطبيق آخر في عصر DOS وواجهة المستخدم الرسومية، وهي اليوم موجودة في بعض المجالات المتخصصة المتعلقة بتطوير الألعاب والحوسبة القديمة والتعليم.
عصر المشاركة الزمنية
ظهرت لغة BASIC، التي طُبقت في البداية كنظام تجميع وتشغيل بدلاً من مترجم، كجزء من حركة أوسع نحو أنظمة المشاركة الزمنية . قامت شركة جنرال إلكتريك ، التي عملت على نظام دارتموث للمشاركة الزمنية ولغة BASIC المرتبطة به ، بكتابة نظام تشغيلها الأساسي الخاص وأطلقت نظام مشاركة زمنية عبر الإنترنت يُعرف باسم Mark I، والذي تميز بمترجم BASIC (وليس مترجمًا) كإحدى نقاط بيعه الرئيسية. وسرعان ما حذت شركات أخرى في هذا المجال الناشئ حذوها. وبحلول أوائل سبعينيات القرن العشرين، أصبحت لغة BASIC شائعة الاستخدام على نطاق واسع في الحواسيب المركزية للأغراض العامة. [ 1 ]

كانت لغة BASIC، كلغة مبسطة مصممة مع مراعاة التحرير المتكامل للأسطر، مناسبةً بطبيعتها للانتقال إلى سوق الحواسيب الصغيرة ، الذي كان يبرز بالتزامن مع خدمات المشاركة الزمنية. كانت هذه الأجهزة تمتلك ذاكرة رئيسية صغيرة جدًا ، ربما لا تتجاوز 4 كيلوبايت وفقًا للمصطلحات الحديثة، وتفتقر إلى وحدات التخزين عالية الأداء مثل محركات الأقراص الصلبة التي تجعل المترجمات عملية. في المقابل، كان المفسر يستهلك موارد حاسوبية أقل، على حساب الأداء. في عام 1968، قدمت شركة هيوليت باكارد جهاز HP 2000 ، وهو نظام قائم على مفسر HP Time-Shared BASIC الخاص بها . [ 2 ] في عام 1969، كتب دان بايمار وإيرا باكستر مفسرًا مبكرًا آخر للغة BASIC لجهاز Data General Nova . [ 3 ]
كانت شركة ديجيتال إكويبمنت (DEC)، الشركة الرائدة في مجال الحواسيب الصغيرة، من بين الشركات التي قاومت هذا التوجه. فقد أصدرت لغة برمجة جديدة تُعرف باسم FOCAL ، استنادًا إلى لغة JOSS السابقة التي طُوّرت على جهاز تابع لشركة DEC في معهد ستانفورد للأبحاث في أوائل الستينيات. كانت JOSS مشابهة للغة BASIC في جوانب عديدة، وكانت FOCAL نسخة مصممة للعمل على أنظمة ذات ذاكرة صغيرة جدًا، ولا سيما جهاز PDP-8 ، الذي كان يُشحن غالبًا بذاكرة رئيسية سعتها 4 كيلوبايت . وبحلول أواخر الستينيات، لاحظ مندوبو مبيعات DEC، وخاصة في قسم المبيعات التعليمية، أن عملاءهم المحتملين لم يكونوا مهتمين بلغة FOCAL وكانوا يبحثون عن بدائل أخرى لأنظمتهم. دفع هذا ديفيد هـ. أهل إلى توظيف مبرمج لإنتاج لغة BASIC لجهاز PDP-8 وأجهزة DEC الأخرى. وفي غضون عام، تلاشى الاهتمام تمامًا بالبدائل مثل JOSS وFOCAL. [ 4 ]
عصر الحواسيب الصغيرة
ساهم ظهور الحواسيب الصغيرة الأولى في منتصف سبعينيات القرن الماضي في استمرار النمو الهائل للغة BASIC، التي تميزت بشهرتها الواسعة بين المصممين الشباب وهواة الحاسوب المهتمين بالحواسيب الصغيرة، والذين شاهد الكثير منهم لغة BASIC على الحواسيب الصغيرة أو المركزية. كانت BASIC من اللغات القليلة التي جمعت بين مستوى عالٍ يسمح باستخدامها حتى لمن لا يملكون تدريبًا، وصغر حجمها الذي يسمح بتضمينها في الحواسيب الصغيرة آنذاك. في عام 1972، طرحت شركة HP آلة حاسبة مكتبية قابلة للبرمجة HP 9830A مزودة بمترجم BASIC Plus في ذاكرة القراءة فقط (ROM). [ 5 ]
في يونيو 1974، أثبت ألفريد ويفر ومايكل تيندال ورونالد دانييلسون من جامعة إلينوي في أوربانا-شامبين أنه من الممكن إنتاج "مترجم لغة BASIC لمعالج Intel 8008 الدقيق"، في ورقتهم البحثية التي تحمل نفس الاسم، على الرغم من أن تطبيقهم تم نشره على محاكي 8008 لجهاز IBM 360/75 وتطلب 16 كيلوبايت. [ 6 ]

في يناير 1975، أُعلن عن جهاز Altair 8800، مما أشعل شرارة ثورة الحواسيب الصغيرة . وقد شارك بيل غيتس، وجون ألين، ومونتي دافيدوف في كتابة إحدى النسخ الأولى من لغة BASIC للحواسيب الصغيرة لصالح شركتهم الناشئة، مايكروسوفت. أصدرت شركة MITS هذه النسخة على شريط مثقوب لجهاز Altair 8800 بعد فترة وجيزة من إطلاق الجهاز نفسه، [ 7 ] مما أبرز مكانة BASIC كلغة برمجة أساسية للحواسيب الصغيرة في بداياتها.
في مارس 1975، حضر ستيف وزنياك الاجتماع الأول لنادي هواة الحواسيب المنزلية وبدأ في وضع تصميم حاسوبه الخاص. وقد أبدى أعضاء النادي حماسًا كبيرًا تجاه لغة ألتاير بيسك. [ 8 ] استنتج وزنياك أن جهازه سيحتاج إلى لغة بيسك خاصة به. في ذلك الوقت، كان يعمل في شركة هيوليت باكارد، واستخدم لهجة تي إس-بيسك الخاصة بالحواسيب الصغيرة كأساس لنسخته الخاصة. صدرت لغة إنتجر بيسك على شريط كاسيت لجهاز أبل 1 ، ووُفرت في ذاكرة قراءة فقط (ROM) عند شحن جهاز أبل 2 في صيف عام 1977. [ 9 ]
بدأ أعضاء آخرون في نادي هواة الحاسوب بتوزيع نسخ من لغة ألتاير بيسك على أشرطة ورقية، مما دفع بيل غيتس إلى كتابة رسالته المفتوحة إلى الهواة ، معربًا عن استيائه من هذا المثال المبكر لقرصنة البرمجيات . واستجابةً جزئيةً لرسالة غيتس، وسعيًا منه لإنتاج نسخة أصغر من لغة بيسك تعمل بكفاءة على أجهزة بسعة 4 كيلوبايت، حثّ بوب ألبريشت دينيس أليسون على كتابة نسخة خاصة به من اللغة. وقد تناول أليسون في مقالات نُشرت في الأعداد الثلاثة الأولى من نشرة شركة بيبولز كمبيوتر، الصادرة عام 1975 ، كيفية تصميم وتنفيذ نسخة مبسطة من مترجم لغة بيسك ، بالإضافة إلى تطبيقات مع شفرة مصدرية نُشرت في مجلة دكتور دوبز بعنوان "تمارين بيسك الصغيرة وتقويم الأسنان: تشغيل خفيف بدون بايت زائد" . أدى ذلك إلى ظهور مجموعة واسعة من إصدارات Tiny BASIC مع ميزات إضافية أو تحسينات أخرى، ومن أشهرها إصدارات توم بيتمان ولي -تشين وانغ ، وكلاهما عضوان في نادي Homebrew Computer Club. [ 10 ] نُشرت Tiny BASIC بشكل مفتوح، وصاغ وانغ مصطلح "حقوق النسخ" لتشجيع الآخرين على نسخ شفرته المصدرية. أنشأ الهواة والمحترفون تطبيقاتهم الخاصة، مما جعل Tiny BASIC مثالًا على مشروع برمجيات حرة وُجد قبل حركة البرمجيات الحرة .
طوّرت العديد من الشركات مترجمات لغة BASIC. في عام 1976، قدّمت شركة SCELBI برنامج SCELBAL لجهاز 8008 [ 11 ] ، وأعلنت جامعة أيداهو ومختبر لورانس ليفرمور أنهما ستنشران برنامج LLL BASIC المتاح للعموم، والذي يتضمن دعمًا للأعداد العشرية. [ 12 ] في عام 1977، كان لكل من جهازي Apple II و TRS-80 Model I نسختان من لغة BASIC، نسخة أصغر حجمًا طُرحت مع الإصدارات الأولى من الجهازين، ونسخة مرخصة من مايكروسوفت طُرحت لاحقًا مع ازدياد الاهتمام بالمنصتين.

قامت مايكروسوفت بنقل مترجمها إلى معالج MOS 6502 ، الذي سرعان ما أصبح أحد أشهر المعالجات الدقيقة في عصر 8 بت. وعندما بدأت الحواسيب الصغيرة الجديدة بالظهور، مثل كومودور PET ، رخصت الشركات المصنعة لها لغة مايكروسوفت بيسك، مع تعديلها لتناسب إمكانيات الأجهزة. وبحلول عام 1978، أصبحت مايكروسوفت بيسك معيارًا فعليًا ، واحتوت ذاكرة القراءة فقط (ROM) في جميع أجهزة الكمبيوتر المنزلية تقريبًا في ثمانينيات القرن العشرين . وفي عام 1980، وكجزء من اتفاقية ترخيص أوسع شملت لغات أخرى ونظام التشغيل PC DOS ، رفضت شركة IBM عرضًا من أتاري، ورخصت بدلاً من ذلك لغة مايكروسوفت بيسك على أساس تطبيقها الخاص، وأصدرت في النهاية أربعة إصدارات من IBM BASIC ، كان كل منها أكبر بكثير من المترجمات السابقة (على سبيل المثال، بلغ حجم Cartridge BASIC 40 كيلوبايت). [ 13 ] قال دون إستريدج ، قائد فريق IBM PC : "لدى IBM لغة BASIC ممتازة - لاقت استحسانًا كبيرًا، وتعمل بسرعة على الحواسيب المركزية، وهي أكثر فعالية بكثير من لغات BASIC الخاصة بالحواسيب الصغيرة... لكن عدد مستخدميها كان ضئيلاً للغاية مقارنةً بعدد مستخدمي Microsoft BASIC. كان لدى Microsoft BASIC مئات الآلاف من المستخدمين حول العالم. كيف يُمكن لأحد أن يُجادل في ذلك؟" [ 14 ] (انظر Microsoft BASIC للاطلاع على التاريخ اللاحق لهذه التطبيقات المختلفة).
اعترض العديد من البائعين على ذلك، واستخدموا شركات أخرى أو كتبوا مترجماتهم الخاصة. في سبتمبر 1978، كانت شركة شيباردسون مايكروسيستمز تُنهي تطوير لغة كروميمكو 16K Structured BASIC لأجهزة كروميمكو S-100 التي تعمل بمعالج Z80 . [ 15 ] [ 16 ] ثم ابتكر بول لوتون وكاثلين أوبراين لغة أتاري بيسك [ 17 ] ، وهي في الأساس نسخة مُبسطة من لغة كروميمكو بيسك، تم نقلها إلى جهاز 6502. [ 18 ] في عام 1979، طوّر وارن روبينيت خرطوشة برمجة بيسك لشركة أتاري، على الرغم من أنها كانت تدعم فقط البرامج التي تتكون من 9 أسطر من التعليمات البرمجية (64 حرفًا إجمالًا). وفي عام 1979 أيضًا، أصدرت شركة تكساس إنسترومنتس لغة تي آي بيسك مع جهازها تي آي-99/4 ، والذي بيع منه ما يقرب من 3 ملايين جهاز عند تحديثه ليصبح تي آي-99/4A. طُوِّرت لغة Sinclair BASIC لجهاز ZX-80 على يد جون غرانت وستيف فيكرز من شركة Nine Tiles. وفي عام 1980، طوّرت صوفي ويلسون من شركة Acorn Computers لغة Atom BASIC ، التي طوّرتها لاحقًا إلى BBC BASIC ، وهي من أوائل لغات BASIC التي تُتيح برمجةً مُهيكلة، مع إجراءات ووظائف مُسمّاة ، وحلقات ، وهياكل مُستوحاة من لغة COMAL . [ 19 ] [ 20 ] طوّر جان جونز لغة SuperBASIC ، وهي لغة BASIC بريطانية أخرى تدعم البرمجة المُهيكلة، لجهاز Sinclair QL . وفي عام 1983، طوّر راندال هايد لغة SmartBASIC لجهاز Coleco Adam . [ 21 ] طوّر ريتشارد كلايتون وكريس هول وبول أوفيريل لغة Mallard BASIC لجهاز BBC Micro ولغة Locomotive BASIC لجهاز Amstrad CPC ، وكلاهما يدعم أوامر نظام ملفات ISAM المُفهرس. [ 22 ] في عام 1985، أصدرت شركة MetaComCo برنامج ABasiC لجهاز Amiga وبرنامج ST BASIC لجهاز Atari ST .DEF PROCDEF FNREPEAT UNTILIF THEN ELSE
في عام 1978، نشر ديفيد لين الطبعة الأولى من كتاب "دليل لغة بيسك: موسوعة لغة بيسك الحاسوبية" ، موثقًا الكلمات المفتاحية في أكثر من 78 حاسوبًا مختلفًا. وبحلول عام 1981، وثّقت الطبعة الثانية الكلمات المفتاحية في أكثر من 250 حاسوبًا مختلفًا، مُظهرةً النمو الهائل لعصر الحواسيب الصغيرة. [ 23 ]
المترجمون كتطبيقات
مع ظهور أنظمة تشغيل الأقراص ولاحقًا واجهات المستخدم الرسومية ، أصبحت مترجمات لغة BASIC مجرد تطبيق واحد من بين العديد من التطبيقات، بدلاً من أن تكون أول مطالبة قد يراها المستخدم عند تشغيل جهاز الكمبيوتر.
في عام 1983، ظهر الحاسوب المحمول TRS-80 موديل 100 ، وكان تطبيق لغة مايكروسوفت بيسك فيه جديرًا بالذكر لسببين. أولًا، كان يتم تحرير البرامج باستخدام محرر النصوص البسيط TEXT، بدلًا من كتابتها سطرًا سطرًا (مع ضرورة ترقيم الأسطر). [ 24 ] ثانيًا، كان هذا آخر منتج من مايكروسوفت قام بيل غيتس بتطويره شخصيًا. [ 25 ] [ 26 ]
في عام 1983 أيضًا، بدأت مايكروسوفت بتضمين لغة GW-BASIC مع نظام التشغيل DOS. كانت هذه اللغة مطابقة وظيفيًا للغة IBM BASICA ، وكان مُفسِّر لغة BASIC الخاص بها ملفًا تنفيذيًا مستقلًا تمامًا، ولم يكن بحاجة إلى ذاكرة القراءة فقط ( ROM) الخاصة بلغة BASIC الموجودة في جهاز IBM PC الأصلي . ووفقًا لمارك جونز لورينزو، ونظرًا لنطاق اللغة، "يمكن القول إن GW-BASIC هي الأفضل على الإطلاق في عائلة لغات BASIC ذات الأرقام السطرية من مايكروسوفت، والتي يعود تاريخها إلى جهاز Altair، وربما حتى الأفضل في لغات BASIC ذات الأرقام السطرية بشكل عام." [ 27 ] مع إصدار نظام التشغيل MS-DOS 5.0، حلت لغة QBasic محل GW-BASIC .
قدّم برنامج MacBASIC بيئة تطوير تفاعلية بالكامل لجهاز ماكنتوش الأصلي ، وقد طوّره دون دينمان، [ 28 ] وماريان هسيونغ، ولاري كينيون، وبرايان ستيرنز. [ 29 ] أُصدر MacBASIC كبرنامج تجريبي عام 1985، واعتُمد استخدامه في أماكن مثل قسم علوم الحاسوب في كلية دارتموث ، ضمن دورة تمهيدية في البرمجة. كان مصيره أن يكون ثاني برنامج BASIC من تطوير آبل يُلغى لصالح برنامج BASIC من مايكروسوفت. في نوفمبر 1985، أنهت آبل المشروع فجأة كجزء من اتفاقية مع مايكروسوفت لتمديد ترخيص BASIC على جهاز Apple II . [ 30 ] [ 31 ]

لم تكن مترجمات لغة BASIC حكرًا على التطوير الأمريكي/البريطاني. ففي عام 1984، أصدرت شركة Hudson Soft لغة Family BASIC في السوق اليابانية لجهاز ألعاب الفيديو Family Computer من Nintendo ، وهي لغة برمجة تعتمد على الأعداد الصحيحة فقط، ومصممة خصيصًا لبرمجة الألعاب، ومبنية على لغة Hudson Soft BASIC الخاصة بجهاز Sharp MZ80 (مع كلمات مفتاحية إنجليزية). [ 32 ] أما لغة Turbo-Basic XL فهي مجموعة فرعية متوافقة من لغة Atari BASIC، طوّرها فرانك أوستروفسكي ونُشرت في عدد ديسمبر 1985 من مجلة الكمبيوتر الألمانية Happy Computer ، ما يجعلها من آخر المترجمات التي نُشرت كبرنامج يُكتب مباشرةً . تضمنت اللغة مُترجمًا بالإضافة إلى المترجم، وتميزت بأوامر برمجة مُهيكلة. وقد أصدر مطورون آخرون عدة نسخ مُعدّلة تعمل مع أنظمة DOS مختلفة. في فرنسا، قام فرانسوا ليونيه وقسطنطين سوتيروبولوس بتطوير مترجمين للغة BASIC مع التركيز على الوسائط المتعددة: STOS BASIC لجهاز Atari ST ، في عام 1988، [ 33 ] و AMOS BASIC لجهاز Amiga ، في عام 1990.
في مايو 1991، أصدرت مايكروسوفت لغة البرمجة فيجوال بيسك ، وهي لغة برمجة من الجيل الثالث تعتمد على الأحداث، وتُعرف بنموذجها البرمجي القائم على مكونات الكائنات (COM). [ 34 ] دعمت فيجوال بيسك التطوير السريع للتطبيقات ذات واجهة المستخدم الرسومية (GUI) ، والوصول إلى قواعد البيانات باستخدام كائنات الوصول إلى البيانات ، وكائنات البيانات عن بُعد ، وكائنات بيانات ActiveX ، بالإضافة إلى إنشاء عناصر تحكم وكائنات ActiveX . استُخدمت فيجوال بيسك لتطوير تطبيقات داخلية خاصة، بالإضافة إلى التطبيقات المنشورة.
أساسيات التخصص
في عام 1993، أصدرت مايكروسوفت Visual Basic for Applications ، وهي لغة برمجة نصية لتطبيقات Microsoft Office ، والتي تتجاوز وتوسع قدرات لغات برمجة الماكرو الخاصة بالتطبيقات السابقة مثل WordBASIC (التي تم طرحها في عام 1989) .
في عام 1996، أصدرت مايكروسوفت لغة VBScript كبديل للغة JavaScript لإضافة وظائف تفاعلية من جانب العميل إلى صفحات الويب التي يتم عرضها باستخدام Internet Explorer . [ 35 ]
في عام 1999، أصدر بينوا مينيسيني برنامج Gambas كبديل لمطوري Visual Basic الذين قرروا الانتقال إلى Linux . [ 36 ]
في عام 2000، أصدر لي بامبر وريتشارد فانر نظام DarkBASIC ، وهو نظام لإنشاء الألعاب لنظام التشغيل مايكروسوفت ويندوز ، مع بيئة تطوير متكاملة (IDE) وأدوات تطوير مصاحبة. [ 37 ]
في عام 2001، تم إصدار SmallBASIC لجهاز Palm PDA . [ 38 ] وكان هناك مترجم BASIC آخر لجهاز Palm وهو HotPaw BASIC، وهو فرع من Chipmunk Basic .
في عام 2002، نشر إيمانويل شايو وباسكال مانوري وبرونو باجانو برنامج Tiny BASIC كمثال على تطوير التطبيقات باستخدام لغة Objective Caml ( OCaml ). [ 39 ]
في عام ٢٠١١، أصدرت مايكروسوفت لغة Small Basic (المختلفة عن SmallBASIC)، إلى جانب منهج تعليمي [ ٤٠ ] ودليل تمهيدي [ ٤١ ] ، مصمم لمساعدة الطلاب الذين تعلموا لغات البرمجة المرئية مثل Scratch على تعلم البرمجة النصية [ ٤٢ ] . توفر بيئة التطوير المتكاملة (IDE) المصاحبة بيئة برمجة مبسطة مع وظائف مثل تمييز بناء الجملة ، والإكمال التلقائي الذكي للتعليمات البرمجية ، والوصول إلى التوثيق داخل المحرر [ ٤٣ ] . تحتوي اللغة على ١٤ كلمة مفتاحية فقط [ ٤٤ ] . في عام ٢٠١٩، أعلنت مايكروسوفت عن Small Basic Online (SBO)، مما يسمح للطلاب بتشغيل البرامج من متصفح الويب [ ٤٥ ] [ ٤٦ ] .
في عام ٢٠١٤، أصدر روبن إتش. إدواردز لغة Arduino BASIC لمنصة Arduino ، وهي الآن تطبيق مُشتقّ ومُطوّر على نطاق واسع. [ ٤٧ ] كما تمّ اقتباس تطبيق آخر يحمل الاسم نفسه من لغة Palo Alto Tiny BASIC في عام ١٩٨٤ بواسطة غوردون براندلي لجهاز 68000 Tiny BASIC الخاص به، والذي قام مايك فيلد لاحقًا بنقله إلى لغة C. [ ٤٨ ]

تتوفر الآن العديد من برامج ترجمة لغة BASIC للهواتف الذكية والأجهزة اللوحية عبر متجر تطبيقات Apple ، أو متجر Google Play لنظام Android.
أصبح برمجة مترجمات لغة BASIC اليوم جزءًا من هواية الحوسبة القديمة . وقد سهّلت لغات البرمجة عالية المستوى على الأنظمة ذات ذاكرة الوصول العشوائي الكبيرة عملية برمجة مترجمات BASIC. على سبيل المثال، تُصبح إدارة الأسطر بسيطة إذا كانت لغة البرمجة تدعم المصفوفات المتفرقة ، وتُصبح إدارة المتغيرات بسيطة باستخدام المصفوفات الترابطية ، ويُصبح تنفيذ البرنامج سهلاً باستخدام دوال eval . كمثال على ذلك، انظر إلى مشروع Vintage BASIC مفتوح المصدر ، المكتوب بلغة Haskell [ 49 ] أو OCaml Tiny BASIC [ 39 ] .
المبيعات والتوزيع
في البداية، كانت برامج الترجمة إما تُدمج مع أجهزة الكمبيوتر أو تُطور كخدمة مخصصة، قبل أن تظهر صناعة تنتج برامج معبأة بشكل مستقل للمؤسسات في أواخر الستينيات. [ 50 ] تم بيع برامج الترجمة BASIC أولاً بشكل منفصل عن أجهزة الكمبيوتر الصغيرة، ثم مدمجة فيها، قبل أن تُباع كتطبيقات مرة أخرى في عصر DOS.
| سنة | وسائط | مثال |
|---|---|---|
| 1975 | شريط ورقي | ألتاير بيسك |
| 1976 | برنامج الكتابة | Tiny BASIC Extended |
| 1976 | شريط كاسيت | أبل 1 بيسك |
| 1977 | ذاكرة القراءة فقط للأقراص المرنة | مايكرو بيسك |
| 1977 | ذاكرة للقراءة فقط | لغة بيسك للأعداد الصحيحة |
| 1983 | قرص مرن | لغة البرمجة الأساسية GW |
| 1995 | قرص مضغوط | فيجوال بيسك 4.0 |
| 2008 | متجر التطبيقات | متنوع |
مع تحوّل السوق نحو ذاكرة القراءة فقط (ROM)، أصبح حجمها العاملَ الحاسم في تحديد حجم مُفسِّر لغة BASIC. ولأن ذاكرة الوصول العشوائي (RAM) كانت تُباع على شكل رقائق بسعة 4 كيلوبايت، فقد تم تغليف برنامج Altair BASIC في البداية بإصدارات منفصلة بسعات 4 كيلوبايت و8 كيلوبايت و12 كيلوبايت؛ وامتد هذا الأمر إلى رقائق ذاكرة القراءة فقط، حيث كان المصنّعون يُحدّدون عدد رقائق ذاكرة القراءة فقط التي يُمكنهم تضمينها في تصميماتهم، مع مراعاة أهداف السعر والقيود الأخرى.
المترجمات مقابل المفسرات
| وجه | المترجم | مترجم |
|---|---|---|
| مُحسَّن لـ | أداء | استخدام الذاكرة |
| سرعة التنفيذ | أسرع | أبطأ |
| استخدام الذاكرة | أعلى | أدنى |
| التخزين الثانوي | مطلوب | خياري |
| التحقق من الأخطاء | قبل الإعدام | أثناء التنفيذ |
| شفرة المصدر | غير مضمن في الملف التنفيذي | مطلوب للتنفيذ |
كانت أول نسخة من لغة BASIC، وهي Dartmouth BASIC ، عبارة عن مُترجم. عادةً، يقوم المُترجم بفحص البرنامج بأكمله في عملية متعددة الخطوات، ويُنتج ملفًا ثانيًا قابلًا للتنفيذ مباشرةً بلغة الآلة الأساسية للحاسوب المُضيف، دون الرجوع إلى شفرة المصدر. غالبًا ما تتكون هذه الشفرة من استدعاءات لروتينات مكتوبة مسبقًا في نظام تشغيل اللغة . عادةً ما يكون حجم الملف التنفيذي أصغر من حجم شفرة المصدر التي أنشأته.
تتمثل العيوب الرئيسية للمترجمات، على الأقل في السياق التاريخي، في حاجتها إلى كميات كبيرة من الذاكرة المؤقتة. فبينما يعمل المترجم، يُنتج ملف إخراج متزايد الحجم باستمرار، يُخزن في الذاكرة إلى جانب شفرة المصدر الأصلية. وتُضاف إلى متطلبات الذاكرة ذاكرة إضافية لعمليات البحث المؤقتة، ولا سيما أرقام الأسطر في حالة لغة BASIC. كانت حواسيب تلك الحقبة تمتلك سعات ذاكرة ضئيلة للغاية؛ فبالمقاييس الحديثة، قد تصل سعة ذاكرة الحاسوب المركزي النموذجي إلى حوالي 64 كيلوبايت. وفي نظام المشاركة الزمنية، كما هو الحال في معظم إصدارات BASIC في ستينيات القرن الماضي، كانت هذه الذاكرة تُشارك بين العديد من المستخدمين.
لكي يعمل المترجم، كان لا بد للأنظمة من امتلاك نوع من وحدات التخزين الثانوية عالية الأداء ، وعادةً ما تكون قرصًا صلبًا . كان تحرير البرنامج يتم في بيئة مخصصة تكتب شفرة المصدر الخاصة بالمستخدم في ملف مؤقت. عند تشغيل المستخدم للبرنامج، كان المحرر يتوقف ويبدأ المترجم، الذي يقرأ ذلك الملف وينتج الشفرة التنفيذية، ثم يتوقف المترجم أخيرًا ويشغل البرنامج الناتج. أدى تقسيم المهمة بهذه الطريقة إلى تقليل مقدار الذاكرة المطلوبة لأي جزء من أجزاء نظام BASIC ككل؛ ففي أي وقت، كان لا بد من تحميل المحرر أو المترجم أو بيئة التشغيل فقط، بينما كانت بقية المكونات مخزنة في الذاكرة.
بينما كانت سعة ذاكرة الحواسيب المركزية محدودة، كانت سعة ذاكرة الحواسيب الصغيرة أقل من ذلك بكثير: إذ كانت أنظمة 4 و8 كيلوبايت شائعة في ستينيات القرن الماضي. والأهم من ذلك، أن الحواسيب الصغيرة كانت تفتقر إلى أي شكل من أشكال التخزين عالي الأداء؛ فقد استخدمت معظم التصاميم المبكرة الشريط المثقب كنظام تخزين أساسي، بينما كانت أنظمة الشريط المغناطيسي مخصصة للأجهزة المتطورة. في ظل هذه الظروف، كان النظام الذي يكتب الكود المصدري، ثم يُجمّعه، ثم يُشغّل النتيجة، سيستغرق دقائق. وبسبب هذه القيود، انتشرت برامج الترجمة البرمجية.
تؤدي المفسرات في نهاية المطاف نفس المهام الأساسية التي تؤديها المترجمات، حيث تقرأ شفرة المصدر وتحولها إلى تعليمات قابلة للتنفيذ تستدعي دوال وقت التشغيل. ويكمن الاختلاف الرئيسي في توقيت تنفيذ هذه المهام. ففي حالة المترجم، تُحوّل شفرة المصدر بالكامل في عملية واحدة تبدو للمستخدم، بينما يقوم المفسر بتحويلها وتشغيلها سطرًا سطرًا. ثم يُنفّذ رمز الآلة الناتج، بدلًا من إخراجه، وبعد ذلك يُحذف هذا الرمز وتتكرر العملية مع السطر التالي. وهذا يُغني عن الحاجة إلى أي نوع من التخزين الثانوي أثناء بناء الملف التنفيذي. أما العيب الرئيسي فهو عدم إمكانية فصل أجزاء العملية المختلفة - إذ يجب تحميل الشفرة اللازمة لتحويل المصدر إلى عمليات الآلة في الذاكرة مع وقت التشغيل اللازم لتنفيذها، وفي معظم الحالات، محرر شفرة المصدر أيضًا.
إن إنتاج لغة تحتوي على كل هذه المكونات والتي يمكن أن تتناسب مع مقدار صغير من الذاكرة ولا تزال تحتوي على مساحة لرمز المصدر الخاص بالمستخدم يمثل تحديًا كبيرًا، ولكنه يلغي الحاجة إلى التخزين الثانوي وكان الحل العملي الوحيد لأجهزة الكمبيوتر الصغيرة المبكرة ومعظم تاريخ ثورة الكمبيوتر المنزلي .
تطوير
تصميم اللغة
غالبًا ما كان تصميم لغات المترجمات الأولى يعتمد ببساطة على الرجوع إلى تطبيقات أخرى. على سبيل المثال، كانت مراجع ووزنياك للغة BASIC هي دليل HP BASIC ونسخة من كتاب " 101 لعبة حاسوب بلغة BASIC" . بناءً على هذه المصادر، بدأ ووزنياك في رسم مخطط لبنية اللغة. [ 51 ] لم يكن يعلم أن لغة BASIC الخاصة بشركة HP تختلف اختلافًا كبيرًا عن لغة DEC BASIC المستخدمة في كتاب "101 لعبة" . كان الاختلاف الرئيسي بين اللغتين يكمن في معالجة السلاسل النصية وهياكل التحكم. [ 52 ] كانت لغة Data General Business Basic ، وهي تطبيق يعتمد على الأعداد الصحيحة فقط، مصدر إلهام للغة Atari BASIC. [ 53 ]
في المقابل، كتب دينيس أليسون ، عضو هيئة التدريس في قسم علوم الحاسوب بجامعة ستانفورد ، مواصفاتٍ لنسخةٍ مبسطةٍ من اللغة. [ 54 ] وقد حثّه على وضع هذا المعيار بوب ألبريشت من نادي هومبرو للحاسوب ، الذي كان قد شاهد لغة BASIC على الحواسيب الصغيرة ، ورأى أنها ستكون الخيار الأمثل للأجهزة الجديدة مثل ألتاير. اعتمد تصميم أليسون المقترح على العمليات الحسابية للأعداد الصحيحة فقط، ولم يدعم المصفوفات أو معالجة السلاسل النصية. وكان الهدف هو أن يتسع البرنامج لـ 2 إلى 3 كيلوبايت من الذاكرة. نُشر التصميم العام لـ Tiny BASIC في عدد سبتمبر 1975 من نشرة شركة People's Computer Company (PCC).
تُدرج القواعد النحوية أدناه بصيغة باكوس-ناور . [ 55 ] في هذه القائمة، تشير علامة النجمة (" *") إلى صفر أو أكثر من العنصر الموجود على يسارها - باستثناء علامة النجمة الأولى في تعريف " term"، والتي تمثل عامل الضرب؛ وتُستخدم الأقواس لتجميع العناصر؛ وتشير علامة إبسيلون (" ε") إلى المجموعة الفارغة. وكما هو شائع في تدوين قواعد لغات البرمجة، يميز الخط العمودي (" |") البدائل، وكذلك إدراجها في أسطر منفصلة. CRويرمز الرمز " " إلى سطر جديد .
السطر :: = رقم العبارة CR | العبارة CR العبارة :: = اطبع قائمة التعبيرات إذا كان التعبير relop التعبير THEN العبارة اذهب إلى التعبير إدخال قائمة المتغيرات دع المتغير = التعبير GOSUB التعبير إرجاع مسح القائمة تشغيل نهاية قائمة التعبيرات :: = ( سلسلة | تعبير ) ( , ( سلسلة | تعبير ) ) * قائمة المتغيرات :: = المتغير ( , المتغير ) * التعبير :: = ( +|-|ε ) حد (( +|- ) حد ) * حد :: = عامل (( * | / ) عامل ) * عامل :: = المتغير | رقم | ( تعبير ) المتغير :: = A | B | C ... | Y | Z رقم :: = رقم رقم * رقم :: = 0 | 1 | 2 | 3 | ... | 8 | 9 relop :: = < ( > | = |ε ) | > ( <| = |ε ) | =أضاف هذا التركيب النحوي، على بساطته، ابتكارًا واحدًا: GOTOويمكنه GOSUBأن يأخذ تعبيرًا بدلاً من رقم السطر، مما يوفر GOTO [ 56 ] المعين بدلاً من عبارة التبديل الخاصة بالبنية الأكثر شيوعًا في BASIC.ON-GOTO/GOSUB
استخدمت لغة Sinclair BASIC معيار Minimal BASIC الصادر عن المعهد الوطني الأمريكي للمعايير (ANSI) عام 1978 كتعريف لها ، إلا أنها كانت تطبيقًا غير مكتمل يقتصر على العمليات الحسابية للأعداد الصحيحة فقط. [ 57 ] وقد نُشر معيار ANSI بعد تصميم الجيل الأول من المفسرات للحواسيب الصغيرة.
بنيان
المكونات الشائعة لمترجم لغة BASIC: [ 58 ]
- معالجة الإدخال/الإخراج والمقاطعات
- لوحة المفاتيح والشاشة
- إدخال/إخراج الملفات (إن وجد)
- إجراءات التحرير
- سطر الأوامر
- تحرير البرامج وتخزينها
- إجراءات التنفيذ
- التحليل والتفسير
- حزمة حسابية
- إدارة الذاكرة
- جدول الرموز (إن وجد)
- جمع القمامة (إن وجد)
البرمجة
افتقرت الحواسيب الصغيرة المبكرة إلى أدوات التطوير، فكان المبرمجون يكتبون برامجهم إما على الحواسيب الصغيرة أو يدويًا. على سبيل المثال، كتب ديك ويبل وجون أرنولد برنامج Tiny BASIC Extended مباشرةً بلغة الآلة، باستخدام النظام الثماني . [ 59 ] كتب روبرت أويترويك برنامج MICRO BASIC بخط يده لجهاز SWTPC ( نظام 6800 ) على دفتر ملاحظات. [ 60 ] كتب ستيف وزنياك برنامج Integer BASIC يدويًا، مترجمًا تعليمات لغة التجميع إلى ما يعادلها بلغة الآلة ، ثم رفع النتيجة إلى حاسوبه. [ 61 ] (لهذا السبب، كان من الصعب جدًا تعديل البرنامج، ولم يتمكن وزنياك من تعديله بالسرعة الكافية لستيف جوبز ، الذي حصل لاحقًا على ترخيص BASIC من مايكروسوفت. [ 62 ] )
لم يكن لدى غيتس وآلن نظام ألتاير لتطوير واختبار مترجمهما. مع ذلك، كان آلن قد كتب محاكيًا لمعالج إنتل 8008 لمشروعهما السابق، تراف-أو-داتا ، والذي كان يعمل على حاسوب PDP-10 بتقنية المشاركة الزمنية . قام آلن بتعديل هذا المحاكي استنادًا إلى دليل مبرمج ألتاير، وقاما بتطوير واختبار المترجم على حاسوب PDP-10 الخاص بجامعة هارفارد. [ 63 ] عندما توقفت هارفارد عن استخدام هذا النظام، اشترى غيتس وآلن وقتًا حاسوبيًا من خدمة مشاركة زمنية في بوسطن لإكمال تصحيح أخطاء برنامج BASIC الخاص بهما. زعم غيتس، في رسالته المفتوحة إلى الهواة عام 1976، أن قيمة الوقت الحاسوبي للسنة الأولى من تطوير البرمجيات بلغت 40,000 دولار. [ 64 ]
لم يكن ألين عاجزًا عن كتابة التعليمات البرمجية بلغة الآلة. فبينما كان في طريقه للهبوط في مطار ألبوكيرك في رحلة لعرض المترجم، أدرك ألين أنه نسي كتابة برنامج تمهيدي لقراءة الشريط في الذاكرة. فكتب البرنامج بلغة الآلة 8080، وأنهى ألين كتابته قبل هبوط الطائرة. ولم يدرك أن المترجم يعمل على جهاز ألتاير إلا عندما حمّل البرنامج على الجهاز ورأى موجهًا يطلب منه تحديد حجم ذاكرة النظام. [ 65 ] [ 66 ]
كانت Palo Alto Tiny BASIC، أو PATB اختصارًا، إحدى أشهر نسخ Tiny BASIC. ظهرت PATB لأول مرة في عدد مايو 1976 من مجلة Dr. Dobbs ، مكتوبة بلغة تجميع مخصصة مع رموز تذكير غير قياسية. قام لي-تشين وانغ ببرمجة مترجمه على نظام مشاركة الوقت باستخدام مُجمِّع عام.
كان استخدام لغة ALGOL 60 لمترجم لغة XBASIC الخاص بـ Paisley لأنظمة Burroughs الكبيرة استثناءً من استخدام لغة التجميع . [ 67 ] وكان برنامج Classic BASIC، الذي كتبه لينارت بنشوب بلغة Forth ونُشر في مجلة Vijgeblad الهولندية (العدد 42، 1993) ، استثناءً آخر، وهو برنامج كتابة مباشرة . [ 68 ]
كانت شفرة المصدر للمترجمات غالبًا مفتوحة المصدر (كما هو الحال مع Tiny BASIC) أو ينشرها المؤلفون لاحقًا. نُشرت شفرة المصدر الكاملة المشروحة ومواصفات تصميم Atari BASIC في كتاب Atari BASIC Source Book عام 1983. [ 69 ]
الآلات الافتراضية
تمت برمجة بعض مترجمات لغة BASIC في التمثيل الوسيط للآلة الافتراضية لإضافة طبقة من التجريد والإيجاز فوق لغة الآلة الأصلية .
| لهجة من لغة بيسك | لغة الآلة الافتراضية | الآلة الأصلية |
|---|---|---|
| Tiny Basic | لغة باسك المتوسطة الصغيرة (TBIL) | 6800 |
| NIBL | اللغة المتوسطة (IL) | SC/MP |
| لغة تي آي بيسك | لغة برمجة الرسومات (GPL) | TMS9900 |
على الرغم من استخدام الآلات الافتراضية في أنظمة الترجمة والتنفيذ مثل BASIC-PLUS ، إلا أنها كانت مخصصة فقط لتنفيذ كود BASIC، وليس لتحليله. [ 70 ] في المقابل، صُممت Tiny BASIC لتُنفذ كآلة افتراضية تقوم بتحليل وتنفيذ (تفسير) عبارات BASIC؛ في هذا التنفيذ، يُشغل مُفسر Tiny BASIC نفسه على مُفسر آلة افتراضية. [ 71 ] لم يتجاوز طول برنامج المُفسر 120 عملية آلة افتراضية، تتكون من 32 أمرًا. [ 72 ] وبالتالي، ساهم اختيار أسلوب الآلة الافتراضية في توفير مساحة الذاكرة وجهد التنفيذ، على الرغم من أن برامج BASIC التي تُشغل عليها كانت تُنفذ ببطء نسبيًا. (انظر Tiny BASIC: التنفيذ في آلة افتراضية للاطلاع على مقتطف وأمثلة على الأوامر). مع أن الهدف من تصميم Tiny BASIC كان استخدام آلة افتراضية، إلا أن بعض عمليات التنفيذ لم تفعل ذلك. ومن بين تلك التي فعلت ذلك Tiny BASIC Extended و 6800 Tiny BASIC و [ 73 ] و NIBL.
صممت شركة تكساس إنسترومنتس، لأجهزة الكمبيوتر TI-99/4 وTI-99/4A، آلة افتراضية بلغة برمجة تُسمى GPL، اختصارًا لـ "لغة البرمجة الرسومية". [ 74 ] (على الرغم من أن اللوم يقع على نطاق واسع بسبب بطء أداء لغة TI-BASIC ، إلا أن جزءًا من المشكلة كان يتمثل في تخزين الآلة الافتراضية في ذاكرة القراءة فقط الرسومية (ROM)، التي كانت تتميز بواجهة 8 بت بطيئة). [ 75 ]
أدى سوء فهم ذاكرة القراءة فقط (ROM) الخاصة بجهاز Apple II إلى اعتقاد البعض بأن لغة Integer BASIC تستخدم آلة افتراضية، وهي لغة تجميع مخصصة موجودة في ذاكرة القراءة فقط (ROM) الخاصة بأجهزة Apple وتُعرف باسم SWEET16 . تعتمد SWEET16 على رموز بايت تعمل ضمن آلة افتراضية بسيطة ذات 16 بت، مما يسمح بالوصول إلى الذاكرة عبر مؤشرات غير مباشرة ذات 16 بت وحساب الدوال الرياضية ذات 16 بت دون الحاجة إلى ترجمتها إلى كود 6502 الأساسي متعدد التعليمات ذي 8 بت. [ 76 ] مع ذلك، لم تُستخدم SWEET16 في كود BASIC الأساسي، على الرغم من استخدامها لاحقًا لتنفيذ العديد من الأدوات المساعدة، مثل روتين إعادة ترقيم الأسطر. [ 77 ]
تحرير البرامج وتخزينها
تحرير البرامج
كانت معظم تطبيقات لغة BASIC في ذلك الوقت بمثابة مترجم للغة ومحرر سطور في آن واحد . عند تشغيل BASIC، كان يظهر >موجه أوامر حيث يمكن للمستخدم إدخال التعليمات. [ 78 ] كان هذا يُعرف باسم " الوضع المباشر ". عند بدء التشغيل، كان مترجم BASIC يعمل افتراضيًا في الوضع المباشر.
تُخزَّن العبارات التي تبدأ بأرقام في ذاكرة البرنامج لتنفيذها لاحقًا، [ 79 ] إما كأسطر جديدة أو باستبدال أي سطر كان يحمل نفس الرقم سابقًا. [ 80 ] أما العبارات التي تُدخل بدون رقم سطر فتُسمى أوامر، وتُنفَّذ فورًا. وتؤدي أرقام الأسطر التي لا تحتوي على عبارات (أي التي تليها علامة إرجاع ) إلى حذف سطر مُخزَّن مسبقًا.
عندما يكون البرنامج موجودًا في الذاكرة ويكتب المستخدم الأمر RUN، يدخل النظام في "الوضع غير المباشر". في هذا الوضع، يُضبط مؤشر ليشير إلى السطر الأول من البرنامج، على سبيل المثال، السطر 10. ثم يُسترجع النص الأصلي لهذا السطر من الذاكرة ويُنفذ كما لو أن المستخدم قد كتبه للتو في الوضع المباشر. بعد ذلك، ينتقل المؤشر إلى السطر التالي وتستمر العملية.
قدّمت تطبيقات مختلفة إمكانيات تحرير برامج أخرى. احتوى برنامج Altair BASIC 8K على EDITأمرٍ للانتقال إلى وضع التحرير لسطر واحد. كما تضمن برنامج Integer BASIC أمرًا AUTOلإدخال أرقام الأسطر تلقائيًا بدءًا من رقم معين، مثل AUTO 100300، مع إضافة 10 إلى الرقم الأخير مع كل سطر جديد. AUTO 300,5يبدأ الترقيم من السطر 300 بزيادة خمسة في كل مرة؛ 300، 305، وهكذا. يمكن إيقاف الترقيم التلقائي بإدخال الأمر MAN. [ 81 ] وقدّمت بعض المفسرات أوامر أو أدوات لإعادة ترقيم الأسطر.
تجزئة وتشفير الأسطر
لتوفير ذاكرة الوصول العشوائي (RAM) وتسريع التنفيذ، تقوم جميع مترجمات لغة BASIC بترميز بعض أحرف ASCII في الأسطر إلى تمثيلات أخرى. على سبيل المثال، يتم تحويل أرقام الأسطر إلى أعداد صحيحة تُخزن كبايتات أو كلمات ، وقد تُخصص للكلمات المفتاحية رموز أحادية البايت (على سبيل المثال، تخزينها PRINTكقيمة البايت 145 في MS-BASIC). ثم تُحوّل هذه التمثيلات مرة أخرى إلى نص قابل للقراءة عند LISTتشغيل البرنامج.
| لهجة من لغة بيسك | أرقام الأسطر | الكلمات المفتاحية | الثوابت العددية | أسماء المتغيرات |
|---|---|---|---|---|
| Tiny Basic | نعم | لا | لا | لا |
| ألتاير بيسك | نعم | نعم | لا | لا |
| لغة بيسك للأعداد الصحيحة | نعم | نعم | نعم | لا |
| أتاري بيسك | نعم | نعم | نعم | نعم |
الاختصارات
كبديل لتقسيم النص إلى رموز، ولتوفير ذاكرة الوصول العشوائي (RAM)، قامت تطبيقات Tiny BASIC المبكرة مثل Extended Tiny BASIC [ 82 ] و Denver Tiny BASIC [ 83 ] وMINOL [ 84 ] باقتطاع الكلمات المفتاحية: PRfor PRINTو INfor INPUTو RETfor RETURN. لم يتم قبول الكلمات المفتاحية الكاملة والتقليدية.
على النقيض من ذلك، قبلت لغة Palo Alto Tiny BASIC الكلمات المفتاحية التقليدية، لكنها سمحت باختصار أي كلمة مفتاحية إلى أقصر سلسلة نصية فريدة لها، مع إضافة نقطة في النهاية. على سبيل المثال، PRINTيمكن كتابة P.، على الرغم من أن PR.و صيغًا أخرى كانت تعمل أيضًا. تم الاحتفاظ بهذا النظام في لغة Level I BASIC لجهاز TRS-80 ، التي استخدمت PATB، كما وُجد أيضًا في لغة Atari BASIC ولغة BASIC الخاصة بالعديد من أجهزة Sharp Pocket Computers . [ 85 ]
لتوسيع اختصار، يبحث مُجزئ الكلمات في لغة أتاري بيسك في قائمة الكلمات المحجوزة للعثور على أول كلمة تُطابق الجزء المُدخل. تظهر الأوامر الأكثر استخدامًا أولًا في قائمة الكلمات المحجوزة، مع وجود REMفي البداية (يمكن كتابتها كـ .). عند تحرير البرنامج لاحقًا، LISTفإنه عادةً ما يكتب الكلمات كاملة. سمحت لغة إم إس بيسك أيضًا ?باستخدام كاختصار لـ PRINT، لكنها قامت بتوسيعها عند سردها، مُعاملةً إياها كاختصار، وليس كمرادف.
التجزئة
تُجري معظم مُفسِّرات لغة BASIC تحويلاً جزئياً على الأقل من النص الأصلي إلى صيغ مختلفة خاصة بكل منصة. كانت لغة Tiny BASIC بسيطة للغاية، إذ اقتصرت على تحويل رقم السطر من صيغته العشرية إلى الثنائية. على سبيل المثال، أصبح رقم السطر "100" قيمة بايت واحدة، $64، مما سهّل تخزينه في الذاكرة وجعله أسهل في البحث عنه في لغة الآلة (سمحت بعض تصميمات Tiny BASIC بأرقام أسطر من 1 إلى 254 أو 255 فقط، بينما استخدمت معظمها قيم بايت مزدوجة وأرقام أسطر من 1 إلى 999 على الأقل). بقي باقي السطر بصيغته النصية الأصلية. [ 86 ] في الواقع، جادل دينيس أليسون بأنه، في ظل قيود الذاكرة، سيتطلب تجزئة النص (tokenization) كتابة كود أكثر مما سيوفره. [ 87 ]
ذهبت لغة MS-BASIC إلى أبعد من ذلك، حيث حوّلت رقم السطر إلى قيمة ثنائية البايت، وحوّلت أيضًا الكلمات المفتاحية، مثل FOR`or` PRINT، إلى قيمة أحادية البايت تُسمى "الرمز المميز". [ 88 ] تم ضبط البت الأعلى في قيمة الرمز المميز لتسهيل تمييزها أثناء التشغيل. أما باقي عناصر السطر، فبقي تنسيقها الأصلي، فعلى سبيل المثال، السطر:
10 من أجل I=1 إلى 10
سيتم تقسيمها إلى رموز على النحو التالي:
64 دولارًا أمريكيًا 81 دولارًا أمريكيًا I B211 A410 دولارًا أمريكيًا
لاحظ أن المسافة بين FORو Iتبقى في السطر المُجزأ، وأن أسماء المتغيرات والثوابت لا تُجزأ. يقوم الكود الذي يُجري هذه التجزئة، والمعروف باسم "المُجزئ"، بنسخ أي شيء لا يتعرف عليه كرمز إلى المخرجات، مع الحفاظ على المسافات كما هي. هذا يعني أن PRINTAيُخزن في بايتين، بينما PRINT Aيُخزن في ثلاثة بايتات، وكان حذف المسافات طريقة شائعة لتحسين استخدام الذاكرة. [ 89 ] عدّلت لغة Sinclair BASIC هذا الأمر قليلاً، حيث حذفت المسافات من الكود المخزن وأدرجتها في الكود أثناء LIST، بحيث PRINTAيظهر PRINT Aدون أن يشغل البايت الإضافي في الذاكرة.
على النقيض من ذلك، كانت لغة Integer BASIC تحوّل السطر 10 GOTO 100بالكامل إلى رموز يمكن قراءتها وتنفيذها فورًا. في لغة MS-BASIC، كان السطر يُنتج قيمةً $64 $89 100، وكان يجب تحويل الرقم "100" إلى تنسيق 16 بت في كل مرة يُصادف فيها أثناء التشغيل. في المقابل، قامت Integer BASIC أيضًا بتقسيم المتغيرات العددية إلى رموز، متجنبةً هذا التحويل ومسرّعةً التنفيذ. تم إدراج القيمة الناتجة المكونة من بايتين في الكود المُقسّم إلى رموز، بالإضافة إلى بايت بادئة يُشير إلى الرقم الذي يليه. كانت البادئة قيمةً بين $B0 و $B9 ، وكان النصف الأخير من القيمة هو أول رقم عشري في القيمة الأصلية. أما السلاسل النصية، مثل "HELLO WORLD"، فكانت تُشفّر بتعيين البت الأعلى لكل حرف بحيث يتم تخزينها كـ $C1 . تم تحويل أسماء المتغيرات بنفس الطريقة، حيث تم ترميز الأحرف بحيث يتم تفعيل بتاتها العليا، وتمثيل أي أرقام في الاسم بالرموز المقابلة من $B0 إلى $B9 ، بحيث يتم ترميز المتغير كـ $C1B5 (دون اختزاله إلى رمز مميز). [ 90 ] كانت هناك العديد من التحسينات الأخرى؛ فبينما كان لدى Microsoft BASIC رمز مميز واحد للكلمة المفتاحية ، كان لدى Integer BASIC ثلاثة رموز مميزة: رمز واحد إذا لم يتبع الكلمة المفتاحية أي وسيط، ورمز واحد إذا تبعها تعبير حسابي، ورمز واحد إذا تبعها نص حرفي. [ 91 ]AA5PRINT
وبالتوسع في هذا المفهوم، يقوم مُجزئ لغة أتاري بيسك بتحليل السطر بأكمله عند إدخاله أو تعديله. تُحلل الثوابت العددية إلى شكلها الداخلي ذي 48 بت، ثم تُوضع في السطر بهذا الشكل، بينما تُترك السلاسل النصية بصيغتها الأصلية، ولكن يُسبقها بايت يصف طولها. تُخصص مساحة تخزين للمتغيرات عند مصادفتها، بدلاً من وقت التشغيل، ويُستبدل اسمها بمؤشر إلى موقع تخزينها في الذاكرة. أشار شيباردسون إلى مفهوم التجزئة المبكرة هذا باسم "المفسر المُسبق للترجمة"؛ إذ لا يمكن تخزين العبارات التي تحتوي على أخطاء في بناء الجملة، ويُطلب من المستخدم تصحيحها فورًا. [ 92 ]
التجزئة باستخدام لوحة المفاتيح

تعتمد بعض المترجمات، مثل أنظمة سينكلير، على قيام المستخدم بتقسيم النص إلى كلمات باستخدام اختصارات لوحة المفاتيح لإدخال الكلمات المحجوزة. تتطلب الأوامر الأكثر شيوعًا ضغطة مفتاح واحدة فقط؛ على سبيل المثال، الضغط على مفتاح معين Pفي بداية السطر على جهاز سبكتروم يُنتج الأمر الكامل PRINT. أما الأوامر الأقل شيوعًا فتتطلب تسلسلات مفاتيح أكثر تعقيدًا. [ 93 ] بما أن كل سطر يبدأ بكلمة مفتاحية، LETفإن إدخال كلمة مفتاحية ليس اختياريًا، فبعد كتابة كلمة مفتاحية، يعود النظام إلى قبول النص حرفًا حرفًا. من مزايا هذا الأسلوب أن مُقسِّم النص لا يخلط بين السلاسل النصية والكلمات المفتاحية. على سبيل المثال، يسمح بتسمية متغير PRINTوإخراج قيمته باستخدام PRINT PRINT.
تستخدم العديد من " الحواسيب الجيبية " ضغطة مفتاح واحدة (تسبقها أحيانًا أنواع مختلفة من مفاتيح التحويل) لإنتاج بايت واحد (رمز الكلمة المفتاحية) يُمثل كلمة مفتاحية كاملة في لغة BASIC، مثل EXP وSQR وIF و PEEK ، كما هو الحال في مجموعات أحرف حواسيب Sharp الجيبية ولغة TI-BASIC . ويستخدم امتداد BASIC الخاص بجهاز Bally Astrocade هذه التقنية أيضًا.
إدارة الخطوط
| يتراوح | لهجة |
|---|---|
| من 1 إلى 254 | مينول |
| من 1 إلى 255 | ملاحظة تصميمية صغيرة بلغة BASIC |
| من 2 إلى 255 | دنفر تايني بيسك |
| من 0 إلى 999 | أساسيات جامعة إلينوي في أوربانا شامبين |
| من 1 إلى 2045 | DEC BASIC-8 |
| من 0 إلى 32767 | LLL BASIC، NIBL |
| من 1 إلى 32767 | لغة برمجة Apple I BASIC ، لغة برمجة Level I BASIC ، لغة برمجة Palo Alto Tiny BASIC |
| من 1 إلى 65535 | ألتاير 4K بيسك ، مايكرو بيسك 1.3، 6800 تايني بيسك، تايني بيسك إكستندد |
| من 1 إلى 99999 | دارتموث بيسك |
| من 1 إلى 999999 | سيلبال |
تختلف أرقام الأسطر الصالحة من تطبيق لآخر، ولكنها كانت عادة من 1 إلى 32767.
كانت معظم الذاكرة التي تستخدمها مترجمات لغة BASIC مخصصة لتخزين قائمة البرنامج نفسها. وكانت التعليمات المرقمة تُخزن بترتيب تسلسلي في مصفوفة متفرقة مُنفذة كمجموعة خطية (ليست قائمة بالمعنى التقني ، إذ لا يمكن أن يتكرر رقم السطر أكثر من مرة).
قامت العديد من تطبيقات Tiny BASIC بتخزين الأسطر على النحو التالي:
- المكافئ الثنائي لرقم السطر (بايت واحد أو اثنين، حسب نطاق أرقام الأسطر الصالحة المدعومة)
- بيان مصدر ASCII (طول متغير)
- إرجاع السطر (بايت واحد، تم ضبطه على 13)
كانت لغة مايكروسوفت بيسك، بدءًا من ألتاير بيسك، تخزن الأسطر على النحو التالي: [ 94 ]
- مؤشر إلى السطر التالي (بايتان)
- المكافئ الثنائي لرقم السطر (بايتان، بدون إشارة)
- بيان المصدر المُجزأ (طول متغير)
- فارغ (بايت واحد، يتم تعيينه إلى 0)
LLL BASIC: [ 95 ]
- المكافئ الثنائي لرقم السطر (بايتان)
- مؤشر للأمام إلى السطر التسلسلي التالي (بايتان)
- طول عبارة المصدر ASCII (بايت واحد)
- بيان مصدر ASCII (طول متغير)
كان الحد الأقصى لطول السطر يختلف: 64 حرفًا في Palo Alto Tiny BASIC، بما في ذلك التمثيل العشري لرقم السطر؛ 120 حرفًا في Atari BASIC؛ 128 حرفًا في Integer BASIC؛ [ 96 ] و255 حرفًا في MS-BASIC (بدون رقم السطر).
كانت المفسرات تبحث في البرنامج سطرًا سطرًا، ناظرةً إلى رقم كل سطر. إذا كان الرقم أقل من رقم السطر الجديد، تُنقل الأسطر اللاحقة في الذاكرة لإفساح المجال للسطر الجديد. أما إذا كان رقم السطر هو نفسه، ولكن ليس بنفس الطول تمامًا، فيجب نقل الأسطر اللاحقة للأمام أو للخلف. [ 97 ] (نظرًا لأن الترتيب التسلسلي كان يُحفظ دائمًا في الذاكرة، لم تكن هذه قوائم مرتبطة ).
في لغة Tiny BASIC، كانت عمليات البحث هذه تتطلب فحص كل بايت في السطر: حيث يتم زيادة المؤشر بشكل متكرر حتى الوصول إلى حرف إرجاع السطر، للعثور على البايت الذي يسبق السطر التالي. أما في لغتي Altair BASIC وLLL BASIC، فكان يتم ضبط المؤشر على بداية السطر التالي؛ وهذا أسرع بكثير، ولكنه يتطلب بايتين لكل سطر. ونظرًا لأن برامج Tiny BASIC كانت تُفترض أن تكون بحجم 4 كيلوبايت أو أقل، فقد كان هذا متوافقًا مع فلسفة تصميم Tiny BASIC العامة التي تُوازن بين الأداء وتقليل استخدام الذاكرة.
عندما يقوم المستخدم بالكتابة LISTفي سطر الأوامر، يقوم النظام بالتكرار على مصفوفة الأسطر، باستخدام إحدى هذه الطرق، وتحويل رقم السطر مرة أخرى إلى تنسيق عشري، ثم طباعة بقية النص في السطر، وفك تشفير أي رموز أو تمثيلات مشفرة أخرى.
عندما أضاف المطورون بنى البرمجة المهيكلة إلى لغة BASIC، قاموا في كثير من الأحيان بإزالة الحاجة إلى أرقام الأسطر تمامًا وأضافوا محررات النصوص ، وفي وقت لاحق، بيئات التطوير المتكاملة .
المتغيرات وأنواع البيانات
أسماء المتغيرات
كانت لغتا Dartmouth BASIC وHP-BASIC تُقيدان أسماء المتغيرات بحرفين كحد أقصى (إما حرف واحد أو حرف متبوع برقم واحد؛ مثلاً من A إلى Z9). أما لغة MS-BASIC فكانت تسمح بأسماء متغيرات تتكون من حرف متبوع بحرف أو رقم اختياري (مثلاً من A إلى ZZ)، لكنها تتجاهل الأحرف اللاحقة. وبالتالي، كان من الممكن كتابة برنامج عن غير قصد يحتوي على المتغيرين "LOSS" و"LOAN"، واللذين سيُعاملان على أنهما نفس المتغير؛ إذ أن إسناد قيمة إلى "LOAN" كان سيؤدي إلى استبدال القيمة المقصودة لـ "LOSS" دون أي تنبيه.
كانت لغة Integer BASIC فريدة من نوعها في دعمها لأسماء المتغيرات مهما كان طولها (مثل SUM وGAMEPOINTS وPLAYER2)، بشرط ألا تحتوي على كلمة محجوزة. [ 98 ] لم يكن بالإمكان استخدام الكلمات المفتاحية في المتغيرات في العديد من إصدارات BASIC المبكرة؛ فكانت كلمة "SCORE" تُفسَّر على أنها "SC" أو "E"، حيث كانت "OR" كلمة مفتاحية.
تُعرف متغيرات السلاسل النصية عادةً في العديد من لهجات لغة BASIC المستخدمة في الحواسيب الصغيرة بإضافة علامة الدولار ($) إلى اسمها، وغالبًا ما تُحدد القيم كسلاسل نصية بفصلها بعلامات اقتباس مزدوجة. في الإصدارات اللاحقة، استُخدمت علامات ترقيم أخرى لتحديد نوع المتغير: A% للأعداد الصحيحة، وA! للأعداد أحادية الدقة ، وA# للأعداد ثنائية الدقة .
باستثناء المصفوفات (وفي بعض التطبيقات) السلاسل النصية، وعلى عكس لغة باسكال وغيرها من لغات البرمجة الأكثر تنظيمًا، لا تتطلب لغة بيسك تعريف المتغير قبل استخدامه. عادةً ما تكون القيم الافتراضية صفرًا (بالدقة المناسبة) أو سلسلة نصية فارغة.
جدول الرموز
نظرًا لأن لغة Tiny BASIC كانت تستخدم 26 متغيرًا أحادي الحرف فقط، فقد كان من الممكن تخزين المتغيرات كمصفوفة دون تخزين أسمائها المقابلة، وذلك باستخدام صيغة تعتمد على قيمة ASCII للحرف كمؤشر. وقد طورت Palo Alto Tiny BASIC هذا الأمر خطوةً أخرى: حيث وُضعت قيم المتغيرات المكونة من بايتين في ذاكرة الوصول العشوائي (RAM) داخل البرنامج، من البايت 130 (ASCII 65، الحرف 'A'، مضروبًا في اثنين) إلى البايت 181 (ASCII 90، الحرف 'Z'، مضروبًا في اثنين، بالإضافة إلى واحد للبايت الثاني). [ 85 ]
معظم لغات BASIC توفر إمكانية وجود أكثر من 26 متغيرًا، وبالتالي فهي تحتاج إلى جداول رموز ، والتي من شأنها أن تخصص مساحة تخزين للمتغيرات المستخدمة فقط.
في لغة LLL BASIC، تم تخزين كل إدخال في جدول الرموز على النحو التالي: [ 99 ]
- اسم المتغير (البايت 1: حرف ASCII؛ البايت 2: 0-9 ASCII أو 0 ثنائي)
- مؤشر أمامي (2 بايت)
- القيمة (4 بايت لكل عنصر، عنصر واحد إذا كان متغيرًا قياسيًا، وإلا فإن عدد العناصر يساوي عدد العناصر في المصفوفة)
على عكس معظم مترجمات لغة BASIC، احتوت لغة UIUC BASIC على دالة تجزئة ، حيث يتم التجزئة باستخدام حرف اسم المتغير/الدالة/المصفوفة، ثم يتم إجراء بحث خطي انطلاقًا من ذلك الحرف. في لغة UIUC BASIC، كان مدخل جدول الرموز كالتالي: [ 58 ]
- العلم (البت 0: إدخال قيد الاستخدام؛ البت 6: دالة معرفة من قبل المستخدم؛ البت 7: مصفوفة}
- اسم المتغير (البايت 1: حرف ASCII؛ البايت: 0-9 ASCII، " "، أو "(") أو اسم الدالة (البايت 1: حرف ASCII أو الرمز المميز 154 لـ
FN؛ حرف ASCII) - القيمة (5 بايت):
- قيمة الفاصلة العائمة لعدد قياسي
- تعريف المصفوفة (آخر 3 بايتات: البعد العلوي للبعد الأول والثاني والثالث، ويفترض أن تبدأ جميعها من 0)
- دالة المستخدم (أول بايتين مع عنوان الدالة؛ البايت 3 هو إزاحة جدول الرموز إلى معلمة المتغير الوهمي في تعريف الدالة).
في لغة أتاري بيسك، كانت مجموعة من المؤشرات (العناوين) تشير إلى بيانات متنوعة: تُخزَّن أسماء المتغيرات في جدول أسماء المتغيرات (VNTP – 82, 83 16 )، وتُخزَّن قيمها في جدول قيم المتغيرات (VVTP – 86, 87 16 ). وبفضل هذا التوجيه غير المباشر لأسماء المتغيرات، لم يكن الوصول إلى أي متغير يتطلب سوى بايت واحد للوصول إلى مدخله في الجدول المناسب. وكانت لمتغيرات السلاسل النصية مساحة تخزين خاصة بها.
تضمنت إحدى طرق تحسين أداء BBC BASIC استخدام قوائم مرتبطة متعددة للبحث عن المتغيرات بدلاً من قائمة طويلة واحدة، كما هو الحال في Microsoft BASIC .
إدارة الذاكرة
نظراً لصغر سعة ذاكرة الوصول العشوائي (RAM) في معظم الأنظمة التي كانت تُستخدم في الأصل لتشغيل مترجمات لغة BASIC، كان لا بد من استخدام تقنيات ذكية لإدارة الذاكرة. سمحت لغة Altair BASIC للمستخدمين باستعادة مساحة دوال حساب المثلثات إذا لم تكن قيد الاستخدام أثناء الجلسة. وضعت لغة PATB بداية أكثر الإجراءات الفرعية شيوعاً في مقدمة البرنامج لاستخدامها بواسطة RSTرمز العملية 8080 أحادي البايت بدلاً من رمز العملية ثلاثي البايت CALL. في لغة LLL BASIC، شغلت بعض المتغيرات نفس مواقع الذاكرة، في الحالات التي استُخدمت فيها المتغيرات المختلفة فقط في وضع الأوامر أو فقط أثناء التشغيل. [ 100 ]
كان الفيديو غالبًا قابلًا للوصول إليه من الذاكرة، وكانت بعض الوظائف المتخصصة متاحةً من خلال تعديل القيم في مواقع ذاكرة محددة. على سبيل المثال، احتوت العناوين من 32 إلى 35 على أبعاد نافذة النص (مقارنةً بنافذة الرسومات) في لغة Applesoft BASIC. وفّر الأمر POKEوالدالة PEEK(المقتبسان من شاشات مراقبة لغة الآلة مثل شاشة DECsystem-10 [ 101 ] ) وصولًا مباشرًا إلى الذاكرة لأغراض متنوعة [ 102 ] ، لا سيما لتعديل سجلات الأجهزة الخاصة المُرتبطة بالذاكرة للتحكم في وظائف معينة للحاسوب، مثل وحدات الإدخال/الإخراج الطرفية. كانت "خرائط الذاكرة" (بالمعنى القديم لقوائم عناوين الذاكرة ووظائفها) شائعة الاستخدام مع برنامجي PEEK وPOKE ، ومن أشهر خرائط الذاكرة كتاب " Mapping the Atari " الذي ألفه إيان تشادويك.
تتطلب بعض تطبيقات مترجم مايكروسوفت، مثل تلك التي تعمل على طرازي TRS-80 الأول والثالث، من المستخدم تحديد مقدار الذاكرة التي سيستخدمها المترجم. كان الهدف من ذلك هو تخصيص جزء من الذاكرة لتثبيت إجراءات فرعية للغة الآلة يمكن استدعاؤها من البرنامج المُفسَّر، مما يُسرِّع عملية التنفيذ. عند تشغيل الطرازين الأول والثالث، تظهر للمستخدم رسالة "حجم الذاكرة؟" لهذا الغرض.
الرياضيات
تستخدم لغة Integer BASIC، كما يوحي اسمها، الأعداد الصحيحة كأساس لحزمة العمليات الحسابية الخاصة بها. كانت هذه الأعداد تُخزّن داخليًا كرقم مكون من 16 بت، بنظام الترتيب الصغير (كما هو الحال في معالج 6502). هذا يسمح بقيمة قصوى لأي عملية حسابية بين -32767 و32767. أما العمليات الحسابية التي ينتج عنها قيم خارج هذا النطاق فتُسبب خطأً. [ 103 ]
كانت معظم مترجمات لغة Tiny BASIC (وكذلك Sinclair BASIC 4K) تدعم العمليات الحسابية باستخدام الأعداد الصحيحة فقط، دون دعم للأعداد العشرية . وقد أتاح استخدام الأعداد الصحيحة تخزين الأرقام بتنسيق 16 بت أكثر إحكامًا، مما مكّن من قراءتها ومعالجتها بسرعة أكبر من تنسيقات الأعداد العشرية 32 أو 40 بت الموجودة في معظم لغات BASIC في ذلك الوقت. إلا أن هذا الأمر حدّ من استخدامها كلغة برمجة عامة الأغراض.
كانت تطبيقات Business BASIC ، مثل Data General Business Basic ، أيضًا أعدادًا صحيحة فقط، ولكن عادةً بدقة أعلى: "دقة مزدوجة"، أي 32 بت (زائد أو ناقص 2,147,483,648) و "دقة ثلاثية" (زائد أو ناقص 1.4x10^14).
استُخدمت أحيانًا تنسيقات أرقام حاسوبية أخرى . على سبيل المثال، كان برنامج MINOL Tiny BASIC يدعم البايتات غير الموقعة فقط ، [ 84 ] بينما استخدم برنامج MICRO-BASIC Tiny BASIC نظام العد العشري المشفر ثنائيًا . [ 104 ] لكن سرعان ما ساد استخدام الأعداد العشرية ذات الفاصلة العائمة.
الفاصلة العائمة
تُجسّد إحدى القصص سبب أهمية الأعداد العشرية. كان النموذج الأولي لجهاز TRS-80 Model I يعمل بنسخة لي-تشين وانغ المجانية من لغة Tiny BASIC . لم تتطلب هذه النسخة سوى 2 كيلوبايت من الذاكرة للمُفسّر ، مما ترك 2 كيلوبايت أخرى في المتوسط لبرامج المستخدم في تخطيطات الذاكرة الشائعة للأجهزة القديمة التي تبلغ 4 كيلوبايت. خلال عرض توضيحي للمديرين التنفيذيين، حاول تشارلز تاندي ، رئيس شركة تاندي آنذاك ، إدخال راتبه لكنه لم يتمكن من ذلك. كان السبب هو أن Tiny BASIC تستخدم أعدادًا صحيحة مُوقّعة من 2 بايت بقيمة قصوى تبلغ 32767. نتج عن ذلك طلبٌ لإضافة دعم الأعداد العشرية في النسخة الإنتاجية. [ 105 ] أدى هذا إلى استبدال رمز الأعداد الصحيحة الحالي ذي 16 بت بنسخة تستخدم أعدادًا عشرية أحادية الدقة من 32 بت، وذلك بواسطة ستيف لينينجر، أحد موظفي تاندي. [ 106 ]
استخدم برنامج SCELBAL إجراءات الفاصلة العائمة التي نشرها وادزورث عام 1975 في كتابه "برمجة لغة الآلة للمعالج 8008"، والمبنية على تنسيق 32 بت (أربعة بايتات) للحسابات العددية، مع جزء كسري مكون من 23 بتًا ، وإشارة مكونة من بت واحد للجزء الكسري، وأس مكون من 7 بتات، وإشارة مكونة من بت واحد للأس. وقد رُتبت هذه الأجزاء بترتيب عكسي، حيث كان البايت الأقل أهمية للجزء الكسري في البايت الأول، يليه البايت الأوسط، ثم البايت الأكثر أهمية مع الإشارة في البت الأعلى. وجاء الأس أخيرًا، مع الإشارة أيضًا في البت الأعلى. [ 107 ] ويوفر الدليل شفرة تجميع موثقة جيدًا لحزمة العمليات الحسابية بأكملها، بما في ذلك نقاط الدخول وملاحظات الاستخدام. [ 108 ]
كان يُستعان عادةً بالخبراء الاستشاريين للتعامل مع العمليات الحسابية ذات الفاصلة العائمة ، وهو مجال متخصص دُرِسَ وطُوِّرَ جيدًا للتطبيقات العلمية والتجارية التي ميزت الحواسيب المركزية. عندما كان ألين وغيتس يطوران لغة Altair BASIC، أقنعهما زميلهما في جامعة هارفارد، مونتي دافيدوف، بالتحول من العمليات الحسابية للأعداد الصحيحة . فاستعانوا بدافيدوف لكتابة حزمة برمجية للفاصلة العائمة تتناسب مع حدود الذاكرة البالغة 4 كيلوبايت. لجأ ستيف وزنياك إلى روي رانكين من جامعة ستانفورد لتنفيذ الدوال المتسامية LOG وLOG10 وEXP؛ [ 109 ] إلا أن وزنياك لم يُكمل إضافة دعم الفاصلة العائمة إلى لغة Integer BASIC. أما لغة LLL BASIC ، التي طُوِّرت في جامعة أيداهو على يد جون ديكنسون وجيري باربر وجون تيتر، فقد استعانت بديفيد ميد وهال براند وفرانك أولكن لدعم الفاصلة العائمة. [ 110 ] بالنسبة للغة UIUC BASIC، تم ترخيص حزمة Datapoint 2200 للفاصلة العائمة. [ 111 ]
في المقابل، اعتمدت أنظمة المشاركة الزمنية في كثير من الأحيان على مكونات مادية. فعلى سبيل المثال، تم اختيار معالج GE-235 لتنفيذ الإصدار الأول من لغة دارتموث بيسك تحديدًا لأنه كان يحتوي على " وحدة حسابية مساعدة " لإجراء حسابات الفاصلة العائمة والحسابات ذات الدقة المزدوجة. [ 112 ] [ 113 ]
استخدمت المترجمات المبكرة تنسيقات 32 بت، على غرار تنسيق IEEE 754 الثنائي ذي الدقة المفردة للفاصلة العائمة ، والذي يحدد ما يلي:
- بت الإشارة : 1 بت
- عرض الأس : 8 بت
- دقة المعامل : 24 بت (23 بت مخزنة بشكل صريح)
إليك القيمة 0.15625 كما تم تخزينها بهذا الشكل: ![]()
بينما كانت تنسيقات 32 بت شائعة في تلك الحقبة، اعتمدت الإصدارات اللاحقة من لغة BASIC، بدءًا من Microsoft BASIC لجهاز MOS 6502 ، بشكل عام تنسيق 40 بت (خمسة بايتات) لمزيد من الدقة. [ 114 ]
المشغلون والوظائف
تضمنت عوامل التشغيل الوسطية عادةً +الجمع -والطرح *والضرب /والقسمة والأس باستخدام ^الحرف. وشملت العمليات النسبية المجموعة القياسية من =، >، ، <، >=، <=و، وللدلالة على "عدم المساواة" إما <>أو المستوحاة من HP-TSB# . [ 115 ] لم تكن عوامل التشغيل الثنائية، مثل AND، و ، ORو NOT، موجودة في كل تطبيق، وبعضها كان يدعم الجبر البولياني وبعضها الآخر لم يكن كذلك.
تضمنت الطبعة الأولى من لغة دارتموث بيسك الدوال التالية: ABS( القيمة المطلقة )، ATN( الظل العكسي )، COS( جيب التمام )، EXP( إي مرفوعًا للأس)، INT(تقريب أي قيمة كسرية وإرجاع عدد صحيح)، LOG( اللوغاريتم )، RND( مولد الأرقام العشوائية الزائفة )، SIN( الجيب )، SQR( الجذر التربيعي )، و TAN( الظل ). كما تضمنت DEF FNعبارة لتعريف الدوال في سطر واحد، والتي يُشار إليها حينها بـ FNA()، FNB()إلخ.
كانت هذه RNDالوظيفة هي الوظيفة الأكثر انتشارًا التي تم دعمها في لغات BASIC المبكرة، على الرغم من اختلاف التطبيقات:
- تجاهلت جامعة دارتموث
RNDالمعامل وقامت دائمًا بإرجاع رقم عشوائي زائف جديد بين 0 و 1. - استخدمت لغة Altair BASIC، ولاحقًا لغات Microsoft BASIC، إشارة المعامل: بالنسبة للدالة RND(X)، "X<0 يبدأ سلسلة جديدة من الأرقام العشوائية باستخدام X. استدعاء الدالة RND بنفس قيمة X يبدأ نفس سلسلة الأرقام العشوائية. X=0 يعطي آخر رقم عشوائي تم إنشاؤه." [ 116 ]
- نظرًا لعدم القدرة على إرجاع عدد عشري، استخدمت لغات BASIC التي تعتمد على الأعداد الصحيحة فقط قيمة المعامل، عادةً لتحديد حد أعلى للعشوائية؛ على سبيل المثال، في لغة Integer BASIC نفسها،
RND(6)+1ستحاكي رمية نرد، وتعيد قيمًا من 1 إلى 6. - في المقابل، في بعض لغات البرمجة الأساسية TRS-80، كان المعامل هو الحد الأعلى الذي يمكن إرجاعه؛ على سبيل المثال،
RND(6)سيرجع قيمة من 1 إلى 6،RND(1)وسيرجع دائمًا 1. [ 117 ]
المصفوفات
دعمت النسخة الثانية من لغة دارتموث بيسك المصفوفات وعمليات المصفوفات ، وهو أمر مفيد لحل مجموعات المعادلات الجبرية الخطية المتزامنة؛ MATوتم دعم عمليات المصفوفات مثل التعيين والجمع والضرب (لأنواع المصفوفات المتوافقة) وتقييم المحدد.
على النقيض من ذلك، لم يكن لدى Tiny BASIC، في تصميمها الأولي، أي مصفوفات، وذلك بسبب محدودية الذاكرة الرئيسية المتاحة في الحواسيب الصغيرة القديمة ، والتي كانت غالبًا 4 كيلوبايت، والتي كان لا بد من أن تشمل كلًا من المفسر وبرنامج BASIC. أضافت Palo Alto Tiny BASIC مصفوفة واحدة متغيرة الطول من الأعداد الصحيحة، لم يكن من الضروري تحديد حجمها، بل كانت تستخدم ذاكرة الوصول العشوائي (RAM) غير المستخدمة من قبل المفسر أو قائمة البرنامج A().
دعمت لغة SCELBAL مصفوفات متعددة، ولكن مجموع عناصر هذه المصفوفات لا يتجاوز 64 عنصرًا. دعمت لغة Integer BASIC مصفوفات أحادية البعد، وكان حجمها محدودًا فقط بالذاكرة المتاحة. [ 118 ] دعمت لغة Tiny BASIC Extended مصفوفات ثنائية الأبعاد تصل إلى 255 × 255. دعمت لغة Altair BASIC 4K المصفوفات فقط (أحادية البعد)، بينما دعمت النسخة 8K مصفوفات تصل إلى 34 بُعدًا. [ 119 ]
دعمت العديد من التطبيقات ممارسة Dartmouth BASIC المتمثلة في عدم اشتراط تحديد أبعاد المصفوفة، وفي هذه الحالة كان من المفترض أن تحتوي على 11 عنصرًا (من 0 إلى 10)؛ على سبيل المثال، {{{1}}}سيؤدي ذلك إلى إنشاء مصفوفة مكونة من 11 عنصرًا كأثر جانبي.
يختلف متجه dope للمصفوفات من تطبيق لآخر. على سبيل المثال، متجه dope لمصفوفة Altair BASIC 4K: [ 94 ]
- اسم المتغير (بايتان)
- حجم عناصر المصفوفة بالبايت (2 بايت، أي 4 أضعاف عدد العناصر، وهو الحد الأعلى زائد واحد)
ثم قيم المصفوفة نفسها:
- قيمة العنصر 0 (4 بايت)
- قيمة العنصر 1 (4 بايت)
- ...
- قيمة العنصر N (4 بايت)
كان على التطبيقات التي تدعم المصفوفات تسجيل عدد الأبعاد والحد الأعلى لكل بُعد. علاوة على ذلك، ولأن بعض المفسرات لا تدعم سوى نوع بيانات واحد (إما عدد عشري أو عدد صحيح)، كان يكفي أن يسجل متجه البيانات عدد الأبعاد والحد الأعلى لكل بُعد. أما المفسرات التي تدعم أنواع بيانات متعددة، فكان عليها تسجيل نوع بيانات المصفوفة.
على الرغم من أن مايكروسوفت وغيرها من لغات BASIC كانت تدعم المصفوفات، إلا أن عمليات المصفوفات لم تكن مدمجة ولكن كان يجب برمجتها بشكل صريح على عناصر المصفوفة.
الأوتار
افتقرت لغة دارتموث بيسك الأصلية، وبعض اللغات اللاحقة لها، وتطبيقات تايني بيسك، إلى معالجة النصوص. وقد تطورت مدرستان متنافستان في معالجة النصوص، رائدتاهما شركتا إتش بي ودي إي سي، على الرغم من ظهور مناهج أخرى لاحقًا. وقد تطلبت هذه المناهج استراتيجيات مختلفة للتنفيذ.
| لهجة من لغة بيسك | يكتب | السلاسل الفرعية |
|---|---|---|
| HP Time-Shared BASIC | طول ثابت | التقطيع |
| DEC BASIC-PLUS | طول متغير | الوظائف |
| دارتموث بيسيك، الطبعة الرابعة | طول متغير | فهرسة المصفوفات |
| Tiny Basic | مصفوفة الأعداد الصحيحة | فهرسة المصفوفات |
استُخدمت أبسط طرق معالجة السلاسل النصية في لغة HP Time-Shared BASIC ، حيث عُرّفت متغيرات السلاسل النصية كمصفوفات من الأحرف التي يجب DIMتحديدها قبل الاستخدام. تُعامل السلاسل النصية في HP TSB كمصفوفة من الأحرف، يصل عددها إلى 72 حرفًا، بدلاً من كائن واحد متعدد الأحرف. افتراضيًا، يُخصص لكل سلسلة حرف واحد في الذاكرة، وإذا لزم إنشاء سلسلة نصية أطول، فيجب تعريفها. على سبيل المثال، سيتم إنشاء سلسلة نصية يمكنها استيعاب 10 أحرف كحد أقصى. [ 120 ]DIMA$[10]
يتم الوصول إلى السلاسل الفرعية داخل السلاسل النصية باستخدام صيغة " التقطيع ": أو ، حيث تبدأ السلسلة الفرعية من الحرف الأيسر المحدد بالفهرس L وتستمر حتى الحرف الأيمن المحدد بالفهرس R، أو الصيغة حيث تبدأ السلسلة الفرعية من الحرف الأيسر المحدد بالفهرس L وتستمر حتى نهاية السلسلة النصية. يقبل TSB الأقواس () أو [] بشكل تبادلي. تبدأ فهارس المصفوفات والسلاسل الفرعية من 1.A$(L,R)A$[L,R]A$[L]
يُعدّ هذا الأمر مُغايرًا تمامًا للغات BASIC التي تتبع نمط DEC، والتي تستخدم دوالًا مثل LEFT$()`f` MID$()و`f` و`f` RIGHT$()للوصول إلى السلاسل الفرعية. لاحقًا، اعتمدت لغة ANSI BASIC ترميز HP، والذي يُمكن استخدامه أيضًا في جانب الوجهة لعبارة `f` LETأو ` INPUTf` لتعديل جزء من قيمة سلسلة نصية موجودة، على سبيل المثال ` f` أو ` f`، وهو ما لا يُمكن فعله في الإصدارات السابقة من `f` .100A$[3,5]="XYZ"120B$[3]="CHANGE ALL BUT FIRST TWO CHARS"LEFT$/MID$/RIGHT$
تضمنت الإصدارات اللاحقة من لغة دارتموث بيسكLEFT$/MID$/RIGHT$ متغيرات السلاسل النصية. مع ذلك، لم تستخدم هذه الإصدارات دوال معالجة السلاسل النصية، بل استخدمت CHANGEالأمر الذي يحول السلسلة النصية من وإلى قيم ASCII المكافئة. (اعتمدت شركة DEC هذا الأمر لاحقًا كما هو، وقامت HP بتعديله، حيث غيرت الكلمة المفتاحية إلى CONVERT. [ 120 ] ). بالإضافة إلى ذلك، كان بالإمكان استخدام علامة الاقتباس المفردة لتحويل ثابت عددي إلى حرف ASCII، مما يسمح ببناء سلسلة نصية على أجزاء؛ على سبيل المثال، A$='65 '66 '67 "DEF"أنتجت السلسلة "ABCDEF" دون الحاجة إلى الدالة CHR$(). [ 120 ] دعمت دارتموث بيسك، الإصدار السادس، SEG$(لـ MID$) و POS(لـ INSTR).
لقد حاكت لغات البرمجة Integer BASIC و North Star BASIC [ 121 ] و Atari BASIC [ 122 ] نهج شركة HP، وهو ما يتناقض مرة أخرى مع الأسلوب الموجود في لغات BASIC المشتقة من DEC ، بما في ذلك Microsoft BASIC ، حيث تكون السلاسل نوعًا متغير الطول بطبيعته. [ 123 ]
بعض تطبيقات Tiny BASIC دعمت مصفوفة واحدة أو أكثر من المصفوفات الصحيحة المحددة مسبقًا، والتي يمكن استخدامها لتخزين رموز الأحرف، بشرط أن تحتوي اللغة على وظائف لإدخال وإخراج رموز الأحرف (على سبيل المثال، Astro BASIC كان لديه KPلهذا TVالغرض).
جمع القمامة

قد يؤدي تخصيص مقدار ثابت من الذاكرة للسلاسل النصية، بغض النظر عن عدد الأحرف المستخدمة فيها (بحد أقصى 255 حرفًا)، إلى هدر الذاكرة [ 124 ]، ولكنه يتميز بتجنب الحاجة إلى تطبيق عملية جمع البيانات المهملة من الذاكرة الرئيسية ، وهي شكل من أشكال إدارة الذاكرة التلقائية المستخدمة لاستعادة الذاكرة التي تشغلها السلاسل النصية غير المستخدمة. قد تُخزَّن السلاسل النصية القصيرة التي تم تحريرها في منتصف سلاسل نصية أخرى، مما يمنع استخدام تلك الذاكرة عند الحاجة إلى سلسلة نصية أطول.
في الحواسيب الصغيرة القديمة، ذات الذاكرة المحدودة والمعالجات البطيئة، كان جمع البيانات المهملة في لغة BASIC يتسبب غالبًا في توقفات عشوائية وغير مبررة أثناء تشغيل البرنامج. بعض مترجمات BASIC، مثل Applesoft BASIC على أجهزة Apple II ، كانت تفحص بشكل متكرر واصفات السلاسل النصية بحثًا عن السلسلة ذات العنوان الأعلى لضغطها في الذاكرة الرئيسية، مما ينتج عنه أداء من رتبة O(n² ) ، والذي قد يتسبب في توقفات طويلة تصل إلى دقائق في تنفيذ البرامج التي تتعامل مع السلاسل النصية بكثافة. كان جمع البيانات المهملة بطيئًا للغاية أو حتى معطلاً في إصدارات أخرى من Microsoft BASIC. [ 125 ] بعض أنظمة التشغيل التي تدعم مهام الخلفية القائمة على المقاطعات، مثل TRSDOS/LS-DOS 6.x على جهاز TRS-80 Model 4 ، كانت تستغل فترات عدم نشاط المستخدم (مثل الفترات القصيرة بين ضغطات المفاتيح والفترات التي تلي تحديث شاشة الفيديو) لمعالجة جمع البيانات المهملة أثناء تشغيل برامج BASIC.
وظائف أخرى
الرسومات والصوت
اختلفت معظم مترجمات لغة BASIC اختلافًا كبيرًا في الرسومات والصوت، والتي تباينت بشكل كبير من حاسوب صغير إلى آخر. افتقرت لغة Altair BASIC إلى أي أوامر رسومية أو صوتية، وكذلك تطبيقات Tiny BASIC، بينما وفرت لغة Integer BASIC مجموعة غنية منها.
كانت لغة BASIC من المستوى الأول لجهاز TRS-80 تحتوي على مجموعة أوامر بسيطة قدر الإمكان: CLSأمر مسح الشاشة، SET(X,Y)وأمر إضاءة موقع على الشاشة، RESET(X,Y)وأمر إطفاء الشاشة، POINT(X,Y)وأمر إرجاع القيمة 1 إذا كان الموقع مضاءً، و0 إذا كان مطفأً. يمكن أن تكون الإحداثيات أي تعبير، وتتراوح قيمها من 0 إلى 127 للمحور السيني ، ومن 0 إلى 47 للمحور الصادي . كانت الشاشة تدعم العرض بالأبيض والأسود فقط. [ 126 ]
على النقيض من ذلك، دعمت لغة Integer BASIC الرسومات الملونة والصوت البسيط ووحدات تحكم الألعاب. يتم تشغيل وضع الرسومات باستخدام الأمر `graphics` GRوإيقافه باستخدام الأمر `graphics` TEXT. [ 127 ] كان الرسم مشروطًا، ويبدأ عادةً بإصدار أمر لتغيير اللون، والذي يتم عن طريق تعيين متغير وهمي؛ على سبيل المثال، COLOR=12سيُعيّن الأمر `graphics` لون الرسم إلى 12، أي الأخضر الفاتح. يمكن للمستخدم بعد ذلك PLOT 10,10إنشاء بقعة واحدة بهذا اللون، [ 128 ]HLIN 0,39 AT 20 أو رسم خط أفقي في الصف 20 يمتد على كامل الشاشة، أو VLIN 5,15 AT 7رسم خط رأسي أقصر في العمود 7. [ 129 ]A=SCRN X,Y تُعيد الدالة `graphics` لون الشاشة عند الإحداثيات X وY. [ 130 ] [ b ]

غالبًا ما كان مصنّعو الأجهزة يُضمّنون دعمًا خاصًا للرسومات شبه الرسومية ، والأشكال البسيطة، والأيقونات التي تُعامل كأحرف خاصة . ومن الأمثلة على ذلك الرسومات الكتلية لجهاز ZX-81، ورموز أوراق اللعب ♠، ♣، ♥، و♦ في مجموعة أحرف PETSCII الخاصة بشركة Commodore International . وكان بإمكان لغة BASIC توليد هذه الرموز باستخدام ...PRINT CHR$();
أضافت مايكروسوفت العديد من أوامر الرسومات إلى لغة IBM BASIC ، منها LINE: PSET(Pixel SET)، و PRESET(Pixel RESET)، و GET(تخزين مستطيل من الشاشة في مصفوفة)، PUTو(عرض جزء مستطيل مُخزّن)، و LOCATE(تحريك مؤشر الكتابة)، و DRAW(رسم الأشكال باستخدام صيغة مشابهة لـ LOGO ) . وقد كتب بيل غيتس ونيل كونزن لعبة DONKEY.BAS ، وهي لعبة مُرفقة، لعرض رسومات الألوان والصوت في المُفسِّر . [ 131 ]
المدخلات/المخرجات
وثمة مجال آخر تباينت فيه التطبيقات وهو الكلمات الرئيسية للتعامل مع الوسائط (الأشرطة والأقراص المرنة)، وإدخال لوحة المفاتيح، ووحدات التحكم في الألعاب (إن وجدت).
بما أن مترجمات لغة BASIC القائمة على ذاكرة ROM كانت تعمل غالبًا كواجهات لتحميل تطبيقات أخرى، فقد أضافت التطبيقات أوامر متعلقة بأشرطة الكاسيت (مثل `csette` CLOADو`csette` CSAVE)، وملفات القرص الثنائية (مثل `csette` BLOADو` BSAVEcsette` و`csette` BRUN)، وبرامج BASIC على القرص (مثل `csette` LOADو` SAVEcsette` و`csette` CATALOG). كما أضافت تطبيقات BASIC للأعمال أوامر لملفات الوصول العشوائي. (حتى مترجمات BASIC القائمة على ذاكرة ROM لم تُصمم أو يُقصد استخدامها كأنظمة تشغيل، وكانت الحواسيب الصغيرة تفتقر تمامًا إلى أي نظام تشغيل. [ 132 ] )
كانت لغة دارتموث بيسك تفتقر إلى أمرٍ يسمح بإدخال البيانات من لوحة المفاتيح دون إيقاف البرنامج مؤقتًا. ولدعم ألعاب الفيديو ، أضافت لغات بيسك أوامر خاصة للقيام بذلك: INKEY$كانت هناك دالة في مايكروسوفت بيسك تُعيد سلسلة نصية فارغة إذا لم يتم الضغط على أي مفتاح، أو حرفًا واحدًا في حال الضغط على أي مفتاح؛ KP(بالنسبة لـ KeyPress ) كانت تُعيد قيمة ASCII للإدخال في أسترو بيسك .
كانت لغة Palo Alto Tiny BASIC تفتقر إلى السلاسل النصية ولكنها كانت تسمح للمستخدمين بإدخال التعبيرات الرياضية كإجابة على INPUTالعبارات؛ من خلال تعيين متغيرات، مثل Y=1; N=0، يمكن للمستخدم الإجابة بـ "نعم" أو "1" أو حتى "3*2-5" عند مطالبة بنعم/لا.
دعمت بعض الأنظمة وحدات تحكم الألعاب. دعمت لغة Astro BASIC JX()تحديد الموضع الأفقي لعصا التحكم، JY()والموضع الرأسي لها، KN()وحالة المقبض، TR()وحالة الزناد. كما دعمت لغة Integer BASIC وحدة تحكم ألعاب ، وهي وحدة تحكم بمجداف ، تحتوي على وحدتي تحكم على موصل واحد. يمكن قراءة موضع وحدة التحكم باستخدام الدالة PDL، مع تمرير رقم وحدة التحكم، أو 0 أو 1، على سبيل المثال A=PDL(0):PRINT A، وإرجاع قيمة بين 0 و255. [ 133 ] [ c ]
كانت لغة Integer BASIC تفتقر إلى أي أوامر إدخال/إخراج مخصصة، كما كانت تفتقر إلى DATAعبارة `get` و `get` المرتبطة بها READ. ولإدخال البيانات إلى البرنامج وإخراجها منه، كانت وظيفة الإدخال/الإخراج تُعاد توجيهها إلى خانة بطاقة محددة باستخدام `get` PR#xو ` IN#xget`، اللتين تُعيدان توجيه الإخراج أو الإدخال (على التوالي) إلى الخانة المرقمة. ومنذ ذلك الحين، أصبح بالإمكان إرسال البيانات إلى البطاقة باستخدام PRINTالأوامر التقليدية وقراءتها منها باستخدام `get` INPUT. [ 130 ] أما إنتاج الأصوات فكان يتم عن طريق ` PEEKget` في موقع مُخزّن في الذاكرة لجهاز تنبيه بسيط، وهو -16336. [ د ]
البرمجة الهيكلية
على الرغم من أن البرمجة الهيكلية ، من خلال أمثلة ALGOL 58 و ALGOL 60 ، كانت معروفة لدى كيميني وكورتز عند تصميمهما للغة BASIC، إلا أنهما اعتمدا حلقة for فقط، متجاهلين عبارة else، وحلقة while، وحلقة repeat، والإجراءات المسماة، وتمرير المعاملات، والمتغيرات المحلية. ونتيجة لذلك، اختلفت اللهجات اللاحقة اختلافًا كبيرًا في الصياغة المستخدمة للتقنيات الهيكلية. على سبيل المثال، WHILE...WEND(في Microsoft BASIC )، WHILE...ENDWHILEو(في Turbo-Basic XL )، DO...LOOP WHILEوحتى WHILEالعبارات (كلاهما في BASIC-PLUS ).
من بين تطبيقات Tiny BASIC، كانت لغة البرمجة الصناعية الأساسية الوطنية (NIBL) هي الوحيدة التي توفر أمر تكرار من أي نوع DO/UNTIL. [ 135 ] وذلك على الرغم من أن مخترع Tiny BASIC، دينيس أليسون، قد أعرب علنًا عن أسفه لحالة لغة BASIC. [ 136 ]
كانت لغة BBC BASIC من أوائل لغات تفسير الحواسيب الصغيرة التي قدمت برمجة BASIC مُهيكلة، مع إجراءات ووظائف مُسماة، DEF PROCوحلقات تكرار، وهياكل مُستوحاة من لغة COMAL . وقد أدخلت لغات BASIC من الجيل الثاني - على سبيل المثال، SBASIC (1976)، و BBC BASIC (1981)، و True BASIC (1983) ، و Beta BASIC (1983)، و QuickBASIC (1985)، و AmigaBASIC (1986) - عددًا من الميزات إلى اللغة، تتعلق في المقام الأول بالبرمجة المُهيكلة والموجهة نحو الإجراءات. عادةً ما يتم حذف ترقيم الأسطر من اللغة واستبداله بتسميات (لأمر GOTO ) وإجراءات لتشجيع تصميم أسهل وأكثر مرونة. [ 137 ] بالإضافة إلى ذلك، تم تقديم كلمات مفتاحية وهياكل لدعم التكرار والاختيار والإجراءات ذات المتغيرات المحلية.DEF FNREPEAT UNTILIF THEN ELSE
المثال التالي مكتوب بلغة مايكروسوفت كيو بيسك، وهي ثالث تطبيق لمايكروسوفت للغة بيسك المهيكلة (بعد ماكنتوش بيسك في عام 1984 وأميغا بيسك في عام 1985). [ 138 ]
مثال REM QBASICتعريف REM المسبق - يسمح للبرنامج الرئيسي باستدعاء روتين فرعي REM يتم تعريفه لاحقًا في الكود المصدري DECLARE SUB PrintSomeStars ( StarCount! )REM يتبع البرنامج الرئيسي DO INPUT "كم عدد النجوم التي تريدها؟ (0 للخروج) " , NumStars CALL PrintSomeStars ( NumStars ) LOOP WHILE NumStars > 0 ENDتعريف الإجراء الفرعي REM SUB PrintSomeStars ( StarCount ) REM يستخدم هذا الإجراء متغيرًا محليًا يسمى Stars$ Stars$ = STRING$ ( StarCount , "*" ) PRINT Stars $ END SUBالتوجه الكائني
اقتصر الدعم الأولي للبرمجة كائنية التوجه على إعادة استخدام الكائنات المُنشأة بلغات أخرى، كما هو الحال في دعم Visual Basic و PowerBASIC لنموذج كائنات مكونات Windows . ومع استمرار تطور مترجمات BASIC، أُضيفت إليها ميزات البرمجة كائنية التوجه مثل الدوال ، والمنشئات ، وتخصيص الذاكرة الديناميكي ، والخصائص ، والتخصيص المؤقت.
يتضمن المنتج أداة تجميع
تضمنت ذاكرة القراءة فقط (ROM) الخاصة بلغة BASIC من نوع Integer أيضًا برنامجًا لمراقبة رمز الآلة ، و" مُجمِّعًا مصغرًا "، ومُفكِّكًا لإنشاء برامج لغة التجميع وتصحيح أخطائها. [ 90 ] [ 139 ] [ 140 ]
من أبرز ميزات لغة BBC BASIC وجود مُجمِّع مُضمَّن ، مما أتاح للمستخدمين كتابة برامج بلغة التجميع لمعالج 6502 ، ولاحقًا لمعالجات Zilog Z80 و NS32016 و ARM . كان المُجمِّع مُدمجًا بالكامل في مُفسِّر BASIC، ويتشارك معه المتغيرات التي يُمكن تضمينها بين الرمزين [ و]، وحفظها باستخدام الأمرَين *SAVE و*LOAD، واستدعاؤها باستخدام الأمرَين CALL أو USR. سمح هذا للمطورين بكتابة ليس فقط كود بلغة التجميع، بل أيضًا كود BASIC لإنتاج كود بلغة التجميع، مما مكّنهم من استخدام تقنيات توليد الكود، بل وكتابة مُترجمات بسيطة بلغة BASIC.
تنفيذ
تصحيح الأخطاء
كما هو الحال في معظم لغات BASIC، كانت البرامج تُشغَّل باستخدام RUNالأمر `print`، وكما هو شائع، كان من الممكن توجيهها إلى رقم سطر معين مثل ` print`RUN 300 . [ 141 ] ويمكن إيقاف التنفيذ في أي وقت باستخدام ` print` ( أو `print` كما في TRS-80) ثم إعادة تشغيله باستخدام `print` ( في Integer BASIC). [ 143 ] وبالاستفادة من الإمكانيات الفريدة للبرامج المفسرة (حيث تتم معالجة التعليمات البرمجية في الوقت الفعلي عبارةً تلو الأخرى، على عكس المترجمات )، كان بإمكان المستخدم على وحدة التحكم فحص بيانات المتغيرات باستخدام عبارة `print`، وتغيير هذه البيانات أثناء التنفيذ، ثم استئناف تنفيذ البرنامج.CtrlCCONTCON
للتنفيذ خطوة بخطوة، يمكن استخدام الأمر ` TRONor` TRACEفي موجه الأوامر أو وضعه داخل البرنامج نفسه. عند تفعيله، تُطبع أرقام الأسطر لكل سطر يزوره البرنامج. ويمكن إيقاف هذه الميزة مرة أخرى باستخدام TROFF`or` NOTRACE. [ 144 ]
تضمنت بعض التطبيقات، مثل مترجمات مايكروسوفت لمختلف طرازات TRS-80، الأمر التالي ON ERROR GOSUB. وكان هذا الأمر يعيد توجيه تنفيذ البرنامج إلى رقم سطر محدد لمعالجة الأخطاء بشكل خاص.
على عكس معظم لغات BASIC، كانت لغة Atari BASIC تفحص سطر البرنامج الذي تم إدخاله للتو، وتُبلغ عن أخطاء بناء الجملة فورًا. في حال العثور على خطأ، يُعيد المحرر عرض السطر، مع تمييز النص القريب من الخطأ في فيديو معكوس .
في العديد من برامج الترجمة، بما في ذلك Atari BASIC، تُعرض الأخطاء كرموز رقمية، مع وجود وصف لها في الدليل. [ 145 ] استخدمت العديد من برامج MS-BASIC اختصارات من حرفين (مثل SN لخطأ في بناء الجملة). بينما استخدمت Palo Alto Tiny BASIC وLevel I BASIC ثلاث كلمات لرسائل الخطأ: "ماذا؟" لأخطاء بناء الجملة، و"كيف؟" لأخطاء وقت التشغيل مثل الانتقال إلى سطر غير موجود أو تجاوزات الأرقام، و"آسف" لمشاكل نفاد الذاكرة.
التحليل
على الرغم من أن لغة BASIC تتميز ببنية نحوية بسيطة، إلا أن التعبيرات الرياضية ليست كذلك، إذ تدعم قواعد أسبقية مختلفة للأقواس ومعاملات رياضية مختلفة. ويتطلب دعم هذه التعبيرات تطبيق محلل نحوي تنازلي متكرر . [ 146 ]
يمكن تنفيذ هذا المحلل اللغوي بعدة طرق:
- كآلة افتراضية، كما ذُكر أعلاه بالنسبة للعديد من تطبيقات Tiny BASIC. تكمن قيمة مبادرة Tiny BASIC في تحديد تطبيق للمحلل اللغوي.
- باعتبارها آلة ذات حالة محدودة ، كما هو الحال في لغة UIUC BASIC IUC، حيث تم تنفيذها كجدول تحكم . [ 147 ]
- مباشرةً في الكود، كما في لغتي Palo Alto Tiny BASIC وInteger BASIC. في Integer BASIC، استخدم مُفسِّر وقت التشغيل مكدسين للتنفيذ: أحدهما لكلمات العبارات الرئيسية والآخر لتقييم المعاملات. مُنحت كل عبارة أولويتين: الأولى تُحدد موضعها في عملية متعددة الخطوات، مثل سلسلة من العمليات الحسابية لتحديد ترتيب العمليات ، والثانية تُشير إلى وقت التقييم، على سبيل المثال، حساب القيم الداخلية لصيغة الأقواس. عند مصادفة متغيرات، يُحلل اسمها ثم يُبحث عنها في جدول الرموز. إذا لم يُعثر عليها، تُضاف إلى نهاية القائمة. ثم يُوضع عنوان تخزين المتغير، الذي ربما أُنشئ حديثًا، على مكدس التقييم. [ 90 ]
أداء
غالباً ما يتم الكشف عن نطاق قرارات التصميم التي تم اتخاذها في برمجة مترجم لغة BASIC من خلال اختلافات الأداء.
غالبًا ما أثرت تطبيقات إدارة الأسطر على الأداء، وكانت تستخدم عادةً البحث الخطي . في لغة Tiny BASIC، وغيرها، كان على النظام قراءة كل بايت من شفرة المصدر بحثًا عن CR للعثور على سطر، مما يشير إلى أن العنصر التالي هو رقم سطر. هذا يعني أن النظام كان عليه قراءة البرنامج بأكمله حتى يعثر على هدفه لتنفيذ أمر GOTO أو GOSUB، مما أدى إلى انخفاض كبير في الأداء. أما لغات MS-BASIC، والعديد من مشتقاتها، فكانت تخزن مؤشرًا إلى السطر التالي، بحيث إذا لم يتطابق رقم سطر ما، فإنه ينتقل فورًا إلى رقم السطر التالي. استخدمت لغة Atari BASIC طول سطر 8 بت بدلًا من المؤشر، مما وفر بايتًا. كانت العديد من التطبيقات تبحث دائمًا عن رقم سطر للتفرع إليه من بداية البرنامج؛ بينما كانت لغة MS-BASIC تبحث من السطر الحالي إذا كان رقم سطر الوجهة أكبر. أضاف بيتمان رقعة برمجية إلى لغة Tiny BASIC الخاصة به (6800) لاستخدام البحث الثنائي. [ 148 ]
يُوفر الاعتماد على العمليات الحسابية للأعداد الصحيحة فقط دفعةً كبيرةً أخرى في السرعة. ولأن العديد من معايير أداء الحواسيب في ذلك الوقت كانت صغيرة الحجم، وغالبًا ما كانت تُجري عمليات حسابية بسيطة لا تتطلب استخدام الأعداد العشرية، فقد تفوقت لغة Integer BASIC على معظم لغات BASIC الأخرى. [ هـ ] في أحد أقدم معايير أداء الحواسيب الصغيرة المعروفة، وهي معايير Rugg/Feldman ، كانت لغة Integer BASIC أسرع بأكثر من الضعف من لغة Applesoft BASIC على نفس الجهاز. [ 150 ] في اختبار Byte Sieve ، حيث كانت العمليات الحسابية أقل أهمية، بينما كان أداء الوصول إلى المصفوفات والتكرار هو السائد، استغرقت لغة Integer BASIC 166 ثانية، بينما استغرقت لغة Applesoft 200 ثانية. [ 151 ] لم تظهر لغة Integer BASIC في معيار Creative Computing Benchmark ، الذي نُشر لأول مرة عام 1983، حيث لم تعد تُوفر افتراضيًا في ذلك الوقت. [ 152 ] تُظهر سلسلة الاختبارات التالية، المأخوذة من مقالتي Rugg / Feldman الأصليتين، [ 150 ] [ 149 ] أداء Integer بالنسبة إلى BASIC المشتق من MS على نفس المنصة.
| نظام | وحدة المعالجة المركزية | أساسي | الاختبار 1 | الاختبار الثاني | الاختبار 3 | الاختبار 4 | الاختبار 5 | الاختبار السادس | الاختبار 7 |
|---|---|---|---|---|---|---|---|---|---|
| أبل 2 | 6502 @ 1 ميجاهرتز | لغة بيسك للأعداد الصحيحة | 1.3 | 3.1 | 7.2 | 7.2 | 8.8 | 18.5 | 28.0 |
| أبل 2 | 6502 @ 1 ميجاهرتز | لغة أبل سوفت بيسك | 1.3 | 8.5 | 16.0 | 17.8 | 19.1 | 28.6 | 44.8 |
كانت لغة MS-BASIC تحوّل أرقام الأسطر ومجموعة من الكلمات المفتاحية إلى رموز فقط، وهي عملية أطلقوا عليها اسم "المعالجة". هذا يعني أن عناصر مثل أرقام الأسطر في عبارات GOTO كانت تُترك بتنسيق ASCII، وكان لا بد من إعادة تحويلها في كل مرة تُصادف. في المقابل، كان عدد من المفسرات يحوّل كل شيء إلى تنسيق وقت التشغيل، ومن أمثلتها Atari BASIC وSinclair BASIC. نظريًا، كان من شأن هذا أن يُسرّع الأداء بشكل كبير مقارنةً بمفسرات MS، حيث لم تكن هناك حاجة لتحليل العديد من أجزاء البرنامج التي كانت بتنسيق ASCII الخام أثناء وقت التشغيل. مع ذلك، كانت هذه اللهجات تعمل بشكل أبطأ بكثير لأسباب متنوعة. على سبيل المثال، في اثنين من معايير الأداء الشائعة في ذلك الوقت، وهما Sieve of Eratosthenes من مجلة Byte واختبار Creative Computing الذي كتبه ديفيد هـ. أهل ، احتلت Atari مرتبة متأخرة في قائمة الأداء، وكانت أبطأ بكثير من Apple II أو Commodore PET في نفس الفترة . [ 153 ]
انظر أيضاً
ملحوظات
- ↑ تركت لغة مايكروسوفت بيسك 780 بايت خالية لرمز برنامج المستخدم وقيم المتغيرات على جهاز بحجم 4 كيلوبايت، وكان ذلك يعمل بإصدار مخفض يفتقر إلى متغيرات السلسلة ووظائف أخرى.
- ↑ لاحظ الصيغة الغريبة لـ SCRN، والتي هي من الناحية الفنية دالة لأنها تُرجع قيمة، ولكنها لا تستخدم صيغة تشبه الدالة والتي ستكون
A=SCRN(X,Y). - ↑ يشير الدليل، ولكنه لا يصرح بذلك صراحة، إلى أن النطاق الفعلي للقيم أقل من 0 إلى 255. [ 133 ]
- ↑ يُعد الرقم السالب أثرًا جانبيًا لتخزين الأعداد الصحيحة بتنسيق مُوقّع، لذا فإن أي موقع ذاكرة يزيد عن 32767 يظهر كقيمة سالبة في لغة BASIC. [ 134 ]
- ↑ اشتكى بيل غيتس من هذا الأمر، مصرحاً بأنه من غير العدل مقارنة لغة Integer BASIC بلغة BASIC "حقيقية" مثل MS. [ 149 ]
مراجع
- ↑ "آي بي إم في مواجهة العالم: هكذا هي الأمور" . مجلة كمبيوتر وورلد . 5 ديسمبر 1973.
- ↑ "وصف معالج هيوليت-باكارد 2100، 1972" (ملف PDF) . تم الاطلاع عليه بتاريخ 18 أغسطس 2020 .
- ↑ "هل يمكننا الحصول على جدول زمني كامل لنظام التشغيل IRIS لأجهزة Data General Nova؟" . تم الاطلاع عليه بتاريخ 2020-08-05 .
- ↑ سافيتز، كيفن (أبريل 2013). "ديف أهل وبيتسي آه" (مقابلة).
- ↑ "أجهزة الكمبيوتر القديمة: HP-9830A" . تم الاطلاع عليه بتاريخ 18-08-2020 .
- ↑ مترجم لغة BASIC لمعالج Intel 8008. قسم علوم الحاسوب، جامعة إلينوي في أوربانا-شامبين (نُشر عام 1974). يونيو 1974.
- ↑ "لدينا أساسيات" . متحف نيو مكسيكو للتاريخ الطبيعي والعلوم . مؤرشف من الأصل في 30 نوفمبر 2012. تم الاطلاع عليه في 18 أبريل 2007 .
- ↑ فيسك، ناثان (2009). فهم القرصنة الإلكترونية . ABC-CLIO. ص 14. ISBN 9780313354748.
- ↑ هيرتزفيلد 1985 .
- ↑ بيتمان، توم. "كان عليك دفع 5 دولارات مقدمًا للحصول عليه..." . www.ittybittycomputers.com . تم الاطلاع عليه بتاريخ 14 يونيو 2017 .
- ↑ أرنولد، مارك؛ وادزورث، نات (فبراير 1976أ). "SCELBAL - لغة برمجة عالية المستوى لأنظمة 8008/8080" . مجلة دكتور دوب . المجلد 1. الصفحات 30-34 .
- ↑ "الجزء 1 من LLL 8080 مترجم لغة BASIC" (PDF) .
- ↑ لورينزو 2017 ، ص 118.
- ↑ كوران، لورانس جيه؛ شوفورد، ريتشارد إس. (نوفمبر 1983). "إستريدج من شركة آي بي إم" . بايت . الصفحات 88-97 . تم الاطلاع عليه بتاريخ 19 مارس 2016 .
- ↑ ويلكنسون 1982 ، الصفحات iv–v.
- ↑ كروميمكو 1978 .
- ↑ ويلكنسون 1982 ، ص. 9.
- ↑ ويلكنسون 1982 ، ص. 5.
- ↑ "معالج فيديو لجهاز كمبيوتر Acorn/BBC" . بي بي سي نيوز . تم الاطلاع عليه بتاريخ 30 نوفمبر 2010 .
- ↑ "جهاز بي بي سي مايكرو يُشعل ذكريات الثورة" . بي بي سي نيوز . 21 مارس 2008. تم الاطلاع عليه بتاريخ 30 نوفمبر 2010 .
- ↑ "ECN - يوليو/أغسطس 1985" . مؤرشف من الأصل بتاريخ 2018-03-07 . تم الاطلاع عليه بتاريخ 2020-08-04 .
- ↑ سميث، توني (12 فبراير 2014). "أنت لست مطرودًا: قصة جهاز Amstrad CPC 464 المذهل" . ذا ريجستر . تم الاطلاع عليه بتاريخ 17 فبراير 2014 .
- ↑ لين، ديفيد (1981). دليل لغة BASIC ( الطبعة الثانية). سان دييغو، كاليفورنيا: دار نشر كومبوسوفت. ص. داخل الغلاف. ISBN 0-932760-00-7.
- ↑ لورينزو 2017 ، ص 83.
- ↑ غيتس، بيل . "مقابلة مع بيل غيتس" . المتحف الوطني للتاريخ الأمريكي، مؤسسة سميثسونيان (مقابلة). أجرى المقابلة ديفيد أليسون . تاريخ الاطلاع: 10 أبريل 2013 .
- ↑ مالوي، ريتش (مايو 1983). "الحاسوب الصغير الكبير / الحاسوب المحمول TRS-80 موديل 100" . بايت . ص 14. تم الاطلاع عليه في 19 أكتوبر 2013 .
- ↑ لورينزو 2017 ، ص 122.
- ↑ ويليامز، جريج (فبراير 1984). "حاسوب أبل ماكنتوش". بايت . ص 30.
- ↑ "Mac GUI :: رد: رد: MAC Basic vs MS Basic؟" . macgui.com . تم الاطلاع عليه بتاريخ 23 يناير 2015 .
- ↑ مانس، ستيفن؛ أندروز، بول (21 يناير 1994). غيتس: كيف أعاد قطب مايكروسوفت ابتكار صناعة بأكملها - وجعل نفسه أغنى رجل في أمريكا: ستيفن مانس، بول أندروز: 9780671880743: Amazon.com: كتب . تاتشستون. ISBN 0671880748.
- ↑ مقابلة مع بيل أتكينسون في برنامج Triangulation التلفزيوني على شبكة TWiT.tv
- ↑ "هل كانت لغة Family BASIC لجهاز NES/Famicom قوية بما يكفي لإنشاء ألعاب وتطبيقات كاملة؟" . تم الاطلاع عليه بتاريخ 27 أغسطس 2020 .
- ↑ توماس، نيل (19 أغسطس 2019). "STOS & Amos - فرانسوا ليونيه | استراحة شاي كلاسيكية" . يوتيوب . تم الاطلاع عليه بتاريخ 11 مارس 2020 .
- ↑ بلانت، روبرت ت.؛ موريل، ستيفن (2007). دليل تنفيذي لتكنولوجيا المعلومات . مطبعة جامعة كامبريدج . ص 343. ISBN 978-0-521-85336-1
ملخص للمزايا: لغة البرمجة Visual Basic سهلة التعلم ومتوفرة على نطاق واسع
. - ↑ "تاريخ لغة البرمجة فيجوال بيسك " . www.johnsmiley.com
- ↑ فرانك ويدويلت (أكتوبر 2008). "البرمجة باستخدام بيئة تطوير Gambas Basic" . مجلة Linux Pro . تاريخ الاسترجاع: 10 ديسمبر 2011 .
- ↑ "نبذة عن مطوري اللعبة - TheGameCreators" .
- ↑ "تنزيل أساسي صغير" . 19 نوفمبر 2018. تم الاسترجاع في 7 سبتمبر 2020 .
- 1 2 شايو، إيمانويل؛ مانوري، باسكال؛ باجانو، برونو (2002). تطوير التطبيقات باستخدام لغة Objective-Caml . فرنسا: أورايلي. ISBN 2841771210.
- ↑ برايس، إد (29 أبريل 2014). "المنهج الأساسي المصغر" . تيك نت . مايكروسوفت . تم الاسترجاع في 9 فبراير 2014 .
- ↑ برايس، إد؛ تاكاهاشي، نونكي (25 فبراير 2014). "دليل البدء السريع الأساسي" . TechNet . مايكروسوفت . تم الاطلاع عليه بتاريخ 12 فبراير 2015 .
- ↑ "Small Basic" . تم الاطلاع عليه بتاريخ 6 سبتمبر 2020 .
- ↑ برايس، إد (22 أكتوبر 2012). "الميزات الفريدة للغة سمول بيسك" . سمول بيسك . تيك نت. مايكروسوفت. مؤرشف من الأصل في 28 أبريل 2015. تم الاطلاع عليه في 22 أبريل 2015 .
- ↑ برايس، إد (8 أكتوبر 2012). "ما هي الكلمات المفتاحية الأربعة عشر للغة سمول بيسك؟" . سمول بيسك . مدونات MSDN. مايكروسوفت . تم الاطلاع عليه في 9 فبراير 2014 .
- ↑ "الإعلان عن Small Basic Online 1.0 - معاينة عامة" . 20 فبراير 2019.
- ↑ "دليل تثبيت Microsoft Small Basic Online v1.0 (CS)" . Microsoft TechNet . تم الاطلاع عليه بتاريخ 8 يناير 2022 .
- ↑ "المساهمون في robinhedwards/ArduinoBASIC" . GitHub .
- ↑ "BleuLlama/TinyBasicPlus: تطبيق AC للغة Tiny Basic، مع التركيز على دعم Arduino" . GitHub . تم الاطلاع عليه بتاريخ 11 سبتمبر 2020 .
- ↑ "Vintage BASIC" . تم الاطلاع عليه بتاريخ 11-09-2020 .
- ↑ إنسمنجر، ناثان (2010). أولاد الحاسوب يستولون على زمام الأمور . مطبعة معهد ماساتشوستس للتكنولوجيا. ص 55. ISBN 978-0-262-05093-7.
- ↑ ووزنياك 2014 .
- ↑ دليل لغة BASIC-PLUS (ملف PDF). ماينارد، ماساتشوستس: شركة المعدات الرقمية. 1972. الصفحات 3-13 .
- ↑ لورينزو 2017 ، ص 106.
- ↑ أليسون، دينيس (يوليو 1976). "ملاحظات تصميمية للغة تايني بيسك" . إشعارات سيغبلان . 11 (7). ACM: 25-33 . doi : 10.1145/987491.987494 . S2CID 18819472 . أعادت مجموعة الاهتمام الخاصة التابعة لجمعية آلات الحوسبة (ACM) بشأن لغات البرمجة (SIGPLAN) طباعة ملاحظات تصميم Tiny Basic من مجلة Tiny BASIC الصادرة في يناير 1976.
- ↑ أليسون، دينيس (1976). "ابنِ لغة BASIC الخاصة بك" . مجلة دكتور دوب . المجلد 1، العدد 1. ص 9.
- ↑ أليسون، دينيس (1976). "دليل مرجعي سريع للغة Tiny BASIC" . مجلة دكتور دوب . المجلد 1، العدد 1. ص 6.
- ↑ "ZX80 – ترقية ذاكرة القراءة فقط الأساسية 8K" .
- 1 2 مترجم لغة BASIC لمعالج Intel 8008 الدقيق . قسم علوم الحاسوب، جامعة إلينوي في أوربانا-شامبين (نُشر عام 1974). يونيو 1974. الصفحات 16-19 .
- ↑ "ورقة رموز السل". مجلة دكتور دوب للتمارين الرياضية الحاسوبية وتقويم الأسنان، الجري بخفة دون عض زائد . 1 (1). ديسمبر 1975.
- ^ "Micro Basic لروبرت أويترويك" .
- ↑ ويريتش 2001 ، لغة [Integer] BASIC، التي شحناها مع أول أجهزة Apple II، لم يتم تجميعها مطلقًا . كانت هناك نسخة واحدة مكتوبة بخط اليد، جميعها مكتوبة بخط اليد، وجميعها مجمعة يدويًا.
- ↑ ووزنياك 2018 .
- ↑ والاس، جيمس؛ جيم إريكسون (1992). القرص الصلب: بيل غيتس وصناعة إمبراطورية مايكروسوفت . جون وايلي وأولاده. الصفحات 81-83 . ISBN 0-471-56886-4.
- ↑ غيتس، بيل (يناير 1976). "رسالة مفتوحة إلى الهواة" . نشرة نادي هومبرو للحاسوب . 2 (1). ماونتن فيو، كاليفورنيا: نادي هومبرو للحاسوب: 2.
- ↑ "لدينا أساسيات" . متحف نيو مكسيكو للتاريخ الطبيعي والعلوم. مؤرشف من الأصل في 23 مارس 2012. تم الاطلاع عليه في 18 أبريل 2007 .
- ↑ والاس ، جيمس؛ جيم إريكسون (1992). القرص الصلب: بيل غيتس وصناعة إمبراطورية مايكروسوفت . جون وايلي وأولاده. ص 78. ISBN 0-471-56886-4.
- ↑ "XBASIC -- مترجم لغة BASIC تفاعلي" . GitHub . تم الاطلاع عليه بتاريخ 2020-09-07 .
- ^ لينارت بينشوب (8 مارس 2002). "إصدار المترجم الأساسي 1.22" . تم الاسترجاع 2020-09-23 .
- ↑ ويلكنسون، أوبراين ولوتون 1983 .
- ↑ "هل تُعدّ عوامل التشغيل المضمنة في لغة BASIC-PLUS منطقية حقًا؟" . تم الاطلاع عليه بتاريخ 2020-08-05 .
- ↑ ألين، دينيس. "تايني بيسك". شركة كمبيوتر الشعب . المجلد 4، العدد 3.
- ↑ غرينينغ، برنارد (1976). "تصحيح Tiny BASIC IL" . مجلة دكتور دوب . المجلد 1، العدد 1. ص 12.
- ↑ فيت، هولجر. "لغة بيسك الصغيرة 6800 لتوم بيتمان" . تم الاطلاع عليه بتاريخ 2 مايو 2017 .
- ↑ نوسبيكل، تيري. "GPL: لغة البرمجة الرسومية" . تم الاطلاع عليه بتاريخ 2 أغسطس 2020 .
- ↑ «نشأتُ وتعلمتُ لغة البرمجة الأساسية على آلة حاسبة TI-99/4a. لقد كان وقتًا رائعًا وبسيطًا...» هاكر نيوز . تم الاطلاع عليه بتاريخ 2 أغسطس 2020 .
- ↑ ووزنياك 1977 ، ص 43.
- ↑ دليل مبرمجي أبل (ملف PDF) . أبل. 1978.
- ↑ راسكين 1978 ، ص 11.
- ↑ راسكين 1978 ، ص 46.
- ↑ راسكين 1978 ، ص 49-55.
- ↑ راسكين 1978 ، ص 65-67.
- ↑ "Tiny BASIC Extended". مجلة دكتور دوب للتمارين الحاسوبية وتقويم الأسنان، التشغيل الخفيف بدون بايت زائد . 1 (2). فبراير 1976.
- ↑ "Denver Tiny BASIC". مجلة دكتور دوب للتمارين الحاسوبية وتقويم الأسنان، التشغيل الخفيف بدون بايت زائد . 1 (3). مارس 1976.
- 1 2 "MINOL". مجلة دكتور دوب للتمارين الرياضية الحاسوبية وتقويم الأسنان، الجري بخفة دون عض زائد . 1 (4). أبريل 1976.
- 1 2 راوسكولب، روجر (ديسمبر 1976). "لغة بالو ألتو تايني بيسك للدكتور وانغ" (ملف PDF) . مجلة إنترفيس إيج . الصفحات 92-108 .
- ↑ أليسون، دينيس (يناير 1976). "ملاحظات تصميمية لـ Tiny BASIC" . مجلة دكتور دوب . المجلد 1، العدد 1. ص 9.
- ↑ أليسون، دينيس (يناير 1976). "ابنِ لغة BASIC الخاصة بك" . مجلة دكتور دوب . المجلد 1، العدد 1. ص 8.
- ↑ ستيل، مايكل (13 يناير 2015). "كود المصدر الأصلي لبرنامج مايكروسوفت بيسك 6502" .
- ↑ هارديمان، روجر. "Altair BASIC 3.2 (4K) – تفكيك مشروح" . ص 1.11. مؤرشف من الأصل في 5 نوفمبر 2001.
- 1 2 3 Wozniak 1977 ، ص 42.
- ↑ بول ر. سانتا ماريا. "فك شفرة لغة Integer Basic لجهاز Apple II" (ملف PDF) . تم الاطلاع عليه بتاريخ 14-09-2020 .
- ↑ ويلكنسون، أوبراين ولوتون 1983 ، ص 5.
- ↑ فيكرز 1983 ، ص 7-8.
- 1 2 "مترجم لغة BASIC - شرح" . تم الاطلاع عليه بتاريخ 15-09-2020 .
- ↑ "الجزء 1 من LLL 8080 مترجم لغة BASIC" (PDF) .
- ↑ راسكين 1978 ، ص 118.
- ↑ وانغ، لي-تشين (مايو 1976). "بالو ألتو تايني بيسك". مجلة دكتور دوبز لتمارين الحاسوب وتقويم الأسنان، التشغيل الخفيف بدون بايت زائد . 1 (5): 12-25 .
- ↑ راسكين 1978 ، ص 38.
- ↑ "الجزء 1 من LLL 8080 مترجم لغة BASIC" (PDF) .
- ↑ "الجزء 1 من LLL 8080 مترجم لغة BASIC" (PDF) .
- ↑ "ما هو أقدم مرجع لـ PEEK و POKE و USR؟" . تم الاطلاع عليه بتاريخ 15 أغسطس 2020 .
- ↑ دليل مرجع لغة BASIC لجهاز Altair 8800، 1975 ، الصفحة 68 من ملف PDF: "باستخدام دالة PEEK وعبارة OUT في لغة BASIC 8K، يمكن للمستخدم كتابة برنامج تفريغ ثنائي بلغة BASIC. وباستخدام INP وPOKE، يمكن كتابة برنامج تحميل ثنائي. يمكن استخدام PEEK وPOKE لتخزين المعلومات المُنسقة على شكل بايت. عند تهيئة BASIC، أجب عن سؤال "حجم الذاكرة؟" بمقدار الذاكرة الموجودة في جهاز ALTAIR مطروحًا منها مقدار الذاكرة التي ترغب في استخدامها لتخزين البيانات المُنسقة على شكل بايت."
- ↑ راسكين 1978 ، ص 27.
- ^ "أساسيات روبرت أويترويك" .
- ↑ ويلش، ديفيد؛ ويلش، تيريزا (2007). تمهيد الطريق: كيف ساهم عشاق جهاز TRS-80 في إشعال ثورة الحواسيب الشخصية . ص 7.
- ↑ ريد، ماثيو. "المستوى الأول من لغة BASIC" . TRS-80.org . تم الاطلاع عليه بتاريخ 27 أغسطس 2017 .
- ↑ أرنولد ووادزورث 1976 ، ص. 10.1.
- ↑ أرنولد ووادزورث 1976 ، الفصل 10.
- ↑ "روتينات الفاصلة العائمة للمعالج 6502". مجلة دكتور دوبز لتمارين الحاسوب وتقويم الأسنان، التشغيل الخفيف بدون بايت زائد . 1 (7). أغسطس 1976.
- ↑ "الجزء 1 من LLL 8080 مترجم لغة BASIC" (PDF) .
- ↑ مترجم لغة BASIC لمعالج Intel 8008. قسم علوم الحاسوب، جامعة إلينوي في أوربانا-شامبين (نُشر عام 1974). يونيو 1974. ص 20.
- ↑ "وثائق GE-2xx" . www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf ، صفحة IV-4.
- ↑ لورينزو 2017 ، ص 149.
- ↑ ستيل، مايكل (20 أكتوبر 2008). "أنشئ نسختك الخاصة من Microsoft BASIC لـ 6502" .
- ↑ راسكين 1978 ، ص 61.
- ↑ MITS Altair BASIC . ألبوكيرك، نيو مكسيكو: MITS. 1975. ص 37.
- ↑ لين، ديفيد (1986). الدليل الأساسي ( الطبعة الثالثة). سان دييغو، كاليفورنيا: كومبوسوفت. ص 589. ISBN 0-932760-33-3.
- ↑ راسكين 1978 ، ص 94.
- ↑ MITS Altair BASIC . ألبوكيرك، نيو مكسيكو: MITS. 1975. ص 31.
- 1 2 3 دليل مرجعي للغة BASIC في برنامج HP 2000/Access (ملف PDF) . شركة هيوليت باكارد. مايو 1976.رقم الجزء 22687-90001
- ↑ برنامج نورث ستار بيسك الإصدار 6 (ملف PDF) . شركة نورث ستار. 1977. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 5 مارس 2020. تم الاطلاع عليه بتاريخ 1 أغسطس 2020 .
- ↑ دليل مرجعي للغة أتاري بيسك . شركة أتاري، 1980. مؤرشف من الأصل بتاريخ 1 مايو 2005. تم الاطلاع عليه بتاريخ 1 أغسطس 2020 .
- ↑ "المتغيرات الصحيحة، والمتغيرات العشرية، ومتغيرات السلاسل النصية". دليل مبرمج C64 . كومودور. مارس 2020.
- ↑ راسكين 1978 ، ص 89.
- ↑ "أنشئ نسختك الخاصة من لغة مايكروسوفت بيسك" .
- ↑ لين، ديفيد (1977). دليل المستخدم للمستوى الأول ( الطبعة الأولى). فورت وورث، تكساس: شركة تاندي. الصفحات 105-108 ، 137. تم الاطلاع عليه بتاريخ 9 أغسطس 2020 .
- ↑ راسكين 1978 ، ص 31.
- ↑ راسكين 1978 ، ص 32.
- ↑ راسكين 1978 ، ص 33.
- 1 2 راسكين 1978 ، ص. 120.
- ↑ لورينزو 2017 ، ص 120.
- ↑ "هل تُعتبر بعض مترجمات لغة BASIC للحواسيب الصغيرة أنظمة تشغيل؟" . تم الاطلاع عليه بتاريخ 7 أغسطس 2020 .
- 1 2 راسكين 1978 ، ص. 36.
- ↑ ميني 1977 ، ص 18.
- ↑ "NIBL". مجلة دكتور دوب للتمارين الرياضية الحاسوبية وتقويم الأسنان، الجري بخفة دون تداخل . 1 (10). نوفمبر 1976.
- ↑ "مشاكل مع لغة BASIC". مجلة دكتور دوب للتمارين الرياضية الحاسوبية وتقويم الأسنان، التشغيل الخفيف بدون بايت زائد . 1 (2). فبراير 1976.
- ↑ "الاختلافات بين GW-BASIC و QBasic" . 12-05-2003. مؤرشف من الأصل في 19-10-2013 . تم الاطلاع عليه في 28-06-2008 .
- ↑ لورينزو 2017 ، ص 137.
- ↑ هيلمرز 1978 ، ص 18.
- ↑ Weyhrich 2001 .
- ↑ راسكين 1978 ، ص 100.
- ↑ راسكين 1978 ، ص 15.
- ↑ راسكين 1978 ، ص 52.
- ↑ راسكين 1978 ، ص 107.
- ↑ الدليل 1980 ، الملحق ب.
- ↑ "ما نوع المترجم الذي كانت تستخدمه معظم تطبيقات لغة BASIC ذات 8 بت؟" . تم الاطلاع عليه بتاريخ 9 أغسطس 2020 .
- ↑ مترجم لغة BASIC لمعالج Intel 8008 (ملف PDF) . قسم علوم الحاسوب، جامعة إلينوي في أوربانا-شامبين (نُشر عام 1974). يونيو 1974. الصفحات 24-36 .
- ↑ بيتمان، توم (1981). "الكتاب الأول لبرامج BASIC الصغيرة" . Retrotechnology.com . أجهزة الكمبيوتر الصغيرة جدًا . تم الاطلاع عليه في 5 أغسطس 2020.
نظرًا لكبر حجم ملف TA (19703 بايت)، وجدتُ أن التنفيذ أصبح بطيئًا للغاية، وذلك ببساطة بسبب مسح الذاكرة لأوامر GOTO وGOSUB وRETURN. يمكن لتعديل بسيط في المفسر تحويله إلى
خوارزمية بحث ثنائي
، مما يُحسّن وقت التنفيذ بمقدار عشرة أضعاف تقريبًا. التغييرات اللازمة مُدرجة في الملحق.
- 1 2 روج، توم؛ فيلدمان، فيل (أكتوبر 1977). "مقارنات التوقيت الأساسية... منقحة ومحدثة" . كيلوبود . ص 20-25 .
- 1 2 روج، توم؛ فيلدمان، فيل (يونيو 1977). "مقارنات التوقيت الأساسية... معلومات لعشاق السرعة" . كيلوبود . ص 66-70 .
- ↑ جيلبريث، جيم (سبتمبر 1981). "معيار لغة عالية المستوى" . بايت . ص 192.
- ↑ أهل، ديفيد (نوفمبر 1983). "اختبار مقارنة المعايير" . الحوسبة الإبداعية . ص 260.
- ↑ أهل، ديفيد (نوفمبر 1983). "اختبار مقارنة المعايير" . الحوسبة الإبداعية . ص 259-260 .
فهرس
- دليل استخدام جهاز Apple II Mini . شركة Apple. 1977.
- أرنولد، مارك؛ وادزورث، نات (1976). SCELBAL: لغة برمجة عالية المستوى لأنظمة 8008/8080 (ملف PDF) . شركة SCELBI للاستشارات الحاسوبية.
- دليل مرجعي للغة أتاري بيسك . شركة أتاري، 1980. مؤرشف من الأصل في 1 مايو 2005.
- كروفورد، كريس (1982). دي ري أتاري . تبادل برامج أتاري.
- Cromemco 16K Extended BASIC (PDF) . Cromemco. 1978.
- هيلمرز، كارل (مارس 1978). "تفاحة لبايت" . بايت . الصفحات 18-24 ، 30-32 ، 35، 40-46 .
- هيرتزفيلد، آندي (يونيو 1985). "القصة المحزنة لماك بيسيك" . الفولكلور .
- لورينزو، مارك (2017). الحلقة اللانهائية: تاريخ لغة برمجة BASIC . فيلادلفيا: SE Books. ISBN 978-1974-27707-0.
- راسكين، جيف (1978). دليل برمجة لغة بيسك لأجهزة أبل 2 (ملف PDF) . شركة أبل للكمبيوتر.
- فيكرز، ستيفن (1983). برمجة لغة بيسك لجهاز سينكلير زد إكس سبكتروم ( الطبعة الثانية). أبحاث سينكلير.
- ويريش، ستيفن (12 ديسمبر 2001). "التاريخ الجزء 3: أبل 2" . تم الاسترجاع في 16 سبتمبر 2007 .
- ويلكنسون، بيل (1982). داخل نظام التشغيل أتاري دوس . شركة أوبتيميزد سيستمز سوفتوير. رقم ISBN 0-942386-02-7تم الاطلاع عليه بتاريخ 2009-04-04 .
- ويلكنسون، بيل (فبراير 1985). "نظرة ثاقبة: أتاري" . الحوسبة الإبداعية . ص 139-140 .
- ويلكنسون، بيل؛ أوبراين، كاثلين؛ لوتون، بول (1983). كتاب مصادر لغة أتاري بيسك . منشورات كومبيوت! رقم ISBN 0-942386-15-9.
- ويليامز، جريج؛ مور، روب (ديسمبر 1984). "قصة أبل / الجزء 1: التاريخ المبكر" . بايت . الصفحات A67– A71 . تاريخ الاسترجاع : 23 أكتوبر 2013 .
- ووزنياك، ستيفن (مايو 1977). "وصف النظام / أبل-2" . بايت . ص 34-43 .
- ووزنياك، ستيفن (1 مايو 2014). "كيف كتب ستيف ووزنياك لغة BASIC لجهاز أبل الأصلي من الصفر" . جيزمودو .
- ووزنياك، ستيفن (3 يناير 2018). "Apple BASIC" . Woz.org .
للمزيد من القراءة
شفرة المصدر ووثائق التصميم، مرتبة حسب الترتيب الزمني لإصدار تطبيقات BASIC:
- ويفر، ألفريد؛ تيندال، مايكل؛ دانييلسون، رونالد (يونيو 1974). مترجم لغة BASIC لمعالج Intel 8008 الدقيق . قسم علوم الحاسوب، جامعة إلينوي في أوربانا-شامبين (نُشر عام 1974).
- أرنولد، مارك (1977). ملحق الدوال الرياضية لبرنامج SCELBAL . شركة SCELBI للاستشارات الحاسوبية.
- أرنولد، مارك (1977). ملحق سلاسل SCELBAL . شركة SCELBI للاستشارات الحاسوبية.
- "Altair BASIC 3.2 (4K) - تفكيك مشروح" .
- مجلة دكتور دوب للتمارين الرياضية الحاسوبية وتقويم الأسنان، المجلد 1. شركة كمبيوتر الشعب. 1976.
- راوسكولب، روجر (ديسمبر 1976). "لغة بالو ألتو تايني بيسك للدكتور وانغ" (ملف PDF) . مجلة إنترفيس إيج . الصفحات 92-108 .
- بيتمان، توم (1977). مجموعة أدوات تجريبية صغيرة للغة BASIC .
- سانتا ماريا، بول. "تفكيك لغة البرمجة الأساسية للأعداد الصحيحة في Apple II" (ملف PDF) .
- مترجمو لغة BASIC
- برامج الحواسيب الصغيرة
