igor писал(а):
По поводу отличий новой версии от старой, только внешние проявления при первом взгляде.
У меня установленная программа находится в версионированной файловой системе (Git) на случай, если я какие-то настройки испорчу. Так вот, я кое-что интересное разглядел при обновлении. Diff файла DEF/XDS/oberonRTS.def:
Код:
+<* IF NOT __GEN_C__ THEN *> -- GCInfo engine uses INT64
+ GCInfo = RECORD
+ -- total allocation/reclamation statistics of Oberon heap, in megabytes.
+ mbAllocated :CARDINAL;
+ mbReclaimed :CARDINAL;
+
+ -- total time spent in GC, in ms.
+ totalGCTime :CARDINAL;
+ END;
+<* END *> -- GCInfo engine uses INT64
VAR
nullModule: Module;
@@ -18,6 +32,9 @@ VAR
(* ------------------ Garbage Collector ------------------ *)
+PROCEDURE SetHeaplimit (newHeaplimit :CARDINAL);
+(* Set the heaplimit *)
+
PROCEDURE Collect;
(* Garbage Collector *)
@@ -31,11 +48,28 @@ PROCEDURE GetInfo(VAR objects, busymem: CARDINAL);
of allocated memory.
*)
-PROCEDURE gcAnchorTrace (on :BOOLEAN);
-(* enables/disables printing "heap weight" of global variables
- when garbage collecting
+PROCEDURE gcAnchorTrace (on :BOOLEAN; weightThreshold := 0 :CARDINAL);
+(* Enables/disables printing "heap weight" of all anchors (global variables,
+ stack and destructors) when garbage collecting.
+*)
+
+PROCEDURE gcHeapTrace (on :BOOLEAN; heapTracingThreshold := 0 :CARDINAL);
+(* Enables/disables printing of heap statistics (amount of live objects
+ of each type) when garbage collecting.
*)
+<* IF NOT __GEN_C__ THEN *> -- GCInfo engine uses INT64
+PROCEDURE getGCInfo (VAR gcInfo: GCInfo);
+(* Fills fields of GCInfo structure *)
+<* END *> -- GCInfo engine uses INT64
+
+
+PROCEDURE ReduceGCConservatism (obj: SYSTEM.ADDRESS);
+(* Reduces conservatism of GC with respect to the specified object.
+ All references to this object from the stack are ignored and not scanned,
+ so it is alive iff it is reachable from global variable or from another
+ alive object.
+*)
(* ----------------- Object finalization ----------------- *)
@@ -88,4 +122,8 @@ PROCEDURE IterCommands(mod: Module; session: SYSTEM.ADDRESS; iter: NameIterator)
PROCEDURE IterTypes(mod: Module; session: SYSTEM.ADDRESS; iter: NameIterator);
(* Iterates all types in the module *)
+(* -------------- Stack managerment ----------- *)
+
+PROCEDURE SetStackSize(newSize: CARDINAL): BOOLEAN;
+
END oberonRTS.
Другими словами, программа сама теперь может задать себе HeapSize, StackSize, запросить кое-какую информацию о работе GC и состоянии памяти, а также указать на некоторые объекты и сказать, что их можно удалить GC, если ссылки на них остались только в стеке.
igor писал(а):
Во-первых, консольный компилятор запросил для своей работы библиотеку libts.lib, что вобщем-то неудивительно (помним про TSPC).
Во-вторых, размер exe'шника одного из моих проектов (другие не смотрел) подскочил на 111KB. Видимо, груз "лишних" библиотек.
Лишний груз видеть бы не хотелось. Свои проекты пока не сравнивал.
igor писал(а):
Да, тут я должен пояснить, что не использую IDE. Из всего пакета XDS я использую только несколько файлов, только те что не обходимы для работы консольных xc.exe и xlink.exe (изредка ещё xlib.exe, и совсем уж никогда his.exe), плюс библиотеки для поддержки WinAPI. Исходники "строчу" в Notepad++.
Аналогично.
Кстати, в Windows.def тоже кое-что изменилось и добавилось:
Код:
@@ -5484,7 +5484,7 @@ CONST SEM_FAILCRITICALERRORS = SEM_SET {SEM__FAILCRITICALERRORS}; (* 0x0
SEM_NOALIGNMENTFAULTEXCEPT = SEM_SET {SEM__NOALIGNMENTFAULTEXCEPT}; (* 0x0004 *)
SEM_NOOPENFILEERRORBOX = SEM_SET {SEM__NOOPENFILEERRORBOX}; (* 0x8000 *)
-PROCEDURE SetErrorMode (uMode : SEM_SET);
+PROCEDURE SetErrorMode (uMode : SEM_SET) : SEM_SET;
PROCEDURE ReadProcessMemory (hProcess : HANDLE;
lpBaseAddress : LPCVOID;
@@ -8781,6 +8781,14 @@ PROCEDURE QueryPerformanceCounter (VAR PerformanceCount : LARGE_INTEGER) : BOO
PROCEDURE QueryPerformanceFrequency (VAR Frequency : LARGE_INTEGER) : BOOL;
(*
+** RtlVerifyVersionInfo() os product type values
+*)
+
+CONST VER_NT_WORKSTATION = 1;
+ VER_NT_DOMAIN_CONTROLLER = 2;
+ VER_NT_SERVER = 3;
+
+(*
** dwPlatformId defines:
*)
@@ -8816,6 +8824,44 @@ TYPE OSVERSIONINFOW = RECORD
POSVERSIONINFO = POSVERSIONINFOA;
<* END *>
+TYPE OSVERSIONINFOEXA = RECORD
+ dwOSVersionInfoSize : DWORD;
+ dwMajorVersion : DWORD;
+ dwMinorVersion : DWORD;
+ dwBuildNumber : DWORD;
+ dwPlatformId : VER_PLATFORM_TYPE;
+ szCSDVersion : ARRAY [0..127] OF CHAR; (* Maintenance string for PSS usage *)
+ wServicePackMajor : WORD;
+ wServicePackMinor : WORD;
+ wSuiteMask : WORD;
+ wProductType : BYTE;
+ wReserved : BYTE;
+ END;
+ POSVERSIONINFOEXA = POINTER TO OSVERSIONINFOEXA;
+
+TYPE OSVERSIONINFOEXW = RECORD
+ dwOSVersionInfoSize : DWORD;
+ dwMajorVersion : DWORD;
+ dwMinorVersion : DWORD;
+ dwBuildNumber : DWORD;
+ dwPlatformId : VER_PLATFORM_TYPE;
+ szCSDVersion : ARRAY [0..127] OF WCHAR; (* Maintenance string for PSS usage *)
+ wServicePackMajor : WORD;
+ wServicePackMinor : WORD;
+ wSuiteMask : WORD;
+ wProductType : BYTE;
+ wReserved : BYTE;
+ END;
+ POSVERSIONINFOEXW = POINTER TO OSVERSIONINFOEXW;
+
+<* IF DEFINED (UNICODE) THEN *>
+ TYPE OSVERSIONINFOEX = OSVERSIONINFOEXW;
+ POSVERSIONINFOEX = POSVERSIONINFOEXW;
+<* ELSE *>
+ TYPE OSVERSIONINFOEX = OSVERSIONINFOEXA;
+ POSVERSIONINFOEX = POSVERSIONINFOEXA;
+<* END *>
+
PROCEDURE GetVersionExA (VAR VersionInformation : OSVERSIONINFOA) : BOOL;
PROCEDURE GetVersionExW (VAR VersionInformation : OSVERSIONINFOW) : BOOL;
@@ -19190,7 +19236,7 @@ TYPE LOGFONTA = RECORD
lfUnderline : BOOL8;
lfStrikeOut : BOOL8;
lfCharSet : CHARSET_TYPE;
- lfOutputPrecision : OUT_PRECIS_ENUM;
+ lfOutPrecision : OUT_PRECIS_ENUM;
lfClipPrecision : CLIP_PRECIS_SET;
lfQuality : QUALITY_ENUM;
lfPitchAndFamily : PITCH_AND_FAMILY_SET;
@@ -27798,6 +27844,7 @@ CONST IDC_ARROW = SYSTEM.CAST (RESOURCESTR, VAL (ULONG, 32512));
IDC_SIZENS = SYSTEM.CAST (RESOURCESTR, VAL (ULONG, 32645));
IDC_SIZEALL = SYSTEM.CAST (RESOURCESTR, VAL (ULONG, 32646));
IDC_NO = SYSTEM.CAST (RESOURCESTR, VAL (ULONG, 32648));
+ IDC_HAND = SYSTEM.CAST (RESOURCESTR, VAL (ULONG, 32649));
IDC_APPSTARTING = SYSTEM.CAST (RESOURCESTR, VAL (ULONG, 32650));
IDC_HELP = SYSTEM.CAST (RESOURCESTR, VAL (ULONG, 32651));