Лекс Айрин писал(а):Ты пишешь компилятор?
Пишу. Пока еще не смог разобраться в AST.
Лекс Айрин писал(а):Никогда. Мне это просто не нужно.
Просто не умеешь с ними работать.
Лекс Айрин писал(а):Работа с указателями при ООП подходе это оксюморон. ООП как раз и задумывалось как одно из средств избежать использования ссылочных типов. Точнее, скрыть использование указателей где-то далеко в недрах компилятора.
ООП удобно когда кнопочке нужно кликнуть.. Хотя на деле это тот же record даными с подвязками кода, возможно статического..
но когда у тебя stream поток, и не один, когда нужно за одну секунду обработать тонны информации - простое копирование - может дать просадку. Проще передать указатьеь где данные лежат. Приходится в fpc уходить на уровень, на котором почему то компилятор допускает промахи.
кстати прощу проверить функцию на нахождения определителя матрицы 4x4
Код: Выделить всё
function getDeterminant4x4f(x: PGMatrix4x4f): Single;
begin
result:=((x^[0,0]*((x^[1,1]*x^[2,2]*x^[3,3])+(x^[1,2]*x^[2,3]*x^[3,1])+(x^[2,1]*x^[3,2]*x^[1,3])-
(x^[3,1]*x^[2,2]*x^[1,3])-(x^[3,2]*x^[2,3]*x^[1,1])-(x^[1,2]*x^[2,1]*x^[3,3])))
-(x^[0,1]*((x^[1,0]*x^[2,2]*x^[3,3])+(x^[1,2]*x^[2,3]*x^[3,0])+(x^[2,0]*x^[3,2]*x^[1,3])-
(x^[3,0]*x^[2,2]*x^[1,3])-(x^[3,2]*x^[2,3]*x^[1,0])-(x^[2,0]*x^[1,2]*x^[3,3])))
+(x^[0,2]*((x^[1,0]*x^[2,1]*x^[3,3])+(x^[1,1]*x^[2,3]*x^[3,0])+(x^[2,0]*x^[3,1]*x^[1,3])-
(x^[3,0]*x^[2,1]*x^[1,3])-(x^[3,1]*x^[2,3]*x^[1,0])-(x^[2,0]*x^[1,1]*x^[3,3])))
-(x^[0,3]*((x^[1,0]*x^[2,1]*x^[3,2])+(x^[1,1]*x^[2,2]*x^[3,0])+(x^[2,0]*x^[3,1]*x^[1,2])-
(x^[3,0]*x^[2,1]*x^[1,2])-(x^[3,1]*x^[2,2]*x^[1,0])-(x^[2,0]*x^[1,1]*x^[3,2]))));
end;
че то я запутался.
Добавлено спустя 11 минут 56 секунд:zub писал(а):ндааа
вот думаю так написать
function getDeterminant4x4f(x: PGMatrix4x4f): Single;
или так
procedure getDeterminant4x4f(result:PSingle;x: PGMatrix4x4f);
если значение уйдет в стек - хорошо.. а есть в локальную переменную, то быть беде.