Jump to content

Смарт Паскаль

Smart Pascal — это язык программирования Object Pascal , созданный на основе Delphi Web Script и адаптированный для Smart Mobile Studio, JavaScript машинного кода для коммерческой разработки .

Являясь языком быстрой разработки приложений (RAD), он содержит библиотеку классов и компонентов. Компилятор Smart Pascal — это компилятор типа «исходный код» , генерирующий независимые от сервера приложения, совместимые с HTML5 . Скомпилированные Smart-приложения могут выполняться в любом современном браузере с поддержкой HTML5 . Скомпилированная программа затем обычно встраивается в элемент контейнера DIV или, альтернативно, занимает весь экран.

Библиотека времени выполнения была специально создана для повышения производительности и сокращения времени выхода на рынок при разработке мобильных приложений. Smart Pascal радикально сокращает время разработки JavaScript с лингвистической точки зрения, с помощью Object Pascal и настоящего объектно-ориентированного программирования, а также с точки зрения того, как спроектированы классы и система компонентов библиотеки времени выполнения. RTL взаимодействует с объектной моделью документа и средой JavaScript так же, как родной язык взаимодействует с операционной системой; абстрагирование общих знаменателей и автоматизация сложных задач.

Smart Pascal также популярен для программирования микроконтроллеров Espruino и nodeJS клиент-серверных модулей .

Smart Mobile Studio была разработана норвежцем Джоном Леннартом Осенденом и французом Эриком Гранжем. Технология опубликована компанией-разработчиком программного обеспечения Optimale Systemer. Язык использует популярный механизм сценариев с открытым исходным кодом под названием Delphi Web Script (DWScript) для проверки и анализа синтаксиса. 18 мая 2012 года Optimale Systemer сообщила, что приобрела права на собственный генератор кода, написанный Эриком Грейнджем, сопровождающим Delphi Web Script, у его компании Creative IT, Франция (см. статью: От OP4JS до Smart Mobile Studio ).

До работы с Эриком Грейнджем Джон Леннарт Осенден опубликовал несколько предложений, в которых изложил свои мысли по поводу нового компилятора объектного Паскаля; компилятор, ориентированный на Javascript и браузер, а не на процессоры x86 или ARM . Он также представил видео, демонстрирующее ранний прототип компилятора (доступно на YouTube). Первоначально он был встречен резкой критикой со стороны сообщества Delphi и Free Pascal, но нашел поддержку у Эрика Грейнджа, который подтвердил и продемонстрировал , что JavaScript достиг совершеннолетия и теперь может использоваться для создания крупномасштабных серьезных бизнес-приложений. Джон Леннарт написал библиотеку времени выполнения Smart Pascal и интегрированную среду разработки , а Эрик Грейндж усовершенствовал генератор кода и усовершенствовал язык.

Прототип

[ редактировать ]

Первый прототип (альфа-сборка) был выпущен 20 декабря 2011 года, и дуэт быстро начал привлекать других программистов, интересующихся новой платформой. Проект также получил полное двухстраничное освещение в журнале Blaise Pascal Magazine (выпуск 31), что помогло значительно продвинуть диалект. В результате библиотека времени выполнения и инструменты расширились и теперь включают поддержку передовых технологий, таких как Remobjects SDK и Embarcadero Datasnap, подаренных платформе разработчиком программного обеспечения Андре Мюше. Начиная с версии 2.0 Smart Pascal поддерживает nodeJS , Web Workers и Espruino, платформу микроконтроллеров любезно предоставленную немецким математиком и разработчиком Кристианом Бадде.

В то же время технический автор и архитектор программного обеспечения Примож Габриельчич (автор, среди прочего, книги «Параллельное программирование») решил написать книгу о Smart Pascal: умную книгу, которая для языков программирования часто рассматривается как знак одобрения.

Диалект, известный как Smart Pascal, вырос в результате взаимного сотрудничества между всеми этими людьми.

Смарт против Флэша

[ редактировать ]

Smart Pascal IDE имеет некоторое сходство с Adobe Flash в том, что вы, по сути, создаете объектно-ориентированные , высокоскоростные, модульные приложения, предназначенные для работы в HTML-документе. Графические возможности библиотеки времени выполнения Smart более чем соответствуют задаче воспроизведения некоторых функций, которыми славится Adobe Flash, но Smart Pascal в конечном итоге представляет собой набор инструментов для создания мобильных приложений HTML5. Smart IDE очень мало обеспечивает визуальную автоматизацию. Smart Pascal просто не был предназначен для создания мультимедийных файлов и остается четкой платформой разработки HTML5 для программистов Object Pascal. Кривая обучения Smart Pascal значительно выше, чем Adobe ActionScript . Паскаль — это язык, в основном используемый инженерами.

Приложения Visual Smart Pascal основаны на формах. Отдельные окна могут быть заполнены элементами управления, и к ним можно подключить события кода, чтобы реагировать на действия пользователя. Smart Mobile Studio поставляется с визуальным дизайнером форм и редактором свойств, но этот дизайнер представляет собой просто вспомогательное средство для обычных пользовательских интерфейсов и не поддерживает визуальные эффекты.

На уровне архитектуры библиотека времени выполнения Smart Pascal имеет полную поддержку расширенных графических выражений, включая динамически создаваемые CSS3 стили , « анимацию », синхронизацию перерисовки дисплея, 2D- и 3D-спрайты на базе графического процессора и WebGL . Можно было бы сказать, что Smart Pascal — это «что-то вроде Flash», но на этом параллель заканчивается. Лингвистически и концептуально эти программные методологии совершенно разные. Они были созданы для разных целей, хотя могут достигать примерно одинаковых результатов. Smart Pascal имеет одно преимущество перед Flash: приложения HTML5 не имеют зависимостей. Программа Smart Pascal не зависит от плагинов, расширений браузера или сторонних библиотек. Но Flash в конечном итоге стал более совершенным, что отражает более чем десятилетие непрерывной эволюции и мультимедийного совершенства.

Доступ к базе данных

[ редактировать ]

Библиотека времени выполнения Smart Pascal поддерживает все существующие ядра баз данных браузера. Доступ к ним осуществляется через классы, а не через компоненты, что противоречит традиционному подходу Object Pascal к данным. На момент написания статьи поддерживаются следующие движки:

Smart IDE также импортирует и обеспечивает доступ к Embarcadero DataSnap , который представляет собой платформу удаленного доступа к данным, популярную в Delphi и C++ builder . Использование этих библиотек импорта позволяет приложениям Smart Pascal читать, записывать и обновлять удаленные наборы данных. Сам Smart Pascal написан на Embarcadero Delphi .

Библиотека времени выполнения включает классы для RemObjects SDK , платформы удаленного вызова процедур по образцу Microsoft RPC . JSON RPC и WebSockets также являются частью библиотеки классов.

Лингвистические различия

[ редактировать ]

Smart Pascal имеет несколько отличий, которые четко отделяют диалект от стандартного Object Pascal:

  • Выражения свойств
  • Операции с массивами
  • Анонимные методы
  • Анонимные занятия
  • Частичные занятия
  • Лямбды
  • Переменные класса
  • Поддержка ограниченных наборов
  • Отсутствие дженериков.
  • Ограниченный RTTI

Выражения свойств

[ редактировать ]

В Object Pascal свойство — это открытое значение, которое можно связать либо с полем класса, либо с методом-членом класса. Это традиционный способ раскрытия свойства значения, при котором потребитель свойства абстрагируется от логики чтения и записи. Потребитель не знает, связано ли свойство явно с полем или методом записи.

Smart Pascal полностью поддерживает старую парадигму, но вводит технику, называемую «выражения свойств». По сути, это позволяет вам программировать логику чтения и записи как часть объявлений свойств. Это совершенно неслыханно в традиционном Object Pascal, но распространено в других языках, таких как C# и Objective-C .

В классическом Object Pascal вы могли бы написать что-то вроде этого:

Type
TMyObject = Class( .. )
private
  FSubObj: TNameData;
protected
  function getFirstName:String;
  procedure setFirstName(value:String);
published
  Property FirstName:String read getFirstName write setFirstName;
end;

function TMyObject.getFirstName:String;
begin
  result:=FSubObj.FirstName;
end;

procedure TMyObject.setFirstName(value:String);
begin
  FSubObj.FirstName:=Value;
end;

Используя Smart Pascal с выражениями свойств, вы можете опустить заглушки getFirstName() и setFirstName() и реализовать логику как часть самого объявления свойства:

Property FirstName:String
              read ( FSubObject.FirstName )
              write ( FSubObject.FirstName );

Выражения свойств особенно удобны для классов с дочерними объектами. Если класс предоставляет подобъекты (списки объектов), до появления дженериков вам приходилось писать много одного и того же кода снова и снова, заключая уже существующий код в объект списка, что для сложных иерархий классов снижает скорость выполнения из-за ненужного раздувания. . Ситуация изменилась к лучшему с появлением дженериков, но вам по-прежнему приходится изолировать логику чтения и записи в отдельных членах класса. В Smart Pascal это элегантно достигается с помощью массивов:

TMyClass = class
   private
      FList : array of TElement;
   public
      property Items[i: Integer] : TElement read (FList[i]) 
                                            write (FList[i]); default;
      property Count : Integer read (FList.Length);
end;

Этот прием значительно упрощает преобразование чисел, которое в некоторых случаях можно выполнить прямо в объявлении:

TMyAngle = record
   private
      FAngle : Float;
   public
      property Radians : Float read FAngle write FAngle;
      property Degrees : Float read (RadToDeg(FAngle)) 
                               write (FAngle:=DegToRad(Value));
end;

Операции с массивами

[ редактировать ]

Операции с массивами были добавлены в синтаксис Smart Pascal для лучшей адаптации к JavaScript. Поскольку в JavaScript нет концепции указателей или прямого доступа к памяти, все попытки работать со списками, связанными списками и т. д. традиционным способом привели бы к значительному снижению скорости. Таким образом, там, где вы в Delphi или Free Pascal выделяете экземпляр TList или TObjectList, Smart Pascal обеспечивает лучшую производительность и идентичную функциональность, используя обычные массивы. Все массивы поддерживают полный набор операций, независимо от типа данных, для вставки, удаления, сортировки и других манипуляций с содержимым.

Где в ванильном Object Pascal вы могли бы написать:

Procedure TMyObject.AddItem(aValue:Integer);
var
  mLen: Integer;
Begin
  mLen:=length(FMyArray);
  setLength(FMyArray,mLen +1);
  FMyArray[mLen]:=Vaue;
end;

Smart Pascal имеет эту функциональность «встроенной» для всех массивов, если типы данных совпадают. Когда вы объединяете это с выражениями свойств, результатом является мощный альтернативный способ достижения того же с меньшими ресурсами и большей скоростью, чем обобщенные методы или традиционный Object Pascal:

FMyArray.add(aValue);

На момент написания этой статьи над всеми типами массивов можно было выполнять следующие операции:

  • Добавлять
  • Прозрачный
  • Копировать
  • Считать
  • Удалить
  • Высокий
  • Низкий
  • ИндексОф
  • Вставлять
  • Длина
  • Карта
  • Пик
  • Поп
  • Толкать
  • Удалять
  • Обеспечить регресс
  • SetLength

Методы Peek(), Pop(), Push() обычно используются с объектами стека FILO (первый вошел, последний вышел) и FIFO (первый вошел, первый вышел). Smart Pascal не нуждается в таких классах, как TObjectlist, TList, TStringlist и TStack (они предоставляются библиотекой времени выполнения для поддержки устаревших версий только с библиотекой визуальных компонентов Delphi).

Анонимные методы

[ редактировать ]

Подобно выражениям свойств и операциям с массивами, анонимные методы были представлены в Smart Pascal как средство улучшения совместимости с JavaScript. И Delphi, и Free Pascal поддерживают анонимные методы, но Smart Pascal имеет одно преимущество перед этими собственными компиляторами. В родном Паскале (компиляторах, создающих исполняемый машинный код) есть процедуры классов и обычные процедуры. Единственная разница между этими двумя заключается в том, что если вы хотите ссылаться на первый (метод класса), вы должны добавить к объявлению постфикс «of object». Этот способ ссылки на метод класса обычно используется для объявлений событий.

В обычном Object Pascal событие объявляется следующим образом:

Type
TMyEventType = procedure (sender:TObject;const value:Integer) of object;

Если вы опустите постфикс «объекта», ссылку можно будет использовать только для процедур и функций на уровне модуля. Компилятор не позволяет вам ссылаться на метод объекта без четкого определения «объекта».

В Smart Pascal такого различия нет. В диалекте Смарт нет слова «объекта»; анонимные методы могут применяться в более широком масштабе, чем в собственном Object Pascal, включая объектные события и обработчики обратных вызовов.

В Smart Pascal приведенный ниже пример совершенно корректен и компилируется без проблем:

Constructor TMyPanel.Create(AOwner:TW3Component);
Begin
  Inherited Create(AOwner);
  FiPhoneHeader:=TW3HeaderControl.Create(self);
  FiPhoneHeader.Backbutton.onClick := Procedure (sender:TObject)
         Begin
            w3_callback( procedure ()
                    begin
                       showmessage('You clicked the back button 2 seconds ago');
                    end, 2000);
         end;
end;

Анонимные занятия

[ редактировать ]

В традиционном Object Pascal все классы наследуются от корневого типа TObject. То же самое относится и к Delphi Web Script, из которого произошел Smart Pascal. Чтобы иметь возможность лучше импортировать классы, написанные на Javascript (что чрезвычайно важно для обеспечения полной поддержки DOM (объектной модели документа) и всего спектра модулей JavaScript), необходимо было изменить зависимость от TObject как корня всех типов классов.

Эрик Грейндж представил анонимные классы в Smart Pascal, начиная с версии 1.0, а это означало, что Smart Pascal теперь мог напрямую импортировать и использовать внешние классы. Это позволяет пользователю просто определить класс как внешний, и таким образом можно создавать и использовать классы, написанные на JavaScript, соответствующие интерфейсу, наряду с классами, написанными на Pascal. Это достигается за счет того, что объекты могут быть укоренены из ничего (т. е. без предопределенной логики и поведения конструктора).

   JCustomEventInit = class external 'CustomEventInit' (JEventInit)
      detail : Variant
   end;

   JEventTarget = class external 'EventTarget'
      procedure addEventListener(aType : String; callback : JEventListener; capture  : Boolean = false);
      procedure removeEventListener(aType : String; callback : JEventListener; capture  : Boolean = false);
      function  dispatchEvent(event : JEvent) : Boolean;
   end;

Анонимные классы также можно использовать как облегченные объекты (без ключевого слова external), более похожие на записи (пользовательские типы данных на других языках), поскольку они не включают управление жизненным циклом, предоставляемое TObject.

Частичные занятия

[ редактировать ]

Частичные классы пока еще являются функцией, которая не вошла в стандарт Object Pascal. По сути, это означает, что полное объявление и реализация класса или типа записи могут быть распределены по нескольким исходным файлам. Вы также можете предварительно скомпилировать одну часть, оставив другую часть открытой для реализации другими. Так обстоит дело, например, с Mono C# под iOS, где ожидается, что предварительно скомпилированный контроллер приложения будет завершен пользователем платформы.

Частичные классы — очень полезная функция при осторожном развертывании. Это особенно удобно для больших иерархий классов, ориентированных на разные модели. В зависимости от модели, установленной программистом, реализация определенных функций различается в зависимости от включенных исходных файлов.

Smart Pascal поддерживает два формата объявления частичных классов. Синтаксис RemObjects Oxygene Pascal , а также более интуитивный вариант «type mytype = частичного класса (тип-предок)». Частичные классы используются во всей библиотеке времени выполнения Smart Pascal:

  TW3CustomControl = partial class(TW3MovableControl)
  private
    FAngle: Float;
    FScrollInfo: TW3ScrollInfo;
    FClassNames: TW3CSSClassStyleNames;
    FFont: TW3ControlFont;
    ...
    ...

Lambdas — чрезвычайно удобная функция, которая, как частичные и анонимные классы, еще не является частью классического объектного паскаля. Синтаксис Smart Pascal поддерживает несколько типов лямбда-выражений, что очень удобно при написании асинхронного кода.

Например, следующее замыкание:

var repeater := TW3EventRepeater.Create(
  function (Sender: TObject): boolean
  begin
    Result := MyFunction;
  end,
 5000);

можно записать с помощью лямбды:

var repeater :=
  TW3EventRepeater.Create(lambda => MyFunction, 5000);

Лямбда-выражения (т.е. замыкания «процедурного» типа) могут быть записаны следующим образом:

  btnOK.OnClick := lambda Application.HideModal(mrOK); end;

Переменные класса

[ редактировать ]

Переменные класса по сути означают, что вы можете определить переменную (или несколько переменных) в классе, которую можно изменить независимо от конструкции экземпляра. Это удобный метод установки условий перед созданием объекта из прототипа класса.

  TMyClass = Class(TObject)
  Public
  var driverMode:Integer;
  End;

  TMyClass.driverMode:=1200;

Поддержка ограниченных наборов

[ редактировать ]

В языке Паскаль множество — это совокупность элементов одного типа. Синтаксис Smart Pascal в настоящее время поддерживает только наборы перечислений с оператором «in» и методами «include(aSet, aValue)» или «exclude(aSet, aValue)».

type
  TMySet = set of (msFirst,msSecond,msThird);

var MySet: TMySet;
begin
  // populate set with two states
  MySet := [msFirst,msThird];
  if msFirst in MySet then
    writeln('First');
  exclude(MySet,msFirst);
  if msFirst in MySet then
    writeln('Never Shown');
end;

Отсутствие дженериков

[ редактировать ]

Smart Pascal не поддерживает дженерики . Исходный синтаксис Delphi Web Script, созданный Smart Pascal, был совместим с Delphi 7. Хотя кодовая база и язык DWScript значительно изменились за последние шесть лет, дженерики представляют собой монументальное изменение, которое может потребовать полного переписывания всего синтаксического анализатора и Технология AST («абстрактное символическое дерево» в компилятороведении).

Отсутствие дженериков компенсируется двумя особенностями языка:

  • Мощная поддержка массивов (удобная замена `TList<T>`);
  • Класс типов может использоваться для создания экземпляра данного экземпляра класса во время выполнения (так же, как и в обычном объектном паскале ).

Ограниченный RTTI

[ редактировать ]

Информация о типах времени выполнения частично поддерживается DWScript, включая возможность перечисления свойств и членов классов. RTTI реализуется компилятором Smart Pascal JavaScript, если в параметрах компилятора проекта определено «Выдавать информацию RTTI». В настоящее время частью этой информации являются только опубликованные свойства.

После активации следующий класс:

type
   TBase = class
      published
         Field : Integer = 1;
   end;

выдаст следующий объект JavaScript RTTI:

var $RTTI = [
	{ T: {ID:TBase}, A: { ClassType: RTTIPropertyAttribute, N: "Field", T: {ID:Number}, C: 3, G: function (s) { return s.Field }, S: function (s,v) { s.Field=v } } }
];

Затем вы сможете получить доступ к этой информации из кода, как описано в этой статье .

Консенсус

[ редактировать ]

Smart Pascal часто считают мощной странностью. [1] в мире объектного паскаля. Несмотря на то, что язык поддерживает почти все функции синтаксиса, определенные Embarcadero Delphi , он часто ломает или расширяет синтаксис, чтобы представить радикальные, но эффективные решения, которые делают его более полезным для асинхронного программирования. По существу, он продвигает концепции, заимствованные как из JavaScript , так и из Objective-C , смешанные с элементами из C++ , C# и Smalltalk . Результатом является гибкая и динамичная версия Object Pascal, которая значительно упрощает разработку HTML5 JavaScript без использования сервера.

Каким бы мощным ни был диалект, многие традиционные программисты Object Pascal считают Smart гибридным языком, при этом общее возражение состоит в том, что Smart продвигает функции, несколько чуждые устоявшимся принципам Object Pascal. Умные сторонники утверждают, что этот новый диалект необходим для современной разработки программного обеспечения и что это именно то, что нужно Object Pascal для развития и адаптации, указывая на обобщения как на недавнее изменение парадигмы. Таким образом, сторонники утверждают, что новый язык не представляет угрозы давно сложившемуся синтаксису, но обогащает его проверенными методами более современных языков.

  1. ^ «Смарт Паскаль» . smartpascal.github.io . Проверено 17 февраля 2023 г.

Источники

[ редактировать ]

Внешние ссылки

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d8ea168f91ecb4f551989861c8825851__1721015640
URL1:https://arc.ask3.ru/arc/aa/d8/51/d8ea168f91ecb4f551989861c8825851.html
Заголовок, (Title) документа по адресу, URL1:
Smart Pascal - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)