понедельник, 28 апреля 2008 г.

Pixilang 1.6 пререлиз

На всякий случай выкладываю пререлиз Pixilang 1.6. Версия для Windows и Linux. Исправлены некоторые баги, в том числе серьезный баг с командой resize_pixi().

воскресенье, 27 апреля 2008 г.

Pixilang2: новые горизонты

Какое-то время назад я уже писал про перспективы JIT-компиляции при помощи библиотеки LLVM. И даже были мысли, внедрить эту замечательную штуковину в Pixilang. Но возникло несколько вопросов:
1. LLVM конечно жутко мощный, но в самом минимальном комплекте будет весить несколько мегабайт... Все понимаю, память становится больше, компы мощнее, инет дешевле :) Но всетаки, это серьезный контраст по сравнению с 200-300 килобайтами Pixilang :)
2. LLVM написан на Си++ с использованием всех самых мощных фич Си++. Исходный код от этого не стал более читабельным, плюс появляются сложности с портированием под девайсы c WindowsMobile и PalmOS.
3. А можно ли вообще включить JIT-компилятор в Pixilang? Дело в том, что Pixi не совсем обычный язык, и многие приемы в нем отличаются от подхода классических языков программирования.

Вот... После этого был небольшой перерыв, я разбирался в мыслях :) А в итоге пришел к следующему.
Необходимо писать свой собственный JIT-компилятор, который будет на лету преобразовывать Pixi-программу в чистый машинный код любого процессора. Пусть этот JIT изначально не будет настолько оптимизирован, как LLVM, но зато он будет компактным и очень быстрым.
И вот, по прошествии некоторого времени, с удовольствием сообщаю, что первые лабораторные результаты уже есть :) Назвал я эту штуку - Pixilang2. С виду он ничем не отличается от первой версии - тот же интерфейс, тот же язык, те же команды. Но вот начинка языка - уже не виртуальная машина с байт-кодом, а настоящий JIT-компилятор, который генерирует код для Intel-овских процессоров. Первые же тесты старых пикси-программ дали прирост скорости в 2 раза! Это очень хороший результат. И это только начало. Далее планируется ввести поддержку процессора ARM (для работы с наладонниками), различные типы оптимизации, использование вкусностей архитектуры процессоров Pentium (например, MMX) и т.д. и т.п.
То есть, по сути Pixilang перешагнул ту планку, за которой он был обычным скриптовым-языком интерпретатором.
В самое ближайшее время выложу beta-версию в сети.

p.s. Если вы не в курсе, я поясню приемущества JIT-компилятора по сравнению с обычным компилятором. Например, в коде вы выделили какой-то участок памяти и указатель на него поместили в переменную PTR. Теперь в обычной проге процессор должен сначала считать адрес из переменной PTR, а потом уже записывать/читать по полученному адресу. А вот с использованием JIT все упрощается, т.к. на стадии компиляции нам уже известен точный адрес выделенного участка памяти - соответственно в коде просто забиваются статические ссылки на созданный объект и процессору не нужно читать значение из переменной PTR - убирается один "лишний" шаг.

четверг, 17 апреля 2008 г.

Пара слов о приемуществах Pixilang

Бесспорное приемущество Pixi при написании кросс-платформенных приложений. Бесплатных и коммерческих. Если при классическом подходе (компиляция исполняемых файлов) приходится для каждой платформы компилировать программу заново (при этом меняя инструменты и их настройки), то с Pixi все просто - ваш продукт пишется в одном экземпляре, а заботы о поддержке разных платформ возлагаются на разработчиков языка.
Еще один хороший пример - коммерческое ПО. Вы написали софтину. Один из пользователей хочет портировать ваш продукт на какой-то экзотический девайс, которого у вас нет. Врядли вы предоставите ему исходники своей программы :) Но если она написана на Pixi, то ситуация меняется - пользователь качает исходники языка, портирует (возможно, с вашей помощью) их на свой девайс и далее без проблем запускает любые пикси-приложения.

Pixilang и Физика.

Sergei Kukolev написал на один из постов про Пикси примерно вот такой коментарий:
Предлагается пикселизировать изображаемые предметы в матрицу объёмных пикселов. Эта трансформация соответствет корпускулярно-атомарному представлению объекта.
Разница между корпускулярной теорией и атомарной состоит в том, что изображаемый предмет загружается как пиксельная матрица и таким образом переходит в другое состояние. При этом перемещение частиц тела вызывается изменением состояния соседних пикселей. Сами пикселы при этом никуда не перемещаются, перемещается только состояние пиксела. Это представимо в виде дорожки светодиодов, зажигаемых последовательно.

Спасибо за идею. Вот какие у меня мысли на этот счет.
Если не ошибаюсь, предлагается следующее: каждый пиксель кроме цвета будет иметь еще какие-то дополнительные свойства, определяющие взаимодействие с соседними пикселями.
По схожему принципу работает демосценический эффект воды - когда каждая точка на экране вызывает колебание соседних точек, и в результате получаются круги, типа распространения волны на воде.
Тут возникает несколько вопросов.
1. Какие именно свойства должны быть у пикселей и какие законы их взаимодействия?
2. Как быть с осью времени t? :) Насколько я понимаю, такие процессы требуют дискретности по времени. То есть для запуска системы нужно выбирать минимальный отрезок времени, например, 0.1 секунды. Тогда если компьютер протормозил, например, секунду, занимаясь своими делами и нечаенно забыв про Pixilang, то чтобы показать текущее состоянии системы, придется просчитать 10 шагов (догнать систему).
3. Хватит ли целочисленной арифметики на такие задачи? Насколько больше это это займет памяти? Потянут ли КПК?

понедельник, 7 апреля 2008 г.

SunVox v1.0

Итак. Встречайте :) Моя новая разработка - SunVox v1.0. Кросплатформенный музыкальный трекер, основанный на модульных синтезаторах.

Работает на платформах Windows, Linux, PalmOS, Windows Mobile.

Основные фичи:

  • минималистичный и удобный интерфейс;

  • оптимизированные алгоритмы, позволяющие работать как на мощных ПК с мат. сопроцессором, так и на маломощных КПК без сопроцессора с использованием целочисленных операций;

  • основа SunVox (без GUI) распространяется в виде открытых исходников под лицензией BSD;

  • SunVox позволяет сохранять треки в 16-битные (int) или 32-битные (float) WAV файлы;

  • проигрыватель SunVox формата уже давно встроен в Pixilang :) В то время, как сам редактор постепенно доводился до ума.


Реализованные на текущий момент синтезаторы:
[Generator]
Генератор волн различной формы (saw,triangle,square,noise).
[Flanger]
[Distortion]
Эффект, добавляющий искажения в звук несколькими методами: обрезание уровня, уменьшение частоты дискретизации, уменьшение количества бит на сэмпл.
[Filter]
Фильтр с режимами Low-pass, High-pass, Band-pass, Notch.
[Kicker]
Ударник.
[Sampler]
Стерео-сэмплер с интерполяцией. Поддерживает форматы WAV и XI.
[SpectraVoice]
Синтезатор, основанный на FFT-преобразовании. Генерирует звук по описанию его гармоник.
[Loop]
Что-то типа петли магнитной ленты :)

КАЧАТЬ ОТСЮДА.

Примеры композиций, написанных на SunVox:

http://www.warmplace.ru/music/elochka.mp3

http://www.warmplace.ru/music/kisa_remake.mp3

вторник, 1 апреля 2008 г.