Как стать автором
Обновить

ObjectScript в качестве нового языка для веб разработки

Время на прочтение5 мин
Количество просмотров4.7K
ObjectScript — новый встраиваемый объектно-ориентированный язык программирования с открытым исходным кодом. ObjectScript расширяет возможности таких языков, как JavaScript, Lua, Ruby, Python и PHP. Вы можете ознакомится с синтаксисом языка в этой статье.

За последнее время была существенно увеличена производительность виртуальной машины, стабилизировано ядро и спецификация, в язык добавлена поддержка исключений (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:

Теги:
Хабы:
Всего голосов 33: ↑14 и ↓19-5
Комментарии12

Публикации