Jancy Scripting

Jancy Scripting
Требуется:
 com.ioninja.script
Статус:
 ВКЛЮЧЕНО (все требования выполнены)

Jancy - это новый язык, на который сильно повлияли и вдохновили как Java, так и C/C++ (отсюда и название). Jancy берет лучшее из двух миров и смешивает их вместе, добавляя свою долю инновационных функций. Это язык сценариев нового поколения, идеально подходящий для областей ввода-вывода и пользовательского интерфейса.


Совместимость ABI с C


Jancy обладает высокой совместимостью на двоичном и исходном уровнях с C. Это дает два основных преимущества.


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


Во-вторых, он позволяет копировать и вставлять определения C заголовков протоколов (и даже целых алгоритмов!) из общедоступных источников C.


C является де-факто стандартным языком системного программирования; на языке C можно найти реализацию практически любого существующего протокола или алгоритма. Нужно использовать его у Янси? Просто скопируйте и вставьте его, и у Янси, скорее всего, не возникнет проблем с его компиляцией. Даже если это не так (конечно, существуют различия в синтаксисе между C и Jancy), требуемые изменения должны быть минимальными.

Указатели

Jancy предоставляет функцию, которой нет ни в одном другом языке сценариев, — безопасную арифметику указателей. Это дает вам возможность безопасно “ходить” по буферам данных, анализируя (или генерируя) пакет:



Указатели и арифметика указателей просто являются лучшими, когда дело доходит до обработки двоичных данных. Это одновременно самый чистый и эффективный способ обработки двоичных файлов.


Еще одна функция Jancy, связанная с указателями, которая пригодится при программировании ввода-вывода, - это поддержка частичного применения и планирования.


Частичное применение означает, что вы можете фиксировать аргументы "контекста" для вашего обратного вызова (например, обработчик событий, процедура завершения и т.д.).


Планирование означает, что вы можете назначить определяемый пользователем “планировщик”, который обеспечит выполнение вашего обратного вызова в правильной среде (в определенном рабочем потоке, под блокировкой, в качестве обработчика сообщений окна и так далее).



Свойства

Поддержка свойств довольно распространена для современных языков программирования. Но мы уверены, что ни один другой язык не реализует свойства так тщательно, как это делает Jancy.


Jancy предлагает все цвета и ароматы свойств, которые вы только могли себе представить:


  • Indexed properties ведут себя как массивы;
  • Bindable properties уведомляют подписчиков при изменении;
  • Bindable data автоматически генерируют свойства для отслеживания изменений данных;
  • Autoget properties обходят средство получения и получают прямой доступ к полю “значение”;
  • Property pointers обеспечивают динамичность во время выполнения при работе со свойствами.

Свойства, как правило, полезны, поскольку они делают код намного чище и естественнее. Но они особенно удобны при программировании пользовательского интерфейса.



Реактивное программирование


Jancy - один из немногих императивных языков с поддержкой реактивного программирования. При объяснении того, что такое реактивное программирование, лучшим примером будет Microsoft Excel.



Все использовали Excel. Все знают, что когда вы пишете “формулу” в ячейке A и ссылаетесь на другие ячейки B и C, зависимости строятся автоматически. Вы меняете B или C, и A обновляется. Вам не нужно писать обработчики событий, которые вызывались бы при изменении B или C, и в этих обработчиках обновлять все зависимые ячейки. Звучит нелепо, верно? Кто мог это сделать?


Ну, это то, что делают программисты пользовательского интерфейса. Виджеты пользовательского интерфейса предоставляют события, которые запускаются при изменении определенных свойств, и если вам нужно отслеживать эти изменения и что–то делать в ответ - вы пишете обработчик событий, подписываетесь на событие и обновляете зависимые элементы управления / значения из этого обработчика.


Jancy обеспечивает автоматическое выполнение “формул”, подобных Excel, при изменении значений, указанных в этой формуле. Как Янси узнает, когда использовать выполнение, подобное Excel, а когда использовать традиционный императивный подход? Реакторы.


Реакторы - это специальные разделы реактивного кода. Выражения в реакторах ведут себя как формулы в Excel и автоматически пересчитываются при изменении свойств привязки, на которые ссылаются из данного выражения. Все создание зависимостей / подписка / отмена подписки происходит автоматически за кулисами.



Конечно, иногда реактивный подход не совсем подходит, поэтому в вашем распоряжении всегда есть традиционный подход к обработке событий. Реакторы помогают и здесь — Jancy предоставляет естественный синтаксис объявления обработчиков событий в реакторе, которые будут автоматически подписываться / отписываться при запуске / остановке реактора.



Больше


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


Но, конечно, это не исчерпывает список инноваций Jancy. Если вы хотите узнать больше, пожалуйста, посетите специальный веб-сайт Jancy и страницу Jancy Github.