ПроектыФорумОцените

ObjectScript — добавлено видео по установке под Windows, новый встраиваемый язык программирования (скрипты, веб, 2d mobile engine) (8 стр)

Страницы: 17 8 9 1012 Следующая »
#105
10:42, 29 апр 2013

polyfrag
> Возможно использовать OS в моих играх в том качестве как Lua?

Да, конечно. Если у вас есть пример с lua или вопросы, задавайте, я поясню, как это сделать на OS. Также Вы можете связаться со мной по скайпу egolovin для помощи в интеграции.

#106
12:29, 4 мая 2013

UnitPoint
Какая логика работы у объекта теперь понятно.
А как реализован массив? Является ли он так же объектом? Или это независимая сущность?
Его размер динамический, а ля vector с теми же проблемами при переаллокации? Или как-то более хитро?

#107
9:30, 8 мая 2013

UnitPoint

чувак, позволь мне открыто выразить тебе респект
видно, что работы проделано немеряно, и что у проекта есть идея, реальное обоснование его разработки

желаю успеха в JIT и IDE

#108
3:55, 14 мая 2013

Тоже разработал язык программирования. Ваши идеи вполне пойдут, но 2х мегабайтным файлом вы убили даже sublime, да и поддержку сообщества разработчиков не ждите пока не разрефакторится на файлы. По архитектуре посмотрел, вполне. В личку скинул линк на мой проект, чтобы не отвлекать остальных участников от вашей темы.

#109
12:32, 14 мая 2013

x
> А как реализован массив?
Массив - реально это вектор, поэтому хранится довольно компактно:

В OS массив (запись в квадратных скобках) из 1048576 чисел занимает 8 Мб

В PHP массив (array - реально это хеш) из 1048576 чисел занимает 86 Мб

В OS объект (в фигурных скобках - реально это хеш) из 1048576 чисел занимает 48 Мб

DevilDevil
> чувак, позволь мне открыто выразить тебе респект

спасибо огромное!

d08ble
> Ваши идеи вполне пойдут, но 2х мегабайтным файлом вы убили даже sublime

сам язык без расширений занимает порядка 200 кб, кажется что sqlite там дает наибольший прирост в размере

Вышло обновление OS 1.6.6-dev, добавил расширение libnoise для генерации процедурных текстур, в том числе тайловых и карт высот, примеры скриптов examples-os/libnoise:

example-01.jpg | ObjectScript — добавлено видео по установке под Windows, новый встраиваемый язык программирования (скрипты, веб, 2d mobile engine)

пример скрипта для генерации выше приведенной картинки (кстати, она тайловая):

+ Показать

Для чего это может использоваться? - для генерации текстур и карты высот, не нужно компилить программу, можно довольно просто набросать скрипт и сразу запустить. В примерах показано, как делать не только обычные текстуры, но и тайловые, нормали, спекуляр, сохранение карты высот в разных форматах, сферические текстуры и т.п.

Еще примеры сгенерированных текстур:

+ Показать

Полная документация по libnoise.

P.S. для линукса сборка будет позже

#110
0:04, 15 мая 2013

UnitPoint
Работа проделана колоссальная. Да и синтаксис вполне годный.
Как уже выразились ораторы выше, респект :)

Планируете ли сделать динамическую компиляцию?

> Массив - реально это вектор, поэтому хранится довольно компактно:
То есть аллоцируется столько же памяти, сколько и размер массива? Или массив, грубо говоря, "эмулируется" на каком-нибудь дереве?

#111
8:01, 15 мая 2013

>сам язык без расширений занимает порядка 200 кб
Ну тогда хотя бы его вынести в отдельный файл, чтобы с толку не сбивать.
Тогда круто, если мне понадобится скриптовый язык, буду рассматривать твой как кандидата. Если будет JIT, тогда вообще будет здорово.

#112
11:54, 16 окт 2013

Всем добрый день, вышла новая версия ObjectScript 1.8-dev, лучше забирать из репозитория https://github.com/unitpoint/os-fcgi

Что появилось нового?

1. Система сборки мусора была полностью переписана.

Раньше ObjectScript использовал сборщик мусора, который не совсем устраивал по скоростным характеристикам, а также вел себя не очень стабильно в некоторых ситуациях. Я долго пытался решить эти проблемы и в результате переписал сборщик мусора.

Сейчас ObjectScript использует счетчик ссылок значений (ref_count). Этого стало вполне достаточно для разруливания большинства ситуация для правильного уничтожения значений, но остаются ситуации с рекурсивными ссылками друг на друга. Для решения этой проблемы по прежнему используется сборщик мусора похожий на тот, что был раньше, но сейчас эта фаза сборки мусора запускается гораздо реже, что очень позитивно повлияло на производительность.

Итого: стабильность работы и лучшая производительность.

2. Система работы с памятью полностью переписана.

Система работы с памятью используется в ObjectScript для аллоцирования и освобождения памяти, иначе говоря ObjectScript не вызывает стандартные функции malloc, free, а делает запросы по интерфейсу OS::MemoryManager.

В ходе решения проблем со сборкой мусора появилась необходимость ловить утечки памяти и профилировать аллокации. Я сначала грешил на систему работы с памятью (к слову сказать проблема была не в ней) и прикрутил к ObjectScript другую систему работы с памятью, которая хорошо себя зарекомендовала на др. проектах. Старую систему вынес в отдельный файл os-heap-old.h, а новую реализовал в os-heap.h - класс OSHeapManager.

Итого:  меньшее потребление памяти и бОльшая производительность языка.

3. Добавлен класс ODBO для работы с разными базами.

ODBO (Objectscript DataBase Object) представляет из себя абстрактный уровень работы с разными базами данных на основе библиотеки SOCI http://soci.sourceforge.net/, которая поддерживает:

- DB2
- Firebird
- MySQL
- ODBC (generic backend)
- Oracle
- PostgreSQL
- SQLite3

В данный момент ODBO проверен на базе MySQL и реализован в виде расширения ext-odbo.

4. Добавлен класс DateTime для работы с датами и временем.

Механизмы работы с датой и временем конечно нужны были обязательно, поэтому появилось расширение ext-datetime. Пример скрипта работы с датами можно посмотреть тут https://github.com/unitpoint/objectscript.org/blob/master/www/test/datetime.os или в живую тут http://objectscript.org/test/datetime.os

5. Добавлен модуль zlib для работы с сжатыми данными.

Модуль zlib реализует ряд функций (аналогичные PHP) для работы с сжатыми данными, а именно:

- encode
- decode
- gzdeflate
- gzencode
- gzcompress
- gzinflate
- gzdecode
- gzuncompress

Модуль находится в расширении ext-zlib.

Пример использования:

function readUrl(url, httpheader){
  var m = Regexp("#^((https?|ftp)://([^/]+))#").exec(url)
  var content = Curl {
    url = url,
    useragent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36",
    httpheader = [    
      "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
      "Accept-Encoding:gzip",
      "Accept-Language:ru,en;q=0.8",
      "Cache-Control:max-age=0",
      "Connection:keep-alive",
      "Referer:${m[1]}",
      "Host:${m[3]}",
    ].merge(httpheader || []),
  }.perform()
  return zlib.gzinflate(content.sub(10, -8)) || content
}

--

Сейчас начал работать над простым объектно ориентированным фреймворком для веба, работы ведутся в этом репозитории https://github.com/unitpoint/objectscript.org

Пример индексного файла (https://github.com/unitpoint/objectscript.org/blob/master/www/index.osh):

require("../protected/components/Application")
Application(require("../protected/config/main")).run()

и сам фреймворк тут https://github.com/unitpoint/objectscript.org/tree/master/protected

#113
2:01, 15 ноя 2013

Ну что друзья-товарищи, я доделал первую версию сайта про язык ObjectScript, добро пожаловать: objectscript.org. Сайт про язык ObjectScript сделан на самом ObjectScript. Вы можете скачать полные исходники сайта со страницы загрузки.

Большая просьба, если у вас есть возможность поучаствовать в проекте, буду рад любой помощи. Например, вы нашли ошибку на сайте или опечатку, там внизу каждой страницы указана ссылка на исходник страницы, где можно ее исправить.

А в целом буду рад отзывам, комментариям, критике, т.к. одна голова - хорошо, а много - намного лучше.

#114
2:58, 15 ноя 2013

ты упоротый. в хорошем смысле. попробуй сделать в качестве примера какой-нибудь более игровой проект?

полазал по сайту, немного офигел:
> В OS преобразование к булеву типу происходит следующим образом: null и false возвращают ложь, все другие значения возвращают истину, [b]включая число 0[/b]
то есть если написать
if(0)
{
  blabla();
}
то условие выполнится? ты уверен, что это - в порядке вещей?

#115
6:16, 15 ноя 2013

Suslik
> ты уверен, что это - в порядке вещей?
Как в луа собственно

#116
14:28, 15 ноя 2013

TakeOver
> Работа проделана колоссальная. Да и синтаксис вполне годный.
> Как уже выразились ораторы выше, респект :)

Спасибо огромное!

TakeOver
> Планируете ли сделать динамическую компиляцию?

JIT сделать возможно и реально, но на данной стадии на это нет времени.

TakeOver
> То есть аллоцируется столько же памяти, сколько и размер массива? Или массив, грубо говоря, "эмулируется" на каком-нибудь дереве?

Массив в OS - это не дерево, аллоцируется сразу единый кусок памяти под элементы.

#117
4:44, 16 ноя 2013

MATov
> Как в луа собственно
одна из причин, почему мне не нравится луа

#118
14:09, 16 ноя 2013

Suslik
>> В OS преобразование к булеву типу происходит следующим образом: null и false возвращают ложь, все другие значения возвращают истину, [b]включая число 0[/b]
>то есть если написать
>if(0)
>{
> blabla();
>}
>то условие выполнится? ты уверен, что это - в порядке вещей?

Да, в некоторых языках программирования применяется такая концепция, например, в lua (как отметил MATov) и ruby. Сама тема похожа на холивар.

В некоторых языках, напрмиер C++, Python, число 0 дает false. Реально в Python пустой массив, пустая строка дают false. В JavaScript пустая строка дает false, но пустой массив дает true.

В некоторых др. языках не булевы типы не могут быть преобразованы в true или false, в противном случае вызывается исключение вида : "You can't evaluate a non-boolean value as a boolean!".

Но в OS выражение вида

if(exp)

следует понимать, так: если в exp существующее значение (не null) или не false то делаем то-то.

Это позволяет в OS кодить примерно так:

function DateTime.__add(b){
  return DateTime {
    comdate = @comdate + (numberOf(b) || throw "DateTime.__add requires Number")
  }
}

DateTime.__add реализует метод прибавление к дате количества дней, которое должно быть числовым. Если к дате прибавить не число, например, значение объектного типа, то это не имеет логического смысла, поэтому вызывается исключение оператором throw.

В OS преобразование к булеву типу происходит следующим образом: null и false возвращают ложь, все другие значения возвращают истину, включая число 0 и пустую строку "". Именно поэтому выше приведенный код работает правильно, даже когда переменная b равна 0 (нулю).

В OS операторы && и || возвращают исходное значение, делая логическую проверку за кадром.

Посмотреть про numberOf подробнее можно в документации. В выше приведенном примере также используются следующие синтаксисы OS: вызов функции с одним параметром - объектом и сахарный this.

Suslik
> попробуй сделать в качестве примера какой-нибудь более игровой проект?

Браузерную игру?

#119
18:31, 10 дек 2013

Всем добрый день, вечер, ночь, утро (вставить свое).

На сайте про язык ObjectScript появилась полноценная документация http://objectscript.org/index.osh/manual.html и раздел Справочник функций ObjectScript http://objectscript.org/index.osh/langref.html (в справочнике функций пока не все, но уже много описано).

Несколько фактов (больше наверное интересных):

- движок на ObjectScript для разработки сайтов (пока не придумал название) теперь подерживает ЧПУ, например, http://objectscript.org/index.osh/langref/globals.printf.html реально преобразуется в http://objectscript.org/index.osh?r=site/langref&page=globals.printf Правила ЧПУ настраиваются в конфиге UrlManager и имеют такой вид:

'<action:(langref|download|manual|install)>/<page:[\w\d\.\-]+>.html' = 'site/<action>'

- т.к. сам сайт http://objectscript.org написан на ObjectScript и имеет открытые исходники, то любая страница может быть просмотрена в репозитории на гитхабе (и исправлена при необходимости), например, исходник на гитхабе https://github.com/unitpoint/objectscript.org/blob/master/protect… .whatisos.osh вот так выглядит на сайте http://objectscript.org/index.osh/manual/intro.whatisos.html

- в ObjectScript метод String.replace заменяет несколько функций в PHP: str_replace, strtr, preg_replace, preg_replace_callback (что-то забыл?), поэтому программисту достаточно запомнить одну функцию

- в ObjectScript любой оператор сравнения с null или null с чем-то возвращает false

- ObjectScript спроектирован для безопасного программирования: Безопасный код (null-safe)

Страницы: 17 8 9 1012 Следующая »
ПроектыФорумОцените

Тема в архиве.