Телескрипт (язык программирования)
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, а затем в 2000 году переименована в Icras. [4] обслуживала ряд вертикальных рынков, прежде чем закрылась в 2001 году. [5] Остатки первоначальной компании были ликвидированы в 2004 году. [3]
Описание
[ редактировать ]Основные концепции
[ редактировать ]Telescript был смоделирован на основе концепции небольших программ, известных как агенты , которые будут взаимодействовать с вычислительными службами, известными как места, все из которых будут работать в кластере из одного или нескольких серверов, на которых размещается так называемое облако Telescript. Портативное устройство пользователя было одним из таких мест, хотя и с ограниченными возможностями. Модель предполагала, что большая часть информации и услуг будет предоставляться местами, работающими на более крупных компьютерах-серверах, размещенных у таких провайдеров связи, как AT&T. Даже в ранних документах это называется « работа в облаке» . [1] Программы, ориентированные на пользователя, будут состоять из ряда таких агентов, которые могут запускаться локально, на хостах провайдера или даже перенаправляться на сторонние серверы. Для координации связи Telescript также включил концепцию телеимени , которое уникально идентифицирует пользователей, и телеадресов , которые идентифицируют устройство даже при его перемещении между сетями. [6]
Например, рассмотрим приложение для покупок, в котором пользователь просит узнать цены на новый гриль-барбекю, который он хочет приобрести. В традиционной модели клиент-сервер приложение формирует ряд запросов, отправляет их ряду сервисов, а затем собирает результаты и отображает их. В модели Telescript приложение вместо этого создаст нового агента, заполненного данными из запроса, пометит его своим именем и адресом, а затем отправит его в хранилище на сервере для обработки. Затем этот сервер может обработать запрос напрямую или передать агента в другие места, например, к местам реальных поставщиков, для дальнейшей обработки. Результаты могут быть помещены во внутренние поля данных агента и отправлены обратно через сеть на устройство пользователя, или может быть создан новый агент-«мессенджер», который будет переносить только данные результатов и отправлять обратно, чтобы минимизировать передачу сетевых данных. [7]
Модель также отличается от традиционных решений тем, как происходит обмен данными при взаимодействии программ. Например, если пользователь решает купить один из барбекю, которые он нашел при предыдущем поиске, в обычной системе задача заполнения форм заказа и подтверждения оплаты будет выполняться посредством прямой связи между устройством пользователя и удаленным сервером. требующий «живого» канала связи на протяжении всего процесса. В модели Telescript новый агент с информацией, необходимой для совершения покупки, отправляется в магазин этого поставщика, взаимодействует с магазином или агентами поставщика, а затем возвращается с успешным или неудачным результатом. Основная связь происходит между агентами и местами на удаленном сервере, поэтому связь по сети требуется только в начале и конце процесса. [8]
Telescript был объектно-ориентированным (ОО) и использовал ряд необычных терминов для описания состояния объекта и коммуникаций. Атрибуты соответствуют тому, что в других языках называется переменными или полями экземпляра. Вызовы методов назывались запросами , а сам процесс реализации метода назывался его выполнением . Все такие вызовы всегда отвечали сообщением, указывающим на успех или неудачу, и запрашивающий объект мог при необходимости перехватить их и ответить на них . Подсказки о том, как передавать данные в вызовы методов и из них, были известны как ограничения общие « по ссылке » и « по значению ». и охватывали, среди прочего, [9]
Telescript, как правило, не имел состояния с точки зрения срока жизни данных. Все данные в программе, как экземплярные, так и локальные переменные, всегда сериализовались. Агенты могут быть вызваны или приостановлены в любой момент и не потеряют своего состояния. Этот же механизм также позволял агентам легко обмениваться данными между хостами.
Синтаксис и макет
[ редактировать ]Хотя управление и структура Telescript были вдохновлены C, его точный синтаксис значительно отличался. Одним из очевидных отличий была замена фигурных скобок в стиле C круглыми скобками на уровне определения, сохранение фигурных скобок для группировки операторов внутри операторов логики и управления потоком , а также использование двоеточия для отделения имени от его определения. Следующий код определяет интерфейс для объектов типа Pie : [10] [Н 1]
Pie: interface(Object) = ( public name: String; initialize: op(name: String); );
Обратите внимание на использование ключевого слова op
, что соответствует function
или sub
встречается в других языках. Реализация пирога может использоваться в одном или нескольких class
объекты, которые могут быть организованы в modules
похоже на Visual Basic .NET namespace
построить. #include
используется для импорта файлов заголовков, но импорт является локальным для modules
, а не файл в целом. [11]
Концепции агента и места Telescript были вызваны простым разделением на подклассы этих двух классов, Agent и Place, которые оба были подклассами Process. Для ясности кода можно поместить оба этих компонента в один файл или даже собрать их в один модуль. Следующий код определяет агентов, необходимых для реализации магазина по продаже пирогов: [12]
PieStoreModule: module = ( #include "pie.i" PieBuyer: class(Agent) = ( public live: sponsored op() = { *.go(*.destination); myPie = [email protected](); *.go(*.originPlace); }; ); PieSeller: class(Place) = ( public sellPie: op() Pie = { aPie: Pie | Nil; 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, продать Pie. Когда эта команда будет выполнена, агент вернется в исходное место. Вызвавшее приложение может затем изучить результаты, проверив переменную 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];
, он вернется на устройство пользователя как нулевой. Решением стал дополнительный синтаксис, DictOwned
и ColOwned
подсказки, которые приводили к изменению владельца возвращаемых значений при возврате и, таким образом, сериализации в результаты при возврате в исходное место. [15]
Подклассы были известны как ароматы ; класс PieBuyer, описанный выше, является разновидностью Agent. Telescript также включил концепцию смешанных классов, которая предлагала функции, аналогичные множественному наследованию , позволяя создавать классы, содержащие только код, который затем можно было включить в другие классы. Смеси не были ароматизаторами. [16]
Как и многие современные объектно-ориентированные языки, Telescript разделил интерфейс и реализацию, поместив их в .i
файлы для интерфейса и .t
файлы для реализации (t как в «t»elescript). Необычно, что язык также определяет третий тип файла, .d
, который объединил несколько .i
файлы вместе. [17] Скомпилированный код помещался в .s
файл, который управлялся инструкциями компоновщика в .l
файл. [18] Платформа внешних приложений позволяла C++ из Telescript. вызывать код [19]
Примечания
[ редактировать ]- ^ Эти примеры изменены по сравнению с оригиналами, найденными в Руководстве, с исправлением ряда синтаксических и орфографических ошибок.
Ссылки
[ редактировать ]Цитаты
- ^ Jump up to: а б с Леви 1994 .
- ^ Jump up to: а б Кларк и Кнастер 1995 .
- ^ Jump up to: а б с Канеллос 2011 .
- ↑ Дэн Ханттула, «Волшебное зеркало» , Pen Computing , апрель 2000 г.
- ^ Марк Болье, «Приложения и архитектура беспроводного Интернета» , Addison-Wesley Professional, 2002, 9780201733549, стр. 12.
- ^ Ссылка 1995 , с. 1.
- ^ Справочник 1995 г. , стр. 1–2.
- ^ Ссылка 1995 , с. 2.
- ^ Справочник 1995 , стр. 8–12.
- ^ Руководство 1995 , с. 7.
- ^ Руководство 1995 , с. 8.
- ^ Jump up to: а б с Путеводитель 1995 , с. 9.
- ^ Руководство 1995 , с. 66.
- ^ Руководство 1995 , с. 40.
- ^ Руководство 1995 , с. 42.
- ^ Ссылка 1995 , с. 20.
- ^ Руководство 1995 , с. 3.
- ^ Руководство 1995 , с. 4.
- ^ Руководство 1995 , с. 5.
Библиография
- Леви, Стивен (апрель 1994 г.). «Невероятное приключение Билла и Энди 2» . Проводной .
- Кларк, Ричард; Кнастер, Скотт; и др. (май 1995 г.). «Введение разработчика в General Magic и Magic Cap» . МакТех .
- Канеллос, Майкл (18 сентября 2011 г.). «Дженерал Мэджик: самая важная мертвая компания в Кремниевой долине?» . Форбс .
- Справочник по языку Telescript (PDF) . Общая магия. Октябрь 1995 года.
- Руководство по программированию Телескрипта . Общая магия. 1995.