LINUX.ORG.RU

ZenGL 0.3 beta 1

 , , , zengl


0

2

После длительной «underground» разработки вышла новая версия ZenGL — кроссплатформенной библиотеки для разработки игр, написанной на Pascal и предоставляющей необходимый функционал для вывода 2D-графики, обработки ввода, воспроизведения звука и пр. Подробнее о функциональности можно прочитать на официальном сайте.

Данный релиз содержит такие нововведения как:

  • поддержка платформ iOS и Android;
  • работа с zip-архивами;
  • многопоточная загрузка ресурсов;
  • подсистема декодирования видео с поддержкой theora;
  • наличие сборки с заголовочными файлами для C/C++.

>>> Официальный сайт

★★★★

Проверено: mono ()
Последнее исправление: CYB3R (всего исправлений: 4)
Ответ на: комментарий от quantum-troll

Вроде невозможности объявить переменную где-либо кроме начала программы

В начале процедур, функции, методов и в любом месте в модуле. Считается, что таким образом девелопера принуждают структурировать свой быдлокод.

или символического скрытия низкоуровневого характера языка?

Не очень понял суть претензии.

Alden ★★★★
()
Ответ на: комментарий от Relan

Это то, о чем я думаю?

Нет, это не тот Pascal от Apple, если ты подумал об этом :) Это реализация в FreePascal'е, которая позволяет писать совместимый с Objective-C код.

Andru ★★★★
() автор топика
Ответ на: комментарий от Alden

таким образом девелопера принуждают структурировать свой быдлокод.

Быдлокодерам даже это не поможет.

anonymous
()
Ответ на: комментарий от Andru

Это то, о чем я думаю?

Нет, это не тот Pascal от Apple, если ты подумал об этом :) Это реализация в FreePascal'е, которая позволяет писать совместимый с Objective-C код.

Мне доводилось немного писать на Objective C++. Очень феерично выглядит код, когда перемежаются строки на разных языках. Это то же самое, но для сращивания Objective C и паскакаля?

Relan ★★★★★
()

Отлично, теперь то под Gnu/Linux точно появятся хорошие игры!

anonymous
()
Ответ на: комментарий от Relan

Это то же самое, но для сращивания Objective C и паскакаля?

Нет, там синтаксис тот же остаётся в целом, просто несколько доп. ключевых слов и немного извратная конструкция для имён методов :)

Andru ★★★★
() автор топика

Отличный проект, на отличном яп с приятной минималистичной архитектурой! Желаю успехов и больше проектов на нём хороших и разных))

Сам использовать наврядли буду, т.к. всё ещё лелею надежду воскресить собственный, похожий кроссплатформенный велосипед на том же паскале, даже с частичной поддержкой умершей WinMobile.. Но это когда-нибудь потом, когда дети вырастут и писать код можно будет без клавиатуры - силой мысли.. А пока приходится лизать Жабу по работе и писать на ней мелкие поделки раз в месяц дома.

FedeX ★★
()
Ответ на: комментарий от CYB3R

Паскаль не нужен, плохой синтаксис, очень неудобен по сравнению с си-подобным.

все как раз наоборот.

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonymous

Поосторожней с выражениями, сударь. Любому языку будут не к лицу постоянные begin/end.

begin/end уж точно не хуже. Так как улучшают читабельность кода.

К тому же, удивительно, что паскаль еще не вымер, с его := вместо нормального = Искренне ваш, Д'Артаньян

вот как раз := это нормально и повсеместно принято. Даже в псевдокодо-алгоритмах.

dikiy ★★☆☆☆
()
Ответ на: комментарий от anonymous

Не смешивайте понятия, здесь разговор о синтаксисе.

Никто вам не мешает написать компилятор Ruby.

Но если до сих пор никто так и не осилил написать нормальный компилятор языка, значит что-то с синтаксисом у рубей не так. А для паскаля осилили компилятор который собирает обсуждаемый движок за пару секунд и искаробки даёт хорошую статичность (собранные программы запускаются не только в бубунте и не требуют libjpeg мохнатой версии), чего многие опенсорсные разработчики на скриптоплюсах тоже не осилили.

Napilnik ★★★★★
()
Ответ на: комментарий от Napilnik

и искаробки даёт хорошую статичность

Паскалеводы не осилили динамическую линковку и гордятся этим )

O02eg ★★★★★
()

«Коммерческая Лицензия требуется в тех случаях, когда вы не хотите распространять исходный код вашего проекта и вам необходимо использовать статическую компиляцию с ZenGL.»
А не 4.2 ли это? Насчёт LPGL3 не уверен, но в 2 можно было не нарушая лицензии выкладывать свои коммерческие и по своей лицензии объектники, с которыми уже можно линковать новые версии либы.

GAMer ★★★★★
()
Ответ на: комментарий от powerpc

Можно подумать, кроссплатформенность прибита гвоздями к какому-то языку. Снобизм такой снобизм.

slackwarrior ★★★★★
()
Ответ на: комментарий от Alden

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

slackwarrior ★★★★★
()
Ответ на: комментарий от O02eg

Паскалеводы не осилили динамическую линковку и гордятся этим )

В играх динамическая линковка нужна для квеста «найди на десуре игру которая заработает не в бубунте».

Napilnik ★★★★★
()
memset( &resource[ 0 ], 256, 0 );

Это что за прикол? Последние два параметра местами перепутаны?

p.s. Найдено в demo08.c

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Последние два параметра местами перепутаны?

чйорт, паскалевский расклад в FillChar забыл поправить при замене на memset... :)

Andru ★★★★
() автор топика
Ответ на: комментарий от Vudod

могу сразу сказать, чего мне не хвататет: срезы массивов.

Copy(массив, откуда, сколько)

atrus ★★★★★
()
Ответ на: комментарий от anonymous

Ответ на твоё сообщение.

Я ж не говорю, что автор либы неумный человек. Просто как не крути, как не раздувай из мухи слона, а тянет максимум на мининовость. ))

Bad_ptr ★★★★★
()
Ответ на: комментарий от anonymous

Говорить о «компилируемом языке» ещё более странно.

Речь идет конкретно о паскале. Под рукой только англоязычная вики, но суть и так ясна:

Wirth's intention was to create an efficient language (regarding both compilation speed and generated code) based on so-called structured programming, a concept which had recently become popular.

Никто вам не мешает написать компилятор Ruby.

Еще как мешает, мне руби нафиг не нужен (собственно как и паскаль). Да и что это за программа которая с собой сборщик собственного мусора таскает? Лично мне уже смешно, хотя такие примеры есть. Раньше мелкософтовский васик вроде умел свои программки компилировать. Но только это был интерпретатор с приаттаченой к нему васиковской прожкой. Так компилить много ума не надо.

A-234 ★★★★★
()
Ответ на: комментарий от Andru

Cи-подобный синтаксис для роботов

Дык, слава роботам же! Не очень важно, на чём клепаются игрушки, лишь бы результат устраивал =)

Sadler ★★★
()

Раз уж тред ушёл к обсуждению (Object)Pascal, выскажу навскидку несколько дичайших анахронизмов. Может быть, гуру паскаля пояснят глубинный смысл всеъ этих конструкций:

  • Точка с запятой после строки с объявлением процедуры/функции. Вот зачем она там нужна?
  • Слово overload после всех перегрузок функций. Во времена Java/C# это выглядит как минимум странно.
  • Обязательное отсутствие точки с запятой перед else - вершина маразма, не имеющая никакого оправдания.
  • Присваивание значения переменной result и выход из функции - это разные операторы.
  • Строки окружаются апострофами, а не кавычками.
  • К слову, о строках: апостроф внутри строки экранируется не символом \, а ещё одним апострофом.
  • Несмотря на патологическую любовь создателей (Object)Pascal к символу ';', в качестве разделителя элементов списка используемых модулей используется запятая.
  • Про оператор := и ключевые слова begin/end и then, вижу, уже писали - не буду повторяться.
AVas
()
Ответ на: комментарий от AVas

Точка с запятой после строки с объявлением процедуры/функции. Вот зачем она там нужна?

А для чего на асфальте рисуют полосы и прочую дополнительную разметку? Водители и сами могут всё на глазок измерить, да и не влом им!

Слово overload после всех перегрузок функций. Во времена Java/C# это выглядит как минимум странно.

Никого не волнует логика Java/C# если она неправильная.

Присваивание значения переменной result и выход из функции - это разные операторы.

А ты хочешь чтобы присваивание значения переменной приводило к немедленному выходу? Переменные так не делают, да и неудобно это, нельзя присвоить значение несколько раз.

Строки окружаются апострофами, а не кавычками.

Кавычки более частоиспользуемые в тексте символы, не нужно мешать их употреблять по прямому назначению.

К слову, о строках: апостроф внутри строки экранируется не символом \, а ещё одним апострофом.

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

Несмотря на патологическую любовь создателей (Object)Pascal к символу ';', в качестве разделителя элементов списка используемых модулей используется запятая.

В обычном тексте тоже, совпадение!

Про оператор := и ключевые слова begin/end и then, вижу, уже писали - не буду повторяться.

Ага, правильные и полезные вещи, чего сказать то хотел;)

Napilnik ★★★★★
()
Ответ на: комментарий от Napilnik

А для чего на асфальте рисуют полосы и прочую дополнительную разметку? Водители и сами могут всё на глазок измерить, да и не влом им!

Хорошо, представим, что в каком-нибудь Гондурасе власти приняли решение рисовать полосы поперёк дороги в самых непредсказуемых местах. Почему гондурасские водители должны страдать от рябящих в глазах полос?

Никого не волнует логика Java/C# если она неправильная.

Продолжайте писать километры избыточного кода и наивно полагать, что это единственно правильный способ программирования.

А ты хочешь чтобы присваивание значения переменной приводило к немедленному выходу? Переменные так не делают, да и неудобно это, нельзя присвоить значение несколько раз.

Во-первых, цель функции - рассчитать некоторое значение на основе входных параметров и внутреннего состояния объекта-«хозяина» этой функции. Если такое значение было найдено, то дальнейшее выполнение этой функции не имеет смысла. Во-вторых, приведите пример кода, в котором многократное присвоение значения переменной result приводит к сокращению объёма кода и времени его выполнения.

для редкоиспользуемой в строках фичи применяется всё тот же символ.

Сюрприз: в английском языке апострофы в тексте применяются чаще кавычек.

В обычном тексте тоже, совпадение!

Почему же тогда код на паскале так не похож на обычный текст (if a is greater than 5 then please decrease a by 5 and exit)?

AVas
()
Ответ на: комментарий от AVas

Точка с запятой после строки с объявлением процедуры/функции. Вот зачем она там нужна?

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

Слово overload после всех перегрузок функций. Во времена Java/C# это выглядит как минимум странно.

очень удобно. Сразу видно, есть ли где-то перегружающая функция, или нет.

Обязательное отсутствие точки с запятой перед else - вершина маразма, не имеющая никакого оправдания.

вполне логично. else относится напрямую к оператору if. А так же между if и else других операторов, модифицирующих поведение if не вожможно.

Присваивание значения переменной result и выход из функции - это разные операторы.

А ты хотел, чтобы по result:=a; сразу вылетало, лол?

У тебя С головного мозга.

Строки окружаются апострофами, а не кавычками.

К слову, о строках: апостроф внутри строки экранируется не символом \, а ещё одним апострофом. Несмотря на патологическую любовь создателей (Object)Pascal к символу ';', в качестве разделителя элементов списка используемых модулей используется запятая. Про оператор := и ключевые слова begin/end и then, вижу, уже писали - не буду повторяться.

уже ответили.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AVas

Во-вторых, приведите пример кода, в котором многократное присвоение значения переменной result приводит к сокращению объёма кода и времени его выполнения.

function max(a:array of integer): integer;
begin
  result:=a[0];
  for i:=1 to Length(a)-1 do
    if a[i]>result then result:=a[i];
end;

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

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

Интересно, как же с этой напастью справляются EcmaScript-совместимые языки (например, горячо любимый здесь ActionScript 3)? Там направление разбора осталось тем же, но все директивы располагаются перед объявлением функции.

очень удобно. Сразу видно, есть ли где-то перегружающая функция, или нет.

Нужно только быдлокодерам, пишущим юниты/классы по нескольку (десятков) тысяч строк длиной.

else относится напрямую к оператору if.

Строка непосредственно перед else относится к блоку функций, выполняемых при выполнении условия if, и на её синтаксис конструкция if/then/else не должна влиять никоим образом.

А ты хотел, чтобы по result:=a; сразу вылетало, лол?

Разумеется, и я даже написал, почему. Впрочем, людям с паскалём головного мозга это вряд ли дано понять.

AVas
()
Ответ на: комментарий от dikiy

Контрпример (предлагаю представить, насколько эта функция будет короче на C-подобных языках):

function SomeComplexLogic(input: integer): integer
begin
  if input < 0 then
  begin
    result := 5;
    exit;
  end;

  if (input + FSomeInternalVariable > 10) then
  begin
    result := input + FSomeInternalVariable -15;
    exit;
  end;

  if (LongAndComplexFunction(input) > 15) then
  begin
    result := -5;
    exit;
  end;
end;
AVas
()
Ответ на: комментарий от AVas

Контрпример (предлагаю представить, насколько эта функция будет короче на C-подобных языках):

function SomeComplexLogic(input: integer): integer
begin
  if input < 0 then
  begin
    result := 5;
    exit;
  end;

  if (input + FSomeInternalVariable > 10) then
  ...skipped...

И этот человек еще называет кого-то быдлокодером, лол:

Нужно только быдлокодерам, пишущим юниты/классы по нескольку (десятков) тысяч строк длиной.

PS

function SomeComplexLogic(input: integer): integer
begin
  if input < 0 then
    result := 5;
  else if (input + FSomeInternalVariable > 10) then
    result := input + FSomeInternalVariable -15;
  else if (LongAndComplexFunction(input) > 15) then
    result := -5;
end;
dikiy ★★☆☆☆
()
Ответ на: комментарий от AVas

Из всего списка вопросов ниочём отвечу на этот:

Присваивание значения переменной result и выход из функции - это разные операторы.

решается через:

exit( result );

Не помню правда с какой версии языка Delphi ввели.

Andru ★★★★
() автор топика
Ответ на: комментарий от AVas

ай ай ай!

соедини в

if ... then
  ...
else if ... then
  ...
else if ... then
  ...

и увидишь сразу что у тебя баг, функция не все входные случаи обрабатывает да и короче станет и exit'ы не неужны будут

nikitazu
()
Ответ на: комментарий от Andru

Не помню правда с какой версии языка Delphi ввели.

в TP, емнип, можно было настроить компилер так, чтобы функция вываливалась по присвоению переменной Result какого-либо значения.

dikiy ★★☆☆☆
()
Ответ на: комментарий от AVas

Обязательное отсутствие точки с запятой перед else - вершина маразма

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

Строки окружаются апострофами, а не кавычками.
К слову, о строках: апостроф внутри строки экранируется не символом \, а ещё одним апострофом.

Вопрос вкуса, хотя экранирование стоило бы сделать полноценным.

quantum-troll ★★★★★
()
Ответ на: комментарий от AVas

Хорошо, представим, что в каком-нибудь Гондурасе власти приняли решение рисовать полосы поперёк дороги в самых непредсказуемых местах. Почему гондурасские водители должны страдать от рябящих в глазах полос?

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

Продолжайте писать километры избыточного кода и наивно полагать, что это единственно правильный способ программирования.

Про километры ты программистам на С/С++ расскажи. Читал когда-нибудь что написано в сборочных скриптах эмплаера?

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

Тебе показалось, функции разные бывают, входные параметры не обязательно должны быть.

Если такое значение было найдено, то дальнейшее выполнение этой функции не имеет смысла.

Держи кусочек логики:

function bbbb4: boolean;
var
q: byte;
begin
result:=false;
if a=1 then result:=true;
if b=4 then result:=true;
if result=true then 
  for q:=1 to 10 do if zzzz[q].bjaka_afigennaja>zzzz[q].bbbb then result:=false;
if result=false then if zz=4 then result:=true;
end;

Во-вторых, приведите пример кода, в котором многократное присвоение значения переменной result приводит к сокращению объёма кода и времени его выполнения.

Не нужно объявлять одну локальную переменную, она уже есть.

Сюрприз: в английском языке апострофы в тексте применяются чаще кавычек.

Респект Вирту, не для одних англичан язык создавал, не стал мучить иностранцев англокорявостями.

Почему же тогда код на паскале так не похож на обычный текст (if a is greater than 5 then please decrease a by 5 and exit)?

Очень похож, просто ты смотришь на форму и не задумываешься над содержанием произносимой фразы:

if a>5 then begin
                please; 
                a:=a-5;
                exit;
                end;

Napilnik ★★★★★
()
Ответ на: комментарий от AVas

Присваивание значения переменной result и выход из функции - это разные операторы.

Result.field1:= 1;
Result.field2:= 'hi';
...
unC0Rr ★★★★★
()

Вышел отличный тред-детектор паскалененавистников.

Забавно читать людей, которые жутко плюются от begin/end, но при этом не видят ничего страшного в тех кошмарных костылях, которые в C и C++ применяются для имитации отсутствующей в этих языках модульности. (Раздельная компиляция - это ещё не модульность, это всего лишь необходимая, но недостаточная предпосылка для её реализации.)

hobbit ★★★★★
()
Ответ на: комментарий от AVas

Наткнулся вот на непонятность. Почему так нельзя?

#include <stdio.h>
                                                           
const int a = 1;                                           
const int b = 2;                                           
const int c = a + b;                                       
                                                           
int main(void)                                             
{                                                          
        printf("%i + %i = %i\n", a, b, c);                 
}                                                          

gcc не компилит, clang компилит. В чём глубинный смысл запрета?

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

[объяснения для тупых on]

Дело в том, что си куда более распространен, чем паскаль. Ты вряд ли сможешь сосчитать до числа-количества компиляторов си. Естественно, что некоторые предлагают более широкий простор программисту. По стандарту (которого придерживается gcc) такая запись

const int c = a + b;
вне функции непозволительна. Ундерстанд?

НО компиляторы могут лишь расширять стандарт, так что если писать по стандарту - скомпилится везде.

[oбъяснения для тупых off]

Вот интересно, у паскаля есть стандарт? Или то, что скомпилилось хотя бы в одном из четырех компиляторов, автоматически считается «по стандарту»?

anonymous
()
Ответ на: комментарий от dikiy

Окей, признаю - C головного мозга затмил мой разум, и я попытался дословно перевести сишный код на паскаль. Всё равно присвоение результата без выхода - это всего лишь экономия одной переменной (которая и так создалась бы на стеке за пренебрежимо малое время).

AVas
()
Ответ на: комментарий от unC0Rr

Позволительно только в том случае, если возвращаемое значение - структура, иначе при попытке сделать так мы словим NullReferenceException^WAccess Violation. Разве нет?

AVas
()
Ответ на: комментарий от anonymous

Вот интересно, у паскаля есть стандарт? Или то, что скомпилилось хотя бы в одном из четырех компиляторов, автоматически считается «по стандарту»?

Есть какой-то в омерике, но мы сейчас обсуждаем не его а _паскали_ компилируемые одним кроссплатформенным компилятором - fpc. Движок и примеры написаны не на объектпаскале, загляни в код и ты удивишься.

Napilnik ★★★★★
()
Ответ на: комментарий от AVas

Ну очевидно, что Result - это структура в данном случае. Но может быть и массивом, и указателем на структуру, и чем угодно.

unC0Rr ★★★★★
()
Ответ на: комментарий от anonymous

По стандарту

Это-то я знаю, что по стандарту. А вот почему нельзя? Что такого в сложении констант-то? Обозваться обозвал, а вопросик-то предпочёл не заметить?

У паскаля есть стандарт, но старенький. http://en.wikipedia.org/wiki/Pascal_(programming_language)#Standards

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.