The AneoC Programming Language

AneoC Demo AneoC compiling AneoEngine
===================================================================================================== AneoC is not simply C with different syntax. It is a systems programming language and self-contained compiler designed for native software and AneoEngine development. While AneoC retains the direct, low-level programming model that makes C useful, the language and its compiler are developed as one complete system. AneoC directly understands the machine code and binary formats it produces instead of relying on a large collection of separate development tools. The compiler can create native x86_64 Linux executables and ELF32 i386 relocatable objects, allowing the same language to be used for ordinary programs and freestanding operating system components. AneoC does not need an external assembler such as NASM or GCC as to process compiler-generated assembly because it encodes machine instructions internally. This gives the compiler direct control over the path from parsed source code to the resulting binary and removes an unnecessary tranformation between the language and the processor instructions that eventually execute. Freestanding development is a primary part of AneoC's design rather than a special compiler mode added for unusual projects. AneoC was developed alongside AneoEngine, meaning the compiler is built around requirements that come directly from a real operating system. It understands external functions, external global variables, symbols, strings, data layouts, and relocations required by AneoEngine components. The compiler can generate ELF32 i386 object files that are linked directly into the AneoEngine kernel without libc, language runtimes, or compiler startup objects. Traditional C compilers are capable of freestanding development, but they are general-purpose tools designed to support an enormous number of environments. AneoC can instead concentrate on the systems it is actually intended to build. When AneoEngine requires a compiler feature, that feature can be implemented through the entire language and compilation process, from parsing and semantic handling to instruction encoding, symbol generation, and ELF relocation output. AneoC is also significantly more lightweight than most mainstream compilers. General-purpose compilers contain support for enormous collections of architectures, language standards, compiler extensions, optimization systems, debugging formats, operating systems, ABIs, and platform-specific behavior. Much of this functionality is necessary for compilers intended to work almost everywhere, but it is unnecessary for a compiler with a focused set of targets. AneoC does not carry large amounts of unrelated target support because it is designed around the environments it actually builds software for. Its smaller and more focused compiler can perform native machine code generation, symbol handling, relocation generation, and ELF output without requiring a massive compiler framework or an external assembler. This keeps the compilation system lightweight while still providing the features required for real native software and AneoEngine development. AneoC's smaller size is not achieved by producing interpreted code, bytecode, or depending on a large runtime. It remains a native compiler that directly generates machine code for the target processor. AneoC's direct machine code generation is one of the largest differences between it and a typical C development toolchain. Many compilation systems pass generated assembly text from a compiler to a separate assembler, which must parse that text and recreate the machine-level representation of the program. AneoC already understands the operation being compiled, the values involved, the symbols being referenced, and the target architecture. It can therefore encode the required machine instructions directly and place them into the binary structures it generates. When a function call references an external symbol, AneoC can create the appropriate symbol and relocation information for the resulting ELF object. When a native executable is generated, the compiler can construct the required executable structures itself. The compiler maintains knowledge of the program throughout the compilation process instead of converting its internal representation into assembly source and giving the remaining work to another tool. Structures in AneoC are also implemented as actual compiler features rather than textual substitutions or simple syntax transformations. The compiler understands named and anonymous structures, structure variables, arrays of structures, pointers to structures, nested array members, whole-structure assignment, and member access through both the . and -> operators. AneoC calculates structure sizes, member offsets, and alignment as part of its type and layout handling. When a structure member is accessed, the compiler determines the structure type, locates the requested member, calculates its offset, and generates the machine operation required to access the correct data. This means structure behavior is understood across the parser, type system, and code generator. These features were implemented because AneoEngine uses structures extensively for systems such as the IDT, filesystem nodes, hardware state, and other low-level data where exact memory layout is important. The complete AneoC compilation process is controlled as one project. Its lexer, preprocessor, parser, type handling, structure layout system, machine code generator, symbol handling, relocation handling, and ELF generation are all parts of the same compiler. If an expression produces an incorrect instruction, the machine code generator can be inspected directly. If a structure member has the wrong address, its calculated layout and offset handling can be traced. If an external kernel function fails to link, the generated symbol and relocation entries can be examined. There is no inaccessible compiler stage hidden behind another compiler or assembler. This complete control makes AneoC easier to adapt to AneoEngine and allows the language to evolve based on actual programming requirements rather than attempting to maintain compatibility with every compiler, architecture, operating system, and historical language behavior. AneoC is intentionally targeted instead of universal. GCC and Clang support decades of C standards, compiler extensions, processor architectures, operating systems, ABIs, optimization systems, and compatibility requirements. That makes them extremely powerful general-purpose compilers, but it also increases their size and complexity because their designs must account for environments completely unrelated to AneoEngine. AneoC has a different purpose. Its compiler can focus on native x86 software and the systems it is actually used to develop. Features can be designed around known targets, known object formats, and real code written for AneoEngine. This smaller scope makes the compiler understandable as a complete program, keeps unnecessary complexity out of the toolchain, and gives its development a direct relationship with the software that depends on it. AneoC retains the fundamental properties that make C useful for systems programming. Programs use native machine code, explicit data representation, pointers, arrays, structures, functions, global data, and direct memory access without requiring a managed runtime. The language does not attempt to hide the computer behind a virtual machine or large automatic runtime system. The programmer can still work directly with memory and low-level system interfaces, while the compiler remains small enough to be understood and modified as part of the same development environment. AneoC's improvement is not based on making low-level programming less direct. Instead, it keeps the useful systems programming model of C while placing it inside a lightweight compiler designed specifically around native programs and operating system development. AneoC is therefore not an improved version of C merely because its source code looks different. Its main improvement is architectural. The language, machine code generator, object generation system, and supported development environments are designed together instead of existing as unrelated parts of a larger toolchain. AneoC can compile ordinary native software, generate freestanding AneoEngine objects, encode its own machine instructions, construct ELF output, and manage symbols and relocations through one lightweight, self-contained compiler. From source code to machine code, the compiler controls the complete compilation path. AneoC takes the low-level programming principles that made C useful and applies them to a smaller, directly controlled language and compiler built to develop real native software and AneoEngine. ===================================================================================================== - AneoEngine is a trademark of Rocco Jose Himel. - The AneoEngine Logo is a trademark of Rocco Jose Himel. - AneoC is a trademark of Rocco Jose Himel. - The x86_64 architecture is a trademark of Advanced Micro Devices, Inc. - Linux and Tux the Penguin (the Linux logo) are trademarks of Linus Torvalds. - The i386 architecture is a trademark of Intel Corporation. - The GNU Compiler Collection (GCC) and the GCC logo are trademarks of the Free Software Foundation, Inc.