NewtonScript
| NewtonScript | |
|---|---|
| Класс языка | прототипный, объектно-ориентированный |
| Появился в | 1993 |
| Автор | Уолтер Смит |
| Разработчик | Apple Computer |
| Система типов | динамическая |
| Испытал влияние | Self, Dylan |
| Повлиял на | Io |
NewtonScript — это прототипно-ориентированный язык программирования, созданный для написания программ для платформы Newton.[1] Испытал сильное влияния языка программирования Self, но был модифицирован, чтобы лучше соответствовать потребностям мобильных и встраиваемых устройств.[2]
История
[править | править код]3 августа 1993 года Apple представила Apple Newton MessagePad. Устройство имело 640 КБ ОЗУ, 4 МБ ПЗУ и 20 МГц микропроцессор ARM 610.
Основной целью проекта Newton было создание устройства, способного заменить компьютер, будучи при этом портативным. С ограниченным зарядом батареи и памятью разработчики искали язык программирования, способный решить эти проблемы.
Разработчики рассматривали язык программирования C++, но поняли, что ему не хватает гибкости. Они начали фокусироваться на прототипно-ориентированных языках и были впечатлены Smalltalk и Self.[3] Одновременно Apple разрабатывала другой динамический язык программирования под названием Dylan, который был сильным кандидатом для платформы Newton.[4]
Однако и Self, и Dylan были исключены из рассмотрения, так как оба находились на слишком ранней стадии для надлежащей интеграции.
Вместо этого команда под руководством Уолтера Р. Смита разработала новый язык под названием NewtonScript. На него повлияли динамические языки, такие как Smalltalk, и прототипная модель, основанная на Self.[3]
Особенности
[править | править код]Хотя на NewtonScript сильно повлиял Self, между этими языками были некоторые различия.
Различия возникли из-за трех проблем с Self:
- Одна из них заключается в том, что типичная установка Self требует 32 МБ ОЗУ для работы, тогда как платформа Newton была разработана для использования только 128 КБ для операционной системы. Это потребовало серьезного сокращения движка, чтобы он уместился и при этом оставалось место для приложений.
- Другой проблемой была производительность. Поскольку язык будет использоваться для всей системы, в отличие от просто запуска на существующей операционной системе, он должен был работать как можно быстрее.
- Наконец, система наследования в обычном движке Self имела один родительский объект,[5] тогда как GUI обычно имеют два — один для объектов и другой для макета GUI, который обычно обрабатывается путем добавления слота в какой-либо объект иерархии GUI (например, View model[англ.]).
Синтаксис также был изменен, чтобы обеспечить более текстовый стиль программирования, в отличие от широкого использования Self GUI-среды для программирования. Это позволило разрабатывать программы Newton на компьютере с запущенным Toolkit, где программы компилировались, а затем загружались на устройство Newton для работы.
Одним из преимуществ прототипного наследования NewtonScript было сокращение использования памяти, что является ключевым фактором для 128 КБ Newton. Прототип объекта GUI мог фактически храниться в ПЗУ, поэтому не было необходимости копировать данные или функции по умолчанию в рабочую память.
В отличие от языков, основанных на классах, где создание объекта включает выделение памяти для всех его атрибутов, использование NewtonScript прототипного наследования позволяло выделять память для нескольких полей, таких как _proto и _parent, вместо создания совершенно нового объекта. Здесь _proto и _parent обозначают, использует ли объект прототипное или родительское наследование.[6]
Пример для иллюстрации вышеуказанной концепции: разработчик может создать новый экземпляр кнопки. Если кнопка использует шрифт по умолчанию, доступ к ее "слоту" шрифта (т.е. свойству или переменной-члену) вернет значение, которое фактически хранится в ПЗУ; экземпляр кнопки в ОЗУ не имеет значения в своем собственном слоте шрифта, поэтому цепочка прототипного наследования отслеживается до тех пор, пока не будет найдено значение. Если разработчик затем изменяет шрифт кнопки, установка нового значения в ее слот шрифта переопределит прототип; это переопределенное значение хранится в ОЗУ. Таким образом, "дифференциальное наследование" NewtonScript эффективно использовало дорогую флеш-ОЗУ Newton, храня основную часть данных и кода по умолчанию в более дешевом и гораздо большем ПЗУ машины.
Важные термины
[править | править код]- Views (Представления)
- Это объекты, созданные системой Newton View System, которые создаются во время выполнения для отображения представлений.
- Template (Шаблон)
- Это чертеж, из которого создаются представления.
- Protos (Прототипы)
- Они могут быть чертежом для шаблона или представления и являются элементами библиотек кода NewtonScript.
- Frame and Slot (Фрейм и Слот)
- Фрейм — это динамическая коллекция слотов, и один элемент фрейма называется слотом. Слот состоит из имени и значения. Значение может быть любого типа. Все объекты в NewtonScript являются фреймами[7].
- Soup and Entry (Суп и Запись)
- Это связанная коллекция фреймов/данных. Запись — это отдельный фрейм в супе.
- Frame Heap (Куча фреймов)
- ОЗУ, динамически выделяемая NewtonScript.
- Base View (Базовое представление)
- Это основное представление приложения, состоящее из всех переменных и методов, используемых в приложении.
Преимущества и недостатки
[править | править код]- Преимущества
- NewtonScript — это динамический прототипно-ориентированный язык программирования, использующий дифференциальное наследование. Это означает, что он очень эффективен в использовании памяти. Будучи динамическим, он легко модифицирует объекты, проверяет типы и т. д. во время выполнения, предоставляя большую гибкость для разработчиков.
- Созданные объекты могут храниться в постоянной памяти, такой как флеш-карта или внутренняя память. ОЗУ используется только для хранения атрибутов, значения которых изменяются во время выполнения. Это снижает потребление памяти.
- Написание интерфейсов для приложений с графическим интерфейсом может быть эффективно реализовано с использованием прототипной модели, поскольку мы можем напрямую написать объект для элемента управления графического интерфейса, а не создавать класс и инстанцировать его.
- Сборка мусора осуществляется автоматически системой. Это помогло разработчикам больше сосредоточиться на разработке приложений, а не беспокоиться об управлении памятью. Сборка мусора также помогла смягчить проблему висячих указателей, когда указатель ошибочно указывает на деаллоцированную область памяти.[6]
- Недостатки
- Поскольку код NewtonScript был написан на одной платформе и запускался на другой, отладка была практически невозможна.[2] Лучший отладочный код в движке Newton помог бы в некоторой степени компенсировать эту проблему, но ограниченная память затрудняла это. Вместо этого разработчик получал расплывчатое указание вместе с кодом ошибки, без какой-либо возможности сопоставить его со строками в исходном коде.
- Еще одним недостатком является то, что динамическая переменная снижает скорость работы, поскольку простое разыменование указателя не может быть использовано, как в статически типизированных языках, таких как C++ и Java.
Влияние
[править | править код]С закрытием проекта Newton компанией Apple в 1998 году,[8] все дальнейшие основные разработки NewtonScript были остановлены. Однако функции, используемые в NewtonScript, продолжали вдохновлять другие модели и языки программирования.
Прототипно-ориентированная объектная модель Self и NewtonScript была использована в JavaScript, самом популярном и заметном языке, использующем эту концепцию до сих пор.
NewtonScript также является одним из концептуальных предков (вместе со Smalltalk, Self, Act1, Lisp и Lua) языка программирования общего назначения под названием Io[9], который реализует ту же модель дифференциального наследования, которая использовалась в NewtonScript для экономии памяти.
См. также
[править | править код]Сноски
[править | править код]- ↑ Smith, W. R. The Newton application architecture // Proceedings of COMPCON '94. — 1994-02-01. — P. 156–161. — ISBN 978-0-8186-5380-3. — doi:10.1109/CMPCON.1994.282931.
- 1 2 Schödl, Arno. The NewtonScript Programming Language (10 октября 2004). Дата обращения: 15 сентября 2016. Архивировано 10 октября 2004 года.
- 1 2 Smith, Walter R. Using a prototype-based language for user interface // Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications - OOPSLA '95. — New York, NY, USA : ACM, 1995-01-01. — P. 61–72. — ISBN 978-0897917032. — doi:10.1145/217838.217844.
- ↑ Dylan: An Object Oriented Dynamic Language. www.cise.ufl.edu. Дата обращения: 22 сентября 2016.
- ↑ Chambers, C. An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes // Conference proceedings on Object-oriented programming systems, languages and applications - OOPSLA '89 / C. Chambers, D. Ungar, E. Lee. — New York, NY, USA : ACM, 1989-01-01. — P. 49–70. — ISBN 978-0897913331. — doi:10.1145/74877.74884.
- 1 2 The NewtonScript Programming Language (1996). Архивировано 24 января 2015 года.
- ↑ McKeehan, Julie. Programming for the Newton®: Software Development with NewtonscriptTM / Julie McKeehan, Neil Rhodes. — 955 Massachusetts Avenue, Cambridge, Massachusetts 02139 : AP Professional, 1994. — ISBN 978-0-12-484800-9.
- ↑ Apple cancels Newton. windowsitpro.com (28 февраля 1998). Дата обращения: 22 сентября 2016.
- ↑ io guide. iolanguage.org. Дата обращения: 15 сентября 2016.
Внешние ссылки
[править | править код]- SELF and the Origins of NewtonScript Архивировано 11 марта 2010 года., Уолтер Смит, 1994.
- Using a Prototype-based Language for User Interface: The Newton Project’s Experience Архивировано 3 сентября 2008 года. (PDF), Уолтер Смит, 1995.
- Class-based NewtonScript Programming Архивировано 29 июня 2008 года. Уолтер Смит, 1993.
- Additional Newton-related papers Архивировано 17 января 2020 года. Уолтер Смит.
- The NewtonScript Programming Language (архив archive.org; исходная ссылка не работает с 15.10.04.)
- NEWT/0 Портативный компилятор/интерпретатор NewtonScript
- NEWT64 Другой компилятор/исполнитель NewtonScript
- NewtDevEnv, среда разработки NewtonScript, которая позволяет осуществлять разработку непосредственно на Newton Стива Вейера.
- DyneTK, среда разработки NewtonScript, которая заменяет оригинальный Newton ToolKit (NTK); работает на MS Windows и Mac OS X Маттиасом Мельхером.