Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Telescript - это агентно-ориентированный язык программирования, написанный General Magic как часть общей системы Magic Cap . Программы Telescript использовали модифицированный C-подобный синтаксис, известный как High Telescript, и были скомпилированы для выполнения на стековый язык под названием Low Telescript. Low Telescript работал в интерпретаторах виртуальных машин или «механизмах Telescript» на хост-компьютерах.

Базовая модель Telescript похожа на Java и отличается в первую очередь тем, где будут запускаться приложения. Java была смоделирована таким образом, чтобы можно было загружать приложения Java на любую платформу и запускать их локально. Telescript, по сути, полностью изменил это, позволив оборудованию конечных пользователей с ограниченными возможностями загружать программы Telescript на серверы, чтобы они могли воспользоваться возможностями сервера. Telescript может даже перенести работающую программу; язык включал функции для маршалинга кода программы и сериализованного состояния, передачи его другому механизму Telescript (на устройстве или сервере) для продолжения выполнения и, наконец, возврата исходному клиентскому или серверному устройству для доставки его вывода.

Изначально General Magic развивалась как команда внутри Apple Inc. и была выделена в 1990 году. Когда в 1992 году они начали вызывать некоторый шум в прессе, Apple решила выйти на тот же рынок со своим планшетным компьютером Newton . General Magic не смогла найти нишу на рынке, и сервисы Telescript вскоре перестали рекомендоваться в пользу новых продуктов, не связанных с мобильными вычислениями .

История [ править ]

В 1990 году Марк Порат убедил тогдашнего генерального директора Apple Джона Скалли, что будущее вычислений лежит не в настольных персональных компьютерах , а в портативных устройствах гораздо меньшего размера, сочетающих вычислительную мощность, системы связи и данные, расположенные на серверах, доступных в сети. [1] Он отметил, что портативные компьютеры всегда будут иметь меньшую мощность, чем машины, к которым они будут подключаться, и предложил, чтобы это было частью дизайна - вместо того, чтобы пытаться построить портативный компьютер, который мог бы выполнять задачи настольной системы, портативное устройство должно незаметно использовать вычислительную мощность серверов для получения аналогичного результата. [2] [3]

Скалли согласился позволить Порату начать исследование концепций под кодовым названием «Карманный кристалл». Ключевыми членами первоначальной команды были Порат и известные разработчики Macintosh Билл Аткинсон и Энди Херцфельд . Команда быстро обнаружила, что высшее руководство игнорирует ее, и она постоянно борется за ресурсы. Они снова обратились к Скалли с идеей выделить Pocket Crystal в отдельную компанию. Скалли согласился с этим, а также с идеей пригласить новых партнеров по аппаратному обеспечению. Новая компания General Magic (GM) была создана в мае 1990 года, при этом Apple, Sony и Motorola владели по 10% акций. Вскоре ряды компании пополнились другими выпускниками Macintosh, в том числеДжоанна Хоффман , Сьюзан Кэр , Дэн Винклер, Брюс Лик и Фил Голдман . [1]

К 1992 году GM подписала соглашения о разработке с рядом компаний для работы со средой Magic Cap, включая Sony, Motorola, Matsushita , Philips , British Telecom и AT&T Corporation . Это вызвало значительный «ажиотаж» в прессе. [3] Apple к тому времени начала проект Newton , дизайн для большого портативного планшетного компьютера, более похожего на полноразмерный iPad.. Благодаря успеху General Magic в прессе, они переместили Newton прямо на тот же рынок и поспешили выпустить его в 1993 году. Они также продали свою долю в General Magic и подали на них в суд. Партнеры General Magic не выпускали оборудование до 1994 года, когда Newton по существу определила, каким должен быть персональный цифровой помощник (КПК), и системы КПК оценивались по их возможностям распознавания рукописного ввода . Magic Cap представлял собой интерфейс « укажи и щелкни» (похожий на HyperCard или современную iOS ). [2]

К 1995 году компания была оболочкой самого себя, и большинство первоначальных разработчиков ушли. В 1996 году Стив Маркман был нанят, чтобы взять на себя руководство , и он нанял Кевина Сураче, чтобы он вывел компанию в новом направлении. Новая команда разработала систему персонального помощника на базе телефона Portico, которая и по сей день лежит в основе OnStar . Первоначальная группа портативных устройств была выделена в 1998 году как DataRover Mobile Systems Incorporated и позже переименована в Icras в 2000 году [4], обслуживая ряд вертикальных рынков до закрытия в 2001 году. [5] Остатки первоначальной компании были ликвидированы в 2004 году. [3]

Описание [ править ]

Основные концепции [ править ]

Telescript был смоделирован на основе концепции небольших программ, известных как агенты, которые будут взаимодействовать с вычислительными службами, известными как места, все из которых будут работать в кластере из одного или нескольких серверов, на которых размещено так называемое облако Telescript. Портативное устройство пользователя было одним из таких мест, хотя и с ограниченными возможностями. Модель предполагала, что большая часть информации и услуг будет предоставляться местами, работающими на более крупных серверных компьютерах, размещенных провайдерами связи, такими как AT&T. Даже в ранних документах это упоминается как работа в облаке . [1]Программы, ориентированные на пользователя, будут состоять из ряда таких агентов, которые могут работать локально, на хостах провайдера или даже перенаправляться на сторонние серверы. Для координации коммуникаций Telescript также включил концепции теленимя, которое однозначно идентифицирует пользователей, и телеадреса, которые идентифицируют устройство даже при его перемещении между сетями. [6]

Например, рассмотрим приложение для покупок, в котором пользователь запрашивает цены на новый гриль для барбекю, который он хочет купить. В традиционной модели клиент-сервер, приложение будет формировать ряд запросов, отправлять их ряду служб, а затем собирать результаты и отображать их. В модели Telescript приложение вместо этого создаст нового агента, заполненного данными из запроса, пометит его своим именем и адресом, а затем отправит его в хранилище на сервере для обработки. Затем этот сервер мог бы обработать запрос напрямую или передать агента другим местам, например местам реальных поставщиков, для дальнейшей обработки. Результаты могут быть помещены во внутренние поля данных агента и отправлены обратно по сети на устройство пользователя, или может быть создан новый агент «мессенджер», который будет переносить только данные результата и отправляться обратно, чтобы минимизировать передачу сетевых данных. [7]

Модель также отличается от традиционных решений тем, как происходит обмен данными в случае взаимодействующих программ. Например, если пользователь решает купить одно из барбекю, которое он нашел в предыдущем поиске, в обычной системе задача заполнения форм заказа и подтверждения оплаты будет выполняться посредством прямого обмена данными между устройством пользователя и удаленным сервером. требуя «живого» канала связи на протяжении всего процесса. В модели Telescript новый агент с информацией, необходимой для завершения покупки, отправляется в магазин этого поставщика, взаимодействует с магазином или агентами поставщика, а затем возвращается с успехом или неудачей. Основная связь происходит между агентами и местами на удаленном сервере,поэтому связь по сети требуется только в начале и в конце процесса.[8]

Telescript был объектно-ориентированным (OO) и использовал ряд необычных терминов для описания состояния объекта и связи. Атрибуты соответствуют тому, что другие языки называют переменными или полями экземпляра . Вызов методов назывался запросами , а запуск реализации метода назывался ее выполнением . Все такие вызовы всегда отвечали сообщением об успехе или неудаче, запрашивающий объект должен был при желании перехватить их и ответить на них . Подсказки о том, как передавать данные в вызовы методов и из них, назывались ограничениями и охватывали общие " по ссылке " и " по значению"."и др. [9]

Telescript обычно не имел состояния с точки зрения времени жизни данных. Все данные в программе, как переменные экземпляра, так и локальные переменные, всегда были сериализованы. Агенты могут быть вызваны или приостановлены в любой момент и не теряют своего состояния. Этот же механизм также позволял агентам легко обмениваться данными между хостами.

Синтаксис и макет [ править ]

Хотя элементы управления и компоновка Telescript были вдохновлены C, его точный синтаксис значительно отличался. Одним из очевидных отличий была замена фигурных скобок в стиле C круглыми скобками на уровне определения, сохранение фигурных скобок для группировки операторов внутри операторов логики и управления потоком , а также использование двоеточия для отделения имени от его определения. Следующий код определяет интерфейс для объектов типа Pie : [10] [N 1]

 Пирог: интерфейс (Объект) = ( общественный имя: Строка; инициализировать: op (имя: String); );

Обратите внимание на использование ключевого слова op, которое соответствует functionили subвстречается на других языках. Реализация Pie может быть использован в одном или нескольких classобъектов, которые могут быть организованы в modulesс в моде похож на Visual Basic .NET «s namespaceконструкции. #includeиспользуется для импорта файлов заголовков, но импорт является локальным для modulesфайла, а не для файла в целом. [11]

Концепции агента и мест Telescript вызывались просто путем подкласса этих двух классов, Agent и Place, которые были подклассами Process. Для ясности кода их можно поместить в один файл и даже собрать в один модуль. Следующий код определяет агентов, необходимых для создания магазина, продающего пироги: [12]

 PieStoreModule: модуль = (	#include "pie.i" 	PieBuyer: class (Агент) = (	общественный	live: sponsored op () = {	* .go (*. пункт назначения);	myPie = [email protected] ();	* .go (*. originPlace);	};	); 	PieSeller: class (Место) = (	общественный	sellPie: op () Pie = {	aPie: Пирог | Ноль;	aPie = * .getPieFromStock;	if (aPie = nil) {	PieBuyer (*. DistributorTicket, Permit (nil));	aPie = * .waitForPie ();	return aPie;	};	};	); );

Объект PieBuyer, агент, содержит единственный метод, liveстандартный метод запуска, используемый всеми агентами. [13] Простое создание PieBuyer и его вызов вызовет liveметод, аналогичный newоперации, обнаруженной в большинстве объектно-ориентированных языков, хотя этот метод вызывается после установки. * Заменяет то, что чаще всего реализуется как selfилиMe, ссылаясь на сам объект, в данном случае на агента PieBuyer. Код в основном говорит, что при создании объект должен отправить себя (* .go) в место, отправленное ему во время создания (* .destination). Оказавшись там, он должен сообщить соответствующему объекту места, в данном случае PieSeller, что нужно sellPie. Когда эта команда будет завершена, агент вернется в исходное место. Затем вызывающее приложение может проверить результаты, проверив переменную myPie. [12]

Объект PieSeller, Place, также содержит единственный метод sellPie. Он определяет локальную переменную aPie, определяя ее как объект Pie или «ничего», которое используется в случае отсутствия пирогов. Затем он пытается установить для aPie значение, вызывая свой собственный метод getPieFromStock (здесь не показан), а затем проверяет, вернул ли он значение. Если это не удалось, например, если запас был пуст, он затем создает новый собственный объект PieBuyer, отправляет этот запрос в другой магазин и затем ожидает ответа. Этот магазин может пересылать запрос другому и так далее. Когда эта цепочка событий завершается, либо с пирогом, либо безуспешно, место PieSeller наконец возвращает это вызывающему PieBuyer. [12]

Объекты обычно «принадлежат» месту, в котором они созданы. Владение также предоставляет возможности и настройки безопасности. Язык может стать владельцем объекта через own {}конструкцию или, в этом случае, использовать sponsoredключевое слово, чтобы указать, что он должен работать в пределах владения того места, в котором он выполняется. Это может использоваться, например, для предоставления агенту возможности чтобы увидеть запасы в инвентаре, ценности, которые в противном случае были бы частными. Использование sponsored- это точно такой же результат, как и размещение кода в own {}блоке, но позволяет этому иметь место в вызывающей программе. [14]

Telescript включает в себя несколько встроенных типов коллекций, Set, List, Dictionary, и Collection, последний из которых представляет собой список с текстовыми индексами (одна половина словаря). Одним из распространенных источников ошибок в Telescript было то, что, хотя коллекцию в целом можно было передать обратно в агент, отдельные элементы в ней принадлежали месту. Таким образом, если он используется return MyCollection[someIndex];, он вернется на устройство пользователя как null. Решение было дополнительное синтаксисем DictOwnedи ColOwnedнамеки, которые вызвали в собственность возвращаемых значений должны быть изменены на возвращении, и , таким образом , сериализовать в результаты при возвращении на прежнее место. [15]

Подклассы были известны как ароматы ; класс PieBuyer описано выше , представляет собой ароматизатор Агента. Telescript также включал концепцию смешанных классов, которая предлагала функции, аналогичные множественному наследованию , позволяя создавать классы, содержащие только код, который затем мог быть включен в другие классы. Добавки не были ароматизаторами. [16]

Как и многие современные объектно-ориентированные языки, Telescript разделяет интерфейс и реализацию, помещая их в .iфайлы для интерфейса и .tфайлы для реализации (т. Е. В элескрипте "t"). В редких случаях язык также определяет третий тип файла .d, который объединяет несколько .iфайлов вместе. [17] Скомпилированный код был помещен в .sфайл, который руководствовался инструкциями компоновщика в .lфайле. [18] Внешние Framework Применение разрешено C ++ код , который будет вызван Telescript. [19]

Заметки [ править ]

  1. ^ Эти примеры модифицированы по сравнению с оригиналами, найденными в Руководстве, с исправлением ряда ошибок в синтаксисе и орфографии.

Ссылки [ править ]

Цитаты

  1. ^ а б в Леви 1994 .
  2. ^ a b Clark & ​​Knaster 1995 .
  3. ^ а б в Канеллос 2011 .
  4. ^ Dan Hanttula, "Волшебное зеркало" , Pen Computing , апрель 2000
  5. ^ Марк Болье, «Приложения и архитектура беспроводного Интернета» , Addison-Wesley Professional, 2002, 9780201733549, стр. 12.
  6. Ссылка 1995 , стр. 1.
  7. Ссылка 1995 , стр. 1-2.
  8. Ссылка 1995 , стр. 2.
  9. Ссылка 1995 , стр. 8–12.
  10. ^ Руководство 1995 , стр. 7.
  11. ^ Руководство 1995 , стр. 8.
  12. ^ a b c Руководство 1995 , стр. 9.
  13. ^ Руководство 1995 , стр. 66.
  14. ^ Руководство 1995 , стр. 40.
  15. ^ Руководство 1995 , стр. 42.
  16. Ссылка 1995 , стр. 20.
  17. ^ Руководство 1995 , стр. 3.
  18. ^ Руководство 1995 , стр. 4.
  19. ^ Руководство 1995 , стр. 5.

Библиография

  • Леви, Стивен (апрель 1994). «Превосходное приключение Билла и Энди II» . Проводной .
  • Кларк, Ричард; Кнастер, Скотт; и другие. (Май 1995 г.). «Введение для разработчиков в General Magic и Magic Cap» . MacTech .
  • Канеллос, Майкл (18 сентября 2011 г.). "General Magic: самая важная мертвая компания в Кремниевой долине?" . Forbes .
  • Справочник по языку Telescript (PDF) . Общая магия. Октябрь 1995 г.
  • Руководство по программированию Telescript . Общая магия. 1995 г.