Или так(что в общем то так же как и С++, но никто не жаловался, да и короче):
не, это в паскале так, в C++ так: int = (int) b; ну у меня в прицнипе как раз как в дельфи сейчас, просто возникли трудности, точнее некоторые моменты с указателями не удобно делать.
Добавлено (16.03.2014, 03:14) --------------------------------------------- как лучше сделать синтаксис для sizeof/offsetof и преобразования типов: 1 вариант:
Код
b : float; a : int = cast(int) b; sizeof(a); offsetof(b); alignof(a);
2 вариант:
Код
b : float; a : int = b.cast(int); a.size; b.size; a.align;
С- тот же низкий уровень, только с человеческим лицом.
я не просто так посоветовал асм, по собственному опыту знаю, как много может дать ассемблер по сравнению с Си. Она дает намного больше понимания по работе с указателями и памяти, в отличие от си в ассемблере как такового нету типов, там просто данные, что дает под другим углом взглянуть на все.
Сообщение отредактировал Xakep - Суббота, 15 Марта 2014, 08:42
Xakep, современные ОС уже давно как на ассемблере не пишут.
это понятное дело, но вряд ли кто захочет писать полноценную операционку, скорее для получения опыта и знаний как все устроенно на самом низком уровне, поэтому я и сказал что на ассемблере в таком случае лучше писать, потому-что знаний и понимания больше получишь.
А llvm позволяет провести такие манипуляции или самому придётся с нуля возиться с образами?
позволяет, там только не в ассемблер генерировать код нужно будет, а в LLVM IR, описание есть здесь: http://llvm.org/docs/LangRef.html а дальше можно либо подключить библиотеку llvm и в коде уже все манипуляции произвести, либо бинарники использовать.
а можно взглянуть на rtl типа include "sys.apc"; потому как что-то уж слишком хорошо))))) хотелось бы посмотреть оберки new (alloc malloc realloc) в общем кросплатформенность как обеспечивается.
менеджер памяти не писал, и думаю что не буду писать, возьму готовый какойнить, потому-что на эту тему пишут целые исследования проводят и научные работы пишут, пока что сделан через пул, позже выложу код. ) кроссплатформенность обеспечивается через макросы: $ifdef linux / darwin / win но если так интересно то вот все модули которые я пока что сделал, на данный момент пишу opengl.apc. sys.apc math.apc glfw3.apc string.apc
include "sys.apc"; include "math.apc"; include "glfw3.apc"; include "opengl.apc"; include "string.apc"; include "memory.apc"; // def main() glfwInit();
win : ^GLFWwindow = glfwCreateWindow (640, 480, "Hello World with OpenGL :)", nil, nil);
Если до этого мы использовали Raycasting Game Maker, использующий технологию отбрасывания лучей
как-то тупо звучит, и вообще почти любой 3д движок использует raycast для проверки столкновений. а по теме, интересный проект, удачи вам )
Добавлено (11.03.2014, 21:53) --------------------------------------------- кстати pre alpha footage очень понравился, хоть графика 2000х годов, зато все сделано со вкусом
Сообщение отредактировал Xakep - Вторник, 11 Марта 2014, 21:43
по синтаксису опирался в основном на lua и ruby, такой вот получился, для обратного цикла нужно указать шаг -1:
Код
for i : int = 10, 0, -1 do
endif не красиво и больше буковок ) я уже много кода написал на нем, и вроде читается все хорошо, может еще доработаю синтаксис ) а так спасибо за отзыв
ЦитатаAkyltist ()
PS: какие файлы на выходе по размеру.
2 кб пока что
Сообщение отредактировал Xakep - Вторник, 11 Марта 2014, 21:49
Зачем? все равно никто кроме автора использовать не будет )
поживем увидим ))
Добавлено (23.01.2014, 22:16) --------------------------------------------- Полностью переработал синтаксис языка: убрал ключевые слова procedure, function, constructor, destructor, заменил на одно ключевое слово def, переменные можно объявлять где угодно, а не в блоке var, так же убрал это ключевое слово, убрал присваивание := и заменил на =, +=, -=, --, ++ ... Нескольок примеров кода:
перемножение 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);
так же в будущем планирую написать хороший макропроцессор, пример макроса для развертки циклов:
Код
// macro unroll (depth : int) step : int = 1;
match ("for %i = %val, %to ?(, %step) do %body end;"); emit ("for %i = %val, %to, %step*%depth do");
for j = 0, depth do emit (replace(%body, %i, "%i+%j"));
emit ("end;"); end;
def main() unroll(4) for i = 0, 16 do Write('%d, ', i); end; end; end;
после перпроцессора сгенерирует код:
Код
def main() for i = 0, 16, 1*4 do Write('%d, ', i+0); Write('%d, ', i+1); Write('%d, ', i+2); Write('%d, ', i+3); end; end;
Добавлено (11.03.2014, 19:39) --------------------------------------------- почти доделал первую версию языка программирования ) через неделю-две выложу тестовую версию компилятор, надеюсь найдутся тестеры )
Сообщение отредактировал Xakep - Среда, 12 Марта 2014, 09:22
Но обосновать не хочешь. Дело твое. Я просто привел наглядный пример.
этот пример мог на самом современном железе запускаться, тут нужно самому щупать. Обоснования здесь есть: http://blenderartists.org/forum/showthread.php?216916-unity-versus-Blender-Game-Engine