Opa — это язык программирования для разработки масштабируемых веб-приложений . Это бесплатное программное обеспечение с открытым исходным кодом , выпущенное под лицензией GNU Affero General Public License (AGPLv3) и лицензией MIT .
Его можно использовать как для клиентских, так и для серверных скриптов , когда полные программы пишутся в Opa и впоследствии компилируются в Node.js на сервере и JavaScript на клиенте , при этом компилятор автоматизирует все взаимодействие между ними. [3] [4] Opa реализует строгую статическую типизацию , которая может быть полезна для защиты от проблем безопасности, таких как SQL-инъекции и атаки с использованием межсайтовых скриптов . [5]
Язык был впервые официально представлен на конференции Open Worldwide Application Security Project ( OWASP ) в 2010 году [6], а исходный код был опубликован на GitHub [7] в июне 2011 года под лицензией GNU Affero General Public License (AGPL). Позднее лицензия была изменена на MIT License для части программного фреймворка ( библиотеки ) и AGPL для компилятора, так что приложения, написанные на Opa, могут быть выпущены под любой лицензией программного обеспечения , проприетарной или с открытым исходным кодом .
Opa состоит из веб-сервера , базы данных и распределенного механизма выполнения. [8] Код, написанный в Opa, компилируется в JavaScript с использованием Node.js на стороне сервера и в JavaScript с использованием jQuery для кросс-браузерной совместимости на стороне клиента . [9] Преимущество подхода по сравнению с некоторыми платформами Rich Internet Application (RIA) заключается в том, что пользователям не требуется устанавливать плагин в своем браузере. [10] Opa разделяет мотивы с веб-фреймворками , но использует другой подход. [11] Его разработчики утверждают, что это помогает Opa избегать многих проблем безопасности, таких как SQL-инъекции или атаки межсайтового скриптинга (XSS). [12]
Основной язык функционален и имеет статическую систему типов с выводом типов . Opa также предоставляет сеансы, которые инкапсулируют императивное состояние и взаимодействуют с помощью передачи сообщений , аналогично процессам Erlang . Opa предоставляет множество структур или функций, которые распространены в веб-разработке , как объекты первого класса , например HTML [13] и парсеры , основанные на грамматиках выражений синтаксического анализа . [14] Из-за этой связи между языком и веб-концепциями Opa не предназначен для не-веб-приложений (например, настольных приложений ). [15]
В выпуске 0.9.0 в феврале 2012 года была представлена технология отображения баз данных для нереляционной, документоориентированной базы данных MongoDB , аналогичная объектно-реляционному отображению . [16] [17] [18] В выпуске 1.1.0 в феврале 2013 года также была добавлена поддержка PostgreSQL , что проложило путь для поддержки нескольких баз данных SQL .
Традиционная программа «Hello, World!» , создающая веб-сервер, который обслуживает статическую страницу с содержимым «Hello, Web!», может быть записана на языке Opa следующим образом: [19]
Server.start ( Server.http , { title : "Привет" , page : function ( ) { <h1> Привет , веб!</h1> } } )
Его можно скомпилировать в автономный исполняемый файл JavaScript с помощью:
$ опа hello_web.opa
Запуск полученного исполняемого файла JavaScript запускает веб-приложение:
$ ./hello_web.js