Pixilang. В простоте - сила!

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

Для тех, кто впервые столкнется с Pixilang, все изначально покажется интересной забавой. Некоторые подумают, что это весьма облегченная версия ActionScript (пресловутый Adobe Flash), другие найдут явное сходство с Бейсиком, автору этой статьи почему-то вспомнился Adobe'вский PostScript. В общем, все весьма родственно.

Язык Pixilang появился в 2006 году, его авторами являются Александр Золотов и Михаил Разуваев. С того времени он претерпел очень большое количество изменений, на данный момент текущая версия 1.5 датируется 22 марта. Для закачки необходимых файлов можно воспользоваться следующей ссылкой - www.warmplace.ru. IDE как таковой нет, есть скрипт, который набирается в Блокноте, и специальное окно вывода (окно интерпретатора). Все.


Несколько "но"

По заверению авторов, Pixilang является пиксельно-ориентированным, и среди плюсов данного языка отмечают "отсутствие объектной ориентации". Между тем, основными структурными элементами являются так называемые pixi-контейнеры, в которых может содержаться либо текст, либо картинки, либо числовые массивы. По какой причине авторы не хотят это считать за объекты, остается только догадываться. Впрочем, смотря с какой стороны на все смотреть...

 

Почему Pixilang сходу многим напомнил ActionScript? Чем-то схож синтаксис (это только первое впечатление), и... наверное, потому, что речь идет о воспроизведении программы в рамках специального окна интерпретатора и возможности анимации с указанием fps (кадры в секунду), то есть, можно организовать покадровый подход. Хотя, в данном случае мы говорим о пиксельной растровой графике. Нечто подобное раньше можно было осуществить во множестве других языков, в том числе и в самом детском, то есть, Бейсике, с помощью циклов и команды GOTO (которая, кстати, есть и в Pixilang). В данном случае можно комбинировать оба варианта.

PostScript вспомнился из-за самой первоначальной идеи легкого синтаксиса и мультиплатформенности. И, действительно, программный код, созданный для Pixilang, можно успешно использовать для платформ Windows, Linux, PalmOS, WindowsCE (Windows Mobile), он там будет работать благодаря интерпретатору. Причем сам код не только пишется в обычном блокноте, но и сохраняется в TXT-файлах. При желании созданную анимацию можно экспортировать в GIF-файлы (или AVI, но это работает только для Windows).

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


Программа "Hello, world!"

Рабочее окно интерпретатора Pixilang может иметь различные размеры. Для их подробного указания нужно открыть Блокнот, написать нечто типа:

width 320
height 240
noborder
windowname "Название окна"
buffer 4096

...а после сохранить это в файл с названием config.ini. Все!

Теперь создаем в Блокноте новый файл, пишем:

clear(BLACK) //Черный фон
print("Hello, world!",-20,10,#FFFFFF)
  //Вывод текста с указанными координатами, цвет - белый
frame 

Сохраняем эту запись в отдельный TXT-файл и запускаем его в окне интерпретатора Pixilang. Все работает.


Возможности и некоторые особенности синтаксиса

Уф-ф. В простоте - сила, но не так все и просто на самом деле. Данный язык имеет много синтаксических заимствований из других, иногда очень близок к С/С++, правда, существует ряд упрощений и специализированных решений. То есть, мы говорим о чем-то уникальном.

Как понятно, правила написания комментариев, обозначения названий переменных и т.п. близки к С-подобным. Это же относится к обозначению математических и условных операций. Правда, "+" (плюсом) может обозначаться и переход к следующему кадру, если он стоит в отдельной строке как разделитель.

Что касается вариантов с числами, то можно пользоваться обычным десятичным представлением, также есть формат, называемый Fixed Point (число с фиксированной точкой), который используется для некоторых команд. Это обычные десятичные числа, умноженные на 256. Например, если вам нужно написать 0,5, то в Fixed Point это будет как 128 (256*0,5), а если 4, то - 1024 (256*4).

Числа типа #4499FF на автомате преобразуются в представления цвета, как это есть в том же ActionScript или даже HTML. Помимо этого, для обозначения некоторых цветов зарезервированы определенные слова. В примере с "Hello, world!" мы использовали BLACK, хотя белый описали как #FFFFFF (если бы вместо этого написали WHITE, результат был бы тем же).

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

Что касается команд, то тут можно встретить в большей массе много специализированного. Например, для рисования и импорта/экспорта изображений/анимации имеется свой уникальный, по сути, арсенал. Среди всего прочего стоит выделить такие интересные вещи, как команду effector, предназначенную для использования стандартных графических эффектов, предусмотренных разработчиками. Ну а использованием альфа-канала (прозрачности) для каждого из объектов сейчас никого не удивишь.

Это же касается и музыкальных/звуковых возможностей. Взаимодействие с пользователем практически стандартно (мышь, клавиатура). В общем, язык позволяет достаточно быстро создавать 2D-анимацию, в том числе и интерактивную.


В завершение

Сама идея очень хорошая, причем, если говорить музыкальным языком, она имеет прямое отношение к демо-сцене. То есть, помимо серьезных профессиональных программ, существует отдельное направление - трекеры. Это достаточно "легкие по весу" разработки, в рамках которых множество энтузиастов делают настоящие чудеса. Например, не секрет, что сейчас можно найти целые музыкальные альбомы, загружаемые в виде отдельной программы, которая занимает 300-500 Кб. Этим направлением также активно интересуются разработчики компьютерных игр. С помощью того же Pixilang уже написано несколько таких программ. Да, и в плане игр стоит отметить достаточно интересное будущее и, возможно, явную конкуренцию с флэшем в будущем.

Ведь Pixilang предоставляет следующие возможности (цитируем):

  • быстрое написание небольших демок/игрушек/открыток и других графических приложений;
  • создание, редактирование и запуск программ на различных платформах;
  • простой синтаксис и малое количество команд;
  • использование универсального контейнера (pixi) для хранения различных данных (текст, картинки, шрифт);
  • пиксельная графика (в том числе анимация) описывается непосредственно в исполняемом TXT-файле при помощи ASCII символов;
  • прозрачность (простая и через альфа-канал);
  • поворот и масштабирование;
  • удобные команды синхронизации;
  • отсутствие математических floating point операций для повышения скорости выполнения программ;
  • проигрывание трекерной музыки в форматах MOD и XM (используется движок PsyTexx);
  • возможность синтеза звука средствами Pixilang;
  • загрузка картинок из форматов GIF (анимированных) и JPG;
  • преобразование любой анимированной картинки в моноширный шрифт (каждый кадр - отдельный символ);
  • реал-тайм экспорт видеоряда в анимированный GIF;
  • сохранение области экрана в TXT-файл с pixilang-кодом внутри (оптимальное преобразование цветных пикселов в ASCII коды производится при помощи нейросети);
  • поддержка библиотеки SDL (для прямого доступа к видеопамяти) в Linux-версии, поддержка прямого доступа к видеопамяти в PalmOS-версии;
  • оптимизированы функции для рисования в полноэкранном режиме (SDL, DirectX, OpenGL, GAPI...);
  • исходный код распространяется под лицензией GNU GPL.

И, вообще, интересен сам подход... Почему? Приведу недавний пример, когда один из знакомых написал игру на том же флэше, и заняла она у него 18 Мб. Дело в том, что он не думал о ресурсах, практически все выполнял на уровне чуть ли не покадрового рисования с сохранением большого количества графических данных, иногда идентичных и т.п. А вот когда мы, поспорив, практически все сделали в коде, оптимизировали сам вывод изображений, эта же игра стала занимать... около 2 Мб. Эффект очевиден. То есть, графику и анимацию иногда гораздо эффективнее программировать, нежели рисовать. А тут появилось такое чудо, как отдельный пиксельно-ориентированный язык.

Что касается будущего Pixilang... Весьма определенный ответ можно найти в блоге Александра Золотова (nradio.blogspot.com):

"Pixilang хорош. Буду в том же духе поддерживать и развивать его. А параллельно попробую заглянуть в будущее...

Следующий шаг, я думаю, надо будет делать в сторону мультиязыкового пространства. Какая-то универсальная межплатформенная среда без привязки к конкретному языку программирования. И основа для такой среды, кажется, уже появилась - это инструмент под названием LLVM. В двух словах не описать все его преимущества. Но вот основное: код программ и модулей можно хранить в бинарных модулях, слегка напоминающих байт-код Java или C#; но на самом же деле эти модули по своей гибкости влегкую делают и Java, и C#, и всех остальных. Возможно такое: вы пишете прогу на языке C или C++ или Basic или еще каком-нибудь, компилируете (например, через gcc) эту прогу в бинарный код LLVM; LLVM грузит бинарный код, перелопачивает его, сильно оптимизирует и на выходе дает готовый исполняемый файл, оптимизированный под конкретный девайс (например, windows, linux или Mac OSX). При этом LLVM открыт и распространяется под лицензией BSD - что совсем хорошо... Определенно, за этим будущее. Недаром Маки и Айфоны активно юзают эту технологию для оптимизации графики...".

В общем, посмотрим. Начало хорошее.

Кристофер,
christopher@tut.by

Версия для печатиВерсия для печати

Номер: 

13 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Аватар пользователя абыфацель
Классная игрушка.

Прям ZX-spectrum и Бэйсик. :)

Пошёл играццо.

Аватар пользователя Zuf
Не хотите ли принять участие в конкурсе Pixilang Compo 64

Правила самые простые :)

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

2. Программа должна быть запакована в архив ZIP, RAR, GZ (или какой-то другой). Размер архива не должен превышать 64 килобайта (65536 байт).

3. Количество работ от одного автора не ограничено.

4. Запрещена разного рода нецензурщина, картинки сомнительного содержания и т.п... Думаем, вы понимаете, о чем речь :)

Прием работ продлен до 1 мая.

См. информацию на форуме пиксиланга http://www.warmplace.ru/forum/viewtopic.php?f=7&t=1026

Аватар пользователя абыфацель
На мобылку надо сие перенести. На мобылках такая цацка хороша. Мобильных линуксов сейчас много - перенести можно.
Аватар пользователя Кристофер
Я -- за.
Аватар пользователя Инкогнито
Скроллинг экрана довольно затруднительно реализовать.

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

Аватар пользователя Alex Zolotov
Скроллинг экрана реализуется путем рисования себя самого (то есть, пикси-контейнера с номером 0 - основной экран) со сдвигом:

pixi( 0, 0, 1, 1, 0 ).

"Виртуальная видеопамять" тоже элементарно реализуется :) Создается большой пикси-контейнер с размерами большими чем размер экрана: backbuffer = new_pixi( 640, 480, 1 )

Чтобы теперь порисовать в этом контейнере, выбираем его в качестве основного экрана: set_screen( backbuffer )

После этого переходим обратно в основной экран: set_screen( 0 )

И рисуем "виртуальную видео-память": pixi( backbuffer, 0, 0, 1, 0 )

В этом сила пикси :)

А вообще, все вопросы рекомендую писать мне в мыло или на официальный форум www.warmplace.ru/forum