LINUX.ORG.RU
ФорумTalks

ACPU - новая платформа. Разработка для iOS под Linux.

 , , , ,


2

1

Animation CPU (ACPU) — это новая VM, язык программирования, новая IDE и все остальное тоже новое.

Многих интересует:
Какой язык учить?
Какой язык простой?
Какой язык лучше для быстрого прототипирования и создания утилит?
Какую платформу выбрать, чтобы работало везде с максимальной производительностью?

ACPU дает ответ на все вопросы.

Состоит из IDE, Compiler, Executor

Executor
Виртуальный процессор (модель аналогичная CPU - порты, память, инструкции). VM. В качестве Code Backend выбран exprtk - слава Индии:). Был выбран по критерию - решает задачу, прост и стабилен. Для системного уровня (Display, Sound, Input) используются игровые движки: cocos2d-iphone (iOS), cocos2d-x, HGE (Windows, Linux, Android), three.js (HTML5), Away3d (Flash). Выбрано по критерию времени разработки и поддержкой GPU Shader. Для генерации звука используется модуль DSP и нативные форматы.

Compiler
Компилятор нового языка ACPUL. Another CPU Language (ACPUL) - язык программирования для быстрого прототипирования с низким порогом вхождения. Состоит из 2х уровней. Уровень инструкций и уровень архитектуры. Инструкции это стандартные математические выражения, доступные любому. Архитектура это дерево объектов - аналог файловой системы (классов/модулей/свойств). Основой является декларативный синтаксис на основе классических C-подобных языков (C/C++/Java/ActionScript). В языке отсутсвуют типы, на уровне инструкций все происходит с float, а на уровне архитектуры с object/file. Язык основан на unicode, синтаксический сахар минимален (нет ни void, ни int), потому позволяет писать программы на любом национальном языке - русский вперед:). Следсвие языка: можно легко прототипировать архитектуру, рефакторить, складывать модули и доводить до исполнения в конечном устройстве за кратчайшее время.

IDE
Разработано на ACPUL и выполнеется самом ACPU, потому выполняется на всех платформах (включая JS/HTML5, Flash, Unity3d). IDE имеет стандартные функции, как Profiler, Debugger, но с уклоном на UI.

Среда запуска ACPUL
ACPU имеет возможность выполняться в любой среде (в том числе Adruino и микробах). Компилятор транслирует ACPUL в код для необходимой платформы (C, ActionScript, etc). В последствии код собирается стандартными средствами и выполняется с минимальным оверхедом на целевой платформе. Получется минимальный код и оверхед, возможна аппаратная реализация ядра. На само ядро ограничение не накладыватся (спасибо математике), а накладывается на модули - например, в AVR нет GPU, потому вместо графики будет модуль мигания лампочками:), а вместо DSP с Reverb будет beep, на уровне программы это отразится с минимальными потерями при правильной архитектуре, поскольку архитектуро-ориентированный язык это позволяет сделать.

Цели проекта
Упростить жизнь разработчикам и сделать программирование более доступным при сохранении аксиомы 80/20.

Что необходимо проекту?
Поддержка и критика.

Основной сайт:
http://acpul.org/
Сейчас не работает хостинг, сайт на github.

Github:
https://github.com/d08ble/acpu
samples/* - лежат результаты работы 2х приложений на платформе ACPU. Графический AI на основе генетических алгоритмов и демо.
acpul-EBNF-cocor/* - граматика
web/ - веб-сайт acpul.org v0.1 и разбор syntax tree в code.html

Ссылки:
exprtk - https://code.google.com/p/exprtk/
Codea - http://twolivesleft.com/Codea/Talk/

ps: надеюсь на помощь сообщества для всех багфиксов и получения материалов доступных для всех, в том числе

Перемещено mono из general



Последнее исправление: d08ble (всего исправлений: 1)
Ответ на: комментарий от d08ble

Основные преимущества: разработку можно делать на планшете

Зачем это делать? Это ведь наверняка намного неудобнее, чем разработка на полноценности компьютере.

кроссплатформенное

Понятно

Мгновенная компиляция и отображение результата.

У меня в связке макбук-айфон тоже практически мгновенное отображение результата. По крайней мерк не было большого желания ускорить его.

Или имеется в виду возможность менять код работающего приложения? Если да, то принимается.

Еще интересно — насколько оно хуже obj c по производительности и просто ли писать часть программы на obj c?

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

сейчас не многие используют планшеты

Привет из двадцатого века?

Miguel ★★★★★
()
Последнее исправление: Miguel (всего исправлений: 1)
Ответ на: комментарий от d08ble

r0 - регистр, переменная тип float. аналог регистра проца. на каждый блок выполнения выделено определенное к-во регистров. почему ограниченное к-во регистров

Мдя. Даже C, похоже, будет повыше уровнем, чем это говнище.

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

Зачем это делать? Это ведь наверняка намного неудобнее, чем разработка на полноценности компьютере.

Планшеты давно по производительности тот же pc, но с иным форм-фактором. При желании можно подключить дисплей, клаву и мышь. Сейчас стирается последняя грань между pc и планшетами, форм-фактор становится универсальным - все консоль. Intel это официально заявило, есть статья на хабре почему они сделали мобильные устройства основным направлением, m$ тормозит еще, но тоже в это вкладывает не мало. Планшет уже выигрывает у pc по некотороым параметрам (потребление, touch, размеры), проблем в железе нет. Есть проблемы в софте, это 2я прога для полноценной разработки ipad, ситуация такая же, как и с играми, когда их было 10 штук. Не на чем разрабатывать, было бы на чем, уже было бы много положительных отзывов (см. форум codea и отзывы на appstore). Еще пошла тенденция к удаленному обучению, куда вкладывает MIT и билли, они уже поддержали codea, поскольку обучение на планшетах самое то.

У меня в связке макбук-айфон тоже практически мгновенное отображение результата. По крайней мерк не было большого желания ускорить его.

Я работаю с большими проектами, там 200 классов (400 файлов), 20 либ, бинарники по 170MB, XCode при этом начинают вылазить всякие чудеса, вроде 100% CPU когда ему вздумается, падения и инсталляция занимать начинает занимать минуты. Для разработки анимаций/игр это вообще никак, потому и Titanium и PhoneGap успешно проинвестированы и Adobe AIR вкладывает уже который год (а оно как раз на анимации заточено). Много ограничений и ньюансов, что в лучшем случае забирает время=деньги, а когда и до конфликтов доводит. У меня старые версии XCode вообще не могли большие исходники распарсить - все падало в code dump. Сейчас падения когда отлаживаешь gl, оно все монстрообразно и будет еще больше. Посмотрите на частоту апдейтов XCode, это не из-за наворотов, это из-за багфиксов в основном видимо, очень сильно отличается работа, хотя ничего особо нового. Мне приходится держать несколько версий XCode из-за этого, лишних 7 гигов на скромном ssd это не гут. Конечно для простых проектов подойдет и многих устраивает, это у меня так выходит, что 2 xcode 5 виртуалок и еще что, чтобы иметь полную свободу действий и не отвлекаться на недоработки. Кому-то одного устройства и одной системы достаточно для его задач.

Или имеется в виду возможность менять код работающего приложения?

Да, горячая замена кода в работающем приложении, как в erlang

Еще интересно — насколько оно хуже obj c по производительности и просто ли писать часть программы на obj c?

Есть 2 режима выполнения, в виртуальной среде на основе exprtk (смотрите бенчмарки на их сайте, достаточно шустро, хоть и индианец делал) и экспорт в C, который потом компилируется стандартными средствами - производительность максимальная со всеми оптимизациями clang. obj c сам достаточно тормознутый из-за runtime, ближе к JS, потому виртуальную машину имеет смысл сравнивать с C/C++. Масштабных тестов не проводилось, но оверхед не большой, в 10 раз медленнее C в таком loop-тесте:
C:
volatile int i;
for(i=0;i<30000;i++);
ACPUL:
r0:=30000;
while(r0){r0-=1;};
* iPad 2:
* O0 O3
* Exprtk - 0.046944 0.008096
* Native - 0.002739 0.000975
* Taste - 0.04 0.010931

Taste - это stack vm из примеров coco/r, она примитивна, для сравнения

Пока в первой версии производительность устраивает, потом можно будет все оптимизировать (запасы есть) и заменить exprtk на что-то более шустрое.

d08ble
() автор топика
Ответ на: комментарий от Legioner

просто ли писать часть программы на obj c?

Да, просто.

Код для Objective-C:
- (void)registerDispatcher:(NSRange)range delegate:(id)delegate;

[acpu registerDispatcher:NSMakeRange(10000, 1) delegate:self];

- (float)ioWrite:(VVEffectsNode *)node address:(int)address p0:(float)p0 p1:(float)p1 p2:(float)p2 p3:(float)p3;
{
NSLog(@«%i», p0);
return 54321;
}

Код для ACPUL:
r0:=io(10000, 12345, 0,0,0);
watch(r0);

В консоли выведется 12345 и 54321.

от такого страшного вида можно уйти, обернув через декларации ACPUL в отдельную библиотеку:
my.objective.c.call.delegate r0:=io(10000, 12345, 0,0,0);
my.objective.c.watch.result watch(r0);

итого имеем на уровне пользователя:
my.objective.c.call.delegate();
my.objective.c.watch.result();

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

my.delegate my.objective.c.call.delegate();
my.result.watch my.objective.c.watch.result();

my.d my.deleage;
my.w.d my.result.watch;

итого код, который будет многократно использоваться укорочен:
my.d();
my.w.d();

Кластерная архитектура расчитана на не большие программы, чтобы избежать пересечения коротких имен. один файл 100 строк, этого хватает для большинства типичных задач (не забываем про ограничение памяти в 64МБ для процесса на ipad).

Также легко подключается и на любом другом языке, C/C++, Java, AS3, JS... Не надо учить замудренные API, что угодно можно связать с чем угодно. Это в первую очередь инструмент прототипирования, чтобы сразу проверить и получить рабочий ощутимый результат. Правильные имена и супер-C++-Java-код потом можно написать (или сразу экспортить ACPUL в нужный язык, если решение полностью устраивает).

d08ble
() автор топика
Ответ на: комментарий от Miguel

Вы наверно никогда не слышали об AML, вот то унылое гэ. И в свете перспектив закрытости UEFI при поддержке m$ вскоре его прийдется учить любому желающему ставить линукс на _любое_ железо.

Регистры выбраны идеологически. Нет разницы между 'int i' и 'i r0'. Второй вариант короче и логичнее в данной системе координат.

d08ble
() автор топика
Ответ на: комментарий от anonymous_sama

Ссылки на *deb чтобы поставить IDE ос всеми плюшками за один раз, не вижу

Оно еще не open-source. Как раз стоит вопрос выяснить все +/-?

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

Вы наверно никогда не слышали об AML, вот то унылое гэ.

О каком именно? Algebraic Modeling Language?

И в свете перспектив закрытости UEFI при поддержке m$ вскоре его прийдется учить любому желающему ставить линукс на _любое_ железо.

Скобочная структура не ясна. Имеется в виду «каким бы ни было железо, желающему ставить на него линух придётся учить AML»? Это, разумеется, неверно. Дистрибутивы типа убунты не убить. Или имеется в виду «тому, кто хочет ставить линух на всё, что есть на свете, придётся учить AML»? Опять-таки неверно, ему лучше сразу убиться об стену, ибо бывают-таки железки, на которые линух не поставишь.

Регистры выбраны идеологически.

Я уже понял. Такое убожество можно выбрать только идеологически.

Нет разницы между 'int i' и 'i r0'.

Есть, конечно. Регистры - это глобальные переменные, то есть, по сути, антипаттерн.

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

Вы наверно никогда не слышали об AML, вот то унылое гэ.

О каком именно? Algebraic Modeling Language?

Упоминание уродства, AML и UEFI в одном контексте как бы намекает на ACPI Machine Language.

Нет разницы между 'int i' и 'i r0'.

Есть, конечно. Регистры - это глобальные переменные

Вроде русским языком сказано: «глобальные для среды u0-u32, локальные функции r0-16 и локальные блока b0-b32».

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

Упоминание уродства, AML и UEFI в одном контексте как бы намекает на ACPI Machine Language

Не мешай троллить.

Вроде русским языком сказано: «глобальные для среды u0-u32, локальные функции r0-16 и локальные блока b0-b32».

Пропустил, согласен.

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

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

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

float - для инструкций, логики и математики, хорошо оптимизируется на Cortex A9 (отдельный высокопроизводительный конвеер, медиа-процессор все же)
object - любой объект, в том числе и тип. понятие объект в данной системе координат подразумевает что угодно, в том числе и тип данных, например:

a:=newObject(int, 123);
b:=newObject(date, 16, 05, 2013);

или просто:

a:=int(123);
b:=date(16, 05, 2013);

Ограничений по типу данных нет. Напомню, основная идея, чтобы язык и система прогрессировала благодяря свободному обмену кода, если большинство разумных людей скажет, что там нужен тип int, тогда оно оформится в форме компилятора и api, нужна конструкция enum или иная, тоже самое. ACPUL это конструктор, на котором можно создать что угодно, это относится и к грамматике языка. Например для поддержки JSON в IDE можно создавать LL(1) парсеры в формате ATG (coco/r), которые потом транслируются в ACPUL и в теории ACPUL должен когда-нибудь скомпилировать сам себя. Производительность при этом страдает не сильно, для парсинга JSON фактически тоже, что и на C делать.

d08ble
() автор топика
Ответ на: комментарий от Miguel

зачем ограничивать количество

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

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

Расширяем познания: Язык DOU схож по идеологии упрощения написания программ и тоже есть идея IO для связи. В отличии от DOU, в ACPUL отсутсвует такое количество сложных конструкций, потому порог вхождения ниже.

Link: http://daovm.net/

UP: Начался процесс над трансляцией компилятора в JS посредством https://github.com/kripken/emscripten/wiki#demos , acpul.org пилится во втором приоритете.

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