Всем привет, в начале 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;
для инициализации массивов можно использовать вот такую шляпу: arr = [2, 4, 6]; или arr = [2, 4, ...]; или arr = [..., 4, 6]; там где стоит ... автоматичеcки подставит значения из массива, бывает удобно в некоторых случаях, так же и с векторами только вместо квадратных скобок нужно использовать угловатые. Из особенностей так же можно выделить возможность создавать перегрузку операторов. Пример перегрузки для массивов:
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. и попробовал написать простенькое приложение, результат можно увидеть на скриншоте:
Несколько примеров кода:
перемножение 2х матриц 4x4 с SIMD векторизацией:
Код
def mmul (const m1, m2: mat4f): mat4 inline // res : mat4; for i : int = 0, 3 do ci : <4 x float> = m1[i][0]*m2[0];
for j : int = 0, 3 do ci += m[i][j]*m2[j] end;
res[i] = ci; end;
return res; end;
перевод числа в строку:
Код
def int2str (val : int) : string x,v,l : int = 0; v = val; // if (val == 0) then return "0"; end; while (v != 0) do l++; v /= 10; end;
len : int = l; string res = new string(len+1);
while (l != 0) do x = val % 10; l--; res.data[l] = x+'0'; val /= 10; end;
data[len] = #0; return res; end;
декодирования UTF8:
Код
def decodeUTF8 (uc : wchar) : string res : string; // if (uc == 0x0040) then return ""; end; if (uc >= 0xD800) && (uc <= 0xDFFF) then return ""; end; // if (uc > 0x1) && (uc <= 0x007F) then res += Char(uc); elsif (uc > 0x007F) && (uc <= 0x07FF) then b1 : char = 0xC0 | (uc & 0x7C0) >> 6; b2 : char = 0x80 | (uc & 0x3F);
2AGENTX001, спасибо, вот не знаю выкладывать его потом в общий доступ или что дальше с ним делать, или дальше продолжать работать и написать среду разработки для языка
вот как раз этим сейчас заниматься буду, только скорее больше буду портировать OpenGL, SDL и прочее, WindowsAPI больше для написание приложений нужен, хотя в принципе его можно содрать с Delphi, dglOpenGL так заработал, с небольшими корректировками ) OpenGL уже есть, и сейчас еще пишу математическую библиотку
Сообщение отредактировал Xakep - Среда, 06 Февраля 2013, 17:05
Решил назвать язык прогарммирования vit - это древний славянский бог хранения информации ) недавно осенило как сделать возможность писать под мобильные платформы (Android, iOS), так что в скором времени может выйдет IDE с этим языком, выглядит сейчас IDE так: http://s001.radikal.ru/i196/1302/68/cf93b2b62454.png
IDE делаю на Lazarus.
Сообщение отредактировал Xakep - Вторник, 19 Февраля 2013, 21:11
Xakep, что-то сколько делаешь язык как бы, но так народ и не заинтересовал. Есть какая-нибудь фишка в нем, какая будет выделять его среди других наноязыков?
Xakep, что-то сколько делаешь язык как бы, но так народ и не заинтересовал. Есть какая-нибудь фишка в нем, какая будет выделять его среди других наноязыков?
язык я е\делаю только год, и как бы только пару недель назад написал о нем, и я уже писал некоторые особенности в первом посте, кстати из осбенностей забыл написать выравнивание переменных в таком виде: var A : Integer, Align(1024); что довольно удобно при оптимизациях, и не отолько динамические массивы и указатели можно выравнивать ) и интересно почему ты написал нано? язык программирования полноценный и в нем есть все что нужно для разработки нормальных приложений
Цитата
Как? Вдруг чего я могу андроидом потестить.
для мобильных платформ компилируется не нативный код, а байткод, который интерпретируется программой, которая уже будет написана специально на iOS или Android (получается что-то вроде виртуальной машын вроде Java и .NET), да собственно компиляция и так будет в байткод и для остальных платформ, но будет возможность и в нативный код, но это делать придется с ухищрениями с помощью GCC или MinGW (для Windows), для компиляции ассемблерного кода. Но это может и не понадобится, разве что совсем критично к производительности будет.
если сожешь потестить, будет очень здорово, свой телефон с Android сестре подарил, так что у меня только iPad есть для тестирования iOS
Цитата
И да в IDE крассссная кнопка - дебаг?
ага дебаг, еще одна штука над которой голову нужно сломать, но простой дебаг знаю как сделать, а вот полноценный не придумал, да и не разбирался пока с этой темо, нужно для начала дописать сам язык.
Сообщение отредактировал Xakep - Вторник, 19 Февраля 2013, 22:05
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
ну это все хорошо, но для начало нужно хоть что-то законченное сделать, а там уже буду думать обо всяких визульных редакторах и прочее 2Andrey_M, simple в дельфи вроде есть variant такой тип, но с ним можно операции разные проводить (сложение,вычитани), а там это не сложно реализуется и через указатели. со строками тоже самое, но там сложнее, если будешь преобразовывать массив в указатель, и присваивать строковую константу, то ты просто адресс данных сменишь. Ну и в моем яп можно через перегрузку операторов подобное сделать.
А про рандом как? Такие мелочи и делают язык удобнее. Просто неохота, скажем, если нужно число от 324 до 12364 вывести, высчитывать: 324+Random(разность этих двух чисел); Это бесит. Удобнее было бы Random(324..12364); ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
Xakep, вот сделай лучше нормальную перегрузку операторов...
ну вроде уже сделал, выше писал как польховаться, или еще что-то нужно доработать? да и думаю сейчас мне главное классы сделать, с ними у меня вообще проблемы, пришлось удалить 800 строк кода и заного писать все, а это именно подпрограммы и перегрузку операторов, ну в принципе главное, что поиск и проверку перегруженных функций сделал, а остальное не так уж и сложно сделать )
Цитата (vicu2010)
Яп это хорошо, но смысла в нём нет.
для меня есть, как минимум это громадный опыт, я раньше вообще не умел нормально разбирать текстовый файл и считывать с него данные. Да и во вторых очень удобная работа с SIMD инструкциями. IDE это само собой, но не все сразу, пока что по не многу все делаю, IDE на самом деле не так уж и сложно сделать. Редактор карт со временем тоже будет, все это делается для одного проекта, да и как я уже выше писал поддерживаются платформы: Win, Linux, Mac, iOS, Android. Последние два пока не сделал, но есть идеи уже как реализовать. Со временем хочу набрать еще народу пару программистов и дизайнера, думаю работа будет быстрее тогда продвигаться
Да и вообще в принципе я понимаю что пока нечего пощупать сложно судить о чем-то, так просто захотелось похвастаться )))
Сообщение отредактировал Xakep - Пятница, 22 Февраля 2013, 19:05
Xakep, на каком языке пишешь среду программирования? А так же хотел узнать, принцип работы языка: программа на твоем языке будет работать с файлом, в котором указано все процедуры и т.д. или как?
Пока языком не заинтересовал, но думаю поковыряю твоя среду для понятия языка.