Menu
Clipper ( look at an article in Wikipedia) is a programming language from the xBase-family, and a programming environment, which includes a compiler for this language. When compared, for example, with C - we have a C language and various programming environments for C - Borland C Builder, Microsoft Visual C, etc. Fundamental Concepts in Programming Languages. This is a programming language which has been under development since 1962 at Cambridge and London and Oxford. Clipper Programming Language. From Wikipedia, the free encyclopedia.(*) Clipper (or CA-Clipper) is a compiler 16 bits of language xBase environment for DOS. It was created in 1984 with the purpose of being a compiler for Ashton-Tate dBase, a database manager very popular in his time. This page created by ng2html v1.05, the Norton guide to HTML conversion utility. Written by Dave PearsonDave Pearson. Clipper is an xBase compiler, which is a computer programming language, that is used to create software programs that originally operated primarily under MS-DOS.Although it is a powerful general-purpose programming language, it was primarily used to create database/business programs. I have a working knowledge of the Spanish language. Clipper or xBase++ code development and maintenance. Clipper to xBase++ conversions. Novell to NT/Windows server Clipper/xBase++ transitions. Testimonials: I was continually amazed by your ability to accomplish a programming task - that some called impossible - in a matter of days.
Programming language lists |
---|
This is a list of notable programming languages, grouped by type.
Since there is no overarching classification scheme for programming languages, in many cases, a language will be listed under multiple headings.
- 13Embeddable languages
- 13.1In source code
- 18Functional languages
- 19Hardware description languages
- 24Languages by memory management type
- 29Macro languages
- 34Object-oriented class-based languages
- 44Shading languages
Array languages[edit]
Array programming (also known as vector or multidimensional) languages generalize operations on scalars to apply transparently to vectors, matrices, and higher-dimensional arrays.
Assembly languages[edit]
Assembly languages directly correspond to a machine language (see below) so machine code instructions appear in a form understandable by humans. Assembly languages let programmers use symbolic addresses, which the assembler converts to absolute addresses. Most assemblers also support macros and symbolic constants.
Authoring languages[edit]
An authoring language is a programming language used to create tutorials, websites, and other interactive computer programs.
Constraint programming languages[edit]
A constraint programming language is a declarative programming language where relationships between variables are expressed as constraints. Execution proceeds by attempting to find values for the variables which satisfy all declared constraints.
Command line interface languages[edit]
Command-line interface (CLI) languages are also called batch languages or job control languages. Examples:
- 4DOS (extended command-line shell for IBM PCs)
- bash (the Bourne-Again shell from GNU/FSF)
- CLIST (MVS Command List)
- csh and tcsh (C-like shell from Bill Joy at UC Berkeley)
- DCL DIGITAL Command Language – standard CLI language for VMS (DEC, Compaq, HP)
- DOS batch language (standard CLI/batch language for the IBM PC running DOS operating systems, popular before Windows)
- Expect (a Unix automation and test tool)
- fish (a Unix shell)
- Hamilton C shell (a C shell for Windows)
- JCL (punch card-oriented batch control language for IBM System/360 family mainframes)
- ksh (a standard Unix shell, written by David Korn)
- Rc (command-line shell for Plan 9)
- sh (the standard Unix shell, written by Stephen R. Bourne)
- TACL (Tandem Advanced Command Language)
- Windows batch language (Windows batch file language as understood by COMMAND.COM and CMD.EXE)
- Windows PowerShell (Microsoft.NET-based CLI)
- zsh (a Unix shell)
Compiled languages[edit]
These are languages typically processed by compilers, though theoretically any language can be compiled or interpreted[citation needed]. See also compiled language.
- Ada (multi-purpose language)
- ALGOL (extremely influential language design – the second high level language compiler)
- Ballerina (compiled to bytecode specific to the Ballerina Runtime (BVM))
- BASIC (some dialects, including the first version of Dartmouth BASIC)
- C (one of the most widely used procedural programming languages)
- C++ (Widely used object-oriented language used in large-scale, complex, high-performance software)
- C# (compiled into CIL, generates a native image at runtime)
- Ceylon (compiled into JVMbytecode)
- CLIPPER 5.3 (programming Language for DOS-based software)
- CLEO (Clear Language for Expressing Orders) on the British Leo computers
- D (based on a reengineering of C++)
- DASL compiles into Java, JavaScript, JSP, Flex, etc. as .war file
- Delphi (Borland's Object Pascal development system)
- DIBOL (Digital Interactive Business Oriented Language)
- Eiffel (object-oriented language developed by Bertrand Meyer)
- F# (compiled into CIL, to generate runtime image
- Forth (professional systems, like VFX and SwiftForth)
- Fortran (the first high-level, compiled language, from IBM's John Backus)
- Gosu (compiled into JVMbytecode)
- Groovy (compiled into JVMbytecode)
- Java (usually compiled into JVMbytecode although ahead-of-time (AOT) compilers exist that compile to machine code)
- Julia (Compiled on the fly to machine code)
- Nemerle (compiled into intermediate language bytecode)
- Pascal (most implementations)
- PL/I (large general purpose language, originally for IBM mainframes)
- Python (compiled into intermediate Virtual Machinebytecode)
- RPG (Report Program Generator)
- Scala (compiled into JVMbytecode)
- Scheme (some implementations, e.g. Gambit)
- SequenceL – purely functional, automatically parallelizing and race-free
- Simula (the first object-oriented language, developed by Ole-Johan Dahl and Kristen Nygaard)
- Smalltalk generally compiled to platform independent bytecode that runs on a Virtual Machine
- ML
- Standard ML (SML)
- Vala (Compiler for the GObject type system)
- Visual Basic (Use CIL that is JIT compiled into a native runtime.)
Concurrent languages[edit]
Message passing languages provide language constructs for concurrency. The predominant paradigm for concurrency in mainstream languages such as Java is shared memory concurrency. Concurrent languages that make use of message passing have generally been inspired by process calculi such as CSP or the π-calculus.
- Ada (multi-purpose language)
- Alef – concurrent language with threads and message passing, used for systems programming in early versions of Plan 9 from Bell Labs
- Ateji PX an extension of the Java language for parallelism
- Ballerina - a language designed for implementing and orchestrating micro-services. Provides a message based parallel-first concurrency model.
- ChucK – domain specific programming language for audio, precise control over concurrency and timing
- Cilk – a concurrent C
- Cω – C Omega, a research language extending C#, uses asynchronous communication
- Clojure – a dialect of Lisp for the Java virtual machine
- Concurrent Pascal (by Brinch-Hansen)
- E – uses promises, ensures deadlocks cannot occur
- Eiffel (through the SCOOP mechanism, Simple Concurrent Object-Oriented Computation)
- Elixir (runs on the Erlang VM)
- Erlang – uses asynchronous message passing with nothing shared
- Gambit Scheme - using the Termite library
- Java
- Join Java – concurrent language based on Java
- Joule – dataflow language, communicates by message passing
- Limbo – relative of Alef, used for systems programming in Inferno (operating system)
- MultiLisp – Scheme variant extended to support parallelism
- occam – influenced heavily by Communicating Sequential Processes (CSP)
- occam-π – a modern variant of occam, which incorporates ideas from Milner's π-calculus
- Oz – multiparadigm language, supports shared-state and message-passing concurrency, and futures, and Mozart Programming System cross-platform Oz
- Pict – essentially an executable implementation of Milner's π-calculus
- Scala – implements Erlang-style actors on the JVM
- SequenceL – purely functional, automatically parallelizing and race-free
- SR – research language
- XProc – XML processing language, enabling concurrency
Curly-bracket languages[edit]
Curly-bracket or curly-brace programming languages have a syntax that defines statement blocks using the curly bracket or brace characters
{
and }
. This syntax originated with BCPL (1966), and was popularized by C. Many curly-bracket languages descend from or are strongly influenced by C. Examples of curly-bracket languages include:- Alef
- Limbo
- C – developed circa 1970 at Bell Labs
- ChucK – audio programming language
- Cilk – concurrent C for multithreaded parallel programming
- Cyclone – a safer C variant
- DASL – based on Java
- ECMAScript
- Java
- Nemerle – combines C# and ML features, provides syntax extension abilities
- Windows PowerShell (Microsoft.NET-based CLI)
Dataflow languages[edit]
Dataflow programming languages rely on a (usually visual) representation of the flow of data to specify the program. Frequently used for reacting to discrete events or for processing streams of data. Examples of dataflow languages include:
- G (used in LabVIEW)
Data-oriented languages[edit]
Data-oriented languages provide powerful ways of searching and manipulating the relations that have been described as entity relationship tables which map one set of things into other sets.[citation needed] Examples of, containing imperative features. Many functional languages are tied to mathematical calculation tools. Functional languages include:
Pure[edit]
Impure[edit]
- C++ (since C++11)
- ECMAScript
- Erlang
- Lisp
- Scheme
- Racket (formerly PLT Scheme)
- Scheme
- ML
- Standard ML (SML)
- Perl
Hardware description languages[edit]
In electronics, a Hardware description language or HDL is a specialized computer language used to describe the structure, design and operation of electronic circuits, and most commonly, digital logic circuits. The two most widely used and well-supported HDL varieties used in industry are Verilog and VHDL. Hardware description languages include:
HDLs for analog circuit design[edit]
- Verilog-AMS (Verilog for Analog and Mixed-Signal)
- VHDL-AMS (VHDL with Analog/Mixed-Signal extension)
HDLs for digital circuit design[edit]
- Advanced Boolean Expression Language(ABEL)
- Altera Hardware Description Language(AHDL)
- VHDL (VHSIC HDL)
Imperative languages[edit]
Imperative programming languages may be multi-paradigm and appear in other classifications. Here is a list of programming languages that follow the imperative paradigm:
- Modula-2, Modula-3
Interactive mode languages[edit]
Interactive mode languages act as a kind of shell: expressions or statements can be entered one at a time, and the result of their evaluation is seen immediately. The interactive mode is also known as a REPL (read–eval–print loop).
- BASIC (some dialects)
- Dart (with Observatory or Dartium's developer tools)
- Elixir (with iex)
- Haskell (with the GHCi or Hugs interpreter)
- Java (since version 9)
- JavaScript (using command line tools like Node.js or Rhino or the developer tools built into web browsers like Firefox or Chrome)
- MUMPS (an ANSI standard general purpose language)
- Mathematica (Wolfram language)
- Ruby (with IRB)
- Smalltalk (anywhere in a Smalltalk environment)
- S-Lang (with the S-Lang shell, slsh)
- Tcl (with the Tcl shell, tclsh)
- Windows PowerShell (Microsoft.NET-based CLI)
- Visual FoxPro (Microsoft)
Interpreted languages[edit]
Interpreted languages are programming languages in which programs may be executed from source code form, by an interpreter. Theoretically, any language can be compiled or interpreted, so the term *interpreted language* generally refers to languages that are commonly interpreted rather than compiled.
- AutoHotkey scripting language
- AutoIt scripting language
- BASIC (some dialects)
- DATABUS (later versions added optional compiling)
- Eiffel (via 'Melting Ice Technology' in EiffelStudio)
- Forth (interactive shell only; otherwise compiled to native or threaded code)
- Julia (Compiled on the fly to machine code, but a transpiler Julia2C is also available.)
- Lisp (Early versions, pre-1962, and some experimental ones; production Lisp systems are compilers, but many of them still provide an interpreter if needed.)
- MUMPS (an ANSI standard general purpose language)
- Pascal(early implementations)
- Standard ML (SML)
- thinBasic scripting language
- Windows PowerShell (Microsoft.NET-based CLI)
- Some scripting languages (below)
Iterative languages[edit]
Iterative languages are built around or offering generators.
- Eiffel, through 'agents'
Languages by memory management type[edit]
Garbage collected languages[edit]
- Lisp (originator)
- ML
- Standard ML (SML)
Languages with manual memory management[edit]
Languages with deterministic memory management[edit]
- Rust[1][2]
Languages with automated reference counting (ARC)[edit]
List-based languages – LISPs[edit]
List-based languages are a type of is essentially a short piece of text that expands into a longer one (not to be confused with hygienic macros), possibly with parameter substitution. They are often used to preprocess source code. Preprocessors can also supply facilities like file inclusion.
Macro languages may be restricted to acting on specially labeled code regions (pre-fixed with a
#
in the case of the C preprocessor). Alternatively, they may not, but in this case it is still often undesirable to (for instance) expand a macro embedded in a string literal, so they still need a rudimentary awareness of syntax. That being the case, they are often still applicable to more than one language. Contrast with source-embeddable languages like PHP, which are fully featured.- cpp (the C preprocessor)
- m4 (originally from AT&T, bundled with Unix)
- ML/I (general purpose macro processor)
Application macro languages[edit]
Scripting languages such as Tcl and ECMAScript (ActionScript, ECMAScript for XML, JavaScript, JScript) have been embedded into applications. These are sometimes called 'macro languages', although in a somewhat different sense to textual-substitution macros like m4.
Metaprogramming languages[edit]
Metaprogramming is the writing of programs that write or manipulate other programs (or themselves) as their data or that do part of the work that is otherwise done at run time during compile time. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually.
- Rust[3]
Multiparadigm languages[edit]
Multiparadigm languages support more than one programming paradigm. They allow a program to use more than one programming style. The goal is to allow programmers to use the best tool for a job, admitting that no one paradigm solves all problems in the easiest or most efficient way.
- 1C:Enterprise programming language (generic, imperative, object-oriented, prototype-based, functional)
- Ada (concurrent, distributed, generic (template metaprogramming), imperative, object-oriented (class-based))
- ALF (functional, logic)
- Alma-0 (constraint, imperative, logic)
- APL (functional, imperative, object-oriented (class-based))
- BETA (functional, imperative, object-oriented (class-based))
- C++ (generic, imperative, object-oriented (class-based), functional, metaprogramming)
- C# (generic, imperative, object-oriented (class-based), functional, declarative)
- Ceylon (generic, imperative, object-oriented (class-based), functional, declarative)
- ChucK (imperative, object-oriented, time-based, concurrent, on-the-fly)
- Cobra (generic, imperative, object-oriented (class-based), functional, contractual)
- Common Lisp (functional, imperative, object-oriented (class-based), aspect-oriented (user may add further paradigms, e.g., logic))
- Curl (functional, imperative, object-oriented (class-based), metaprogramming)
- Curry (concurrent, functional, logic)
- D (generic, imperative, functional, object-oriented (class-based), metaprogramming)
- Delphi (generic, imperative, object-oriented (class-based), metaprogramming)
- Dylan (functional, object-oriented (class-based))
- eC (generic, imperative, object-oriented (class-based))
- ECMAScript (functional, imperative, object-oriented (prototype-based))
- Eiffel (imperative, object-oriented (class-based), generic, functional (agents), concurrent (SCOOP))
- F# (functional, generic, object-oriented (class-based), language-oriented)
- Fantom (functional, object-oriented (class-based))
- Go (imperative, procedural),
- Groovy (functional, object-oriented (class-based),imperative,procedural)
- J (functional, imperative, object-oriented (class-based))
- Julia (imperative, multiple dispatch ('object-oriented'), functional, metaprogramming)
- LabVIEW (dataflow, visual)
- Lava (object-oriented (class-based), visual)
- Lua (functional, imperative, object-oriented (prototype-based))
- Mercury (functional, logical, object-oriented)
- Metaobject protocols (object-oriented (class-based, prototype-based))
- Nemerle (functional, object-oriented (class-based), imperative, metaprogramming)
- Objective-C (imperative, object-oriented (class-based), reflective)
- OCaml (functional, imperative, object-oriented (class-based), modular)
- Oz (functional (evaluation: eager, lazy), logic, constraint, imperative, object-oriented (class-based), concurrent, distributed), and Mozart Programming System cross-platform Oz
- Object Pascal (imperative, object-oriented (class-based))
- Perl (imperative, functional (can't be purely functional), object-oriented, class-oriented, aspect-oriented (through modules))
- PHP (imperative, object-oriented)
- Prograph (dataflow, object-oriented (class-based), visual)
- Python (functional, compiled, interpreted, object-oriented (class-based), imperative, metaprogramming, extension, impure, interactive mode, iterative, reflective, scripting)
- R (array, interpreted, impure, interactive mode, list-based, object-oriented prototype-based, scripting)
- Racket (functional, imperative, object-oriented (class-based) and can be extended by the user)
- REBOL (functional, imperative, object-oriented (prototype-based), metaprogramming (dialected))
- RED (functional, imperative, object-oriented (prototype-based), metaprogramming (dialected))
- ROOP (imperative, logic, object-oriented (class-based), rule-based)
- Ruby (imperative, functional, object-oriented (class-based), metaprogramming)
- Rust (concurrent, functional, imperative, object-oriented, generic, metaprogramming, compiled)
- Scala (functional, object-oriented)
- Seed7 (imperative, object-oriented, generic)
- SISAL (concurrent, dataflow, functional)
- Spreadsheets (functional, visual)
- Swift (protocol-oriented, object-oriented, functional, imperative, block-structured)
- Tcl (functional, imperative, object-oriented (class-based))
- Tea (functional, imperative, object-oriented (class-based))
- Windows PowerShell (functional, imperative, pipeline, object-oriented (class-based))
Numerical analysis[edit]
- Seneca – an Oberon variant
Non-English-based languages[edit]
- Chinese BASIC – Chinese
- Fjölnir – Icelandic
- Language Symbolique d'Enseignement – French
- Lexico – Spanish
- Rapira – Russian
- ezhil-Tamil
Object-oriented class-based languages[edit]
Class-based Object-oriented programming languages support objects defined by their class. Class definitions include member data. Message passing is a key concept (if not the key concept) in Object-oriented languages.
Polymorphic functions parameterized by the class of some of their arguments are typically called methods. In languages with single dispatch, classes typically also include method definitions. In languages with multiple dispatch, methods are defined by generic functions. There are exceptions where single dispatch methods are generic functions (e.g. Bigloo's object system).
Multiple dispatch[edit]
Single dispatch[edit]
- Ada 95 and Ada 2005 (multi-purpose language)
- Oxygene (formerly known as Chrome)
- Eiffel
- Java
- Modula-2 (data abstraction, information hiding, strong typing, full modularity)
- Modula-3 (added more object-oriented features to Modula-2)
- Oberon-2 (full object-orientation equivalence in an original, strongly typed, Wirthian manner)
- Objective-C (a superset of C adding a Smalltalk derived object model and message passing syntax)
- Perl 5
- Python (interpretive language, optionally object-oriented)
- Revolution (programmer does not get to pick the objects)
- Simula (the first object-oriented language, developed by Ole-Johan Dahl and Kristen Nygaard)
- Smalltalk (pure object-orientation, developed at Xerox PARC)
- Squeak
- VBScript (Microsoft Office 'macro scripting' language)
Object-oriented prototype-based languages[edit]
Prototype-based languages are object-oriented languages where the distinction between classes and instances has been removed:
- ECMAScript
- JavaScript (first named Mocha, then LiveScript)
- Etoys in Squeak
- Self (the first prototype-based language, derived from Smalltalk)
Off-side rule languages[edit]
Off-side rule languages denote blocks of code by their indentation.
- ISWIM, the abstract language that introduced the rule
- ABC, Python's parent
- Python
- Miranda, Haskell's parent
- Haskell
- Elixir (, do: blocks)
Procedural languages[edit]
Procedural programming languages are based on the concept of the unit and scope (the data viewing range) of an executable code statement. A procedural program is composed of one or more units or modules, either user coded or provided in a code library; each module is composed of one or more procedures, also called a function, routine, subroutine, or method, depending on the language. Examples of procedural languages include:
- Ada (multi-purpose language)
- ALGOL (extremely influential language design – the second high level language compiler)
- BASIC (BASICs are innocent of most modularity in (especially) versions before about 1990)
- C++ (C with objects plus much else, such as, generics through STL)
- C# (similar to Java/C++)
- ChucK (C/Java-like syntax, with new syntax elements for time and parallelism)
- Combined Programming Language (CPL)
- DASL(partly declarative, partly imperative)
- ECMAScript
- JavaScript (first named Mocha, then LiveScript)
- Fortran (better modularity in later Standards)
- Java
- Modula-2 (fundamentally based on modules)
- MUMPS (More modular in its first release than a language of the time should have been; The standard has become still more modular since then.)
- Oberon and Oberon-2 (improved, smaller, faster, safer follow-ons for Modula-2)
- Pascal (successor to ALGOL 60, predecessor of Modula-2)
- Free Pascal (FPC)
- Object Pascal (Delphi)
- PL/I (large general purpose language, originally for IBM mainframes)
- RPG (available only in IBM's System i midrange computers)
Query languages[edit]
Reflective Language[edit]
Reflective languages let programs examine and possibly modify their high level structure at runtime or compile-time. This is most common in high-level virtual machine programming languages like Smalltalk, and less common in lower-level programming languages like C. Languages and platforms supporting reflection:
- Emacs Lisp
- Java
- Lisp
- Oberon-2 – ETH Oberon System
- Poplog
- Smalltalk (pure object-orientation, originally from Xerox PARC)
- Wolfram Language
Rule-based languages[edit]
Rule-based languages instantiate rules when activated by conditions in a set of data. Of all possible activations, some set is selected and the statements belonging to those rules execute. Rule-based languages include:[citation needed]
- ToonTalk – robots are rules
- XSLT[citation needed]
Scripting languages[edit]
'Scripting language' has two apparently different, but in fact similar, meanings. In a traditional sense, scripting languages are designed to automate frequently used tasks that usually involve calling or passing commands to external programs. Many complex application programs provide built-in languages that let users automate tasks. Those that are interpretive are often called scripting languages.
Recently, many applications have built-in traditional scripting languages, such as Perl or Visual Basic, but there are quite a few native scripting languages still in use. Many scripting languages are compiled to bytecode and then this (usually) platform-independent bytecode is run through a virtual machine (compare to Java virtual machine).
- C# (compiled to CLI bytecode, and running JIT inside the CLR VM)
- Ch (Embeddable C/C++ interpreter)
- Emacs Lisp
- JavaScript (first named Mocha, then LiveScript)
- Game Maker Language (GML)
- Julia (still, compiled on the fly to machine code)
- Object REXX (OREXX, OOREXX)
- PHP (intended for Web servers)
- WebDNA, dedicated to database-driven websites
- Windows PowerShell (Microsoft.NET-based CLI)
- Many shell command languages such as the Unix shell or DCL on VMS have powerful scripting abilities.
Stack-based languages[edit]
Stack-based languages are a type of and 'normal'. Due to the variety of target markets for 3D computer graphics.
Real-time rendering[edit]
They provide both higher hardware abstraction and a more flexible programming model than previous paradigms which hardcoded transformation and shading equations. This gives the programmer greater control over the rendering process and delivers richer content at lower overhead.
- Adobe Graphics Assembly Language also known as AGAL[4]
- ARB assembly language also known as ARB assembly
- OpenGL Shading Language also known as GLSL or glslang
- DirectX Shader Assembly Language
- DirectX High-Level Shading Language also known as HLSL or High-Level Shader Language
- PlayStation Shader Language also known as PSSL
- Cg programming language also known as Cg
- Shining Rock Shading Language also known as SRSL[5]
- Spark[6]
- Nitrous Shading Language[7]
- Godot Shading Language[8]
Offline rendering[edit]
Shading languages used in offline rendering produce maximum image quality. Processing such shaders is time-consuming. The computational power required can be expensive because of their ability to produce photorealistic results.
- RenderMan Shading Language also known as RSL
- Houdini VEX Shading Language also known as VEX
- Open Shading Language also known as OSL
Syntax handling languages[edit]
These languages assist with generating lexical analyzers and parsers for Context-free grammars.
- Coco/R (EBNF with semantics)
- GNU bison (FSF's version of Yacc)
- GNU Flex (FSF's version of Lex)
- glex/gyacc (GoboSoft compiler compiler to Eiffel)
- lex (Lexical Analysis, from Bell Labs)
- yacc (yet another compiler compiler, from Bell Labs)
System languages[edit]
The system programming languages are for low level tasks like memory management or task management. A system programming language usually refers to a programming language used for system programming; such languages are designed for writing system software, which usually requires different development approaches when compared with application software.
System software is computer software designed to operate and control the computer hardware, and to provide a platform for running application software. System software includes software categories such as operating systems, utility software, device drivers, compilers, and linkers. Examples of system languages include:
Language | Originator | First appeared | Influenced by | Used for |
---|---|---|---|---|
ESPOL | Burroughs Corporation | 1961 | Algol 60 | MCP |
PL/I | IBM, SHARE | 1964 | Algol, FORTRAN, some COBOL | Multics |
PL360 | Niklaus Wirth | 1968 | Algol 60 | Algol W |
C | Dennis Ritchie | 1969 | BCPL | Most operating system kernels, including Windows NT and most Unix-like systems |
PL/S | IBM | 196x | PL/I | OS/360 |
BLISS | Carnegie Mellon University | 1970 | Algol-PL/I[9] | VMS (portions) |
PL/8 | IBM | 197x | PL/I | AIX |
PL-6 | Honeywell, Inc. | 197x | PL/I | CP-6 |
SYMPL | CDC | 197x | JOVIAL | NOS subsystems, most compilers, FSE editor |
C++ | Bjarne Stroustrup | 1979 | C, Simula | See C++ Applications[10] |
Ada | Jean Ichbiah, S. Tucker Taft | 1983 | Algol 68, Pascal, C++, Java, Eiffel | Embedded systems, OS kernels, compilers, games, simulations, CubeSat, air traffic control, and avionics |
D | Digital Mars | 2001 | C++ | Multiple domains[11] |
Nim | Andreas Rumpf | 2008 | Ada, Modula-3, Lisp, C++, Object Pascal, Python, Oberon | OS kernels, compilers, games |
Rust | Mozilla Research[12] | 2010 | C++, Haskell, Erlang, Ruby | Servo layout engine, Redox OS |
Swift | Apple Inc. | 2014 | C, Objective-C, Rust | macOS, iOS app development [b] |
Transformation languages[edit]
Visual languages[edit]
Visual programming languages let users specify programs in a two-(or more)-dimensional way, instead of as one-dimensional text strings, via graphic layouts of various types. Some dataflow programming languages are also visual languages.
- G (used in LabVIEW)
- Scratch (written in and based on Squeak, a version of Smalltalk)
Wirth languages[edit]
Computer scientist Niklaus Wirth designed and implemented several influential languages.
- Modula-2 (and Modula-3, etc. variants)
- Obliq Modula 3 variant
- Oberon (Oberon, Oberon-07, and Oberon-2)
- Pascal
- Object Pascal ('umbrella' name for Delphi, Free Pascal, Oxygene and others)
XML-based languages[edit]
These are languages based on or that operate on XML.
See also[edit]
- IEC 61131-3 – a standard for PLC programming languages
Notes[edit]
- ^The objects of SQL are collections of database records, called tables. A full programming language can specify algorithms, irrespective of runtime. Thus an algorithm can be considered to generate usable results. In contrast, SQL can only select records which are limited to the current collection, the data at hand in the system, rather than produce a statement of the correctness of the result.
- ^Swift uses automatic reference counting.
References[edit]
- ^'Understanding Ownership - The Rust Programming Language'. doc.rust-lang.org.
- ^'Smart Pointers - The Rust Programming Language'. doc.rust-lang.org.
- ^'Procedural Macros for Generating Code from Attributes'. doc.rust-lang.org.
- ^Scabia, Marco. 'What is AGAL | Adobe Developer Connection'. www.adobe.com. Adobe. Retrieved 8 May 2018.
- ^Hodorowicz, Luke. 'Shading Languages'. www.shiningrocksoftware.com. Shining Rock Software. Retrieved 8 May 2018.
- ^Foley, Tim; Hanrahan, Pat. 'Spark: Modular, Composable Shaders for Graphics Hardware | Intel® Software'. software.intel.com. ACM. Retrieved 8 May 2018.
- ^'Nitrous FAQ'. oxidegames.com. Retrieved 8 May 2018.
- ^Linietsky, Juan; Manzur, Ariel. 'Shading language — Godot Engine latest documentation'. docs.godotengine.org. Godot community. Retrieved 8 May 2018.
- ^Wulf, W.A.; Russell, D.B.; Haberman, A.N. (December 1971). 'BLISS: A Language for Systems Programming'. Communications of the ACM. 14 (12): 780–790. CiteSeerX10.1.1.691.9765. doi:10.1145/362919.362936. Retrieved January 11, 2014.
- ^'C++ Applications'.
- ^[1]
- ^'Mozilla Research'. 1 January 2014.
Retrieved from 'https://en.wikipedia.org/w/index.php?title=List_of_programming_languages_by_type&oldid=912731965'
The latest reviewed version was checked on 30 July 2019. There are 2 pending changes awaiting review.
Quite a lot of people were interested in the previous versions of this page, when it was the most visited page in my old website and so, in addition to my personal interest that keeps me delving into the subject, I wish to complete it.The interest in this topic is confirmed by the fact that another Wikibook was created on a very similar theme: Application_Development_with_Harbour, started on September 15, 2010 by the user Raumi75 - on his page he states laconically this intention: «I like the Harbour programming language and hope we can create the missing manual». Unfortunately the project didn't take off.
This page disappeared when GeoCities was closed (in fact it still contains some broken links to GeoCities pages), and it has been reloaded thank to some requests I got, for example on Facebook. There you can find the 'Harbour MiniGUI' group, and others.
As a newbie to Wikibooks, I did not yet properly format the few sources in this page (Wikibooks has syntax highlighting for Clipper, but it is a bit buggy). If you check it, you will see misplaced links and so..this page definitely needs proofreading!
I'd like to see this tutorial grow! If someone from newsgroups like comp.lang.clipper or mailing lists like HarbourUsers (http://lists.harbour-project.org/mailman/listinfo/harbourusers) or Facebook groups like Harbour Project would give me help or clues, or contribute, it would be great.To apologize for its incompleteness, I can only say that this page contains everything I know about Clipper and xBase programming (in a given moment.. I always try to learn new things..). I let digressions sneak in here and there, and also my sense of humor. This book not written in the serious style of all the other Wikibooks I've seen.
Ruby Programming Language Tutorial Pdf
I tried to adhere to the classical tutorials' bottom-up approach of showing all the basic function via very simple examples. The plan to include some bigger examples, with the top-down approach (how do I deal with this problem?) is suggested, but not yet pursued..
Windows XP SP3 Final Lite Gamer OS Tuesday, May 15th, 2018 - Windows, Windows Xp Lite edition will maximise our game experience, just for example when you use windows 7 and play dota (warcraft) in low ram (up to 512Mb) sometimes you will got lag in playing but when you tried this Operating System it can reduce your lag even remove pc lag. May 01, 2015 Windows XP SP3 Lite edition V3.0 Final is really appropriate choice to help you do your job. The way of downloading it is very simple, just click on. Oct 30, 2017 Windows 10 Lite Edition Free Download ISO bootable image full trial version 64-bit (x64) and 32-bit (x86) highly compressed single click google drive. Windows 10 extreme lite litetouch, super lite ISO 2017 update version/edition v2, v3, v4 English review full Offline installer standalone torrent download for PC. Windows xp performance edition v3 lite. Windows Xp Lite New Update V3 2018. But today, this os is a modification from the basic edition become new interface and performance. Modification doesn’t mean change overall system of windows XP, but it only change some parts. Download Windows XP SP3 Final Lite Edition v3.0. Download Link.
At the moment this guide deals mostly with (x)Harbour under Windows, although I plan to describe other environments.
I have decided to name this tutorial 'a Guide to Open Source Clipper(s)' and not 'a Guide to Open Source xBase' because I like the name Clipper, and as you can see by watching at the open source compilers I discuss (Clip and (x)Harbour) the influence of the name Clipper is great: only X2c doesn't recall the name Clipper (and now this new X# thing). I now consider the name inadequate. Maybe something like Programming With Harbour and Other Free xBase Languages?
Modern xBase open source/free dialects/implementations are:
- Harbour (https://harbour.github.io/)
- xHarbour (http://www.xharbour.org/)
- which are the most active and mature projects. The second is a fork of the first.
- Clip, which apparently exists in two versions on SourceForge: https://sourceforge.net/projects/x-clip/ (v 1.2.1.6, Last Update: 2017-06-04) and https://sourceforge.net/projects/clip-itk/
- X#, which is an implementation for .NET (https://www.xsharp.info/, https://github.com/X-Sharp/XSharpPublic). It looks interesting but the runtime is missing. The documentation is at https://www.xsharp.info/help/index.html.
- DBFree (http://www.dbfree.org) is used to create web applications and is open source, even if it contains components, such the fundamental component - the xBase interpreter MaxScript (http://maxscript.org/, http://www.maxsis.it) is not: it's just freeware.
X2c (http://web.archive.org/web/20090416070816/http://x2c.dtop.com/, http://freshmeat.sourceforge.net/projects/x2c) is very old - what use can it have for a modern programmer if the download links don't work and the only freely available C compiler can be found at the website Embarcadero Antique Software, namely https://cc.embarcadero.com/item/25636? However, I like some of its examples and I'll mention them.
This Guide was born as a set of notes when I followed a small project (I was asked about the possibility of porting an old Summer 87 program to Windows - and I did it by simply recompiling the source code to check Harbour's compatibility with Clipper, and creating a small Windows program, which showed a simple splash screen and an interface where the menu entries pointed to stubs). The experience was encouraging, although the Windows version of that application was never actually realized. Its by-product, my notes, evolved. Their first objective was to redo the examples of a 'PC GUIDE', the first of eight booklets of a self-instruction course in the Clipper language bought on an Italian newsstand in 1993.
I noticed also that there were no good tutorials and that the books about dBase/Clipper/xBase/Visual Objects and so on couldn't be found in any bookstore (and only with great difficulty in libraries!).
Some old versions of these notes can be found on GeoCities mirrors - (I'd like to thank W. Birula for letting me know, not to mention his suggestion of uploading my set of notes on Wikibook, and also for the flowchart he kindly provided). Thanks to bpd2000 for the interesting link he provided.
When (and if) finished, it will prove a complete guide to Open Source Clipper programming. However, this page is still very incomplete.
The current plan consists of two introductory chapters, then the first part of the tutorial will cover the basic of the language, up to the procedural programming facilities and the native database-DBF file support. Part 3 will explain OOP and other programming topics, and the last part will be about programming a user interface and web applications. This could even make up for a nice introduction to computer science!
- Part 1: Introduction
- Chapter 1: Getting Acquainted
- Chapter 2: Getting Started
- Part 2: The Common Ground
- Chapter 3: Basic Language Tutorial
- Chapter 4: Working with Databases
- Part 3: Additions to the Language
- Chapter 5: Object Oriented Programming
- Chapter 6: Some More Advanced Programming Topics
- Part 4: Real Applications
- Chapter 7: Making Up a User Interface
- Chapter 8: Web Applications
- 1Getting Started
- 3DBF Files in Other Languages
- 3.1Making a first database and recording some data
- 4Other programming topics
- 4.1Hash Arrays (Associative Arrays, Also Known as 'Hash Tables')
- 6Object Oriented Programming
Getting Started[edit]
In practice, (x)Harbour permits a great versatility, as it (they) can be used in four different ways:
- by running hbrun or xbscript and executing instructions interactively (much like a BASIC direct mode or immediate mode, although it is more similar to the dBase dot prompt). The main limit of this approach is that it cannot run expressions longer than a single line (but it is possible to enter more instructions on a line separating them with semicolons). However, much of my tutorial is thought to be entered, tested and understood one line at a time.
- by calling hbrun or xbscript specifying a .prg file as a line argument to execute it (which is again like specifying a file to run when invoking a BASIC interpreter)
- by compiling the file to a bytecode using the /gh option of the Harbour compiler and then running the resulting .hrb bytecode file with hbrun (this is similar to the workflow in Java, when you call the compiler javac and then the Java interpreter on the bytecode file)
- by using the Harbour compiler, C compiler and linker to get an executable file (utilities are given to get all the steps done in a single command)
- by using the compiler through an IDE
There are also commercial RADs, like Xailer (https://www.xailer.com/) or xHarbour Builder (https://www.xharbour.com/).
Antonino Perricone wrote an extension for Visual Studio Code, which is well documented at: https://github.com/APerricone/harbourCodeExtension/wiki, https://medium.com/harbour-magazine/visual-studio-code-for-harbour-e148f9c1861a, https://harbour.wiki/index.asp?page=PublicArticles&mode=show&id=190401174818&sig=6893630672. The main problem with the precompiled version of Visual Studio Code is that it's not under the MIT license.
xMate IDE: https://github.com/Petewg/MgM/tree/master/comp/ide
Packages providing syntax highlighting for various editors are available: for Sublime Text (https://www.sublimetext.com/) is available at https://github.com/asistex/Sublime-Text-harbour-Package, for SynWrite (http://www.uvviewsoft.com/synwrite/) at https://github.com/rafathefull/synwrite, for Atom Editor (https://atom.io/) at https://github.com/AtomLinter/linter-harbour, UltraEdit at http://forums.ultraedit.com/syntax-highlighting-wordfile-for-harbour-fivewin-t17880.html. I myself like Scintilla (https://www.scintilla.org/), a lightweight open source editor that supports the xBase syntax highlighting under the name Flagship - which is an implementation different from the open source ones we are considering but that does not make much difference and it's anyway highly configurable.
Getting Started With hbIDE[edit]
- To create a new project, select File > New > New Project Wizard (Prototype Only). We will name this project hbidetest, enter the path C:/hb32/projects/hbidetest.hbp and click Save and Close.
- Select File > Open Project in the menu bar.
- Right click the project hbidetest in the projects dock on the right and 'Set as Current' project.
- Select File > New > Source and create a file hbidetest.prg with the following content:
- Double click hbidetest in the projects dock so that the and click the Select Sources button near the Project Output text box, then select Save and close. It is a button not very well indicated - I think a button clearly stating 'Add source file' would have been better.
- Now after selecting Build > Build and Launch our program will show up.
Working with Databases[edit]
Let's return to the Wikipedia entry Database application.
Different kinds of database applications exists as well. If you did store your friend's phone numbers and addresses into a word processor, you would have what someone calls a Free-Form Database (however, a similar expression is an oxymoron in computer science) - myBase®, askSam®, Personal Knowbase®, MyInfo®, Info Select® and GeneralKB® are a bunch of specialized free-form database application, which actually means PIM (Personal information manager). Now, a word processor lets us search the information, but other operations, such as sorting them, cannot be done automatically by a word processor.
What about attempting to store it into a spreadsheet? We may use one column for the name, one for the surname, one for the telephone number, one for the city. This quick database, stored in a spreadsheet, may be searched and sorted: for example we can sort it by city and person's name in alphabetical order. This is a flat database, http://www2.research.att.com/~gsf/man/man1/cql.html: a flat database is a sequence of newline terminated records of delimiter separated fields, and a spreadsheet shows its limits in data entry and reporting (if you did want to use the data in your table to print out addresses on envelopes a spreadsheet is not a good tool).An example is MyDatabase (http://www.pcmag.com/article2/0,2817,760833,00.asp).
Spreadsheets are much better to do accounting: how much harder a book-keeper's work would be if his data were stored in a wordprocessing program? The purpose here is to have our data structured in a certain way: all the costs in a place, all earnings in another.
Before 1970 complex databases where managed using Hierarchical Databases (very little information is needed about them - see for example http://www.extropia.com/tutorials/sql/hierarchical_databases.html and http://people.cs.pitt.edu/~chang/156/14hier.html). An example of a hierarchical database is IBM IMS (Information Management System, which was developed during the mid-1960s for applications in the aerospace industry). Hierarchical Databases and Network Databases together form what today are referred to as Legacy Database Systems. Network databases where born as an extension to the programming language COBOL by the Conference on Data Systems Languages (CODASYL).
Today's standard is the Relational Database (RDBMS), which is 'a database with relationships between more than one table of records based on common fields'. We will speak of them in some detail, but we will briefly mention the fourth approach: Object Oriented Databases. These databases store objects (in the same sense the word is used in the expression object oriented programming). They're not much used, mostly because object are more complex than the simple fields a relational database stores in its tables.Informations at http://www.odbms.org/odmg-standard/.
The Wikipedia entry about DBase reads: «dBase is application development language and integrated navigational database management system which Ashton-Tate labeled as 'relational' but it did not meet the criteria defined by Dr. Edgar F. Codd's relational model». Codd's criteria (the 12 rules, which really are 13 because the first one is numbered '0') are so strict that that it is very hard to find a true relational database system, but the point is that dBase accessed databases in another way, so that it's considered a Navigational Database (which works in a way that simulates relational databases).
DBF Files in Other Languages[edit]
Because of the great success of dBase and its, the DBF file format became an industry standard. Many other database programs have used them to store data, like Lotus Approach. We also have many little utilities to view and convert to other formats these files. Here is a bunch of URLs: https://dbfview.com/, http://www.alexnolan.net/software/dbf.htm, https://dbfviewer.com/en/, https://www.dbf2002.com/, http://www.whitetown.com/dbf2sql/ («DBF to SQL Converter allows you to convert your dbf files to SQL script. Personal license $29.95», but cmp. https://www.vlsoftware.net/exportizer/).And is so widely used that interfaces for working with it are available for various languages, for example:
- Links for PHP interface:
- http://www.nusphere.com/kb/phpmanual/ref.dbase.htm?
- C++
- https://sourceforge.net/projects/xdb/, http://linux.techass.com/projects/xdb/xbasedocs/xbase_c1.html and http://linux.techass.com/projects/xdb/ Xbase (formerly known as xdb, also formerly known as xBase) is a collection of specifications, programs, utilities and a C++ class library for manipulating Xbase type datafiles and indices.
- Python
- https://sourceforge.net/projects/xbase-py/ A Python interface for managing dbf files
- Java
- https://sourceforge.net/projects/xbasej/ xBaseJ - xBase Engine for Java
Well now we will see how to work with DBF files the way it was intended.
Making a first database and recording some data[edit]
A verbose way[edit]
The code above created a DBF file, names.dbf, to be used by the following code. It will add a record to the DBF file. It is equivalent to the 'First Sample Program' of my old PC GUIDE, which missed a line that is necessary in modern xBase.
The CLOSE command is equivalent to the dbCloseArea() function, which closes a work area: Pending updates are written, pending locks are released.
A more concise way[edit]
The short code below does the same work of the two pieces of code of the previous section (it only produces a different file name, namesdb.dbf instead of names.dbf).
This example uses the alias operator, ->. http://www.ousob.com/ng/clguide/ngcf412.php
The alias->field_name notation is used to allow access to fields of databases that are loaded but not active. The alias can be specified with the work area number (e.g. 2->std_id), with the work area alias (e.g. B->std_id), or with the database name (e.g. STUDENTS->std_id).
The result of this code is a file named namesdb.dbf. Informations about how DBF files are can be find at DBF File structure, http://www.dbf2002.com/dbf-file-format.html, where we find this list of Field type:
- C – Character
- Y – Currency
- N – Numeric
- F – Float
- D – Date
- T – DateTime
- B – Double
- I – Integer
- L – Logical
- M – Memo
- G – General
- C – Character (binary)
- M – Memo (binary)
- P – Picture
- + – Autoincrement (dBase Level 7)
- O – Double (dBase Level 7)
- @ – Timestamp (dBase Level 7)
My PC GUIDE showed how a .dbf file is made with the DataBase Utility DBU. Clones of this utility are FiveDBU (with source code) at https://code.google.com/archive/p/fivewin-contributions/downloads, DBF Viewer Plus at http://www.alexnolan.net/software/dbf.htm, CLUT at http://www.scovetta.com/archives/simtelnet/msdos/clipper. Harbour includes its own HbDBU (the source is in hb32addonshbdbu) and a component IdeDBU of HbIDE (the other two components are IdeEDITOR and IdeREPORTS).
From https://code.google.com/archive/p/fivewin-contributions/downloads we can get fivedbu_20130930.zip (New FiveDBU version with enhancements on ADO fields editing). It supports ADO, 3 RDD (DBFNTX, CBFCDX and RDDADS) and 6 languages - select 'Bases de datos -> Preferencias -> Lenguaje: Inglés' to have it in English.
Let us see what is in our little file so far.
Database Design Issue: the First Normal Form (1NF)[edit]
The work done in the previous section was intended to exactly reproduce the database presented in my PC GUIDE. There are, however, drawbacks: having only one NAME field, this database cannot sort its data on the last name. Also, a careless user might insert the data of some people with the last name first, and some other data with the first name last. When designing a database precautions should be taken of these possibilities. The first normal form (http://www.1keydata.com/database-normalization/first-normal-form-1nf.php, http://www.sqa.org.uk/e-learning/SoftDevRDS02CD/page_14.htm) requires you to define fields whose information cannot be divided into smaller parts. So, instead of a NAME field, we should have a FIRST_NAME and LAST_NAME fields. Complying to the first normal form, our little database would be on the on the right track to being a normalized database.
Designing the database is an essential part of the work and it is not always obvious how it should be done. See https://www.ntu.edu.sg/home/ehchua/programming/sql/relational_database_design.html.
A graphical device used to help is database design are the Entity Relationship Diagrams: https://www.lucidchart.com/pages/er-diagrams, https://www.guru99.com/er-diagram-tutorial-dbms.html.
Complicating our simple database[edit]
Harbour contains a file named test.dbf. Launch hbrun in its directory and type in
At this point we see that it is a 500 record table. Move around with the cursor keys and, when you're finished, punch the Esc key to quit this interactive table browser and editor. To get the record number of a person called Ted issue:
Here is the testdbf.prg source from hb30tests. It should be discussed in detail. It is a GPL piece of code poorly commented.
Input Mask[edit]
A simple data base input mask (from the Wikipedia Clipper entry):
RDDs: What Functions Are Available?[edit]
ADO RDD: Much Ado About Nothing[edit]
Case Study: Checkbook Balancing[edit]
Deleting records[edit]
In this piece of code the command DELETE marks the fourth record for deletion. But the file is not altered, not even by a CLOSE command.The PACK command actually removes the records marked for deletion (and also makes some additional work). The RECALL command removes the deleted flags. The function DELETED() returns .T. if the current record is marked for deletion, .F. if not.
The PACK command, which does the actual deletion of data from the table, PACK requires that the current database be USEd EXCLUSIVEly. If this condition is not met when PACK is invoked, CA-Clipper generates a runtime error. Additional work that PACK does is to update indexes on the table it alters (if any).
The commands DELETE ALL and PACK are executed by a single command called ZAP.
An Indexed Example[edit]
Suppose a table containing these data:
We can create a little index file with this piece of code:
Set Relation - Working with more than one table[edit]
Other programming topics[edit]
Hash Arrays (Associative Arrays, Also Known as 'Hash Tables')[edit]
In an associative array the elements are accessed using a string and not a number as in the 'normal' array.
There are online 'Calorie checkers' (which are also a nice idea for a web application for the last part) and I think it will be fun to make us a very small one (BEWARE: the information obtained from this program should not replace a varied, balanced diet and a healthy lifestyle).
Now we will redo the example of the array of months, showing an alternative syntax for loading data into an hash array:
hb_HEval() is the AEval() equivalent for hash arrays.
See https://vivaclipper.wordpress.com/2013/01/18/hash-vs-table/.
Morse Code[edit]
Let us try to convert a text to Morse code: to begin we load the chart of Morse code in an associative array and define a code blockwhich uses the function TONE() to sound a speaker tone for a dot or a dash - employing the IF() function - which is essentially the same of a spreadsheet IF() function - to use the right duration tone.
Then we prompts the user for a message, if none is supplied it uses the pangram 'The quick brown fox jumps over a lazy dog' (a pangram is a sentence that contains all of the letters of the alphabet).
We show what message we will translate and starts two a for each loop: the first will scan the message showingwhich letter it will translate, one at a line (and will also use TONE() with zero frequency and appropriate lengthsto make the pauses between letters and words) and then a nested for each loop will show whether it is about to sound adot or a dash, running the code block to have the right sound.
Regular Expressions[edit]
Regular expressions can be considered an extension of wildcards. In a DOS or Windows prompt, for example, we could list all dbf files in the current directory with the command
where the asterisk, as they say, matches one or more characters. The other wildcard, the question mark, will match any character, but exactly one: the commands
will show, respectively, every dbf file in the current directory whose name is exactly one or two characters long.
Regular expressions are much more flexible. They were invented by the mathematician Stephen Cole Kleene (the asterisk wildcard derives from an operator he defined and which is called Kleene star). Their flexibility allows us to write an expression that can match dbf filenames one or two characters long in a single expression which looks like this:
There are different types of regular expressions: basic, extended, PCRE (Perl-compatible regular expressions, http://www.pcre.org/), and many other different implementations.
As far as we are concerned we can limit ourselves to PCRE and refer to the documentation at these URLs: https://github.com/Petewg/harbour-core/wiki/Regular-Expressions and https://github.com/zgamero/sandbox/wiki/X_RegularExpressions, https://www.pcre.org/original/doc/html/pcrepattern.html, https://www.debuggex.com/cheatsheet/regex/pcre.
Here https://www.rexegg.com/regex-cookbook.html is a cookbook to see examples; and here https://www.regexpal.com/ and here https://regexr.com/ there are interactive tools to try online (and interactively) expressions.
Regular expressions are not a panacea which solves all data validation problems: for example it is not possible to use them to validate dates, as the number of days allowed for each month depends on the month (and in the case of February also on the year).
As a first example we will redo the program that receives a letter from the keyboard and reports if it is a vowel or not.
The synopsis of hb_RegExLike is this: hb_RegExLike(<hRegEx>|<cRegEx>, <cText> [, <lCaseSensitive>] [, <lMultiLine>]).
The next example is again the program to average of an array which grows until we insert numbers as input. This time we use a regular expression to validate the numbers we enter.
Error Handling With “Try-Catch-Finally” Block[edit]
This construct is analogous to those found in Java, JavaScript and C# (and similar to the C++'s one). They are actually translated into the BEGIN SEQUENCE structure and therefore perhaps they are useful only for those who are accustomed to those languages.
Multithreading[edit]
INET[edit]
PDF[edit]
hbhpdf: Libharu http://libharu.org/ bindings. Documentation: https://github.com/libharu/libharu/wiki/API%3A-Document
How to create a DLL[edit]
Debugging[edit]
You may have heard or read the legend that the term bug appeared when an actual bug was found in the Harvard's Mark II computer. According to one of my books from the high school, it was a little butterfly found in the ENIAC!
Text books less prone to folklore call this a story without foundation, for example
https://www.computerworld.com/article/2515435/moth-in-the-machine--debugging-the-origins-of--bug-.html states that Thomas Edison used the word already in 1878. The same goes with the Wikipedia entry →Software bug which even includes a picture of the moth actually found in the Harvard Mark II and describes the whole history.
A page from the →Harvard Mark II electromechanical computer's log, featuring a dead moth that was removed from the device.
Object Oriented Programming[edit]
Clipper had very limited support for OO programming. His successor CA-Visual Objects was much more advanced in this respect. However Visual Objects never had a great success, and third-party producers provided OOP libraries for Clipper, among which the most famous were Class(y), TopClass, Fivewin and Clip4Win.
Looking at Object-Oriented Programming from a Safety Distance[edit]
Let us suppose we're dealing with the distance function given the Cartesian coordinates of the points (http://mathinsight.org/cartesian_coordinates). The formulas we'll apply are:
for (Euclidean) distance on a real line, Euclidean plane and Euclidean space respectively.
In procedural programming our functions would look like this:
We defined three functions, with different names, which take as arguments the coordinates. But doing so we need to pass six arguments for the distance in a three-dimensional space.
If we're doing it with object oriented programming we may get something like this:
Here we've defined three classes, their constructors, and a distancemethod for each of them, and showed how to use them. It is also a simple example of how inheritance works. Other concepts are encapsulation (information hiding or data hiding), abstraction, polymorphism, overloading and overriding of methods. Inheritance plays a central role in a key concept: reuse. A class can be reused in a software project if it is exactly what was needed; or if it is not exactly what was needed it can be extended by defining a subclass. Much like the design of a database, the design of object oriented class is an art with its principles, see for example http://www.oodesign.com/, http://www.codeproject.com/articles/567768/object-oriented-design-principles and pages about UML like http://www.uml-diagrams.org/uml-object-oriented-concepts.html.
The first thing to note is that we start by including the clipper header file hbclass.ch, the header file for Class commands.
Access to variables and methods of an object is done via the colon operator. A prepended double colon refers to variables with a larger scope (such as those passed to a method).
In the code above we defined three classes, each one implementing a Point. Point2D for example was defined as a class extending Point1D, that is a generalization of the concept. A method Distance was given for each of the classes.
A line such as
contain the output command ?, the reference to an object (FifthPoint in this case), an invocation of the Distance method :Distance, to which another point was passed ( SixthPoint ).
It is also possible to write a Distance function which takes two arguments of a Point class, that may look like this:
This is, however, not object-oriented programming, as we could have written the same function with a not object-oriented language such as Pascal or C, passing it two structs, or records as Pascal calls them, named Point1 and Point2.
It is important the fact that some data internal to the object (set by the real programmer of the thing) can't be changed by the object user. In real life an example is that of a car engine. The provider of the object set a number of cylinders, and we have not many chances of changing that: we've got to regard it as a constant. There is naturally a number of interesting formulas about engines that engineers use (some to be seen at http://www.thecartech.com/subjects/engine/engine_formulas.htm). For example the one for computing the Engine Volumetric Efficiency given the volume of air taken into a cylinder and the cylinder swept volume. Here comes the importance of data hiding: nobody needs to know those informations to get his car going. Also, when someone designes an engine they probably don't expect the user to change the volumetric efficiency by operating on the engine. The same thing is obtained in object oriented programming using visibility modifiers, or access modifiers.
Another example[edit]
Copied verbatim from w:Harbour (software)
Retrieved from 'https://en.wikibooks.org/w/index.php?title=Clipper_Tutorial:_a_Guide_to_Open_Source_Clipper(s)&oldid=3564732'