Fact-checked by Grok 2 weeks ago

Object Pascal

Object Pascal is an object-oriented extension of the Pascal programming language, incorporating support for classes, methods, inheritance, and other paradigms to enable structured and modular software development. Originally developed in the early 1980s at Apple Computer by Larry Tesler in collaboration with Niklaus Wirth, it began as Clascal for the Lisa Workshop system and evolved into Macintosh Pascal, marking one of the first implementations of object-oriented features in a Pascal dialect. In the late 1980s, integrated Object Pascal elements into at , enhancing its capabilities for and laying the groundwork for professional development tools. 's 1995 release of popularized Object Pascal as a () language, featuring visual design tools and cross-platform support through native compilers for Windows, macOS, , iOS, and . Key features include strong static typing inherited from Pascal, along with advanced constructs like properties, interfaces, generics, and anonymous methods, which facilitate robust, type-safe code for enterprise and desktop applications. Open-source implementations such as , started in 1993, extend Object Pascal compatibility across multiple platforms and architectures, supporting modes that align with syntax for portability. As of 2025, Object Pascal remains actively maintained, with Embarcadero's RAD Studio providing the latest enhancements in versions like Delphi 13 Florence, emphasizing modern language constructs for high-performance software.

History

Origins in Standard Pascal

Object Pascal traces its roots to Standard Pascal, a programming language designed by at the Swiss Federal Institute of Technology () in 1970 as a tool for teaching principles. Wirth aimed to create a small, efficient language that encouraged clear, readable code while addressing limitations in earlier languages like , with the first becoming operational in early 1970 and the formal definition published shortly thereafter. Standard Pascal emphasized through key features such as strong static typing, which enforced type declarations for variables and prevented implicit conversions to reduce errors; block structure, allowing nested scopes for procedures and functions; and support for modular code organization via separate procedures and functions without built-in support for object-oriented paradigms like classes or . These elements promoted disciplined programming practices, including the use of control structures like and while-do loops, but the language remained procedural and lacked direct mechanisms for abstraction beyond and pointers. An early extension that advanced Pascal's portability and modularity was , developed at the , starting in late 1974 and first released in 1978 under the direction of Professor Kenneth Bowles. This implementation introduced a p-code interpreter, compiling Pascal source to an intermediate pseudo-code that could run on a , enabling the system to operate across diverse hardware like the and without native recompilation. also incorporated enhanced modular concepts, such as improved file handling and separate compilation units, laying groundwork for more flexible software environments while remaining faithful to Standard Pascal's core syntax. The transition toward object-oriented ideas in the late 1970s and 1980s built on these foundations, with Wirth's , specified in 1978 at , serving as a key precursor to Object Pascal. extended Pascal by introducing modules—self-contained units that encapsulated definitions and implementations for better and separate compilation—but offered only limited object-oriented features, such as procedure types and low-level concurrency via coroutines, without full or polymorphism. This design emphasized modular system construction for larger programs, influencing subsequent efforts to integrate true object-oriented capabilities into Pascal derivatives.

Apple's Object Extensions

Apple Pascal, introduced in the early 1980s, served as Apple's implementation of tailored for the Macintosh platform, building on the p-System architecture originally developed at the . This version extended the procedural foundations of Standard Pascal with enhancements for the Macintosh's and resource management, enabling developers to interface directly with the Macintosh for event handling and window management. In 1983, Apple developed Clascal as an object-oriented extension to Lisa Pascal, which itself derived from and was used on the computer. Clascal introduced key object-oriented features such as class declarations, methods, and single , allowing programmers to define object types with encapsulated data and behaviors. These additions were influenced by Smalltalk and consulted with Pascal's creator, , marking an early effort to blend procedural and object-oriented paradigms within Pascal's syntax. Clascal's innovations included object types that could inherit from parent classes, virtual methods for runtime polymorphism, and seamless integration with the Macintosh through object wrappers for system resources like menus and dialogs. This facilitated rapid development of applications by treating elements as inheritable objects, reducing and promoting . For instance, developers could subclass a base window object to customize behavior without directly manipulating low-level calls. By 1986, Apple refined these concepts into Object Pascal, documented in the MPW Pascal Reference, which became the primary language for the MacApp application framework. Object Pascal expanded Clascal's features with improved , dynamic binding, and support for the (MPW) environment, enabling the creation of large-scale, maintainable applications through MacApp's . This version emphasized virtual methods and hierarchies that mirrored the Macintosh's event-driven model, powering early Macintosh until the late 1980s. Apple's adoption of Object Pascal waned in the early 1990s as the company shifted toward C++ for systems programming, particularly with the release of in 1991 and MacApp 3.0, which transitioned to C++ to support broader performance needs and emerging standards. This decline reflected evolving industry trends toward multi-paradigm languages, though Object Pascal's foundational contributions influenced subsequent Pascal dialects.

Borland's Commercialization

Borland International introduced Turbo Pascal in November 1983 as an integrated development environment (IDE) and compiler for the Pascal programming language, targeting MS-DOS systems and emphasizing rapid compilation and ease of use. This product quickly gained popularity among developers due to its affordability and performance, shipping initially on November 20, 1983, via mail-order advertisements in magazines like Byte. Turbo Pascal's success laid the foundation for Borland's dominance in the Pascal ecosystem, evolving from a basic compiler to a full-featured toolset that supported modular programming through units. Initial support for (OOP) arrived in 5.5, released on May 2, 1989, which extended the language with object types that combined data fields and procedures, enabling encapsulation and basic polymorphism through pointers to dynamic objects. These features drew inspiration from Apple's earlier Object Pascal extensions but adapted them for broader commercial use, allowing static and dynamic object allocation while maintaining with standard Pascal. Turbo Pascal 7.0, released in 1992, marked a significant evolution toward what became known as by enhancing capabilities with full , virtual and dynamic methods for runtime polymorphism, and constructors/destructors for object lifecycle management. Object types in this version supported transitive (e.g., via syntax like TPoint = object(TLocation)), late binding through virtual method tables (VMTs), and the inherited keyword for , forming a robust foundation for object-based programming without yet introducing reference-based classes. These additions positioned as a professional tool, with also offering a higher-end Borland Pascal variant oriented toward enterprise development. In 1995, Borland launched Delphi 1 on February 14, revolutionizing Object Pascal commercialization by introducing a visual RAD (rapid application development) IDE for 16-bit Windows 3.1, tightly integrated with the Visual Component Library (VCL) framework. Delphi extended the language with classes as reference types (contrasting TP7's value-based objects), read/write properties for controlled data access, and visual form designers that enabled drag-and-drop component placement, significantly accelerating Windows application development. The VCL provided reusable components for UI elements like forms and buttons, leveraging Object Pascal's type safety and OOP features to streamline database connectivity via tools like the Borland Database Engine (BDE). Borland underwent several corporate transformations that impacted Object Pascal's trajectory. In 1999, amid a strategic shift toward , the company rebranded as Inprise Corporation to reflect its focus on and services. By 2006, facing financial pressures, Borland spun off its developer tools division—including —into a called CodeGear on November 14, establishing it as an independent entity responsible for language and IDE evolution. In 2008, acquired CodeGear for $23 million, retaining the division and continuing Delphi's development under its umbrella, which ensured ongoing investment in Object Pascal tools. Key releases under these entities advanced Object Pascal's capabilities for modern platforms. introduced comprehensive support across the (), , and VCL, enabling native handling of international characters and strings via the UnicodeString type, which became the default for text operations. The XE series, starting with XE in 2010 and extending through XE7 in 2014, added cross-platform mobile development, including support for and via the (FMX) framework, with new components for touch interfaces, clients, and push notifications to target smartphones and tablets. These enhancements solidified Object Pascal's role in commercial software production, bridging desktop and mobile paradigms.

Open-Source and Modern Eras

The open-source revival of Object Pascal began in the early with the launch of the Compiler (FPC) project in 1993, initiated by Florian Klämpfl as a multi-platform alternative to proprietary Pascal implementations. FPC is a free and open-source that supports various dialects of Pascal and Object Pascal, targeting numerous architectures including x86, , and PowerPC, as well as operating systems such as Windows, , macOS, and embedded systems. Released under the GPL and LGPL licenses, it emphasizes compatibility with , , and ISO standards, enabling developers to create cross-platform applications without . Building on FPC, the Lazarus emerged in 1999 as a free, open-source counterpart to Borland's , providing tools with visual form designers and component libraries. Lazarus leverages FPC as its backend compiler, supporting cross-platform applications through the LCL (Lazarus Component Library), which mimics the of while adapting to native widgets on different platforms. This project has fostered a vibrant community, contributing to ongoing enhancements in language support and tooling. In parallel, commercial evolution continued under , which acquired from in 2008 and released modern versions emphasizing multi-platform capabilities. , launched in May 2020, introduced improved code insights, unified memory management, and enhanced support for high-DPI displays across Windows, macOS, , and targets. Subsequent updates included in September 2021, adding Linux server-side development support via the Community Edition and expanded Android deployment options, including compatibility with and later; in November 2023, which brought support for , , , and LLVM-based compilation for ; and in September 2025, featuring a 64-bit , the in Object Pascal, and further performance optimizations to address enterprise and mobile needs in the . These releases integrate Object Pascal with contemporary frameworks, facilitating web and mobile integration through FireUI and components. Other notable projects have extended Object Pascal for diverse targets, such as Oxygene, developed by RemObjects Software starting in 2005 as a modern dialect for cross-compilation to .NET, , and other platforms. Originally named , Oxygene integrates with and supports full .NET Framework features, later expanding to Java (via in 2011) and enabling seamless porting of Object Pascal code to non-native environments without runtime dependencies. Complementing this, Smart Mobile Studio, introduced around 2010, offers Smart Pascal—a Delphi-compatible dialect that compiles to and for web applications, bridging Object Pascal to browser-based development. Community-driven standardization efforts have also advanced in the modern era, with proposals for extending ISO Pascal standards to incorporate full object-oriented features, building on the 1990 Extended Pascal (ISO 10206) specification. , for instance, implements these extensions, including modules, generics, and , while ongoing discussions in developer forums and ISO working groups aim to unify dialects for better . In the 2020s, these efforts have supported growing with web technologies via transpilers and mobile platforms through native API bindings in tools like and .

Language Features

Core Syntax and Types

Object Pascal programs follow a structured format beginning with an optional program declaration, followed by a main block enclosed in begin and end keywords, with statements separated by semicolons. The basic syntax is program ProgramName; begin Statement1; Statement2; ... end., where the program name is optional in some implementations but recommended for clarity. This structure inherits from but supports extensions for modern use. Semicolons serve as terminators rather than separators in some contexts, allowing optional omission before end or else. As of Delphi 13 (2025), Object Pascal includes a ternary conditional operator for concise expressions: Condition if TrueExpr else FalseExpr;, which evaluates to TrueExpr if Condition is true, otherwise FalseExpr. This matches the semantics of the C ternary operator and can be used in assignments or as part of larger expressions. Data types in Object Pascal are strongly typed, requiring explicit declarations for variables. Integer types include Integer, a signed 32-bit type with range -2,147,483,648 to 2,147,483,647 on most platforms, and Int64, a signed 64-bit type ranging from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807. Real types encompass Real, an alias for platform-dependent floating-point (often 32-bit single precision), and Double, a 64-bit double-precision type with approximately 15 decimal digits of precision. Strings are handled via String, which in modern implementations like Delphi is a managed Unicode string type with dynamic length up to 2 GB, while Boolean is an ordinal type with values True (1) and False (0). Variable declarations use the syntax var VariableName: Type;, ensuring type safety at compile time. Control flow constructs provide procedural logic. Conditional statements use if Condition then Statement else Statement;, where Condition evaluates to , supporting nested and compound statements. As of Delphi 13 (2025), new operators is not and not in are available for negated type and set membership checks, enhancing expressiveness in conditions. The case statement selects based on an ordinal expression: case Expression of Value1: Statements; Value2: Statements; ... else Statements; end;, allowing multiple values per case with commas. As of Delphi 13 (2025), string types are supported as case selectors in , expanding applicability beyond ordinals. Loops include for Variable := Initial to Final do Statement; for ascending (or downto for descending), while Condition do Statement; for pre-tested loops, and repeat Statement until Condition; for post-tested loops that execute at least once. These structures enforce principles without reliance. Procedures and functions encapsulate reusable code blocks. A procedure is declared as procedure ProcedureName(Parameters); begin Statements; end;, performing actions without return value, while a function uses function FunctionName(Parameters): ReturnType; begin Statements; Result := Value; end;, requiring a Result assignment for the return. As of Delphi 13 (2025), the noreturn directive can be applied to procedures to indicate they do not return, aiding compiler optimizations and analysis. Parameters support modes: value parameters pass by copy (Param: Type), var for pass-by-reference modification, const for read-only efficiency, and out for output-only initialization. Overloading allows multiple routines with the same name but differing parameter types or counts, resolved at compile time for code reuse. Arrays and enable composite handling. Static are declared as var Arr: array[Low..High] of ElementType;, with fixed bounds like array[1..10] of [Integer](/page/Integer);, while dynamic use array of ElementType, resized at via SetLength(Arr, Size);. group heterogeneous fields: type RecType = [record](/page/Record) Field1: Type1; Field2: Type2; end; var R: RecType;, accessed as R.Field1. Packed , declared with the packed keyword (packed [record](/page/Record) ... end;), minimize memory by aligning fields tightly, useful for interfacing with or where each field occupies exactly its size without . These types support nested structures for complex modeling.

Object-Oriented Programming

Object Pascal supports through classes, which encapsulate data and behavior, enabling , polymorphism, and encapsulation. Classes are reference types that inherit from a root class, typically TObject, providing foundational methods like and destruction. This extends the procedural of Pascal by allowing developers to model real-world entities with structured hierarchies and dynamic behavior. Classes in Object Pascal are declared using the class keyword within a type declaration, specifying visibility sections for fields and methods to control access. Fields, which store data, are declared with visibility modifiers such as private, protected, public, or published, followed by the field name and type; for example, private FValue: Integer;. Methods are procedures or functions defined similarly, with parameters and return types as needed; public procedure Process; or function Calculate: Real;. Constructors initialize instances and are declared as constructor Create(AParam: Type); virtual;, often calling inherited constructors to handle ancestor fields. Destructors clean up resources and follow the syntax destructor Destroy; override;, typically invoked automatically via the Free method on TObject. As of Delphi 13 (2025), the NameOf intrinsic function provides the compile-time name of identifiers like properties or methods as strings, useful for reflection and debugging. Inheritance allows a derived to extend an , reusing and modifying its members while adding new ones. The syntax specifies the in parentheses after the keyword: type TDerived = (TAncestor). Derived classes inherit all non-private members and can override or dynamic methods using the override directive to customize , such as redefining a Process; in the child . This promotes and without duplicating declarations. To simulate , Object Pascal uses , which define contracts of methods and properties without implementation. An is declared as type IMyInterface = (IInterface) ['{GUID}'] DoAction; end;, inheriting from IInterface for and including a globally for compatibility, such as with . implement by listing them after the ancestor , using a comma: TMyClass = (TInterfacedObject, IMyInterface), and must provide concrete implementations for all members. This enables a single to conform to multiple , achieving polymorphism across unrelated hierarchies. Properties provide controlled access to class fields, enhancing encapsulation by hiding internal storage while exposing getter and setter logic. Declared in the public section, the basic syntax is property Name: Type read Getter write Setter;, where Getter is a field or parameterless method returning the type, and Setter is a procedure accepting a value of that type; for instance, property Value: Integer read FValue write SetValue;. Indexed properties extend this for array-like access: property Items[Index: Integer]: Type read GetItem write SetItem;, allowing indexed reads and writes via methods that take the index parameter. This mechanism supports read-only, write-only, or default properties, abstracting data manipulation without direct field exposure. Polymorphism in Object Pascal is achieved through and methods, enabling dynamic where the method invoked depends on the object's actual type at rather than its declared type. Methods marked ; support overriding in descendants, with the override; directive ensuring correct ; methods, declared as ; ;, require implementation in non- descendants and cannot be called directly in the declaring . Dynamic methods, using the dynamic; directive, offer similar dispatch but optimize for scenarios with infrequent overrides by reducing vtable size. directives like $IFDEF can conditionally enable features, but core polymorphism relies on these directives for flexible, type-safe behavior.

Units and Modules

In Object Pascal, units serve as the primary mechanism for modularizing , enabling reusability, organization, and namespacing across programs and libraries. A is a self-contained source file that encapsulates declarations and implementations, allowing developers to separate interfaces from details while promoting sharing without tight . This contrasts with standard Pascal's simpler files, where all was typically contained in a single file lacking built-in ; Object Pascal's units extend this by supporting advanced features like dynamic linking and object-oriented constructs within modular boundaries. The structure of a unit begins with a declaration using the unit keyword followed by the unit name, such as unit MyUnit;. This is followed by an optional interface section, which defines the public visible to other units or programs, including types, variables, constants, and procedure/function declarations. For example:
unit MyUnit;

interface

type
  TMyType = [class](/page/Class)
    procedure DoSomething;
  end;

var
  MyVar: [Integer](/page/Integer);
The implementation section then provides the private details, including the bodies of procedures and functions declared in the interface, as well as any internal-only declarations like local types or helper routines. This separation ensures that changes to implementation details do not affect dependent code, enforcing . Visibility is strictly controlled: elements in the interface are accessible externally via the unit name (e.g., MyUnit.MyVar), while implementation elements remain confined to the unit itself. Units may include an optional uses clause to import dependencies, listed after the unit or program declaration and separated by commas, such as uses SysUtils, Classes;. The uses clause can appear in both the interface and implementation sections; interface-level imports expose their identifiers to clients of the unit, while implementation-level imports keep dependencies private. This allows for selective namespacing, reducing namespace pollution and circular dependencies in large projects. To resolve naming conflicts, qualified names like SysUtils.DateTimeToStr can be used. Additionally, units support initialization and finalization sections at the end of the implementation, executed automatically when the unit is loaded or unloaded, respectively. The initialization runs code for setup tasks, such as initializing global variables or registering components, in the order of unit dependencies at program startup. The finalization handles cleanup, like freeing resources, and executes in reverse order upon shutdown or unit unloading; a unit requires an initialization section to include finalization. For instance:
implementation

initialization
  MyVar := 0;  // Setup code

finalization
  // Cleanup code
This ensures deterministic resource management without manual intervention in the main program. For larger-scale modularity, particularly in Delphi implementations, packages provide runtime-loadable modules that group multiple units into deployable binaries (e.g., .bpl files on Windows). Declared in .dpk source files using the package keyword, they facilitate component libraries, plugins, and distributed development by allowing dynamic loading and shared code across applications, extending unit-based modularity to support DLLs and shared libraries. Unlike standard Pascal's static program compilation, this enables Object Pascal to build extensible systems with on-demand loading, reducing memory footprint in enterprise applications.

Exception Handling and RTTI

Object Pascal provides robust exception handling mechanisms to manage runtime errors gracefully, allowing programs to detect, report, and recover from issues without abrupt termination. Exceptions are objects derived from the base Exception class, which encapsulates error details such as a descriptive message and help context. This approach integrates seamlessly with the language's object-oriented features, enabling structured error propagation through the call stack. The core syntax for exception handling revolves around protected blocks using try-except and try-finally constructs. In a try-except block, code within the try section executes, and if an exception occurs, control transfers to the except section for handling; an optional else clause runs if no exception is raised. The try-finally block ensures that cleanup code in the finally section always executes, regardless of exceptions, which is crucial for like freeing or closing files. Exceptions are raised using the raise statement, typically by instantiating an exception and passing a message, such as raise EMyException.Create('Error description'). Custom exceptions are defined by inheriting from the Exception , as detailed in the features. Object Pascal includes several built-in exception classes for common runtime errors, such as EInOutError for input/output failures and EDivByZero for division-by-zero operations. These are automatically raised by the runtime system in response to detectable errors, like arithmetic overflows or invalid file accesses. Developers can extend this by creating specialized subclasses, ensuring type-safe catching via on E: EClassName do clauses in except blocks. In Free Pascal implementations, exceptions must be explicitly enabled via compiler modes like ObjFPC or Delphi, as they are disabled by default to optimize performance. Runtime Type Information (RTTI) in Object Pascal enables programs to inspect and manipulate type at , supporting advanced features like dynamic invocation and . RTTI generation is controlled by directives: the legacy {$M+} enables it for es and their published members, while the modern {$RTTI EXPLICIT METHODS(...)} or {$RTTI ALL} provides finer control, including for fields, , and methods. By default, RTTI is minimal to reduce executable size, but enabling it for a or its ancestors automatically includes type data for published , which are accessible at design time in frameworks like the (VCL). Access to RTTI is facilitated through units like TypInfo and the extended System.Rtti namespace, where functions such as GetTypeData(TypeInfo) retrieve detailed type descriptors, including ancestry, offsets, and signatures. Dynamic registration occurs via procedures like RegisterClass in the Classes unit, allowing runtime instantiation of registered types by name, which is essential for loading components from streams. Common applications include , where RTTI drives the persistence of objects to files or streams in VCL applications, and , enabling tools like the Object to display and edit published properties during development. In , similar RTTI capabilities support enumeration-to-string conversions and basic type queries via TypInfo. Since Delphi 2009, Object Pascal's generics have integrated with enhanced RTTI, allowing type-safe collections and operations on types through the System.Generics.Collections unit. This enables runtime on instances, such as querying type constraints or invoking methods dynamically, while maintaining compile-time safety for parameterized types like TList<T>. The System.Rtti unit provides invocable types and attributes that extend to generics, facilitating frameworks for and data binding without sacrificing performance. As of Delphi 13 (2025), additional constraints for types have been introduced, such as support for more specific type requirements, improving flexibility and safety in .

Implementations

Compilers

The Free Pascal Compiler (FPC) is an open-source, multi-platform compiler that supports Object Pascal across a wide range of operating systems, including Windows, , macOS, and various embedded systems. It implements dialects compatible with ISO Pascal standards, as well as extensions from (TP) and , enabling the compilation of legacy and modern codebases. The latest stable release, version 3.2.2 from May 2021, includes an backend for improved code generation and optimization on supported targets. FPC's flexibility is enhanced by compiler modes such as {$MODE [DELPHI](/page/Delphi)} for Delphi dialect compatibility, which supports a wide range of Delphi features, including classes, interfaces, and constructs from versions up to 2009 and later, and {$MODE TP} for compatibility, allowing direct compilation of older procedural code. The Embarcadero , part of the proprietary suite, is optimized for high-performance native code generation targeting Windows, , , macOS, and . It employs modern Object Pascal features, including generics, anonymous methods, and for in recent versions like , which enhances safety on mobile platforms without manual garbage collection. integrates advanced optimizations, such as 64-bit with large memory addressing in its command-line variants (dcc32 and dcc64), and supports cross-compilation for multi-device deployment. Oxygene, formerly known as Smart Pascal and developed by RemObjects Software, is a cross-platform that targets modern ecosystems including .NET, , , and native platforms via . It extends Object Pascal with contemporary language constructs while maintaining compatibility with syntax, allowing developers to compile the same codebase to web, desktop, and mobile environments. The latest stable release, version 12.0.0.3035 from November 2025, includes support for locking expressions and mapped constructors to facilitate integration with platform-specific APIs. Legacy compilers include , which introduced object-oriented extensions in version 5.5 (1989) and reached version 7.0 in 1992, pivotal to Object Pascal's evolution, primarily for and early Windows environments. Borland's , released in 2000, with version 3 in 2002, and discontinued in 2005, was an early attempt at a Linux-native Object Pascal based on , supporting for graphical applications but limited by platform-specific challenges.

Interpreters and Transpilers

Object Pascal interpreters enable dynamic execution of code subsets at , facilitating scripting and interactive without full . These tools typically support a of the language compatible with or environments, allowing integration into host applications for tasks like automation or extensibility. One prominent interpreter is PascalScript, a free engine developed by RemObjects Software that embeds most Object Pascal constructs within or projects for evaluation. It compiles scripts to for efficient interpretation, supporting features like procedures, classes, and exceptions, though it omits advanced elements such as certain generics or inline to maintain simplicity and performance in embedded scenarios. DWScript, originally created by Matthias Ackermann and Hannes Danzl in 2000, serves as another object-oriented scripting engine based on syntax with extensions from and Oxygene. It processes scripts through and tokenization to generate , enabling general-purpose use beyond contexts, such as systems or dynamic behaviors in applications. functions as a hybrid compiler-interpreter targeting the platform, developed jointly by and teams at institutions like the Institute of and Mechanics. Its interactive mode allows immediate execution of Object Pascal code snippets, making it suitable for educational purposes with support for dynamic arrays and .NET interop, while compiling to IL for broader deployment. Transpilers for Object Pascal focus on converting code or headers between languages, aiding interoperability rather than direct execution. H2Pas, included in Free Pascal distributions, translates C header files into equivalent Pascal units by mapping declarations like structs to records and functions to procedures, handling common constructs but requiring manual adjustments for complex macros or unions. Oxygene, part of the Elements toolchain from RemObjects Software, extends Object Pascal to target multiple backends, including .NET via its Echoes mode, which compiles to Common Intermediate Language (CIL) for seamless integration with C# or other .NET languages. This allows developers to write Object Pascal code that transpiles to bytecode executable on the CLR, supporting mixed-language projects with features like classes and generics preserved across targets. These interpreters and transpilers find applications in runtime scripting for plugins and , such as embedding scripts in Delphi-based engines for modifiable behaviors, and educational tools for interactive learning. For instance, PascalScript and DWScript enable dynamic content in legacy game frameworks like DelphiX, where scripts handle or without recompiling the host. Ports to , supported natively by , extend Object Pascal to browser environments, though Emscripten-based approaches are more common for C/C++ interop in web ports. Limitations include restricted language subsets, where full support for advanced features like complete (RTTI) is often absent in interpreted modes to prioritize speed and feasibility; for example, PascalScript omits RTTI for dynamic inspection, relying instead on explicit type declarations. Similarly, transpilers like H2Pas may not fully preserve semantic nuances, necessitating post-processing for production use.

Development Tools

Integrated Development Environments

Object Pascal development is supported by several integrated development environments (IDEs) that provide visual tools for , , and code management. The primary commercial IDE is Embarcadero's RAD Studio 13 Florence (released September 2025), which includes as its flagship environment for Object Pascal. RAD Studio features a visual form designer for creating user interfaces, an integrated for stepping through code and inspecting variables, and a profiler for performance analysis. It also supports (FMX), a cross-platform UI framework that enables deployment to Windows, macOS, , , and from a single codebase. For open-source alternatives, the 4.4 (released 2025), built around the , serves as a Delphi-compatible environment. Lazarus offers a drag-and-drop form designer using the Lazarus Component Library (LCL) widget set, which mimics Delphi's (VCL) for cross-platform compatibility across Windows, macOS, , and other systems. It includes a for handling multi-unit projects, an integrated debugger, and support for large-scale applications, all under the GPL/LGPL licenses. Modern lightweight options include extensions for , such as OmniPascal (last updated 2022), which provides Object Pascal support for both and dialects, including , (IntelliSense), declaration navigation, and error detection, integrating seamlessly with the compiler for building and testing on Windows, macOS, and . A more recently maintained alternative is the Pascal LSP extension, which uses the with CodeTools from for enhanced features like diagnostics and refactoring. Borland's IDE, introduced in 1997 and now integrated into Embarcadero's RAD Studio, shares the same environment as , allowing mixed Object Pascal and C++ development with the VCL for Windows applications, as well as cross-platform support via FMX. Earlier, the IDE from the 1980s was a DOS-based tool that pioneered integrated editing, compilation, and debugging in a compact, fast interface, influencing modern designs. Common productivity features across these IDEs include code completion for suggesting identifiers and parameters, refactoring tools for renaming symbols or extracting methods without breaking dependencies, and integration with unit testing frameworks like DUnitX. DUnitX, an open-source testing library, allows developers to write and run tests directly within the IDE, supporting assertions, setup/teardown methods, and parameterized tests to ensure code reliability. These features, particularly prominent in RAD Studio, enhance developer efficiency by automating routine tasks and providing real-time feedback during coding.

Build Systems and Utilities

Free Pascal provides fpcmake, a makefile generator that reads a Makefile.fpc configuration file and produces a standard Makefile compatible with GNU make for compiling projects. This tool supports conditional compilation through directives in the Makefile.fpc, allowing developers to define build targets, dependencies, and platform-specific options, such as cleaning binaries or installing packages. For instance, sections like [clean], [compiler], and [install] in the configuration file enable automated handling of compilation tasks across multiple units and executables. In contrast, Delphi integrates with Microsoft's MSBuild system, utilizing .dproj project files to orchestrate builds from the command line. These XML-based files encapsulate project settings, including compiler options and dependencies, facilitating automated builds in continuous integration/continuous deployment (CI/CD) pipelines without relying on the IDE. Developers invoke MSBuild.exe directly on a .dproj file, specifying configurations like Debug or Release, to compile applications, packages, or project groups efficiently. Several utilities enhance project management in Object Pascal ecosystems. FPDoc scans Pascal unit source files to generate documentation in formats such as HTML or LaTeX, extracting comments and identifiers from the interface section to produce structured help files. Command-line options allow customization of output, including cross-references between units. Lazbuild serves as a command-line counterpart for Lazarus projects, recursively resolving dependencies, compiling required packages, and building executables or the IDE itself from .lpi or .lpk files. Package management tools streamline component acquisition. Embarcadero's , integrated into , enables browsing, downloading, and installing third-party components, libraries, and samples directly within the or via command-line scripts. For , the fppkg tool handles installation and updates of packages defined with FPMake, supporting offline repositories for embedded or constrained environments. Cross-compilation setups in target platforms like on through dedicated toolchains. Developers configure the with cross-binutils and target-specific libraries, such as arm-linux, to build binaries from a host like x86 , ensuring compatibility with 's architecture by installing Pi-specific RTL and FCL units. This process involves the cross-compiler and verifying with flags like -Tlinux -Parm, enabling deployment to embedded devices without native compilation.

Code Examples

Basic Programs

Object Pascal programs follow a procedural structure, beginning with a program declaration followed by variable declarations and a main begin-end block for executable statements. This foundational syntax, inherited from earlier Pascal dialects, emphasizes readability and type safety, making it suitable for introductory programming. Basic programs typically avoid object-oriented features, focusing instead on control structures, variables, and input/output operations across implementations like Turbo Pascal, Delphi, and Free Pascal. A canonical "Hello World" program in Turbo Pascal demonstrates the simplest form of output using the WriteLn procedure. The code is structured as follows:
program Hello;
begin
  WriteLn('Hello World');
end.
This program declares a main block that prints the string to the console and implicitly handles program termination. Turbo Pascal, developed by Borland in the 1980s, uses this concise syntax for console applications, where WriteLn appends a newline. Stack allocation for strings in Object Pascal occurs automatically within the variable declaration section, promoting efficient memory use without explicit management. Consider this example, compatible with Turbo Pascal and extended dialects:
var
  s: String;
begin
  s := 'Hello';
  WriteLn(s);
end.
Here, s is allocated on the stack as a fixed-length string (up to 255 characters in Turbo Pascal), assigned a value, and output via WriteLn. This approach contrasts with dynamic allocation and underscores Pascal's strong typing, where string literals are directly assignable. For heap allocation, Free Pascal provides procedures like GetMem and FreeMem to manage dynamic memory, essential for variable-sized data. An example using a pointer to a character array illustrates this:
var
  p: PChar;
begin
  GetMem(p, 6);
  StrPCopy(p, 'Hello');
  WriteLn(p);
  FreeMem(p);
end.
This allocates 6 bytes (for 'Hello' plus null terminator) on the heap, copies the string using StrPCopy, prints it, and deallocates to prevent memory leaks. Free Pascal extends Turbo Pascal's model with enhanced pointer safety and compatibility modes. Control structures such as loops and conditionals form the core of procedural logic in Object Pascal. A simple for loop combined with an if statement can iterate and filter values, as shown:
var
  i: Integer;
begin
  for i := 1 to 5 do
    if i mod 2 = 0 then
      WriteLn('Even');
end.
This outputs "Even" for i=2 and i=4, using the (mod) for remainder calculation. The handles integer ranges inclusively, and the if-then branch executes conditionally without needing braces, aligning with Pascal's indentation-free style. Dialect variations affect string handling: Turbo Pascal employs ShortString (fixed-length, first byte as length indicator), while modern (since 2009) uses UnicodeString as the default for dynamic, reference-counted strings, with AnsiString available for legacy 8-bit character handling, improving performance in modern applications but requiring careful management of lifetimes.

Object-Oriented Demonstrations

Object Pascal supports through classes, , , properties, and integrated into object contexts. These features enable encapsulation, polymorphism, and in applications developed with compilers like and . The following demonstrations illustrate key OOP elements using representative code snippets, assuming a unit-based structure where these declarations appear in the interface and sections. A simple class declaration defines fields, constructors, and methods within a type. For instance, the TPerson encapsulates a name and provides a constructor and getter :
pascal
type
  TPerson = [class](/page/Class)(TObject)
  private
    FName: [string](/page/String);
  public
    constructor Create(const AName: [string](/page/String));
    [function](/page/Function) GetName: [string](/page/String);
  end;

constructor TPerson.Create(const AName: [string](/page/String));
begin
  FName := AName;
end;

function TPerson.GetName: [string](/page/String);
begin
  Result := FName;
end;
This example creates an instance via var P: TPerson; P := TPerson.Create('John'); Writeln(P.GetName);, demonstrating basic and invocation. allows a derived to extend a base , inheriting its members and optionally overriding for polymorphism. Consider TEmployee inheriting from TPerson and overriding a Describe :
pascal
type
  TPerson = [class](/page/Class)(TObject)
  public
    function Describe: string; [virtual](/page/Virtual);
  end;

  TEmployee = class(TPerson)
  private
    FSalary: Real;
  public
    constructor Create(const AName: string; ASalary: Real);
    function Describe: string; override;
  end;

function TPerson.Describe: string;
begin
  Result := 'A person';
end;

constructor TEmployee.Create(const AName: string; ASalary: Real);
begin
  inherited Create(AName);
  FSalary := ASalary;
end;

function TEmployee.Describe: string;
begin
  Result := inherited Describe + ' earning ' + FloatToStr(FSalary);
end;
Here, inherited calls the base implementation, allowing TEmployee to build upon TPerson's behavior. Interfaces define contracts for classes without implementing them, promoting . An example is the IShape interface with an Area method, implemented by the TCircle class:
pascal
type
  IShape = [interface](/page/Interface)
    ['{12345678-1234-1234-1234-123456789ABC}']
    function Area: Real;
  end;

  TCircle = [class](/page/Class)(TInterfacedObject, IShape)
  private
    FRadius: Real;
  public
    constructor Create(ARadius: Real);
    function Area: Real;
  end;

constructor TCircle.Create(ARadius: Real);
begin
  FRadius := ARadius;
end;

function TCircle.Area: Real;
begin
  Result := Pi * FRadius * FRadius;
end;
Usage involves querying the interface: var S: IShape; C := TCircle.Create(5); S := C as IShape; Writeln(S.Area);. This supports COM-style interoperability and via IInterface. Properties provide controlled access to private fields, using read and write specifiers. In the TPerson , an Age with a validates input:
pascal
type
  TPerson = class(TObject)
  private
    FAge: Integer;
    procedure SetAge(AValue: Integer);
  public
    property Age: Integer read FAge write SetAge;
  end;

procedure TPerson.SetAge(AValue: Integer);
begin
  if (AValue >= 0) and (AValue <= 150) then
    FAge := AValue
  else
    raise ERangeError.Create('Invalid age');
end;
Access occurs as P.Age := 30; Writeln(P.Age);, abstracting field manipulation. Exceptions in contexts handle errors during object operations, such as invalid calls. Within a , a try-except catches specific exceptions:
pascal
type
  TCalculator = [class](/page/Class)(TObject)
  public
    [function](/page/Function) Divide(A, B: Real): Real;
  end;

function TCalculator.[Divide](/page/Function)(A, B: Real): Real;
begin
  if B = 0 then
    raise EZeroDivide.Create('[Division by zero](/page/Division_by_zero)');
  Result := A / B;
end;

// Usage
var
  Calc: TCalculator;
  Res: Real;
begin
  Calc := TCalculator.Create;
  try
    Res := Calc.[Divide](/page/Function)(10, 0);
  except
    on E: EZeroDivide do
      Writeln('Error: ' + E.Message);
  end;
  Calc.Free;
end.
This ensures robust error recovery without terminating the program. Dialect variations appear in , where published properties enable (RTTI) for visual components like VCL controls. Declared in the published section, they support design-time editing and :
pascal
type
  TMyControl = class(TControl)
  private
    FColor: TColor;
    procedure SetColor(AValue: TColor);
  published
    property Color: TColor read FColor write SetColor default clRed;
  end;
The {$M+} directive or descent from TPersistent generates RTTI for these, distinguishing Delphi from other Object Pascal implementations like , which may require explicit attributes.

References

  1. [1]
    Object Pascal
    Mar 30, 2024 · The first implementation of Object Pascal was developed by Larry Tesler at Apple Computer in collaboration with Niklaus Wirth. Contents. 1 ...
  2. [2]
    Free Object Pascal Handbook by Marco Cantu - Embarcadero
    It's a manual for new and existing Object Pascal developers and covers, among other things, the following: Variables and data types; Arrays, records, Strings ...
  3. [3]
    Evolution of the Oxygene Language - RemObjects
    This new language was called Object Pascal. Features of Object Pascal were integrated into Mac Pascal and Lisa Pascal. In 1986, Anders Hejlsberg also integrated ...Missing: definition | Show results with:definition<|separator|>
  4. [4]
    50 Years of Pascal and Delphi is In Power - Embarcadero Blogs
    Mar 26, 2021 · Object Pascal (OP) itself is an extension of the Pascal language that was developed early at Apple Computer by a team led by Larry Tesler in ...
  5. [5]
    Delphi: Modern Object Pascal Technology - Embarcadero
    Delphi offers modern Object Pascal with native compilers and component libraries for major operating systems with full modern language constructs and more.
  6. [6]
    Lazarus and the Free Pascal Compiler
    Oct 13, 2021 · Free Pascal (originally named FPK Pascal) is a 32-bit and 64-bit modern Pascal compiler. It is available for different processors.
  7. [7]
    50 Years of Pascal - Communications of the ACM
    Mar 1, 2021 · Pascal, created by Niklaus Wirth, has a precise definition, basic elements, data types, and was easy to teach and use, with wide application.
  8. [8]
    Recollections about the Development of Pascal
    Pascal was defined in 1970 and, after a slow start, became one of the most widely used languages in introductory programming courses. This article first ...
  9. [9]
    [PDF] Niklaus Wirth - The Programming Language Pascal - OberonCore
    Original Historic Documents. Niklaus Wirth. The Programming Language Pascal. Acta Informatica, Vol. 1, Fasc. 1, 1971 pp. 35-63. Page 2. 122. Niklaus Wirth. Page ...
  10. [10]
    [PDF] Niklaus Wirth - The Programming Language Pascal (Revised Report)
    In Pascal, there are four structuring methods available: array structure, record structure, set structure, and file structure. In an array structure, all ...Missing: key strong
  11. [11]
    UCSD Pascal™: a portable software environment for small computers
    Abstract. The UCSD Pascal System is a complete program development and execution environment for small computers. Its facilities include text editors and file ...Missing: original | Show results with:original
  12. [12]
    [DOC] The History of Modula-2 and Oberon - Ethz
    Pascal (1970) reflected the ideas of Structured Programming, Modula-2 (1979) added those of modular system design, and Oberon (1988) catered to the object- ...
  13. [13]
    A Brief History of Modula and Lilith
    In the years 1978-1980 the workstation Lilith was developed at ETH Zurich. It featured a microprogrammed processor, a high-resolution display, and a mouse.
  14. [14]
    Apple Pascal
    Developed from 1983 to 1985 Clascal was an extension of Lisa Pascal which included several new keywords such as methods and subclass.
  15. [15]
    A brief history of primary coding languages
    Jul 19, 2025 · During the first couple of years, software for the Mac was thus developed using Clascal on Lisa systems. Object Pascal (1986-91). In 1984-85, ...
  16. [16]
    Introduction to Object Pascal - MacTech
    It is descended from an earlier attempt at an object-oriented version of Pascal called Clascal, which was available on the Lisa computer. MacApp itself is ...
  17. [17]
    MacApp - origins - The Long View
    Apr 27, 2011 · Larry Tessler developed Object Pascal's predecessor Clascal for use on the Lisa, and presented it to the ACM (Association for Computing ...
  18. [18]
  19. [19]
    Turbo Pascal Turns 40 - Embarcadero Blogs
    Dec 1, 2023 · Turbo Pascal was introduced by Borland in November 1983. It turned 40 years old days ago. Turbo Pascal was a milestone product for the industry.
  20. [20]
    Borland Turbo Pascal - DOS Days
    Version 1.0 started shipping on 20th November 1983 with mail order adverts being placed in the popular Byte Magazine. ... In this version, Borland introduced the ...
  21. [21]
    [PDF] OBJECT-ORIENTED PROGRAMMING GUIDE - Bitsavers.org
    Turbo Pascal 5.5, however, extends the Pascal language to support inheritance. One of these extensions is a new category of data structure, related to records ...
  22. [22]
  23. [23]
    [PDF] LANGUAGE GUIDE - Bitsavers.org
    Turbo Pascal program, you need to see how they all fit together. Here's an illustration of a Turbo Pascal program: Chapter 7, What is a Turbo Pascal program?
  24. [24]
    Delphi Innovation Timeline
    Delphi 1 - February 14th, 1995. 16-bit Windows 3.1 support, Visual Two-Way tools, Components / VCL, Database support via BDE and SQL Links, Database data ...
  25. [25]
    Delphi Timewarp – 1995 And Delphi's Mythical Origins
    Feb 4, 2022 · 1995 is a very important year in the history of Delphi. On February 14 of that year the first version of Delphi was released for 16-bit Windows 3.1.
  26. [26]
    The Future of CodeCentral - Embarcadero Blogs
    Sep 13, 2019 · When CodeCentral was launched in 1999 (during the Inprise era) right before Delphi 5 was released, there weren't many options for a central ...
  27. [27]
    Delphi (IDE) | Encyclopedia MDPI
    Nov 2, 2022 · Borland subsequently sold CodeGear to Embarcadero Technologies in 2008. Embarcadero retained the CodeGear division created by Borland to ...
  28. [28]
    [PDF] Delphi and Unicode - Embarcadero
    One of the most relevant new features of Delphi 2009 is its complete support for the Unicode character set. While Delphi applications written exclusively ...
  29. [29]
    Delphi XE7 | New Features - RAD Studio 開發工具
    What can you do with Delphi XE7? · Develop Android apps FM · New mobile components for Android and iOS FM · REST Client support to access cloud based RESTful web ...
  30. [30]
    Free Pascal - Advanced open source Pascal compiler for Pascal ...
    Overview. Free Pascal is a mature, versatile, open source Pascal compiler. It can target many processor architectures: Intel x86 (16 and 32 bit), AMD64/x86-64, ...FAQ · Download · Online documentation · Development
  31. [31]
    What's New in RAD Studio 10.4.1 Sydney - Embarcadero
    What's New in RAD Studio 10.4.2. Discover How The 10.4.2 Release Can Help You Deploy High-Performance Native Apps on Windows, Android, iOS, macOS, and Linux.
  32. [32]
    What's New in RAD Studio 11.3 Alexandria - Embarcadero
    RAD Studio 11.3 offers official support for iOS 16 (for Delphi only), Android 13, and macOS Ventura, all released after RAD Studio 11.2.
  33. [33]
    Extended Pascal
    Aug 11, 2024 · Extended Pascal is the name given to the version of Pascal specified in International Organization for Standardization (ISO) standard 10206.Enhancements to Standard... · Reserved Words · Free Pascal support for...Missing: proposals Object
  34. [34]
    3.3 Structured Types - Free Pascal
    A structured type is a type that can hold multiple values in one variable. Structured types can be nested to unlimited levels.
  35. [35]
    Classes and Objects (Delphi) - RAD Studio
    ### Syntax and Examples in Object Pascal
  36. [36]
    What Is an Object - RAD Studio - Embarcadero DocWiki
    Inheritance means that objects derive functionality from other objects (called ancestors); objects can modify their inherited behavior. Polymorphism means that ...
  37. [37]
    Methods (Delphi) - RAD Studio
    ### Summary of Virtual and Abstract Methods, Dynamic Binding in Object Pascal
  38. [38]
    Object Interfaces (Delphi) - RAD Studio
    ### Summary of Object Interfaces in Object Pascal (Delphi)
  39. [39]
    Properties (Delphi) - RAD Studio
    ### Summary of Properties in Delphi (RAD Studio Sydney)
  40. [40]
    Program and Units - Essential Pascal on marcocantu.com
    The interface of a unit can declare a number of different elements, including procedures, functions, global variables, and data types. In Delphi applications, ...
  41. [41]
    Modern Object Pascal Introduction for Programmers
    In the old days, Turbo Pascal introduced another syntax for class-like functionality, using the object keyword. It's somewhat of a blend between the concept ...Basics · Classes · Freeing classes · Various language features
  42. [42]
    Source Code Files, Units and Their Structure - RAD Studio
    Object Pascal units should contain a copyright/ID block comment before the unit name, followed by any conditional defines, compiler directives, or include ...
  43. [43]
    Finalization Keyword - Delphi in a Nutshell [Book] - O'Reilly
    Finalization sections run in the opposite order of initialization. Note that a unit must have an initialization section in order to have a finalization section.
  44. [44]
    Packages (Delphi) - RAD Studio - Embarcadero DocWiki
    Each package is declared in a separate source file, which should be saved with the .dpk extension to avoid confusion with other files containing Delphi code. A ...
  45. [45]
    Delphi Package Source File (*.dpk) - RAD Studio
    Delphi Package Source File (*.dpk) ... When you create a Delphi package and save your package, RAD Studio asks you for a path to save your Delphi project file.
  46. [46]
    Exception Handling - RAD Studio - Embarcadero DocWiki
    Exception handling provides a standard way of dealing with errors, discovering both anticipated and unanticipated problems.
  47. [47]
    17 Exceptions - Free Pascal
    Chapter 17. Exceptions. Exceptions provide a convenient way to program error and error-recovery mechanisms, and are closely related to classes.
  48. [48]
    Exceptions - Lazarus wiki
    Oct 10, 2024 · The official documentation is here: Reference guide chapter 17. By default exceptions are disabled. You can opt in by using the ObjFPC or ...
  49. [49]
    Run-Time Type Information (Delphi) - RAD Studio
    The {$M} switch directive controls generation of run-time type information (RTTI). When a class is declared in the {$M+} state, or is derived from a class ...
  50. [50]
  51. [51]
    Working with RTTI - RAD Studio - Embarcadero DocWiki
    Run-time type information (RTTI) is a programming paradigm in which information about a type can be obtained at run time. If RTTI generation is enabled, ...
  52. [52]
    Runtime Type Information (RTTI) - Free Pascal wiki
    Feb 25, 2020 · RTTI can be utilized to obtain meta information in a Pascal application. Contents Converting a enumerated type to a string
  53. [53]
    Free Pascal compiler modes
    The Free Pascal team tries to create a compiler that can compile as much as possible code produced for Turbo Pascal, Delphi or the Mac pascal compilers.
  54. [54]
    Compiler Mode - Free Pascal wiki
    Oct 21, 2019 · A compiler compatibility mode can be specified in source code via the global compiler directive {$mode} or via the command line or fpc.cfg(5) parameter -M.
  55. [55]
    Delphi: IDE Software Overview - Embarcadero
    Delphi is the fastest way to write, compile, package and deploy cross-platform native applications on Windows, macOS, iOS, Android and Linux. See more.Delphi: Software Development... · Modern Object Pascal · Previous Versions
  56. [56]
    What's New in RAD Studio 13 Florence - Embarcadero
    RAD Studio 13 delivers major updates for Delphi and C++Builder, including a 64-bit IDE, new Delphi language extensions, C++23 support, AI components, ...
  57. [57]
    RAD Studio 13: Every New And Enhanced Feature
    Sep 20, 2025 · Enhanced! 64-bit binary versions of the Delphi 32-bit (dcc32) and Delphi 64-bit (dcc64) command line compilers, offering a very large memory ...
  58. [58]
    Oxygene: Modern Cross-platform Object Pascal - RemObjects
    Oxygene is built on the foundation of Object Pascal, revamped and extended to be a modern language for the twenty-first century.
  59. [59]
    The Oxygene Language | RemObjects Software
    Oxygene is a powerful general purpose programming language, designed to let developers create all imaginable kinds of projects on a wide variety of platforms.
  60. [60]
    Compiler Versions - RAD Studio - Embarcadero DocWiki
    Compiler Versions ; VER15, Turbo Pascal for Windows 1.5, NA ; VER10, Turbo Pascal for Windows 1.0, NA ; VER60, Turbo Pascal 6.0, NA ; VER55, Turbo Pascal 5.5, NA ...
  61. [61]
    The Long and Winding Road To Today's Delphi – Happy 29th ...
    Feb 14, 2024 · Turbo Pascal for the Mac (1986) · Borland Turbo Pascal v5.5 and Microsoft Quick Pascal v1.0 · Turbo/Borland Pascal with Object Frameworks (1990, ...<|separator|>
  62. [62]
    Pascal Script for Delphi - RemObjects
    Pascal Script is a free scripting engine that allows you to use most of the Object Pascal language within your Delphi or Free Pascal projects at runtime.
  63. [63]
    DWScript - DelphiTools
    DWScript is an object-oriented Delphi scripting language for Delphi, despite its name, it is general purpose and not limited to websites.Missing: interpreter | Show results with:interpreter
  64. [64]
    remobjects/pascalscript - GitHub
    Pascal Script. Created By Carlo Kok. ck@remobjects.com. Copyright (C) 2000-2014 by Carlo Kok and RemObjects Software, LLC.
  65. [65]
    DWScript is an object-oriented scripting engine for Delphi ... - GitHub
    DWScript is an object-oriented scripting engine for Delphi based on the Delphi language, with extensions borrowed from other Pascal languages.Missing: interpreter | Show results with:interpreter
  66. [66]
    PascalABC.NET
    PascalABC.NET is a joint development of Russian and German programmers. In Russia, the development center is located at the Institute of Mathematics, Mechanics ...Missing: interpreter | Show results with:interpreter
  67. [67]
    Pascal ABC v.3.6.3 build 2447
    Pascal ABC is an interpreter of the PascalABC.NET programming language for Windows. Equipped with a graphical visualization interface.
  68. [68]
    H2PAS - Free Pascal C header to pascal unit translator.
    H2pas is a command-line tool that translates a C header file to a spascal unit. It reads the C header file and translates the C declarations to equivalent ...Missing: Oxygene | Show results with:Oxygene
  69. [69]
    Platforms: .NET | RemObjects Software
    Remember, with Elements you can use (and mix!) any of the six languages understood by the compiler in your .NET Projects: Oxygene (Object Pascal), C#, Swift, ...
  70. [70]
    RemObjects Oxygene (Object Pascal) - Elements Docs
    Oxygene is a language that is decidedly Object Pascal, and will make you feel immediately at home if you come from a Delphi or Object Pascal background.Missing: transpilers H2Pas
  71. [71]
    WebAssembly/Internals - Free Pascal wiki
    Apr 5, 2022 · It is currently used as a content staging area during refactoring of the various pages. Assemblers. There are different assemblers available, ...
  72. [72]
    RAD Studio Features - Embarcadero
    Features: Design, Develop, Debug, Code Quality, Collaborate, Extend, Deploy, Solutions: Fast Development, Single Code Base, Database, Middle Tier, Windows, Mac ...
  73. [73]
    Delphi: Software Development Features - Embarcadero
    Delphi features include a modern IDE, high-performance compilers, OOP-centric languages, auto-code completion, and live templates for faster development.
  74. [74]
    Lazarus Homepage
    Lazarus is a Delphi compatible cross-platform IDE for Rapid Application Development. It has variety of components ready for use and a graphical form designer.Downloads · Features · About Lazarus Project · Why use it?
  75. [75]
    Features - Lazarus IDE
    Lazarus uses Free Pascal as its language which is an Object Pascal dialect. It is constantly developed to integrate new features that can be expected in ...<|control11|><|separator|>
  76. [76]
    About Lazarus Project
    Lazarus is a Delphi-compatible, cross-platform IDE for Free Pascal, named after the biblical figure raised from the dead, named after the failed Megido project.
  77. [77]
    OmniPascal - Open Preview - Visual Studio Marketplace
    Feb 5, 2022 · OmniPascal supports Delphi and FPC in VS Code, offering code completion, declaration support, outlining, and more, for Windows, Mac, and Linux.
  78. [78]
    The C++Builder 25th Anniversary: Historical Article on C++ Builder ...
    Mar 2, 2022 · In this article I'm going to discuss all these language extensions in details, providing some background for programmers with no experience with Delphi.
  79. [79]
    30 Years Ago: Turbo Pascal, BASIC Turn PCs Into Programming ...
    Sep 5, 2013 · The Turbo Pascal compiler was based on the Blue Label Pascal compiler originally produced for the NasSys cassette-based operating system of ...
  80. [80]
    [PDF] RAD Studio 11 Feature Matrix V02 - Danysoft
    New Delphi Code Insight implementation (based on the Language Server Protocol architecture) for including Code Completion, Parameter Completion, Error Insight,.<|control11|><|separator|>
  81. [81]
    DUnitX Overview - RAD Studio - Embarcadero DocWiki
    The DUnitX testing framework provides its own set of methods for testing conditions. You can use the provided methods to test a large number of conditions.
  82. [82]
    FPCMake - Free Pascal - Tools
    FPCMake is a Free Pascal Makefile generator that converts a Makefile.fpc file to a Makefile for GNU make to compile projects.
  83. [83]
    E Using fpcmake - Free Pascal
    E.1 Introduction E.2 Functionality E.3 Usage E.4 Format of the configuration file. E.4.1 clean. E.4.2 compiler. E.4.3 Default E.4.4 Dist E.4.5 InstallMissing: documentation | Show results with:documentation
  84. [84]
    MSBuild - RAD Studio - Embarcadero DocWiki
    You can also explicitly build projects from the command line by running MSBuild.exe with your .dproj file. To invoke MSBuild in a custom command environment, ...
  85. [85]
    FPDoc Free Pascal code documenter: Reference manual
    FPDoc. Free Pascal code documenter: Reference manual ; Contents ; 1 Introduction ; 1.1 About this document ; 1.2 About FPDoc ; 1.3 Getting more information.Missing: generator | Show results with:generator
  86. [86]
    lazbuild - Free Pascal wiki
    Jul 26, 2023 · lazbuild is a command line utility to compile Lazarus projects and packages, as well as the Lazarus IDE itself.
  87. [87]
    Overview | Embarcadero GetIt
    The GetIt Package Manager is a package manager that allows you to browse, download, purchase, and install packages into RAD Studio.
  88. [88]
    fppkg - Free Pascal wiki
    Nov 13, 2020 · Fppkg is the Free Pascal package manager. It is used to compile and install Free Pascal packages which are based on FPMake.Missing: Opkg embedded
  89. [89]
    Cross compiling - Lazarus wiki
    Sep 30, 2025 · Free Pascal itself does not need much setup. It can create binaries for many platforms. Just tell it to do so. Host and target on the same CPU.Introduction · From Linux · From macOS (Darwin) · From FreeBSDMissing: toolchain | Show results with:toolchain
  90. [90]
    Cross Compile to RasPi from Linux - Lazarus wiki
    Oct 10, 2023 · This page is about setting up a Cross Compiler from a Linux Box to a Raspberry Pi. You should be able to select arm as the CPU in Lazarus.Getting the necessary libraries · Install the Pi Libraries · Build the Cross CompilerMissing: toolchain | Show results with:toolchain
  91. [91]
    Classes and Objects (Delphi) - RAD Studio - Embarcadero DocWiki
    You can declare object types using the syntax: type objectTypeName = object (ancestorObjectType) memberList end;. where objectTypeName is any valid ...
  92. [92]
    Using inherited - Free Pascal
    In an overridden virtual method, it is often necessary to call the parent class' implementation of the virtual method. This can be done with the inherited ; In ...
  93. [93]
    Object Interfaces (Delphi) - RAD Studio - Embarcadero DocWiki
    An object interface, or simply interface, defines methods that can be implemented by a class. Interfaces are declared as classes, but cannot be directly ...Missing: Pascal | Show results with:Pascal
  94. [94]
    Properties (Delphi) - RAD Studio - Embarcadero DocWiki
    Property overrides allow you to change a property's inherited visibility or specifiers. The simplest override consists only of the reserved word property ...Missing: Pascal | Show results with:Pascal
  95. [95]
    Exceptions (Delphi) - RAD Studio - Embarcadero DocWiki
    Because exceptions are objects, they can be grouped into hierarchies using inheritance, and new exceptions can be introduced without affecting existing code.Missing: Pascal | Show results with:Pascal