0.8.98
Добавлена поддержка полей-метаклассов.
В тестовом примере демонстрируется простейшая фабрика классов. При чтении в "старой версии программы" неизвестный метакласс успешно приводится к метаклассу известного предка.
			
		Модератор: Модераторы



 Любой оптимизированный скриптовый язык сможет нарезать круги вокруг Паскаля, если я продолжу писать подобный говнокод
  Любой оптимизированный скриптовый язык сможет нарезать круги вокруг Паскаля, если я продолжу писать подобный говнокод   
  
  
  Постараюсь заодно дожать сборщик мусора и сделать вменяемую поддержку многопоточности. В смысле, у каждого потока будет персональный набор пулов памяти. Не столько для избежания лишней блокировки, сколько чтобы каждый объект знал, какому потоку он принадлежит. Чтобы можно было, например, сохранять часть дерева в файл, пока другие части продолжают обрабатываться в других потоках (чтобы, например, поймать случай непредусмотренного пересечения этих ветвей дерева, и красиво упасть).
  Постараюсь заодно дожать сборщик мусора и сделать вменяемую поддержку многопоточности. В смысле, у каждого потока будет персональный набор пулов памяти. Не столько для избежания лишней блокировки, сколько чтобы каждый объект знал, какому потоку он принадлежит. Чтобы можно было, например, сохранять часть дерева в файл, пока другие части продолжают обрабатываться в других потоках (чтобы, например, поймать случай непредусмотренного пересечения этих ветвей дерева, и красиво упасть).  
 FPSы при этом держатся на стабильных 30, и крутится анимация "ждите, грузюсь".
 FPSы при этом держатся на стабильных 30, и крутится анимация "ждите, грузюсь".
 Ведь сплошные улучшения.
  Ведь сплошные улучшения. 

 Подстерегу в тёмной подворотне, и замордую ржавым, тупым тапочком!
  Подстерегу в тёмной подворотне, и замордую ржавым, тупым тапочком!   
  
  
  
  
  
 procedure ReadFromBuffer(var v; size: longint); inline;
var a: longint;
begin
  if BufferHigh < 0 then begin
    if size >= CpsBufferSize then begin
      {$ifdef bench_streaming}{$include un_bottleneck_begin}{$endif}
      CpsStream.Read(v, size);
      {$ifdef bench_streaming}{$include un_bottleneck_end}{$endif}
      Exit;
    end;
    FillBuffer;
  end;
  if BufferPos + size > BufferHigh + 1 then begin
    MOVE(CpsBuffer[BufferPos], pointer(@v)^, BufferHigh + 1 - BufferPos);
    if (size - (BufferHigh + 1 - BufferPos)) > CpsBufferSize then begin
      {$ifdef bench_streaming}{$include un_bottleneck_begin}{$endif}
      CpsStream.Read((pointer(@v) + BufferHigh + 1 - BufferPos)^, size - (BufferHigh + 1 - BufferPos));
      {$ifdef bench_streaming}{$include un_bottleneck_end}{$endif}
      BufferPos:= 0;
      BufferHigh:= -1;
      Exit;
    end;
    a:= BufferHigh + 1 - BufferPos;
    FillBuffer;
    MOVE(CpsBuffer[0], (pointer(@v) + a)^, size - a);
    BufferPos:= size - a;
  end
  else begin
    MOVE(CpsBuffer[BufferPos], v, size);
    BufferPos+= size;
  end;
end;  
 
 



Сейчас этот форум просматривают: Google [Bot] и гости: 1