تيليسكريبت (لغة برمجة)

Telescript هي لغة برمجة موجهة نحو الوكلاء، طورتها شركة General Magic كجزء من نظام Magic Cap الشامل . تستخدم برامج Telescript بنيةً معدلةً شبيهةً بلغة C تُعرف باسم High Telescript، وتُترجم إلى لغة تعتمد على المكدس تُسمى Low Telescript لتنفيذها. تعمل Low Telescript ضمن مترجمات الآلات الافتراضية ، أو "محركات Telescript"، على أجهزة الكمبيوتر المضيفة.

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

تأسست شركة جنرال ماجيك في الأصل كفريق داخل شركة آبل ، ثم انفصلت عنها عام ١٩٩٠. وعندما بدأت تحظى ببعض الاهتمام الإعلامي عام ١٩٩٢، قررت آبل دخول السوق نفسها بجهازها اللوحي نيوتن . لم تتمكن جنرال ماجيك من إيجاد مكانة مميزة لها في السوق، وسرعان ما تم إيقاف خدمات تيليسكريبت لصالح منتجات جديدة لا علاقة لها بالحوسبة المتنقلة .

تاريخ

في عام 1990، أقنع مارك بورات الرئيس التنفيذي لشركة آبل آنذاك، جون سكولي، بأن مستقبل الحوسبة لا يكمن في أجهزة الكمبيوتر الشخصية المكتبية ، بل في أجهزة محمولة أصغر حجمًا تجمع بين قوة الحوسبة وأنظمة الاتصالات والبيانات الموجودة على خوادم يمكن الوصول إليها عبر الشبكة. [ 1 ] وأشار إلى أن أجهزة الكمبيوتر المحمولة ستكون دائمًا أقل قوة من الأجهزة التي ستتصل بها، واقترح أن يكون هذا جزءًا من التصميم - فبدلاً من محاولة بناء جهاز كمبيوتر محمول قادر على أداء مهام نظام مكتبي، يجب أن يستخدم الجهاز المحمول بشكل غير مرئي قوة الحوسبة للخوادم لإنتاج نتيجة مماثلة. [ 2 ] [ 3 ]

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

بحلول عام ١٩٩٢، وقّعت جنرال موتورز اتفاقيات تطوير مع عدد من الشركات للعمل مع بيئة ماجيك كاب، بما في ذلك سوني، وموتورولا، وماتسوشيتا ، وفيليبس ، وبريتيش تيليكوم ، وشركة إيه تي آند تي . وقد أثار هذا ضجة إعلامية كبيرة. [ ٣ ] في ذلك الوقت، كانت آبل قد بدأت مشروع نيوتن ، وهو تصميم لجهاز كمبيوتر لوحي محمول باليد أكبر حجمًا، يشبه جهاز آيباد كامل الحجم . ومع نجاح جنرال ماجيك في الصحافة، أعادت آبل وضع نيوتن في نفس السوق، وسارعت بإصداره في عام ١٩٩٣. كما باعت حصتها في جنرال ماجيك، ورفعت دعوى قضائية ضدها. لم يُصدر شركاء جنرال ماجيك أي أجهزة حتى عام ١٩٩٤، وبحلول ذلك الوقت، كان نيوتن قد حدد بشكل أساسي ماهية المساعد الرقمي الشخصي (PDA)، وأصبحت أنظمة المساعد الرقمي الشخصي تُقيّم بناءً على قدراتها في التعرف على الكتابة اليدوية . كان ماجيك كاب عبارة عن واجهة نقر وتوجيه (مشابهة لـ HyperCard أو نظام iOS الحديث ). [ ٢ ]

بحلول عام ١٩٩٥، لم يتبقَّ من الشركة سوى هيكلٍ لما كانت عليه، وقد غادرها معظم المطورين الأصليين. في عام ١٩٩٦، عُيّن ستيف ماركمان لتولي زمام الأمور، وعيّن بدوره كيفن سوراس لتوجيه الشركة نحو مسارٍ جديد. قام فريقٌ جديد بتطوير نظام المساعد الشخصي "بورتيكو" القائم على الهاتف، والذي لا يزال يُستخدم حتى اليوم كأساسٍ لنظام "أون ستار" . انفصلت المجموعة الأصلية للأجهزة المحمولة في عام ١٩٩٨ تحت اسم "داتا روفر موبايل سيستمز إنكوربوريتد"، ثم أُعيد تسميتها إلى "إيكراس" في عام ٢٠٠٠، [ ٤ ] حيث خدمت عددًا من القطاعات المتخصصة قبل إغلاقها في عام ٢٠٠١. [ ٥ ] تمت تصفية ما تبقى من الشركة الأصلية في عام ٢٠٠٤. [ ٣ ]

وصف

المفاهيم الأساسية

استُوحِيَتْ لغة Telescript من مفهوم البرامج الصغيرة المعروفة باسم "الوكلاء" ، والتي تتفاعل مع خدمات الحوسبة المعروفة باسم " الأماكن" ، حيث تعمل جميعها على مجموعة من خادم واحد أو أكثر تستضيف ما يُسمى "سحابة Telescript". وكان جهاز المستخدم المحمول أحد هذه الأماكن، وإن كان بإمكانيات محدودة. وافترض النموذج أن معظم المعلومات والخدمات ستُقدَّم من خلال أماكن تعمل على خوادم حاسوبية أكبر تستضيفها شركات الاتصالات مثل AT&T. حتى أن الوثائق المبكرة أشارت إلى ذلك على أنه " تشغيل في السحابة" . [ 1 ] وتتألف البرامج التي يتعامل معها المستخدم من عدد من هذه الوكلاء، والتي قد تعمل محليًا على خوادم مزود الخدمة، أو حتى تُرسَل إلى خوادم جهات خارجية. ولتنسيق الاتصالات، تضمنت Telescript أيضًا مفهومي "اسم الهاتف" الذي يُعرِّف المستخدمين بشكل فريد، و "عناوين الهاتف" التي تُعرِّف الجهاز حتى أثناء تنقله بين الشبكات. [ 6 ]

على سبيل المثال، لنفترض تطبيق تسوق يطلب من المستخدم البحث عن أسعار شواية جديدة يرغب في شرائها. في نموذج العميل والخادم التقليدي ، يُنشئ التطبيق عددًا من الاستعلامات، ويرسلها إلى عدد من الخدمات، ثم يجمع النتائج ويعرضها. أما في نموذج Telescript، فيُنشئ التطبيق وكيلًا جديدًا مُزوّدًا ببيانات الطلب، ويُضيف إليه اسم المستخدم وعنوانه، ثم يُرسله إلى متجر على خادم للمعالجة. يمكن لهذا الخادم معالجة الطلب مباشرةً، أو إحالة الوكيل إلى جهات أخرى، مثل متاجر البائعين، لمزيد من المعالجة. يمكن وضع النتائج في حقول البيانات الداخلية للوكيل وإرسالها عبر الشبكة إلى جهاز المستخدم، أو يمكن إنشاء وكيل "مراسلة" جديد يحمل بيانات النتائج فقط ويُرسلها لتقليل نقل البيانات عبر الشبكة. [ 7 ]

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

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

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

بناء الجملة والتنسيق

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

 فطيرة: واجهة (كائن) = ( عام الاسم: سلسلة نصية؛ تهيئة: op(name: String); );

لاحظ استخدام الكلمة المفتاحية op، التي تُقابل functionأو subالموجودة في لغات أخرى. يمكن استخدام تطبيق Pie في classكائن واحد أو أكثر، والتي يمكن تنظيمها في moduless بطريقة مشابهة لبنية Visual Basic .NET . namespaceتُستخدم #includeلاستيراد ملفات الرأس، ولكن الاستيراد محلي لـ modules، وليس للملف ككل. [ 11 ]

تم استدعاء مفهومي "الوكيل" و"المكان" في لغة Telescript ببساطة عن طريق إنشاء فئات فرعية من فئتي "الوكيل" و"المكان"، وكلاهما فئتان فرعيتان من فئة "العملية". ولتبسيط الكود، يمكن وضع كلتيهما في ملف واحد، بل وجمعهما في وحدة نمطية واحدة. يحدد الكود التالي الوكلاء اللازمين لتنفيذ متجر يبيع الفطائر: [ 12 ]

 PieStoreModule: module = ( #include "pie.i" مشتري الفطيرة: فئة (الوكيل) = ( عام مباشر: برعاية op() = { *.go(*.destination); myPie = place@PieSeller.sellPie(); *.go(*.originPlace); }; ); بائع الفطائر: فئة (مكان) = ( عام بيع الفطيرة: op() الفطيرة = { aPie: فطيرة | لا شيء؛ aPie = *.getPieFromStock; إذا كانت قيمة aPie تساوي nil { PieBuyer(*.distributorTicket, Permit(nil)); aPie = *.waitForPie(); أعد aPie؛ }; }; ); );

يحتوي كائن PieBuyer، وهو وكيل، على دالة واحدة، liveوهي دالة بدء التشغيل القياسية التي تستخدمها جميع الوكلاء. [ 13 ] بمجرد إنشاء كائن PieBuyer واستدعائه، سيتم liveاستدعاء الدالة، بطريقة مشابهة للعملية newالموجودة في معظم لغات البرمجة الكائنية، على الرغم من أن هذه الدالة تُستدعى بعد الإعداد. يستبدل الرمز * ما يُنفذ عادةً بـ selfأو Me، مشيرًا إلى الكائن نفسه، وهو في هذه الحالة وكيل PieBuyer. ينص الكود أساسًا على أنه عند إنشاء الكائن، يجب أن يرسل نفسه (*.go) إلى الموقع المُرسل إليه أثناء الإنشاء (*.destination). بمجرد وصوله إلى هناك، يجب أن يُخبر كائن المكان المطابق، وهو في هذه الحالة PieSeller، ببيع الفطائر. عند اكتمال هذا الأمر، سيعود الوكيل إلى مكانه الأصلي. يمكن للتطبيق المُستدعي بعد ذلك فحص النتائج من خلال فحص المتغير myPie. [ 12 ]

يحتوي كائن PieSeller، وهو كائن من نوع Place، على دالة واحدة sellPie. تُعرّف هذه الدالة متغيرًا محليًا يُسمى aPie، وتُحدد قيمته ككائن Pie، أو "لا شيء" في حالة عدم وجود فطائر. ثم تُحاول الدالة تعيين قيمة لـ aPie عن طريق استدعاء دالة getPieFromStock الخاصة بها (غير موضحة هنا)، ثم تتحقق مما إذا كانت هذه الدالة قد أعادت قيمة. إذا لم تنجح، على سبيل المثال، إذا كان المخزون فارغًا، فإنها تُنشئ كائن PieBuyer جديدًا خاصًا بها، وتُرسل هذا الطلب إلى متجر آخر، ثم تنتظر ردًا. قد يُعيد هذا المتجر توجيه الطلب إلى متجر آخر، وهكذا. عند انتهاء سلسلة الأحداث هذه، سواءً بفطيرة أو بفشل، يُعيد كائن PieSeller الفطيرة أخيرًا إلى كائن PieBuyer المُستدعي. [ 12 ]

عادةً ما تكون الكائنات "مملوكة" للمكان الذي أنشأها. وتمنح الملكية أيضًا صلاحيات وإعدادات أمان. يمكن للغة أن تتولى ملكية كائن ما من خلال own {}البنية، أو في هذه الحالة، باستخدام sponsoredالكلمة المفتاحية للإشارة إلى أنه يجب تشغيله ضمن ملكية المكان الذي يُشغَّل فيه. يمكن استخدام هذا، على سبيل المثال، لمنح الوكيل القدرة على رؤية المخزون في الجرد، وهي قيم ستكون خاصة لولا ذلك. استخدام sponsoredهذه الطريقة يُعطي نفس نتيجة وضع الكود في own {}كتلة، ولكنه يسمح بتنفيذ ذلك في المُستدعي. [ 14 ]

تتضمن لغة Telescript عدة أنواع مجموعات مدمجة، منها Set`list` Listو` Dictionarylist` و`list` و`list` Collection، والأخير منها عبارة عن قائمة تحتوي على فهارس نصية (نصف قاموس). كان أحد مصادر الأخطاء الشائعة في Telescript هو أنه على الرغم من إمكانية إرجاع المجموعة ككل في وكيل، إلا أن العناصر الفردية داخلها كانت مملوكة للموقع. وبالتالي، إذا استخدمنا `list` return MyCollection[someIndex];، فستعود إلى جهاز المستخدم كقيمة فارغة (null). كان الحل هو استخدام صيغة إضافية، وهي تلميحات `list` DictOwnedو` ColOwnedlist`، والتي أدت إلى تغيير ملكية القيم المُعادة عند الإرجاع، وبالتالي تسلسلها في النتائج عند العودة إلى الموقع الأصلي. [ 15 ]

كانت الفئات الفرعية تُعرف باسم "النكهات" ؛ فئة PieBuyer المذكورة أعلاه هي إحدى نكهات فئة Agent. كما تضمنت لغة Telescript مفهوم فئات المزج ، التي قدمت ميزات مشابهة للوراثة المتعددة من خلال السماح بإنشاء فئات تحتوي فقط على التعليمات البرمجية التي يمكن تضمينها لاحقًا في فئات أخرى. لم تكن فئات المزج من النكهات. [ 16 ]

على غرار العديد من لغات البرمجة الكائنية الحديثة، فصلت لغة Telescript بين الواجهة والتنفيذ، حيث وضعت كل منهما في .iملف منفصل (ملف الواجهة، وملفات .tالتنفيذ، كما في "t"elescript). وبشكل غير معتاد، عرّفت اللغة أيضًا نوعًا ثالثًا من الملفات، .dيجمع عدة .iملفات معًا. [ 17 ] كان الكود المُجمّع يُوضع في .sملف، ويتم توجيهه بواسطة تعليمات الرابط في .lملف آخر. [ 18 ] سمح إطار عمل التطبيقات الخارجية باستدعاء كود C++ بواسطة Telescript. [ 19 ]

ملحوظات

  1. تم تعديل هذه الأمثلة من النسخ الأصلية الموجودة في الدليل، مع تصحيح عدد من الأخطاء في بناء الجملة والإملاء.

مراجع

الاقتباسات

  1. 1 2 3 ليفي 1994 .
  2. 1 2 كلارك وكناستر 1995 .
  3. 1 2 3 كانيلوس 2011 .
  4. ^ دان هانتولا، “المرآة السحرية” ، الحوسبة القلمية ، أبريل 2000
  5. مارك بوليو، "تطبيقات وهندسة الإنترنت اللاسلكي" ، أديسون-ويسلي بروفيشنال، 2002، 9780201733549، ص 12.
  6. المرجع 1995 ، ص 1.
  7. المرجع 1995 ، الصفحات 1-2.
  8. المرجع 1995 ، ص 2.
  9. المرجع 1995 ، الصفحات 8-12.
  10. دليل 1995 ، ص 7.
  11. دليل 1995 ، ص 8.
  12. 1 2 3 دليل 1995 ، ص 9.
  13. دليل 1995 ، ص 66.
  14. دليل 1995 ، ص 40.
  15. دليل 1995 ، ص 42.
  16. المرجع 1995 ، ص 20.
  17. دليل 1995 ، ص 3.
  18. دليل 1995 ، ص 4.
  19. دليل 1995 ، ص 5.

فهرس