> -- 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));
```
