ObjectScript — новый встраиваемый объектно-ориентированный язык программирования с открытым исходным кодом. ObjectScript расширяет возможности таких языков, как JavaScript, Lua, Ruby, Python и PHP. Вы можете ознакомится с синтаксисом языка в этой статье.
За последнее время была существенно увеличена производительность виртуальной машины, стабилизировано ядро и спецификация, в язык добавлена поддержка исключений (try, catch, throw), вышел релиз языка OS 1.0, готовится документация и открытый сайт проекта.
Создадим документ index.osh в корне нашего сайта:
Для целей веб разработки в парсер языка были добавлены следующие возможности:
1. Автоматическое определение UTF-8 BOM — это три невидимых служебных байта (EF BB BF) в начале документа с кодировкой UTF-8. Если BOM присутствует, то он не будет отправлен в выходной поток (проблема с отправкой BOM встречается, например, в скриптах на PHP, которая блокирует отправку заголовков HTTP).
2. Добавлены теги
3. OS работает с двумя своими расширениями файлов: os и osh.
При использовании расширения os, парсер в начале файла активирует режим распознавания скрипта ObjectScript, т.е. это обычный скрипт OS.
При использовании osh (спроектировано специально для веб-разработки), файл начинается с выходного содержимого (т.е. то, что отправляется в output). Чтобы переключиться в режим скриптования, нужно использовать тег
Тег
Также можно использовать расширения html и htm, которые обрабатываются аналогично osh. Это может быть полезно при использовании редакторов html с подсветкой синтаксиса. Для подсветки синтаксиса OS, лучше всего подходит правила подсветки синтаксиса языка JavaScript.
Существует много способов подключения скриптовых языков к вебу, например: свой вебсервер, модуль апача, phusion passenger, fastcgi и др. Каждый способ имеет свои плюсы и минусы.
Для сайтов с высокой нагрузкой, использующих, например, PHP, хорошо известна связка nginx + php-fpm (fastcgi). Nginx сам по себе хороший продукт и отлично себя зарекомендовал, он отдает статику (картинки, css и т.п.), а выполнение скриптов перенаправляет на php-fpm по протоколу fastcgi. Такое решение обеспечивает высокую стабильность и быструю обработку запросов. Кроме этого, fastcgi, можно подключить к апачу и др. веб-серверам.
В качестве реализации протокола fastcgi на C++ была выбрана кроссплатформенная библиотека fastcgi, с использованием которой был разработан OS-FCGI.
OS-FCGI — это сервис, работающий по протоколу FastCGI, для разработки сайтов на ObjectScript.
1. склонируйте репозиторий https://github.com/unitpoint/os-fcgi
2. выполните из под root следующие команды:
Сервис os-fcgi будет работать в 8-потоком режиме и слушать порт 9000 для обработки fastcgi-запросов.
Пример базового конфигурационного файла для подключения сервиса OS-FCGI к NGINX:
Пример базового конфигурационного файла для подключения сервиса OS-FCGI к APACHE:
Для того, чтобы опробовать веб программирования на OS под Windows, необходимо:
1. склонировать репозиторий проекта OS-FCGI по ссылке github.com/unitpoint/os-fcgi
2. открыть в Visual Studio решение os-fcgi\win32\os-fcgi.sln
3. выбрать конфигурацию win32 или x64, скомпилировать и запустить проект os-fcgi
4. настроить веб-сервер для обработки запросов через fastcgi
После запуска os-fcgi, он будет полностью готов для обработки запросов по протоколу fastcgi на порту 9000 в однопотоковом режиме. Примечание: под linux платформы os-fcgi реализован, как сервис и работает в 8-потоком режиме.
Чтобы быстро запустить веб приложение на OS под Windows, можно воспользоваться программным пакетом Денвер.
Создать конфигурационный файл c:\WebServers\usr\local\apache\conf\extra\httpd-osfcgi.conf следующего содержания:
Примечание: c:\WebServers — это стандартный путь при установке Денвера, нужно его заменить на ваш путь при необходимости, вместо c:/Sources/objectscript.org/www необходимо правильно прописать путь к тестовому сайту.
Отредактировать c:\WebServers\usr\local\apache\conf\httpd.conf, необходимо найти фразу: Если вы вручную хотите создать виртуальный хост и добавить подключение httpd-osfcgi.conf. Пример части httpd.conf со сделанными изменениями:
Теперь можно перезапустить Денвер и открыть в браузере адрес osfcgi (только не забудьте добавить в папку сайта файл index.osh, описанный ранее).
Также можно загрузить полный репозиторий сайта objectscript.org (там сейчас тестовый контент, сайт работает на OS) по ссылке https://github.com/unitpoint/objectscript.org с примерами, например, core.os — стартовый скрипт для веб-приложения, буферизованный вывод, автоматическая подгрузка классов при первом использовании в коде и мн. др.
Приветствуются коментарии, отзывы, пожелания. Удачи!
Спасибо: Игорю Богомолову за разработку cmake конфигурации и настройку сервиса os-fcgi под linux.
Другие релевантные статьи об ObjectScript:
За последнее время была существенно увеличена производительность виртуальной машины, стабилизировано ядро и спецификация, в язык добавлена поддержка исключений (try, catch, throw), вышел релиз языка OS 1.0, готовится документация и открытый сайт проекта.
Первая веб страница на OS
Создадим документ index.osh в корне нашего сайта:
<!doctype html>
<html>
<head>
<title>OS-FCGI FastCGI demo</title>
</head>
<body>
<h1>Hello world!</h1>
<h2>ObjectScript FastCGI demo</h2>
<p>
<%
echo "Добро пожаловать! <br />"
var num = 20
var r = {|a| a <= 1 ? 1 : a*_F(a-1)}(num)
printf("factorial of %v = %v", num, r)
%>
</p>
</body>
</html>
ObjectScript в качестве нового языка для веб разработки
Для целей веб разработки в парсер языка были добавлены следующие возможности:
1. Автоматическое определение UTF-8 BOM — это три невидимых служебных байта (EF BB BF) в начале документа с кодировкой UTF-8. Если BOM присутствует, то он не будет отправлен в выходной поток (проблема с отправкой BOM встречается, например, в скриптах на PHP, которая блокирует отправку заголовков HTTP).
2. Добавлены теги
<% ... %>
и <%= ... %>
3. OS работает с двумя своими расширениями файлов: os и osh.
При использовании расширения os, парсер в начале файла активирует режим распознавания скрипта ObjectScript, т.е. это обычный скрипт OS.
При использовании osh (спроектировано специально для веб-разработки), файл начинается с выходного содержимого (т.е. то, что отправляется в output). Чтобы переключиться в режим скриптования, нужно использовать тег
<%
или <%=
. Для переключения обратно в режим выходного содержимого, нужно использовать тег %>
. Тег
<%=
выводит в output следующее за ним значение, например, <%=value%>
или <%=sprintf("%.2f", num)%>
.Также можно использовать расширения html и htm, которые обрабатываются аналогично osh. Это может быть полезно при использовании редакторов html с подсветкой синтаксиса. Для подсветки синтаксиса OS, лучше всего подходит правила подсветки синтаксиса языка JavaScript.
Технология подключение ObjectScript к вебу
Существует много способов подключения скриптовых языков к вебу, например: свой вебсервер, модуль апача, phusion passenger, fastcgi и др. Каждый способ имеет свои плюсы и минусы.
Для сайтов с высокой нагрузкой, использующих, например, PHP, хорошо известна связка nginx + php-fpm (fastcgi). Nginx сам по себе хороший продукт и отлично себя зарекомендовал, он отдает статику (картинки, css и т.п.), а выполнение скриптов перенаправляет на php-fpm по протоколу fastcgi. Такое решение обеспечивает высокую стабильность и быструю обработку запросов. Кроме этого, fastcgi, можно подключить к апачу и др. веб-серверам.
В качестве реализации протокола fastcgi на C++ была выбрана кроссплатформенная библиотека fastcgi, с использованием которой был разработан OS-FCGI.
OS-FCGI — это сервис, работающий по протоколу FastCGI, для разработки сайтов на ObjectScript.
Установка OS-FCGI под linux из исходников
1. склонируйте репозиторий https://github.com/unitpoint/os-fcgi
git clone https://github.com/unitpoint/os-fcgi.git
2. выполните из под root следующие команды:
cd ./os-fcgi/
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/ ..
make
make install
service os-fcgi restart
Сервис os-fcgi будет работать в 8-потоком режиме и слушать порт 9000 для обработки fastcgi-запросов.
Как подключить OS-FCGI к NGINX и APACHE
Пример базового конфигурационного файла для подключения сервиса OS-FCGI к NGINX:
server {
listen 80;
server_name mydomain.com www.mydomain.com;
root /home/myuser/mydomain.com/www;
error_log /var/log/nginx/error.mydomain.com.log;
access_log off;
location ~ /\.ht {
deny all;
}
location ~ /\.git {
deny all;
}
location / {
try_files $uri $uri/ /index.osh /index.os;
}
location ~* \.(jpg|jpeg|png|gif|swf|flv|mp4|mov|avi|wmv|m4v|mkv|ico|js|css|txt)$ {
access_log off;
expires 7d;
}
charset utf-8;
location ~ ^.+\.osh? {
fastcgi_split_path_info ^(.+\.osh?)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.osh;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort on;
fastcgi_read_timeout 360;
}
}
Пример базового конфигурационного файла для подключения сервиса OS-FCGI к APACHE:
<VirtualHost mydomain.com:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot "/home/myuser/mydomain.com/www"
ServerName mydomain.com
FastCgiExternalServer "/home/myuser/mydomain.com/www" -host 127.0.0.1:9000
<Directory "/home/myuser/mydomain.com/www">
# SetHandler fastcgi-script
AddHandler fastcgi-script .osh
AddHandler fastcgi-script .os
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride all
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>
</VirtualHost>
Тестирование OS-FCGI на Windows
Для того, чтобы опробовать веб программирования на OS под Windows, необходимо:
1. склонировать репозиторий проекта OS-FCGI по ссылке github.com/unitpoint/os-fcgi
2. открыть в Visual Studio решение os-fcgi\win32\os-fcgi.sln
3. выбрать конфигурацию win32 или x64, скомпилировать и запустить проект os-fcgi
4. настроить веб-сервер для обработки запросов через fastcgi
После запуска os-fcgi, он будет полностью готов для обработки запросов по протоколу fastcgi на порту 9000 в однопотоковом режиме. Примечание: под linux платформы os-fcgi реализован, как сервис и работает в 8-потоком режиме.
Использование OS-FCGI под Денвером
Чтобы быстро запустить веб приложение на OS под Windows, можно воспользоваться программным пакетом Денвер.
Создать конфигурационный файл c:\WebServers\usr\local\apache\conf\extra\httpd-osfcgi.conf следующего содержания:
<VirtualHost osfcgi:80>
ServerAdmin webmaster@osfcgi
DocumentRoot "c:/Sources/objectscript.org/www"
ServerName osfcgi
FastCgiExternalServer "c:/Sources/objectscript.org/www" -host 127.0.0.1:9000
<Directory "c:/Sources/objectscript.org/www">
# SetHandler fastcgi-script
AddHandler fastcgi-script .osh
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride all
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>
</VirtualHost>
Примечание: c:\WebServers — это стандартный путь при установке Денвера, нужно его заменить на ваш путь при необходимости, вместо c:/Sources/objectscript.org/www необходимо правильно прописать путь к тестовому сайту.
Отредактировать c:\WebServers\usr\local\apache\conf\httpd.conf, необходимо найти фразу: Если вы вручную хотите создать виртуальный хост и добавить подключение httpd-osfcgi.conf. Пример части httpd.conf со сделанными изменениями:
# Если вы вручную хотите создать виртуальный хост со специфическими
# настройками, то сделайте это сразу же после данного комментария.
Include conf/extra/httpd-osfcgi.conf
Теперь можно перезапустить Денвер и открыть в браузере адрес osfcgi (только не забудьте добавить в папку сайта файл index.osh, описанный ранее).
Также можно загрузить полный репозиторий сайта objectscript.org (там сейчас тестовый контент, сайт работает на OS) по ссылке https://github.com/unitpoint/objectscript.org с примерами, например, core.os — стартовый скрипт для веб-приложения, буферизованный вывод, автоматическая подгрузка классов при первом использовании в коде и мн. др.
Приветствуются коментарии, отзывы, пожелания. Удачи!
Спасибо: Игорю Богомолову за разработку cmake конфигурации и настройку сервиса os-fcgi под linux.
Другие релевантные статьи об ObjectScript:
- ObjectScript API, интеграция с C++. Часть 4: подключение пользовательских классов и функций на C++
- ObjectScript API, интеграция с C++. Часть 3: подключение модуля с функциями на C++
- ObjectScript API, интеграция с C++. Часть 2: выполнение скрипта на OS из C++
- ObjectScript API, интеграция с C++. Часть 1: работа со стеком, вызов функций OS из C++
- ObjectScript — новый язык программирования