NewtonScript - это язык программирования на основе прототипов, созданный для написания программ для платформы Newton . [1] На него сильно повлиял язык программирования Self , но он был модифицирован, чтобы больше соответствовать потребностям мобильных и встроенных устройств . [2]
Парадигма | Объектно-ориентированный прототип |
---|---|
Разработано | Уолтер Смит |
Разработчик | Компьютер Apple |
Впервые появился | 1993 |
Печатная дисциплина | Динамический |
Под влиянием | |
Я , Дилан | |
Под влиянием | |
Ио |
История
3 августа 1993 года Apple представила Apple Newton MessagePad . Устройство имело 640 КБ ОЗУ и 4 МБ ПЗУ, работающее на машине Acorn RISC с частотой 20 МГц.
Основное намерение проекта Newton состояло в том, чтобы разработать устройство, способное заменить компьютер, будучи портативным. С ограниченными батареями и памятью разработчики искали язык программирования, способный справиться с этими проблемами.
Разработчики посмотрели на язык C ++, но поняли, что ему не хватает гибкости. Они начали сосредотачиваться на языках, основанных на прототипах, и были впечатлены Smalltalk и Self. [3] Одновременно Apple разрабатывала еще один динамический язык программирования под названием Dylan , который был сильным кандидатом на платформу Newton. [4]
Однако и Селф, и Дилан были исключены из рассмотрения, поскольку они оба находились на начальной стадии для правильной интеграции.
Вместо этого команда, возглавляемая Уолтером Смитом, разработала новый язык под названием NewtonScript. на него повлиял динамический язык, такой как Smalltalk, и модель прототипа, основанная на Self. [3]
Функции
Хотя NewtonScript находился под сильным влиянием Self, в обоих языках были некоторые различия.
Различия возникли из-за трех проблем с Самостью.
- Один из них заключается в том, что для работы типичного снимка Self требуется 32 МБ ОЗУ , тогда как платформа Newton была разработана для использования только 128 КБ для операционной системы. Это потребовало серьезной разборки движка, чтобы он работал и оставался место для приложений.
- Другой проблемой была производительность. Поскольку язык будет использоваться для всей системы, а не просто для работы в существующей операционной системе, он должен работать как можно быстрее.
- Наконец, система наследования в обычном движке Self имеет один родительский объект [5], тогда как графические интерфейсы обычно имеют два - один для объектов, а другой для макета графического интерфейса, который обычно обрабатывается путем добавления слота в какой-то графический интерфейс. -hierarchy объект (например, View ).
Синтаксис также был изменен, чтобы обеспечить более текстовый стиль программирования, в отличие от широко распространенного использования Self для программирования в среде графического интерфейса. Это позволило разрабатывать программы Newton на компьютере под управлением Toolkit, где программы компилируются и затем загружаются на устройство Newton для запуска.
Одним из преимуществ наследования на основе прототипа NewtonScript было сокращение использования памяти, что является ключевым моментом в 128 КБ Newton. Прототип объекта GUI можно было сохранить в ПЗУ, поэтому не было необходимости копировать данные или функции по умолчанию в рабочую память.
В отличие от языков на основе классов, где создание объекта включает выделение памяти для всех его атрибутов, использование NewtonScripts наследования прототипов позволило выделить память для нескольких полей, таких как _proto и _parent, вместо создания целого нового объекта. Здесь _proto и _parent обозначают, использует ли объект прототипное или родительское наследование. [6]
В качестве примера, иллюстрирующего приведенную выше концепцию, разработчик может создать новый экземпляр кнопки. Если кнопка использует шрифт по умолчанию, доступ к ее «слоту» шрифта (т. Е. Свойству или переменной-члену) вернет значение, которое фактически хранится в ПЗУ; экземпляр кнопки в ОЗУ не имеет значения в собственном слоте шрифта, поэтому цепочка наследования прототипа отслеживается до тех пор, пока не будет найдено значение. Если разработчик затем изменит шрифт кнопки, установка нового значения для слота шрифта переопределит прототип; это значение переопределения хранится в ОЗУ. Таким образом, « дифференциальное наследование » NewtonScript эффективно использовало дорогостоящую флэш-память Newton, сохраняя большую часть данных и кода по умолчанию в более дешевом и гораздо большем ПЗУ КПК .
Важные термины
Представления: это объекты, созданные Newton View System, которые создаются во время выполнения для визуализации представлений.
Шаблон: это план, на основе которого создаются представления.
Protos: они могут быть схемой для шаблона или представления и являются элементами библиотек кода NewtonScript.
Фрейм и слот: фрейм - это динамический набор слотов, и один элемент фрейма называется слотом. Слот состоит из имени и значения. Значение может быть любого типа. Стоит отметить, что все объекты в NewtonScript являются фреймами. [7]
Суп и вход: это связанный набор фреймов / данных. Вступление - это индивидуальная рамка в супе.
Куча кадров: оперативная память, динамически выделяемая NewtonScript.
Базовое представление: это основное представление приложения, состоящее из всех переменных и методов, используемых в приложении.
Преимущества и недостатки
Преимущества
- NewtonScript - это язык программирования на основе динамических прототипов, использующий дифференциальное наследование. Это означает, что очень эффективно использовать пространство памяти. Будучи динамичным, легко изменять объекты, проверять типы и т.д. во время выполнения, что дает разработчикам большую гибкость.
- Созданные объекты могут храниться в постоянной памяти, такой как флэш-карта или внутренняя память. ОЗУ используется только для хранения атрибутов, значения которых изменяются во время выполнения. Это снижает потребление памяти.
- Написание интерфейсов для приложений с графическим интерфейсом пользователя может быть эффективно реализовано с использованием модели прототипа, поскольку мы можем напрямую написать объект для элемента управления с графическим интерфейсом, а не создавать класс и создавать его экземпляр.
- Сборка мусора выполняется системой автоматически. Это помогло разработчикам сосредоточиться на разработке приложений, а не беспокоиться об управлении памятью. Сборка мусора также помогла смягчить проблему зависших указателей, когда указатель ошибочно указывает на освобожденную область памяти. [6]
Недостатки
- Поскольку код NewtonScript был написан на одной платформе и запускался на другой, отладить его было практически невозможно. [2] Более совершенный код отладки в движке Newton помог бы до некоторой степени решить эту проблему, но ограниченная память затрудняла это. Вместо этого разработчик получит расплывчатое указание вместе с кодом ошибки без какой-либо возможности сопоставить его со строками в исходном коде.
- Другой недостаток заключается в том, что динамическая переменная снижает скорость работы, поскольку простое разыменование указателя не может использоваться, как в статически типизированных, таких как C ++ и Java.
Влияния
С отменой Apple в 1998 году [8] проекта Newton, все дальнейшие основные разработки NewtonScript были остановлены. Однако функции, используемые в NewtonScript, будут и дальше вдохновлять другие модели программирования и языки.
Основанная на прототипе объектная модель Self и NewtonScript использовалась в JavaScript , самом популярном и видимом языке для использования этой концепции до сих пор.
NewtonScript также является одним из концептуальных предков (вместе с Smalltalk, Self, Act1, Lisp и Lua ) языка программирования общего назначения под названием Io [9], который реализует ту же модель дифференциального наследования, которая использовалась в NewtonScript для экономии памяти.
Смотрите также
- Программирование на основе прототипов
- Язык динамического программирования
- JavaScript
Рекомендации
- ^ Смит, WR (1994-02-01). Архитектура приложения Newton . Compcon Spring '94, Сборник статей . С. 156–161. DOI : 10.1109 / CMPCON.1994.282931 . ISBN 978-0-8186-5380-3.
- ^ а б Шёдль, Арно (2004-10-10). «Язык программирования NewtonScript» . Архивировано 10 октября 2004 года . Проверено 15 сентября 2016 .CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
- ^ а б Смит, Уолтер Р. (1 января 1995 г.). Использование языка на основе прототипов для пользовательского интерфейса: опыт проекта Newton . Труды десятой ежегодной конференции по объектно-ориентированным программным системам, языкам и приложениям . ОПСЛА 95 года. Нью-Йорк, Нью-Йорк, США: ACM. С. 61–72. DOI : 10.1145 / 217838.217844 . ISBN 978-0897917032.
- ^ «Дилан: объектно-ориентированный динамический язык» . www.cise.ufl.edu . Проверено 22 сентября 2016 .
- ^ Chambers, C .; Ungar, D .; Ли, Э. (1 января 1989 г.). Эффективная реализация SELF объектно-ориентированного языка с динамической типизацией на основе прототипов . Материалы конференции по объектно-ориентированным программным системам, языкам и приложениям . ОПСЛА '89. Нью-Йорк, Нью-Йорк, США: ACM. С. 49–70. CiteSeerX 10.1.1.588.6955 . DOI : 10.1145 / 74877.74884 . ISBN 978-0897913331.
- ^ а б «Язык программирования NewtonScript» (PDF) . 1996 . Дата обращения 14 мая 2021 .
- ^ Маккихан, Джули; Родс, Нил (1994). Программирование для Newton®: Разработка программного обеспечения с помощью NewtonscriptTM . 955 Массачусетс-авеню, Кембридж, Массачусетс 02139: AP Professional. ISBN 978-0-12-484800-9.CS1 maint: location ( ссылка )
- ^ «Apple отменяет Ньютон» . windowsitpro.com . 1998-02-28 . Проверено 22 сентября 2016 .
- ^ "io гид" . iolanguage.org . Проверено 15 сентября 2016 .
Внешние ссылки
- SELF и происхождение NewtonScript , Уолтер Смит, 1994.
- Использование языка на основе прототипов для пользовательского интерфейса: опыт проекта Newton (PDF), Уолтер Смит, 1995.
- Программирование NewtonScript на основе классов , Уолтер Смит, 1993.
- Дополнительные статьи Уолтера Смита по Ньютону .
- Язык программирования NewtonScript (кеш archive.org; исходная ссылка мертва по состоянию на 15.10.04.)
- NEWT / 0 Портативный компилятор / интерпретатор NewtonScript.
- NewtDevEnv , среда разработки NewtonScript, которая позволяет выполнять разработку непосредственно на Newton от Стива Вейера.
- DyneTK , среда разработки NewtonScript, которая заменяет исходный Newton ToolKit (NTK); работает в MS Windows и Mac OS X Маттиасом Мельчером.