4 Ağustos 2009 Salı

Compiler 911 0.2009.8.1


Compiler 911 is an interesting and complex application created to come in hand for all programmers. Optimizing, easy and clever, multi-target object pascal and assembler compiler, suitable absolutely for all kinds of programming tasks on x86 platform (even writing an own OS). Contains the set of source code analysis and refactoring tools. Has an easy and friendly user interface.Why do we need the new compiler?Global financial crisis, the world is trying to make away with wastefulness and to find optimal resource usage schemes (in the broad sense). So may be the idea of building an optimizing compiler, which would bring the program optimization to the new level, is the demanded one today. There were a lot of tries to build an optimizing compiler, and almost all modern compilers perform some optimizations. But are we satisfied with this optimization results? Could they be better? Soft-Universe company team thinks they could be much better. Computer wins the chess the Human. But could any Complier win a Human-Programmer the game of optimizing some program? Not, of course. No high level compiler can challenge a qualified assembler programmer in output program performance. How does a programmer write his applications? Firstly, he writes the source code in the way that the correct execution of the program can be reached and tested. And after that the optimization processes begins: algorithmic modifications, computer resources usage improvements, data structures optimizations etc. The programmer usually stops this process at some reasonable point, usually far away from assembler level optimizations. But anyway, the time spent by programmer for optimizations is still very much. Modern compilers on the modern computers could… yes, they could do it themselves, making a program designing process faster, easier and more reliable.Compiler911 is the Object Pascal/Assembler compiler with GUI interface suitable for solving wide range of programming tasks: from compiling own OS (simplest demo OS included) to writing win32 applications. 3 compile destination targets available: windows 32 bit PE executables, binary 32 or 16 bit mode files (boot sector for example), virtual compiling with no output (high level algorithms analyze purposes). Compiler911 can be used as assembler compiler, with few notes. Firstly, all procedures should be declared in the high level language (pascal) and the procedure’s bodies can be written on assembler. Secondly, no DD (DB, DW) instruction is available – all data structures must be described using high level language too. This is required for optimization purposes. Compiler911 analyses the logic of calculations and builds it’s own calculation algorithm. To make sure this logic is "understood" correctly, the procedure’s headers required (parameters, return values, calling convention. This gives the optimizer information about which register and memory addresses are input values and which are output values. All invaluable assignments and calculations are eliminated by optimizer. So there is no opportunity at this moment to return procedures value for example in some EFLAGS bit, because no standard calling convention (stdcall, register...) allows it. We are thinking about implementing user-defined calling conventions or about making compiler to choose optimal Input/Output by itself.With the few exceptions, Compiler911 doesn’t put any code into compiled project by itself, as other compilers do. Different project require different compiler abilities, such as strings, classes or dynamic memory allocation functions. if the programmer needs these features, he must define them in the project’s System Unit by implementing list of special objects. For example if a project uses classes, then the project’s System Unit should contain “TObject” named class (which is considered to be ancestor for all other classes) and “_ClassCreate” and “_ClassDestroy” procedures. If dynamic memory allocation routines New and Dispose are used, then the System Unit should contain “_GetMem” and “_FreeMem” procedures, and so on... This gives more flexibility and freedom to programmer.Optimizing, easy and clever, multi-target object pascal and assembler compiler.