Введение

Язык программирования с прототипным подходом для платформы Apple Newton.

NewtonScript — это язык программирования с прототипным подходом, разработанный для создания программ для платформы Newton. Он испытывает сильное влияние языка программирования Self, но был модифицирован для лучшей адаптации к потребностям мобильных и встраиваемых устройств.

История

3 августа 1993 года компания Apple представила Apple Newton MessagePad. Устройство имело 640 КБ оперативной памяти, 4 МБ ПЗУ и 20 МГц микропроцессор ARM 610. Основной целью проекта Newton было создание портативного устройства, способного заменить компьютер. Из-за ограниченных ресурсов батареи и памяти разработчики искали язык программирования, способный справиться с этими задачами. Они рассматривали язык C++, но пришли к выводу, что ему не хватает гибкости. Они начали изучать языки, основанные на прототипах, и были впечатлены Smalltalk и Self. Параллельно Apple разрабатывала другой динамический язык программирования под названием Dylan, который рассматривался как один из кандидатов для платформы Newton. Однако и Self, и Dylan были отклонены, поскольку оба находились на ранней стадии разработки и не подходили для полноценной интеграции. Вместо этого команда под руководством Уолтера Р. Смита разработала новый язык под названием NewtonScript. На него оказали влияние динамические языки, такие как Smalltalk, и прототипная модель, реализованная в Self. В то время как графические интерфейсы обычно имеют два уровня — один для объектов и другой для компоновки графического интерфейса, которая обычно обрабатывается путем добавления слота в объект иерархии графического интерфейса (например, View). Синтаксис также был изменен для поддержки более текстового стиля программирования, в отличие от широкого использования графической среды Self для программирования. Это позволило разрабатывать программы для Newton на компьютере с Toolkit, где программы компилировались и затем загружались на устройство Newton для выполнения. Одним из преимуществ прототипного наследования в NewtonScript было снижение потребления памяти, что было критически важно для Newton объемом 128 КБ. Прототип объекта графического интерфейса мог фактически храниться в ПЗУ, что избавляло от необходимости копировать данные или функции по умолчанию в оперативную память. В отличие от языков, основанных на классах, где создание объекта требует выделения памяти для всех его атрибутов, использование прототипного наследования в NewtonScript позволяло выделять память только для нескольких полей, таких как proto и parent, вместо создания нового объекта целиком. Здесь proto и parent указывают, использует ли объект прототипное или родительское наследование. Например, разработчик может создать новый экземпляр кнопки. Если кнопка использует шрифт по умолчанию, обращение к ее "слоту" шрифта (то есть свойству или члену переменной) вернет значение, которое фактически хранится в ПЗУ; экземпляр кнопки в оперативной памяти не имеет собственного значения в слоте шрифта, поэтому цепочка прототипного наследования прослеживается до тех пор, пока не будет найдено значение. Если разработчик затем изменит шрифт кнопки, установив для его слота шрифта новое значение, это переопределит прототип; это переопределенное значение будет храниться в оперативной памяти. Таким образом, "дифференциальное наследование" в NewtonScript эффективно использовало дорогую флэш-память Newton, сохраняя основную часть данных и кода по умолчанию в более дешевом и значительно большем ПЗУ КПК.

Важные термины

Виды: Это объекты, созданные системой Newton View System, которые создаются во время выполнения для визуализации. Шаблон: Это чертёж, на основе которого создаются виды. Прототипы: Они могут служить чертежом для шаблона или вида и являются элементами библиотек кода NewtonScript. Рама и слот: Рама — это динамический набор слотов, а каждый элемент рамы называется слотом. Слот состоит из имени и значения. Значение может быть любого типа. Важно отметить, что все объекты в NewtonScript являются рамами. Суп и запись: Это взаимосвязанный набор рам/данных. Запись — это отдельная рама в супе. Frame Heap: Оперативная память, динамически выделяемая NewtonScript. Базовый вид: Это главный вид приложения, включающий все переменные и методы, используемые в приложении.