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

    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:

    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 12

      0
      Насколько быстро можно IDE`шку настроить? Туже эклипсу напр. — взять модули от Js`а + PHP`ы и свзяать вместе — или не получится?

      + какой конфиг у самого «fpm»`а? К примеру хочу как на php-fpm`е не только 9000 порт, а несколько пулов или вообще не порт — а сокеты.

      А также стандартный набор — базы, кэши и прочее. Или пока ещё рановато?
        0
        os-fcgi пока только на порт цепляется, в будущем конфиг os-fcgi будет лежать тут /etc/os-fcgi/conf.os, конфиги fpm находится тут /etc/php5/fpm/, стандартный набор в активной разработке в данный момент
        0
        >в качестве нового языка для веб разработки
        о да это круто — осталось только реализовывать: работу с сессиями, бд, обработкой запросов, работу с файлами, работу с почтой и и еще овердофига стандартного функционала которые есть из коробки в др. ЯП используемых для web разработки.

          0
          Обработка запросов уже есть (нужно подключить github.com/unitpoint/objectscript.org/blob/master/www/core.os), работа с файлами тоже есть, список ближайших задач в моем плане: сессии, mysql, регулярные выражения, curl. Какой функционал по вашему мнению следует реализовать в первую очередь?
            +1
            Посмотреть тупо на другие языки — нас даже не спрашивать.

            Напр., мы знаем, что в языке ИКС функция/метод ИГРЕК — это сессии. Составляем табличку используемости таких-то функций/методов, за основу беря популярные фреймворки на соотв. ЯП.

            Всё.
              +1
              Очень рад, что проект развивается. Надеюсь, что у меня всё-таки дотянутся до него руки в ближайшее время.

              Ну, учитывая, что кукисы вы уже парсите — значит, можно считать и поддержка сессий практически готова;
              regexp — дело более фундаментальное. Ну вот куда без регулярок-то?

              Что-то мне подсказывает, что без реализации нормальных регулярок будет тяжковато работать и с sql, и с curl и с сессиями да и много с чем ещё.

              Вообщем, ждём регулярные выражения!
              –2
              Жаль, я не могу вам больше ни в карму, ни в сюда плюсик добавить.

              Но спасибо, все равно.

              +1
              Что-то я не вижу главной части статьи: зачем и чем он лучше?
              На вид, это не встраиваемый язык, а развесистый шаблонный язык
                +1
                Два колеса, цепная передача, руль и седло. Вот что это «на вид».
                  +1
                  В конце статьи достаточное количество ссылок на предыдущие посты об этом замечательном языке — советую ознакомиться.
                  На мой вкус ObjectScript — действительно удобен, и мне очень жаль, что я ни как не могу высвободить время для более глубокого ознакомления/изучения/кодинга.
                  А то что у него модулей не достаточно — так это нормально явление для нового малоизвестного языка.
                  0
                  Около этих строчек
                          var r = {|a| a <= 1 ? 1 : a*_F(a-1)}(num)
                          printf("factorial of %v = %v", num, r)
                  

                  стоит устойчивый запах Perl
                    0
                    скорее ruby, {|a| .... } — это сахар для

                    function(a){ .... }
                    


                    а _F внутри функции — это алиас на саму функцию.

                    Сокращенная запись функции может быть удобна в конструкциях вида:

                    obj.each {|a| print a}
                    

                  Only users with full accounts can post comments. Log in, please.