Image Characteristics Native PE image Distribute applications as stand-alone executables that use the native PE (Portable Image) format uses by Microsoft Windows. Native machine code No virtual machine overhead, maximum performance. Small executable size Executables start with as little as 50 kB and require only a 30 kB runtime DLL. Built-in resources Executable images can include runtime resources directly in the executable. Supported Output Formats DLL You can build standard DLLs using Smalltalk MT.. ActiveX components ActiveX servers. Smalltalk MT also lets you develop ActiveX client applications. COM servers COM servers. You can expose multiple components in a single DLL. OLE servers Build OLE servers, either as stand-alone executables or as in-process servers. Win32 Console Build character-mode (console) applications. NT Service Build Windows NT / XP service applications. Base Image Services Multithreading Supports:
Native Exception Handling The exception handling system is based on Win32 SEH, providing seamless integration with non-Smalltalk code. Native floating-point format Floating-point optimization can compile floating-point operations natively using the arithmetic coprocessor. Number crunching such as 3D computations come close to C++ performance in debug mode. DirectX 8 samples run at about the same speed as their C++ counterpart. Libraries ADO Active Data Objects allow you to access OLEDB data sources. ASP Active Server Pages. CMC Messaging Library for sending and receiving e-mail programmatically. COMMLIB Library for serial communications (COM port). Console Library for console applications. DirectX 10 Libraries, frameworks and samples for DirectX development. Finalization Weak collections and finalization. ISAPI ISAPI filters and extensions for Internet Information Server. MTS/COM+ Microsoft Transaction Server and COM+ support. ODBC Library for accessing SQL databases using ODBC. OLEDB Library for accessing OLEDB data sources. Simple MAPI Library for e-mail using the Simple MAPI interface. Sockets Library for Socket communications:
- Asynchronous sockets (WSA)
- Synchronous sockets
GDI+ Exposes GDI+ classes to Smalltalk code. GDI+ has many functional improvements over GDI. Enterprise Libraries COM Add-In Add-In framework for Microsoft Office and other Microsoft applications such as MapPoint. TreeList A combination of a TreeView and ListView - displays items hierarchically and in columns. GridView Tabular control that can display controls such as combo boxes in each cell. This control has been superseeded by the TreeList control HTTP Server Multithreaded, lightweight HTTP server. MMC MMC (Microsoft Management Console) framework to create MMC snap-ins. MS Agents Library for using Microsoft Agents. XML Parser and Writer Two parsers are available
- DOM parser
- SAX parser
SVG SVG viewer that displays SVG (Scalable Vector Graphics, ) files and can convert the output into a variety of image files, including JPEG and Windows Metafile. C++ Source Code Full C++ source code for GDI+, DirectX and GridView control.
Version 5.6 supports all Windows versions after and including Windows Vista. It includes foundation classes for DirectX 10 development and supports DirectX 10 / DirectX 11 development.
The class hierarchy allows you to develop Windows applications that support terminal connections, fast user switching and more. Libraries have been overhauled (ODBC, sockets). GDI+, Visual Source Safe Integration, and other features like .NET hosting are also supported.
Smalltalk MT includes advanced floating point optimizations, method in-lining, fine-grained garbage collection control. Smalltalk objects can have arbitrary sizes. The development image is resilient to development-time faults such as pointer corruptions and stack faults. Development tools such as the project consistency browser and an interface to set the priority of a method contribute to a richer development experience.
Structures and COM interfaces can now be declared using the standard C++ declaration, making it easy to integrate with C++ and .NET components. Just copy and paste the declaration into a class method of the structure or interface class, then click on the Generate menu item, and the Smalltalk class contains all the necessary code. Structures and interfaces declared this way are compatible with our upcoming 64-bit version.
Overall, version 5.6 is a prime environment for developing performance-critical applications and 3D graphics.
Garbage Collection addresses the problem of how to disable garbage collection activity during critical actions and perform necessary garbage collection when the application is in a non-critical state. For example, it is a bad idea to perform garbage collection while rendering a 3D scene or servicing a client request. The GC programming interface lets you suspend and resume garbage activity; and (most importantly) resuming triggers any latent garbage collection.
A typical application would be an HTTP Server, which creates garbage when constructing an HTTP response. In Smalltalk MT, garbage collection runs in the background so there is actually a chance that the garbage gets collected when the server is idle, waiting on input. However, there is no guarantee, and the probability of triggering a garbage cycle increases as more objects get allocated. On the other hand, suspending and resuming garbage collection guarantees that the critical code runs without delays, and also that necessary garbage cycles are performed after the critical code is executed. As long as the memory usage of a request is predictable, this method does not consume extra memory and may even diminish the memory footprint.
Smalltalk MT uses the internal .INLINE category to inline methods. Methods subject to inlining can be:
instance methods declared in the receiver class
instance methods declared in class referenced by an explicitly typed variable
class methods when the class is directly referenced
The benefits of inlining are threefold:
better performance (no message send)
inlined floating point operations: the compiler can apply optimizations to the merged method, resulting in much faster code
inlined API calls: if an inlined method contains API calls, literal parameters are generated as C parameters
The project <Debug Trace Handler> installs memory callbacks that work in conjunction with the debug runtime DLL. This DLL is a special build with debugging aids and assertions that allow you to detect memory corruptions and monitor allocations.
The project offers several features:
It is sometimes useful to determine how many and which objects get allocated. The Debug Trace Handler implements a callback that gets called after a block of memory has been allocated. A higher-level interface records all object creations that occur while executing a block. The collection of objects can then be inspected.
In the normal runtime DLL, an object corruption leads to process termination. With the debug DLL, and if the debug handler has been enabled, a callback first records the scan trace that leads to the fault, then repairs the object by replacing the corruption with nil.
For example, consider the following object corruption:
a := Array new: 4.
a _longAtOffset: 4 put: 0
The handler will record all references that lead to the corrupted instance before it stores nil at the offending slot, thereby repairing the object.
A stack repair option recovers from a stack overflow. As a technical side note: a stack overflow un-protects a guard page. If the next page is accessed a protection violation occurs and the process terminates (exception handlers use the stack and therefore no exception handler can handle the final protection violation). The stack repair option resets the stack to a known state, de-commits unneeded memory and restores the guard page.
The Enterprise Edition targets the professional developer.
- Additional samples and a How-to guide get you up to speed quickly.
- Specialized libraries (HTTP, ADO, DirectX, MMC, OLEDB, SVG, and more) cover a wide range of programming topics.
- Full source code for the following runtime DLLs: GDI+, DirectX, TreeList
- Supported beta versions. This program allows you to test new technology with the assurance that support issues are resolved in a timely manner.
The Enterprise Edition is ideal for the developer who needs access to pre-developed and tested frameworks for a specific business need.
Back to top
The Personal Edition is a low-cost alternative for personal and educational use. While the base product is identical to the Enterprise Edition, specialized libraries and advanced support are not included.
Back to top