Misplaced Pages

Free Pascal

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
#222777

73-493: Free Pascal Compiler ( FPC ) is a compiler for the closely related programming-language dialects Pascal and Object Pascal . It is free software released under the GNU General Public License , with exception clauses that allow static linking against its runtime libraries and packages for any purpose in combination with any other software license. It supports its own Object Pascal dialect, as well as

146-533: A basic block , to whole procedures, or even the whole program. There is a trade-off between the granularity of the optimizations and the cost of compilation. For example, peephole optimizations are fast to perform during compilation but only affect a small local fragment of the code, and can be performed independently of the context in which the code fragment appears. In contrast, interprocedural optimization requires more compilation time and memory space, but enable optimizations that are only possible by considering

219-412: A concrete syntax tree (CST, parse tree) and then transforming it into an abstract syntax tree (AST, syntax tree). In some cases additional phases are used, notably line reconstruction and preprocessing, but these are rare. The main phases of the front end include the following: The middle end, also known as optimizer, performs optimizations on the intermediate representation in order to improve

292-438: A low-level programming language (e.g. assembly language , object code , or machine code ) to create an executable program. There are many different types of compilers which produce output in different useful forms. A cross-compiler produces code for a different CPU or operating system than the one on which the cross-compiler itself runs. A bootstrap compiler is often a temporary compiler, used for compiling

365-422: A PDP-7 in B. Unics eventually became spelled Unix. Bell Labs started the development and expansion of C based on B and BCPL. The BCPL compiler had been transported to Multics by Bell Labs and BCPL was a preferred language at Bell Labs. Initially, a front-end program to Bell Labs' B compiler was used while a C compiler was developed. In 1971, a new PDP-11 provided the resource to define extensions to B and rewrite

438-437: A Production Quality Compiler (PQC) from formal definitions of source language and the target. PQCC tried to extend the term compiler-compiler beyond the traditional meaning as a parser generator (e.g., Yacc ) without much success. PQCC might more properly be referred to as a compiler generator. PQCC research into code generation process sought to build a truly automatic compiler-writing system. The effort discovered and designed

511-407: A compiler and an IDE, Free Pascal provides the following libraries: Compiler In computing , a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language). The name "compiler" is primarily used for programs that translate source code from a high-level programming language to

584-405: A compiler up into small programs is a technique used by researchers interested in producing provably correct compilers. Proving the correctness of a set of small programs often requires less effort than proving the correctness of a larger, single, equivalent program. Regardless of the exact number of phases in the compiler design, the phases can be assigned to one of three stages. The stages include

657-432: A component of an IDE (VADS, Eclipse, Ada Pro). The interrelationship and interdependence of technologies grew. The advent of web services promoted growth of web languages and scripting languages. Scripts trace back to the early days of Command Line Interfaces (CLI) where the user could enter commands to be executed by the system. User Shell concepts developed with languages to write shell programs. Early Windows designs offered

730-628: A front end, a middle end, and a back end. This front/middle/back-end approach makes it possible to combine front ends for different languages with back ends for different CPUs while sharing the optimizations of the middle end. Practical examples of this approach are the GNU Compiler Collection , Clang ( LLVM -based C/C++ compiler), and the Amsterdam Compiler Kit , which have multiple front-ends, shared optimizations and multiple back-ends. The front end analyzes

803-787: A generic and reusable way so as to be able to produce many differing compilers. A compiler is likely to perform some or all of the following operations, often called phases: preprocessing , lexical analysis , parsing , semantic analysis ( syntax-directed translation ), conversion of input programs to an intermediate representation , code optimization and machine specific code generation . Compilers generally implement these phases as modular components, promoting efficient design and correctness of transformations of source input to target output. Program faults caused by incorrect compiler behavior can be very difficult to track down and work around; therefore, compiler implementers invest significant effort to ensure compiler correctness . Compilers are not

SECTION 10

#1732780222223

876-527: A grammar for the language, though in more complex cases these require manual modification. The lexical grammar and phrase grammar are usually context-free grammars , which simplifies analysis significantly, with context-sensitivity handled at the semantic analysis phase. The semantic analysis phase is generally more complex and written by hand, but can be partially or fully automated using attribute grammars . These phases themselves can be further broken down: lexing as scanning and evaluating, and parsing as building

949-608: A less clear set of goals than earlier releases. The unit system rewrite was postponed again, and the branch that became 2.4 was created to keep risky commits from 2.2 to stabilize it. Mostly these risky commits were more involved improvements to the new platforms, Mac PowerPC 64, Mac x86-64, iPhone, and many fixes to the ARM and x86-64 architectures in general, as well as DWARF. Other compiler improvements included whole program optimization (WPO) and devirtualization and ARM embedded-application binary interface (EABI) support. Later, during

1022-496: A more permanent or better optimised compiler for a language. Related software include decompilers , programs that translate from low-level languages to higher level ones; programs that translate between high-level languages, usually called source-to-source compilers or transpilers ; language rewriters , usually programs that translate the form of expressions without a change of language; and compiler-compilers , compilers that produce compilers (or parts of them), often in

1095-432: A result, compilers were split up into smaller programs which each made a pass over the source (or some representation of it) performing some of the required analysis and translations. The ability to compile in a single pass has classically been seen as a benefit because it simplifies the job of writing a compiler and one-pass compilers generally perform compilations faster than multi-pass compilers . Thus, partly driven by

1168-431: A simple batch programming capability. The conventional transformation of these language used an interpreter. While not widely used, Bash and Batch compilers have been written. More recently sophisticated interpreted languages became part of the developers tool kit. Modern scripting languages include PHP, Python, Ruby and Lua. (Lua is widely used in game development.) All of these have interpreter and compiler support. "When

1241-565: A standards-compliant mode. A small effort has been made to support some of the Apple Pascal syntax to ease interfacing to the Classic Mac OS and macOS . The Apple dialect implements some standard Pascal features that Turbo Pascal and Delphi omit. The 2.2. x release series did not significantly change the dialect objectives beyond roughly Delphi 7 level syntax, instead aiming for closer compatibility. A notable exception to this

1314-570: A working PowerPC port became available, followed by an ARM port in summer 2004, a SPARC port in fall 2004, and an x86-64 -AMD64 port in early 2004, which made the compiler available for a 64-bit platform. In November 2003, a first beta release of the 1.1. x branch was packaged and numbered 1.9.0. These were quickly followed by versions 1.9.2 and 1.9.4; the latter introduced OS X support. The work continued with version 1.9.6 (January 2005), 1.9.8 (late February 2005), 2.0.0 (May 2005), 2.0.2 (December 2005), and 2.0.4 (August 2006). In 2006, some of

1387-492: Is Open64 , which is used by many organizations for research and commercial purposes. Due to the extra time and space needed for compiler analysis and optimizations, some compilers skip them by default. Users have to use compilation options to explicitly tell the compiler which optimizations should be enabled. The back end is responsible for the CPU architecture specific optimizations and for code generation . The main phases of

1460-613: Is also commercial support, for example, AdaCore, was founded in 1994 to provide commercial software solutions for Ada. GNAT Pro includes the GNU GCC based GNAT with a tool suite to provide an integrated development environment . High-level languages continued to drive compiler research and development. Focus areas included optimization and automatic code generation. Trends in programming languages and development environments influenced compiler technology. More compilers became included in language distributions (PERL, Java Development Kit) and as

1533-519: Is available for many CPU architectures and operating systems (see Targets ). It supports inline assembly language and includes an internal assembler capable of parsing several dialects such as AT&T and Intel style. There are separate projects to facilitate developing cross-platform graphical user interface (GUI) applications, the most prominent one being the Lazarus integrated development environment (IDE). Initially, Free Pascal adopted

SECTION 20

#1732780222223

1606-446: Is favored due to its modularity and separation of concerns . Most commonly, the frontend is broken into three phases: lexical analysis (also known as lexing or scanning), syntax analysis (also known as scanning or parsing), and semantic analysis . Lexing and parsing comprise the syntactic analysis (word syntax and phrase syntax, respectively), and in simple cases, these modules (the lexer and parser) can be automatically generated from

1679-416: Is possible to run Pascal programs, which are translated just in time, as Unix scripts or CGI back-end. Ultibo core is an embedded or bare metal development environment for Raspberry Pi. Ultibo is based on Free Pascal and developed under a modified version of Lazarus. The IDE is PC based but has been ported to Linux and Mac as well. Ultibo is an OS-less runtime and has support for most functions and allows

1752-572: The Get and Put procedures, and the file-buffer variable concept for file handling were still absent. As of version 3.0.0, ISO Pascal mode is fairly complete. It has been able to compile standardpascal.org 's P5 ISO Pascal compiler with no changes. Free Pascal was created when Borland clarified that Borland Pascal development for DOS would stop with version 7, to be replaced by a Windows -only product, which later became Delphi. Student Florian Paul Klämpfl began developing his own compiler written in

1825-575: The de facto standard dialect of Pascal programmers, Borland Pascal, but later adopted Delphi's Object Pascal. From version 2.0 on, Delphi compatibility has been continuously implemented or improved. The project has a compilation mode concept, and the developers made it clear that they would incorporate working patches for the standardized dialects of the American National Standards Institute (ANSI) and International Organization for Standardization (ISO) to create

1898-711: The Internet , and the first contributors joined the project. Later, a Linux port was created by Michael van Canneyt, five years before the Borland Kylix Pascal compiler for Linux became available. The DOS port was adapted for use in OS/2 using the Eberhard Mattes eXtender (EMX) which made OS/2 the second supported compiling target. As well as Florian Klämpfl the original author, Daniël Mantione also contributed significantly to make this happen, providing

1971-897: The Java Virtual Machine as of version 3.0.0 and targets both Oracle's Java and Google's Android JVM, although Object Pascal syntax is not fully supported. Free Pascal 3.0.0 also supports ARMHF platforms like the Raspberry Pi , including ARMV6-EABIHF running on Raspbian. Work on 64-bit ARM has resulted in support for iOS in 3.0.0 as well. A native ARM Android target has been added, ending the formerly hacked ARM Linux target to generate native ARM libraries for Android. This makes porting Lazarus applications to Android (using Custom Drawn Interface) easier. Since FPC 2.6.2, OpenBSD and NetBSD are supported on IA32 and X86_64 architectures. A new target embedded has been added for usage without OS (ARM Cortex M and MIPS mainly). With InstantFPC it

2044-509: The Win32 target was added, and a start was made with incorporating some Delphi features. Stabilizing for a non- beta release began, and version 1.0 was released in July 2000. The 1.0. x series was widely used, in business and education. For the 1.0. x releases, the port to 68k CPU was redone, and the compiler produced stable code for several 68k Unix-like and AmigaOS operating systems. During

2117-599: The (since 1995, object-oriented) programming language Ada . The Ada STONEMAN document formalized the program support environment (APSE) along with the kernel (KAPSE) and minimal (MAPSE). An Ada interpreter NYU/ED supported development and standardization efforts with the American National Standards Institute (ANSI) and the International Standards Organization (ISO). Initial Ada compiler development by

2190-542: The 2.2 cycle, a more Delphi -like resource support (based on special sections in the binary instead of Pascal constants) was added. This feature, direly needed by Lazarus, became the main highlight of the branch. Other more minor additions were a memory manager that improved heap manager performance in threaded environments, small improvements in Delphi compatibility such as OleVariant , and improvements in interface delegation . On January 1, 2010, Free Pascal 2.4.0

2263-587: The Early PL/I (EPL) compiler by Doug McIlory and Bob Morris from Bell Labs. EPL supported the project until a boot-strapping compiler for the full PL/I could be developed. Bell Labs left the Multics project in 1969, and developed a system programming language B based on BCPL concepts, written by Dennis Ritchie and Ken Thompson . Ritchie created a boot-strapping compiler for B and wrote Unics (Uniplexed Information and Computing Service) operating system for

Free Pascal - Misplaced Pages Continue

2336-528: The Sun 3/60 Solaris targeted to Motorola 68020 in an Army CECOM evaluation. There were soon many Ada compilers available that passed the Ada Validation tests. The Free Software Foundation GNU project developed the GNU Compiler Collection (GCC) which provides a core capability to support multiple languages and targets. The Ada version GNAT is one of the most widely used Ada compilers. GNAT is free but there

2409-571: The Turbo Pascal dialect and produced 32-bit code for the GO32v1 DOS extender , which was used and developed by the DJ's GNU Programming Platform ( DJGPP ) project at that time. Originally, the compiler was a 16-bit DOS executable compiled by Turbo Pascal . After two years, the compiler was able to compile itself and became a 32-bit executable. The initial 32-bit compiler was published on

2482-670: The U.S. Military Services included the compilers in a complete integrated design environment along the lines of the STONEMAN document. Army and Navy worked on the Ada Language System (ALS) project targeted to DEC/VAX architecture while the Air Force started on the Ada Integrated Environment (AIE) targeted to IBM 370 series. While the projects did not provide the desired results, they did contribute to

2555-471: The University of Cambridge was originally developed as a compiler writing tool. Several compilers have been implemented, Richards' book provides insights to the language and its compiler. BCPL was not only an influential systems programming language that is still used in research but also provided a basis for the design of B and C languages. BLISS (Basic Language for Implementation of System Software)

2628-435: The basis of digital modern computing development during World War II. Primitive binary languages evolved because digital devices only understand ones and zeros and the circuit patterns in the underlying machine architecture. In the late 1940s, assembly languages were created to offer a more workable abstraction of the computer architectures. Limited memory capacity of early computers led to substantial technical challenges when

2701-433: The behavior of multiple functions simultaneously. Interprocedural analysis and optimizations are common in modern commercial compilers from HP , IBM , SGI , Intel , Microsoft , and Sun Microsystems . The free software GCC was criticized for a long time for lacking powerful interprocedural optimizations, but it is changing in this respect. Another open source compiler with full analysis and optimization infrastructure

2774-591: The compiler. By 1973 the design of C language was essentially complete and the Unix kernel for a PDP-11 was rewritten in C. Steve Johnson started development of Portable C Compiler (PCC) to support retargeting of C compilers to new machines. Object-oriented programming (OOP) offered some interesting possibilities for application development and maintenance. OOP concepts go further back but were part of LISP and Simula language science. Bell Labs became interested in OOP with

2847-407: The development of C++ . C++ was first used in 1980 for systems programming. The initial design leveraged C language systems programming capabilities with Simula concepts. Object-oriented facilities were added in 1983. The Cfront program implemented a C++ front-end for C84 language compiler. In subsequent years several C++ compilers were developed as C++ popularity grew. In many application domains,

2920-551: The development of compiler technology: Early operating systems and software were written in assembly language. In the 1960s and early 1970s, the use of high-level languages for system programming was still controversial due to resource limitations. However, several research and industry efforts began the shift toward high-level systems programming languages, for example, BCPL , BLISS , B , and C . BCPL (Basic Combined Programming Language) designed in 1966 by Martin Richards at

2993-424: The development of high-level languages followed naturally from the capabilities offered by digital computers. High-level languages are formal languages that are strictly defined by their syntax and semantics which form the high-level language architecture. Elements of these formal languages include: The sentences in a language may be defined by a set of rules called a grammar. Backus–Naur form (BNF) describes

Free Pascal - Misplaced Pages Continue

3066-410: The dialects of several other Pascal family compilers to a certain extent, including those of Borland Pascal (named "Turbo Pascal" until the 1990 version 6), Borland (later Embarcadero) Delphi , and some historical Macintosh compilers. The dialect is selected on a per-unit (module) basis, and more than one dialect can be used per program. It follows a write once, compile anywhere philosophy and

3139-424: The early days, the approach taken to compiler design was directly affected by the complexity of the computer language to be processed, the experience of the person(s) designing it, and the resources available. Resource limitations led to the need to pass through the source code more than once. A compiler for a relatively simple language written by one person might be a single, monolithic piece of software. However, as

3212-491: The field of compiling began in the late 50s, its focus was limited to the translation of high-level language programs into machine code ... The compiler field is increasingly intertwined with other disciplines including computer architecture, programming languages, formal methods, software engineering, and computer security." The "Compiler Research: The Next 50 Years" article noted the importance of object-oriented languages and Java. Security and parallel computing were cited among

3285-464: The first (algorithmic) programming language for computers called Plankalkül ("Plan Calculus"). Zuse also envisioned a Planfertigungsgerät ("Plan assembly device") to automatically translate the mathematical formulation of a program into machine-readable punched film stock . While no actual implementation occurred until the 1970s, it presented concepts later seen in APL designed by Ken Iverson in

3358-423: The first compilers were designed. Therefore, the compilation process needed to be divided into several small programs. The front end programs produce the analysis products used by the back end programs to generate target code. As computer technology provided more resources, compiler designs could align better with the compilation process. It is usually more productive for a programmer to use a high-level language, so

3431-559: The first pass needs to gather information about declarations appearing after statements that they affect, with the actual translation happening during a subsequent pass. The disadvantage of compiling in a single pass is that it is not possible to perform many of the sophisticated optimizations needed to generate high quality code. It can be difficult to count exactly how many passes an optimizing compiler makes. For instance, different phases of optimization may analyse one expression many times but only analyse another expression once. Splitting

3504-454: The future research targets. A compiler implements a formal transformation from a high-level source program to a low-level target program. Compiler design can define an end-to-end solution or tackle a defined subset that interfaces with other compilation tools e.g. preprocessors, assemblers, linkers. Design requirements include rigorously defined interfaces both internally between compiler components and externally between supporting toolsets. In

3577-421: The idea of using a higher-level language quickly caught on. Because of the expanding functionality supported by newer programming languages and the increasing complexity of computer architectures, compilers became more complex. DARPA (Defense Advanced Research Projects Agency) sponsored a compiler project with Wulf's CMU research team in 1970. The Production Quality Compiler-Compiler PQCC design would produce

3650-434: The late 1950s. APL is a language for mathematical computations. Between 1949 and 1951, Heinz Rutishauser proposed Superplan , a high-level language and automatic translator. His ideas were later refined by Friedrich L. Bauer and Klaus Samelson . High-level language design during the formative years of digital computing provided useful programming tools for a variety of applications: Compiler technology evolved from

3723-520: The major reworks planned for 2.2, such as the rewrite of the unit system, had still not begun, and it was decided to instead start stabilizing the already implemented features. Some of the motives for this roadmap change were the needs of the Lazarus integrated development environment project, particularly the internal linker, support for Win64 , Windows CE , and OS X on x86 , and related features like DWARF . After betas 2.1.2 and 2.1.4, version 2.2.0

SECTION 50

#1732780222223

3796-408: The need for a strictly defined transformation of the high-level source program into a low-level target program for the digital computer. The compiler could be viewed as a front end to deal with the analysis of the source code and a back end to synthesize the analysis into the target code. Optimization between the front end and back end could produce more efficient target code. Some early milestones in

3869-570: The only language processor used to transform source programs. An interpreter is computer software that transforms and then executes the indicated operations. The translation process influences the design of computer languages, which leads to a preference of compilation or interpretation. In theory, a programming language can have both a compiler and an interpreter. In practice, programming languages tend to be associated with just one (a compiler or an interpreter). Theoretical computing concepts developed by scientists, mathematicians, and engineers formed

3942-563: The original port of the run-time library to OS/2 and EMX. The compiler improved gradually, and the DOS version migrated to the GO32v2 extender. This culminated in release 0.99.5, which was much more widely used than prior versions, and was the last release aiming only for Borland Pascal compliance; later releases added a Delphi compatibility mode. This release was also ported to systems using Motorola 68000 family (m68k) processors. With release 0.99.8

4015-667: The overall effort on Ada development. Other Ada compiler efforts got underway in Britain at the University of York and in Germany at the University of Karlsruhe. In the U. S., Verdix (later acquired by Rational) delivered the Verdix Ada Development System (VADS) to the Army. VADS provided a set of development tools including a compiler. Unix/VADS could be hosted on a variety of Unix platforms such as DEC Ultrix and

4088-511: The performance and the quality of the produced machine code. The middle end contains those optimizations that are independent of the CPU architecture being targeted. The main phases of the middle end include the following: Compiler analysis is the prerequisite for any compiler optimization, and they tightly work together. For example, dependence analysis is crucial for loop transformation . The scope of compiler analysis and optimizations vary greatly; their scope may range from operating within

4161-646: The phase structure of the PQC. The BLISS-11 compiler provided the initial structure. The phases included analyses (front end), intermediate translation to virtual machine (middle end), and translation to the target (back end). TCOL was developed for the PQCC research to handle language specific constructs in the intermediate representation. Variations of TCOL supported various languages. The PQCC project investigated techniques of automated compiler construction. The design concepts proved useful in optimizing compilers and compilers for

4234-679: The programmer full control over the hardware via the RTL units. The runtime implements multi-threaded, pre-emptive multitasking. The programmer can put threads on a specific CPU or let the runtime divide the load automatically or a mix of the two. Most Raspberry Pi models are supported including the A, B, A+ and B+ as well as the Raspberry Pi 2B, 3B, 4B/400/CM4 and Zero. Like most modern compilers, Free Pascal can be used with an integrated development environment (IDE). Besides independent IDEs there are also plugins to various existing IDEs Apart from

4307-429: The resource limitations of early systems, many early languages were specifically designed so that they could be compiled in a single pass (e.g., Pascal ). In some cases, the design of a language feature may require a compiler to perform more than one pass over the source. For instance, consider a declaration appearing on line 20 of the source which affects the translation of a statement appearing on line 10. In this case,

4380-490: The source code to build an internal representation of the program, called the intermediate representation (IR). It also manages the symbol table , a data structure mapping each symbol in the source code to associated information such as location, type and scope. While the frontend can be a single monolithic function or program, as in a scannerless parser , it was traditionally implemented and analyzed as several phases, which may execute sequentially or concurrently. This method

4453-469: The source language grows in complexity the design may be split into a number of interdependent phases. Separate phases provide design improvements that focus development on the functions in the compilation process. Classifying compilers by number of passes has its background in the hardware resource limitations of computers. Compiling involves performing much work and early computers did not have enough memory to contain one program that did all of this work. As

SECTION 60

#1732780222223

4526-460: The stabilization of what would become 1.0. x , and also when porting to the Motorola 68k systems, it was clear that the design of the code generator was far too limited in many aspects. The principal problems were that adding processors meant rewriting the code generator, and that the register allocation was based on the principle of always keeping three free registers between building blocks, which

4599-440: The syntax of "sentences" of a language. It was developed by John Backus and used for the syntax of Algol 60 . The ideas derive from the context-free grammar concepts by linguist Noam Chomsky . "BNF and its extensions have become standard tools for describing the syntax of programming notations. In many cases, parts of compilers are generated automatically from a BNF description." Between 1942 and 1945, Konrad Zuse designed

4672-666: Was also improved. Another major feature was the internal linker for Win32, Win64, and Windows CE, which greatly improved linking time and memory use, and make the compile-link-run cycle in Lazarus much faster. The efficiency for smart-linking, or dead code elimination , was also improved. Minor new features included improved DWARF (2/3) debug format support, and optimizations such as tail recursion , omission of unneeded stack frames and register-based common subexpression elimination (CSE) optimization. A first implementation of generic programming (generics) support also became available, but only experimentally. The 2.4.x release series had

4745-432: Was developed for a Digital Equipment Corporation (DEC) PDP-10 computer by W. A. Wulf's Carnegie Mellon University (CMU) research team. The CMU team went on to develop BLISS-11 compiler one year later in 1970. Multics (Multiplexed Information and Computing Service), a time-sharing operating system project, involved MIT , Bell Labs , General Electric (later Honeywell ) and was led by Fernando Corbató from MIT. Multics

4818-473: Was inflexible and difficult to maintain. For these reasons, the 1.1. x series branched off from the 1.0. x main branch in December 1999. At first, changes were mostly clean-ups and rewrite-redesigns to all parts of the compiler. The code generator and register allocator were also rewritten. Any remaining missing Delphi compatibility was added. The work on 1.1.x continued slowly but steadily. In late 2003,

4891-491: Was published on June 19, 2020. It introduced many new language features, including generic routines, standard namespaces, managed records and expanded functionality for dynamic arrays, in addition to the advent of new standard units and the support of additional platforms. Version 3.2.2 was released on May 20, 2021, and supports macOS on AArch64 and naming of threads. Additionally it includes bug fixes and minor compiler updates. Free Pascal also supports byte code generation for

4964-667: Was released in September 2007, followed by version 2.2.2 in August 2008 and version 2.2.4 in March 2009. The 2.2. x series vastly improved support for the ActiveX and Component Object Model (COM) interface , and Object Linking and Embedding (OLE), though bugs were still being found. The delegation to interface using the implements keyword was partly implemented, but was not complete as of March 2011. Library support for ActiveX

5037-406: Was released on February 15, 2017, and includes bug fixes and minor compiler updates. Version 3.0.4 was released on November 28, 2017. It includes many language improvements over previous versions, including an internal linker for Executable and Linkable Format (ELF), Arm AARCH64 for iOS and Linux, a revived i8086 platform, extended libraries and much more. The next major release, version 3.2.0,

5110-401: Was released, followed on November 13, 2010, by bug fix release 2.4.2, with support for for..in loops, sealed and abstract classes, and other changes. In January 2012, Free Pascal 2.6 was released. This first version from the 2.6 release series also supported Objective Pascal on OS X and iOS targets and implemented many small improvements and bug fixes. In February 2013, FPC 2.6.2

5183-399: Was released. It contained NetBSD and OpenBSD releases for the first time since 1.0.10, based on fresh ports. In March 2014, the last point release in the 2.6 series, 2.6.4, was launched, featuring mostly database (fcl-db) updates. Version 3.0.0 was released on November 25, 2015, and was the first major release since January 1, 2012. It introduced many new language features. Version 3.0.2

5256-630: Was the addition of support for generics to Free Pascal in version 2.2.0, several years before they were supported in any capacity by Delphi. In 2011 several Delphi 2006-specific features were added in the development branch, and some of the starting work for the features new in Delphi 2009 (most notably the addition of the UnicodeString type) was completed. The development branch also has an Objective-Pascal extension for Objective-C ( Cocoa ) interfacing. As of version 2.7.1, Free Pascal implemented basic ISO Pascal mode, though many things such as

5329-470: Was written in the PL/I language developed by IBM and IBM User Group. IBM's goal was to satisfy business, scientific, and systems programming requirements. There were other languages that could have been considered but PL/I offered the most complete solution even though it had not been implemented. For the first few years of the Multics project, a subset of the language could be compiled to assembly language with

#222777