Пятница, 08 Ноября 2024, 04:31

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Aphalin Compiler
XakepДата: Среда, 06 Февраля 2013, 13:49 | Сообщение # 1
めちゃくちゃちゃ
Сейчас нет на сайте
Всем привет, в начале 2012го года начал писать свой язык программирования just for fun :). Собственное сейчас уже почти закончил работу над ним, и в скором времени приступлю к написанию всяких библиотек и попробую написать на нем игру )
Некоторые особенности нового яп:
массивы определяются таким образом: [2 x int]; [2 x [5 x float]], убрал возможность писать в диапазоне (3..5) потому-что для таких массивов нужно высчитывать отдельно индекс и следовательно падает производительность. Так же есть новый тип данных для работы с SIMD - векторы, определяются таким образом: <4 x int>; <16 x float>; двумерных векторов не бывает. Так например намного легче раюотать с SIMD ежели в C++, к примеру сложение 2х векторов:
Код

def main()
          a, b : <4 x int>;
          a += b; // выполняется сложение через SIMD
end;


этот вариант в 4 раза быстрее работает чем:
Код

def main()
          a, b : [4 x int];

          a[0] += b[0]; a[1] += b[1];
          a[2] += b[2]; a[3] += b[3];
end;


для инициализации массивов можно использовать вот такую шляпу:
arr = [2, 4, 6]; или arr = [2, 4, ...]; или arr = [..., 4, 6]; там где стоит ... автоматичеcки подставит значения из массива, бывает удобно в некоторых случаях, так же и с векторами только вместо квадратных скобок нужно использовать угловатые.
Из особенностей так же можно выделить возможность создавать перегрузку операторов. Пример перегрузки для массивов:
Код

alias vec3i = [3 x int];

def binary+ (lhs, rhs : vec3i) : vec3i inline swap
          res : vec3i;

          res[0] = lhs[0]+rhs[0];
          res[0] = lhs[0]+rhs[0];
          res[0] = lhs[0]+rhs[0];

          return res;
end;

def main()
          a, b : vec3i;
          a += b; // в данном случае ошибки не будет, а вызовется перегруженный оператор, который сложит по элементно массивы
end.


с унарными так же, также есть оператор [], assign и assign[]; так к примеру можно сделать хэштаблицу с обращением к элементам по строке к примеру map['test'] := 10;
так например тип string - это просто структура такого вида:
Код

struct string
          data   : [char];
          length : int;
end;


Сам язык программирования писал специально для разработки игр. Для генерации и оптимизации исполняемого файла генерируется LLVMIR (промежуточное представление кода LLVM) и с помощью LLVM оптимизируется и генерируется ASM и исполняемый файлы.

С удовольствием послушаю ваши пожелания и предложения )
На данный момент осталось исправить пару багов, и оптимизировать модульность.

P.S. Забыл упомянуть, язык кроссплатформенный и работает на Windows, Linux, Mac OS. Компилятор пишу на C++ в G++ и MinGW (порт g++ на Windows)
P.P.S. Возможно будет компиляция под мобильные платформы iOS, Android;

Update: портировал модуль OpenGL версии 4.2. и попробовал написать простенькое приложение, результат можно увидеть на скриншоте:


Несколько примеров кода:


Update:
в будущем планирую написать хороший макропроцессор, пример макроса для развертки циклов:


ссылки:
Репозиторий на bitbucket
LLVM - низкоуровневая виртуальная машина
LLD - Линковщик LLVM


Сообщение отредактировал Xakep - Воскресенье, 09 Августа 2015, 20:37
AGENTX001Дата: Среда, 06 Февраля 2013, 15:55 | Сообщение # 2
почётный гцупер
Сейчас нет на сайте
Xakep, оу! Очень даже неплохо!
XakepДата: Среда, 06 Февраля 2013, 16:38 | Сообщение # 3
めちゃくちゃちゃ
Сейчас нет на сайте
2AGENTX001, спасибо, вот не знаю выкладывать его потом в общий доступ или что дальше с ним делать, или дальше продолжать работать и написать среду разработки для языка
AGENTX001Дата: Среда, 06 Февраля 2013, 16:58 | Сообщение # 4
почётный гцупер
Сейчас нет на сайте
Xakep, я хз... Лучше библиотек посоздавай/портируй. WindowsAPI, OpenGL там.
XakepДата: Среда, 06 Февраля 2013, 17:04 | Сообщение # 5
めちゃくちゃちゃ
Сейчас нет на сайте
вот как раз этим сейчас заниматься буду, только скорее больше буду портировать OpenGL, SDL и прочее, WindowsAPI больше для написание приложений нужен, хотя в принципе его можно содрать с Delphi, dglOpenGL так заработал, с небольшими корректировками )
OpenGL уже есть, и сейчас еще пишу математическую библиотку


Сообщение отредактировал Xakep - Среда, 06 Февраля 2013, 17:05
AGENTX001Дата: Среда, 06 Февраля 2013, 18:59 | Сообщение # 6
почётный гцупер
Сейчас нет на сайте
Xakep, biggrin
XakepДата: Вторник, 19 Февраля 2013, 21:10 | Сообщение # 7
めちゃくちゃちゃ
Сейчас нет на сайте
Решил назвать язык прогарммирования vit - это древний славянский бог хранения информации )
недавно осенило как сделать возможность писать под мобильные платформы (Android, iOS), так что в скором времени может выйдет IDE с этим языком, выглядит сейчас IDE так:
http://s001.radikal.ru/i196/1302/68/cf93b2b62454.png

IDE делаю на Lazarus.


Сообщение отредактировал Xakep - Вторник, 19 Февраля 2013, 21:11
SwitchДата: Вторник, 19 Февраля 2013, 21:33 | Сообщение # 8
участник
Сейчас нет на сайте
Xakep, что-то сколько делаешь язык как бы, но так народ и не заинтересовал. Есть какая-нибудь фишка в нем, какая будет выделять его среди других наноязыков? dry
AGENTX001Дата: Вторник, 19 Февраля 2013, 21:42 | Сообщение # 9
почётный гцупер
Сейчас нет на сайте
Цитата (Xakep)
недавно осенило как сделать возможность писать под мобильные платформы (Android, iOS)

Как? Вдруг чего я могу андроидом потестить...

Добавлено (19.02.2013, 21:42)
---------------------------------------------
И да в IDE крассссная кнопка - дебаг?

XakepДата: Вторник, 19 Февраля 2013, 21:58 | Сообщение # 10
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата
Xakep, что-то сколько делаешь язык как бы, но так народ и не заинтересовал. Есть какая-нибудь фишка в нем, какая будет выделять его среди других наноязыков?

язык я е\делаю только год, и как бы только пару недель назад написал о нем, и я уже писал некоторые особенности в первом посте, кстати из осбенностей забыл написать выравнивание переменных в таком виде:
var A : Integer, Align(1024);
что довольно удобно при оптимизациях, и не отолько динамические массивы и указатели можно выравнивать )
и интересно почему ты написал нано? язык программирования полноценный и в нем есть все что нужно для разработки нормальных приложений

Цитата
Как? Вдруг чего я могу андроидом потестить.

для мобильных платформ компилируется не нативный код, а байткод, который интерпретируется программой, которая уже будет написана специально на iOS или Android (получается что-то вроде виртуальной машын вроде Java и .NET), да собственно компиляция и так будет в байткод и для остальных платформ, но будет возможность и в нативный код, но это делать придется с ухищрениями с помощью GCC или MinGW (для Windows), для компиляции ассемблерного кода. Но это может и не понадобится, разве что совсем критично к производительности будет.

если сожешь потестить, будет очень здорово, свой телефон с Android сестре подарил, так что у меня только iPad есть для тестирования iOS smile

Цитата
И да в IDE крассссная кнопка - дебаг?

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


Сообщение отредактировал Xakep - Вторник, 19 Февраля 2013, 22:05
Andrey_MДата: Среда, 20 Февраля 2013, 16:07 | Сообщение # 11
старожил
Сейчас нет на сайте
Xakep, могу посоветовать сделать побольше процедур/функций, которых не было в оригинальном дельфи.
Скажем, чтение одной строки из строкового массива в строку символьного массива. Для дельфи и паскаля я писал громадную процедуру.
Также хорошо было бы сделать возможность писать массив символов сразу в скобках, а не заключать каждый сивол в кавычки.
Также хорошо бы улучшить функцию Random: включить в неё рандомизацию и дать возможность указать диапазон генерируемого псевдослучайного числа. (Пример: s:=Random(100..200) - генерирует псевдослучайное значение от 100 до 200).
Ещё пригодился бы тип Simple (е знаю, как его назвать). В него можно заносить значения ЛЮБОГО типа, но с ним нельзя производить никаких действий.
Пример:
Код

var   
s: simple;
n: integer;
v: string;
b: boolean;

begin
n:= 1;
v:= 'aaaaa';
b:= TRUE;
     {Значения присвоены}
s:= n;
s:= v;
s:= b;
     {Всё это допускается}
s:= s-22; {Не допускается с этим типом}

n:= s; {Допускается}
end.

То есть что-то вроде буфера обмена.


ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)

Сообщение отредактировал Andrey_M - Среда, 20 Февраля 2013, 16:08
burlachenkoДата: Среда, 20 Февраля 2013, 20:30 | Сообщение # 12
постоянный участник
Сейчас нет на сайте
Ещё не помешает визуальный редактор форм. Что б было интересно начинающим программистам:)

MaximTG
XakepДата: Среда, 20 Февраля 2013, 21:27 | Сообщение # 13
めちゃくちゃちゃ
Сейчас нет на сайте
ну это все хорошо, но для начало нужно хоть что-то законченное сделать, а там уже буду думать обо всяких визульных редакторах и прочее smile
2Andrey_M, simple в дельфи вроде есть variant такой тип, но с ним можно операции разные проводить (сложение,вычитани), а там это не сложно реализуется и через указатели.
со строками тоже самое, но там сложнее, если будешь преобразовывать массив в указатель, и присваивать строковую константу, то ты просто адресс данных сменишь. Ну и в моем яп можно через перегрузку операторов подобное сделать.
Andrey_MДата: Четверг, 21 Февраля 2013, 13:44 | Сообщение # 14
старожил
Сейчас нет на сайте
А про рандом как? Такие мелочи и делают язык удобнее. Просто неохота, скажем, если нужно число от 324 до 12364 вывести, высчитывать: 324+Random(разность этих двух чисел);
Это бесит. Удобнее было бы Random(324..12364);


ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
XakepДата: Четверг, 21 Февраля 2013, 17:35 | Сообщение # 15
めちゃくちゃちゃ
Сейчас нет на сайте
рандом сделаю, ну в принципе и на дельфи можно свою сделать функцию рандома, что-то вроде этого:
Код
function MyRandom (const a, b : Integer) : Integer; inline;
begin
   Result := a+Random(b-a);
end;


ну что-то в этом роде
AGENTX001Дата: Пятница, 22 Февраля 2013, 01:19 | Сообщение # 16
почётный гцупер
Сейчас нет на сайте
Xakep, вот сделай лучше нормальную перегрузку операторов...
vicu2010Дата: Пятница, 22 Февраля 2013, 13:30 | Сообщение # 17
Сейчас нет на сайте
Яп это хорошо, но смысла в нём нет.

Сделай удобный иде специализированный по разработку игр. Чтобы был редактор карт и чтобы паскалем программировать.

Добавлено (22.02.2013, 13:30)
---------------------------------------------
Your Name Language - название япа.



Программист Ruby on Rails / COBOL | Веб-дизайнер(Bootstrap, HTML5, JS) | Викверс на Construct 2 / Classic
XakepДата: Пятница, 22 Февраля 2013, 18:39 | Сообщение # 18
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата (AGENTX001)
Xakep, вот сделай лучше нормальную перегрузку операторов...

ну вроде уже сделал, выше писал как польховаться, или еще что-то нужно доработать?
да и думаю сейчас мне главное классы сделать, с ними у меня вообще проблемы, пришлось удалить 800 строк кода и заного писать все, а это именно подпрограммы и перегрузку операторов, ну в принципе главное, что поиск и проверку перегруженных функций сделал, а остальное не так уж и сложно сделать )

Цитата (vicu2010)
Яп это хорошо, но смысла в нём нет.

для меня есть, как минимум это громадный опыт, я раньше вообще не умел нормально разбирать текстовый файл и считывать с него данные. Да и во вторых очень удобная работа с SIMD инструкциями. IDE это само собой, но не все сразу, пока что по не многу все делаю, IDE на самом деле не так уж и сложно сделать. Редактор карт со временем тоже будет, все это делается для одного проекта, да и как я уже выше писал поддерживаются платформы: Win, Linux, Mac, iOS, Android. Последние два пока не сделал, но есть идеи уже как реализовать. Со временем хочу набрать еще народу пару программистов и дизайнера, думаю работа будет быстрее тогда продвигаться smile

Да и вообще в принципе я понимаю что пока нечего пощупать сложно судить о чем-то, так просто захотелось похвастаться )))


Сообщение отредактировал Xakep - Пятница, 22 Февраля 2013, 19:05
FirstДата: Вторник, 26 Февраля 2013, 22:32 | Сообщение # 19
Уолтер Брайт
Сейчас нет на сайте
Xakep, на каком языке пишешь среду программирования? А так же хотел узнать, принцип работы языка: программа на твоем языке будет работать с файлом, в котором указано все процедуры и т.д. или как?

Пока языком не заинтересовал, но думаю поковыряю твоя среду для понятия языка. smile
XakepДата: Среда, 27 Февраля 2013, 04:55 | Сообщение # 20
めちゃくちゃちゃ
Сейчас нет на сайте
2First, среду разработки пишу на Lazarus, язык программирования на С++.
Цитата (First)
А так же хотел узнать, принцип работы языка: программа на твоем языке будет работать с файлом, в котором указано все процедуры и т.д. или как?

не совсем понял вопроса, с каким файлом? работа как и во всех языках, есть модули в них всякие процедуры и структуры, ну и через них работаешь.
Цитата (First)
Пока языком не заинтересовал

на данном этапе вряд ли можно кого-то заинтерисовать smile
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг