Orion - PHP подобный скриптовой движок
Модераторы: devels, Модераторы
Последние новости
Разработка активно продолжается:
+ Добавлен break и continue для циклов
+ Добавлен оператор IN вхождения элемента в массив (в пхп этого нет, надо использовать in_array)
+ Добавлен цикл foreach (цикл по массиву) +возможность переберать элементы по ссылке (в пхп этого нет)
+ Добавлены функции для сохранения и загрузки байт-кода из памяти/строки/файла (в пхп этого нет)
+ Начата работа над динамической версией движка в dll/so виде и врапер для него
+ Оптимизирована работа хеш-таблиц
+ Оптимизирован и улучшен сборщик муссора, особенно для массивов
+ Добавлены инструкции global, include, require, eval, inlude_once, require_once
+ Добавлены новые юнит тесты на разную тематику
Модули:
+ Добавлен модуль функций для работы с математикой, реализован на 80%
+ Модуль для работы со строками, реализован на 50%
+ Модуль для работы с массивами, реализован на 20%
Движок компилируется в Linux'e, можно успешно скомпилировать пример project_lazarus.
Если у кого есть какие вопросы, можете их задавать.
P.S. У языка появилась персональная страничка: http://develstudio.ru/php-orion/ , в будущем будет на отдельном домене. Напоминаю, что исходники можно скачать только через SVN, инструкцию можно прочитать http://develstudio.ru/php-orion/svn-help/.
Разработка активно продолжается:
+ Добавлен break и continue для циклов
+ Добавлен оператор IN вхождения элемента в массив (в пхп этого нет, надо использовать in_array)
+ Добавлен цикл foreach (цикл по массиву) +возможность переберать элементы по ссылке (в пхп этого нет)
+ Добавлены функции для сохранения и загрузки байт-кода из памяти/строки/файла (в пхп этого нет)
+ Начата работа над динамической версией движка в dll/so виде и врапер для него
+ Оптимизирована работа хеш-таблиц
+ Оптимизирован и улучшен сборщик муссора, особенно для массивов
+ Добавлены инструкции global, include, require, eval, inlude_once, require_once
+ Добавлены новые юнит тесты на разную тематику
Модули:
+ Добавлен модуль функций для работы с математикой, реализован на 80%
+ Модуль для работы со строками, реализован на 50%
+ Модуль для работы с массивами, реализован на 20%
Движок компилируется в Linux'e, можно успешно скомпилировать пример project_lazarus.
Если у кого есть какие вопросы, можете их задавать.
P.S. У языка появилась персональная страничка: http://develstudio.ru/php-orion/ , в будущем будет на отдельном домене. Напоминаю, что исходники можно скачать только через SVN, инструкцию можно прочитать http://develstudio.ru/php-orion/svn-help/.
Проект очень радует, и хорошо, что новости о нём появляются на форуме.
После прочтения странички про хэш-массивы остался не вполне понятным один момент:
Получается, в Orion есть функции, которым можно присваивать значения? Т.е. "функции наоборот", которые принимают результат и раскладывают его на аргументы? Или функции, возвращающие некоторый анонимный результат, присвоение которому отражается на аргументах функции? Это довольно необычная конструкция (во всяком случае для меня) и было бы неплохо почитать её более подробное описание (когда/если у разработчика останется на него время). Или это syntactic sugar и для него есть более традиционная запись?
devels писал(а):Если у кого есть какие вопросы, можете их задавать.
После прочтения странички про хэш-массивы остался не вполне понятным один момент:
Код: Выделить всё
list($x,$y) = myFunc();
echo $x; // выведет 20
echo $y; // выведет 30
Функциональность list взята из php, да она довольно оригинальна и нетепична, это даже не функция, а инструкция байт-кода. Я пока ее не реализовал еще, но она будет скоро реализована. Вообще да, это немного противоречит стандарту языка, но что поделать.
Последние новости
+ Доработана версия для подключения движка через dll/so
+ Добавлены примеры подключения библиотеки orion и ее использования
+ Добавлен проект для компиляции движка в dll через lazarus
+ Добавлен генератор исходников врапера
+ На сайт проекта добавлен архив исходников с svn
Основная работа была проделана со структурой исходников, распределение типов и функций по исходникам более логичное и удобное.
На данный момент основная разработка завершена. Как я решил, делать модули функций это не так важно как классы и объекты в языке, т.е. это можно сделать и после. Второй этап это разработка системы классов и объектов в языке, она уже начата.
+ Доработана версия для подключения движка через dll/so
+ Добавлены примеры подключения библиотеки orion и ее использования
+ Добавлен проект для компиляции движка в dll через lazarus
+ Добавлен генератор исходников врапера
+ На сайт проекта добавлен архив исходников с svn
Основная работа была проделана со структурой исходников, распределение типов и функций по исходникам более логичное и удобное.
На данный момент основная разработка завершена. Как я решил, делать модули функций это не так важно как классы и объекты в языке, т.е. это можно сделать и после. Второй этап это разработка системы классов и объектов в языке, она уже начата.
Не нужно изобретать велосипед. Люди будут сидеть на php, а если хоть кто-нибудь и будет пользоваться орионом то только малое количество людей
aolko
Ты уже надоел, суешь свой нос везде где только можно, сам нихрена программировать не умеешь, все языки считаешь дерьмом, и не хочешь даже обучаться, что ты вообще здесь делаешь?
Ты уже надоел, суешь свой нос везде где только можно, сам нихрена программировать не умеешь, все языки считаешь дерьмом, и не хочешь даже обучаться, что ты вообще здесь делаешь?
Последние новости
- Уже вырисовывается система объектов и классов, реализовал вызов статических методов у классов, методы уже могут быть public, protected, private, а также иметь модификатор static (т.е. вызывать только статически). Реализованы константы parent:: и self:: - первый указывает на класс родитель, второй - на текущий класс.
На данный момент структура классов и объектов выглядит так, объекты и классы по сути одно и тоже, так выглядит изнутри. Любой объект может быть классом, т.е. породить новый класс или объект.
Главным отличием от PHP является то, что "::" и "->" у меня являются бинарными операторами, что позволяет использовать сложные выражения как слева, так и справа, а не только строки.
Простой тест, который я провел недавно:
// Orion - 250 mlsec
// PHP 5.2.4 - 1250 mlsec
// PHP 5.2.4, если создать экземпляр класса URa и вызывать через него - 370 mlsec
6 Января
Реализовал константы для классов (public, protected, private), кстати в пхп константы класса могут быть только публичными. Константы работают в 2-3 раза быстрее чем в php, вызов статичного метода в 6-7 раз быстрее в orion'e по сравнение с php 5.2.6.
- Уже вырисовывается система объектов и классов, реализовал вызов статических методов у классов, методы уже могут быть public, protected, private, а также иметь модификатор static (т.е. вызывать только статически). Реализованы константы parent:: и self:: - первый указывает на класс родитель, второй - на текущий класс.
На данный момент структура классов и объектов выглядит так, объекты и классы по сути одно и тоже, так выглядит изнутри. Любой объект может быть классом, т.е. породить новый класс или объект.
Главным отличием от PHP является то, что "::" и "->" у меня являются бинарными операторами, что позволяет использовать сложные выражения как слева, так и справа, а не только строки.
Простой тест, который я провел недавно:
// Orion - 250 mlsec
// PHP 5.2.4 - 1250 mlsec
// PHP 5.2.4, если создать экземпляр класса URa и вызывать через него - 370 mlsec
Код: Выделить всё
class IUra {
static protected function x($y){
return $y+1;
}
}
class URa extends IUra {
function test($y){
return IUra::x ( $y );
}
}
$i = 0;
while ($i < 100000){
$i++;
URa::test($i);
}
6 Января
Реализовал константы для классов (public, protected, private), кстати в пхп константы класса могут быть только публичными. Константы работают в 2-3 раза быстрее чем в php, вызов статичного метода в 6-7 раз быстрее в orion'e по сравнение с php 5.2.6.
Код: Выделить всё
// Speed Test
// ORION - 250 mlsec
// PHP 5.2.4 - 1350 mlsec
class URa {
const MY_CONST = 20;
function test(){
return URa::MY_CONST;
}
}
$i = 0;
while ($i < 100000){
$i++;
$d = URa::MY_CONST + URa::MY_CONST + URa::MY_CONST;
$d = URa::test();
}
Поддержка Linux:
Для тех кто под линуксом и кому лень качать исходники и компилировать проект, сделал бинарное демо для linux'a и win32:
Скачать можно тут, вместе с демо-скриптами: http://code.google.com/p/orionphp/downloads/detail?name=OrionTest_win_linux.7z
Для тех кто под линуксом и кому лень качать исходники и компилировать проект, сделал бинарное демо для linux'a и win32:
Скачать можно тут, вместе с демо-скриптами: http://code.google.com/p/orionphp/downloads/detail?name=OrionTest_win_linux.7z
Проект вообще отличный ! а всякие там aoloka'и пусть заткнутся . у нас свои двигуны должны быть и надо наоборот помогать и содействовать если требуется а не трепаться . да и ось свою неплохо было бы замутить . в общем -хорошее дело делаешь .
Насущная проблема, нужная помощь с реализацией сборки циклического мусора (циклические ссылки). Пишите мне если что.
С циклическими ссылками разобрался.
Последние новости:
После большой переделки движка, а также небольшого затишья:
1. Переделана вся структура движка (это касается всего, стиля написания и не только - упрощен исходный код).
2. Добавлены объекты, вместе с ними пока оператор New, свойства и методы объектов, сборщик мусора для объектов. Все это работает относительно быстро. Пока не реализована передача $this в методы классов, но скоро будет.
Разработка движется к логическому завершению, дальше - написание расширений для гуи, игр, web'a. Скоро появится официальная страница языка по адресу http://orion-lang.org, на русском и английском языках, с примерами и документацией.
Последние новости:
После большой переделки движка, а также небольшого затишья:
1. Переделана вся структура движка (это касается всего, стиля написания и не только - упрощен исходный код).
2. Добавлены объекты, вместе с ними пока оператор New, свойства и методы объектов, сборщик мусора для объектов. Все это работает относительно быстро. Пока не реализована передача $this в методы классов, но скоро будет.
Разработка движется к логическому завершению, дальше - написание расширений для гуи, игр, web'a. Скоро появится официальная страница языка по адресу http://orion-lang.org, на русском и английском языках, с примерами и документацией.
Решил попробовать сделать автономный ftp-клиент, программируемый на php. Пока все довольно неплохо (console,synapse ftpsend, win32 ~400kb), но не знаю как организовать паскалевскую функцию, возвращающую массив записей вроде: Не могли бы Вы привести пример. Заранее спасибо.
Код: Выделить всё
$R[0]["Filename"]="mydir1";
$R[0]["Directory"]=true;
$R[0]["FileSize"]=-1;
$R[1]["Filename"]="myfile1.txt";
$R[1]["Directory"]=false;
$R[1]["FileSize"]=12345;
aolko писал(а):Не нужно изобретать велосипед. Люди будут сидеть на php, а если хоть кто-нибудь и будет пользоваться орионом то только малое количество людей
IMHO: Пока не изобретешь и не соберешь свой велосипед, никогда не поймешь на сколько прекрасен или УБОГ велосипед другого.
PS. Devels если, Вам интересно писать целый движок, То никого не слушайте. В конце концов это вам нравится
v-t-l писал(а):Решил попробовать сделать автономный ftp-клиент, программируемый на php. Пока все довольно неплохо (console,synapse ftpsend, win32 ~400kb), но не знаю как организовать паскалевскую функцию, возвращающую массив записей вроде:Не могли бы Вы привести пример. Заранее спасибо.Код: Выделить всё
$R[0]["Filename"]="mydir1";
$R[0]["Directory"]=true;
$R[0]["FileSize"]=-1;
$R[1]["Filename"]="myfile1.txt";
$R[1]["Directory"]=false;
$R[1]["FileSize"]=12345;
Вот примерно так:
Код: Выделить всё
procedure x_your_func(pr: TOriMemoryStack; Return: TOriMemory; eval: Pointer); cdecl;
var
i: integer;
M: TOriMemory;
ARR,Sub: TOriTable;
begin
ARR := TOriTable.CreateInManager; // создаем массив в менеджере
for i := 0 to 9 do // добавим 10 элементов в массив
begin
M := TOriMemory.GetMemory;
Sub := TOriTable.CreeateInManager;
Sub.GetCreateValue('Filename').Val( 'string value' ); // создаем TOriMemory в массиве с ключем и сразу задаем значение...
Sub.GetCreateValue('Directory').Val(False); // ...
Sub.GetCreateValue('Filesize').ValL(100); // ...
M.ValTable( Sub ); // задаем значению Массив
Arr.Add( M ); // добавляем элемент массив
end;
Return.ValTable(ARR); // результат функции
end;
За освобождением массива следит движок, можно не волноваться за утечки.
Добавлено спустя 2 минуты 36 секунд:
Maxizar писал(а):aolko писал(а):Не нужно изобретать велосипед. Люди будут сидеть на php, а если хоть кто-нибудь и будет пользоваться орионом то только малое количество людей
IMHO: Пока не изобретешь и не соберешь свой велосипед, никогда не поймешь на сколько прекрасен или УБОГ велосипед другого.
PS. Devels если, Вам интересно писать целый движок, То никого не слушайте. В конце концов это вам нравится. Удачи в разработке.
Официальный велосипед PHP очень убог, его исходники это прям настоящий клад говнокода. Я пытался что-то оттуда почерпать, но это тихий ужас. Я понял что развитие пхп с такими кривыми исходниками невозможно, и сам язык загнется без нормальной реализации.
ЧЯДНТ?
Добавлено спустя 14 минут 3 секунды:
orion SVN Revision: r218
Код: Выделить всё
procedure x_your_func(pr: TOriMemoryStack; Return: TOriMemory; eval: Pointer); cdecl;
var
i: integer;
M: TOriMemory;
ARR,Sub: TOriTable;
begin
ARR := TOriTable.CreateInManager; // создаем массив в менеджере
for i := 0 to 9 do // добавим 10 элементов в массив
begin
M := TOriMemory.GetMemory;
Sub := TOriTable.CreateInManager;
Sub.GetCreateValue('Filename').Val( 'string value' ); // создаем TOriMemory в массиве с ключем и сразу задаем значение...
Sub.GetCreateValue('Directory').Val(False); // ...
Sub.GetCreateValue('Filesize').ValL(100); // ...
M.ValTable( Sub ); // задаем значению Массив
Arr.Add( M ); // добавляем элемент массив
end;
Return.ValTable(ARR); // результат функции
end;Код: Выделить всё
$dir=your_func();
print("count($dir)=", count($dir));
foreach($dir as $entry){
print("$entry=", $entry, "(", count($entry), ")");
foreach($entry as $fld){
print("$fld=", $fld);
};
};Код: Выделить всё
count($dir)=10
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)
$entry=Array(0)Добавлено спустя 14 минут 3 секунды:
orion SVN Revision: r218
