Nimrod (programming language)
This article does not cite any references or sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (December 2009) |
Paradigm | multi-paradigm: imperative, object-oriented, functional, generic |
---|---|
Appeared in | 2008 |
Developer | Andreas Rumpf |
Stable release | 0.8.6 (December 21, 2009 ) |
Typing discipline | static |
Influenced by | Lisp, Python, C, Object Pascal, Ada, Modula2 |
License | GPL for the compiler, LGPL for the runtime[1] |
Website | force7.de/nimrod |
Nimrod is a general purpose, high-level, system programming, statically typed imperative compiled programming language[2] that is developed by Andreas Rumpf.
Development started in 2004, coded in Object Pascal (FreePascal) and Python. However, the first version that bootstrapped (was able to compile itself) was released at 2008-08-22 (version 0.6.0). The compiler generates optimized C code and defers compilation to an external compiler (a large range is supported, it is shipped on Windows with Mingw/GCC) to leverage their optimization and portability capabilities: it works on Windows, Linux, BSD and MacOS X.
Nimrod uses indentation as block delimiters, like Python (following the Off-side rule) although a pre-processing filter phase enable to delimit blocks with soft braces {} or endX keywords. These filters allow pre-processing or usage within templates. Nimrod is case-insensitive and even style-insensitive, meaning that underscores are ignored in identifiers (and number literals too), a quite unusual feature.
It can be used as an imperative, procedural language, but it also supports object oriented, functional and generic programming styles.
Objects with inheritance, overloading, polymorphism) and multiple dispatch (multimethods) allows object-oriented programming. The syntax sugar a.funct(b) replacing funct(a, b) ensures OO style and call chaining.
Treating procedures as first-class entities, it can be used for functional programming, although it currently lacks closures and anonymous procs (they are planned).
It also supports metaprogramming by a combination of generics, templates, macros, conditional compilation with compile time function execution. It allows user-defined operators.
It has rich high-level data types, from the common strings and array to sequences, sets, tuples, enums, etc. Low level, system data can be left unmanaged, but most objects created on the heap are managed with garbage collection, freeing programmer of most memory management issues. It uses a non-tracing garbage collector to manage allocated memory, based on an original algorithm, but it can use alternatively the Boehm garbage collector or no collector at all.
Nimrod also supports a module mechanism for isolation of independent libraries or packages. Nimrod standard library has I/O and OS operations, string utilities, Unicode support, regular expressions and PEG, along with various parsers (command line options, XML, CSV, SQL...).
Interaction with other systems
C's application binary interface (ABI) is supported as well as all of C's fundamental and derived types, enabling direct access to existing C code and libraries. Nimrod supports all Windows calling conventions in addition to standard C conventions. A dynlib module allows to access symbols from shared libraries (DLLs, .so files).
Thus, it has bindings to a number of C libraries, from system (Posix, Windows) to databases (MySQL, PostgreSQL, SQLite, ODBC), from scripting languages (Python, Lua, TCL) to graphics (OpenGL, Cairo, SDL).
It supports GUIs by its bindings to GTK2, X11, IUP and Windows.
Other notable bindings are libcurl, libzip and PCRE.
References
- ↑ "Nimrod Programming language - FAQ". http://force7.de/nimrod/question.html. Retrieved 2010-01-19.
- ↑ "Nimrod Programming language - FAQ". http://force7.de/nimrod/question.html. Retrieved 2010-01-19.
See also
External links
- Nimrod Programming Language Official Web page
- Nimrod language features
- Nimrod's IRC Channel
If you like SEOmastering Site, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...
- Pages where expansion depth is exceeded
- Pages with broken file links
- Articles lacking sources from December 2009
- Articles with invalid date parameter in template
- All articles lacking sources
- Multi-paradigm programming languages
- Statically-typed programming languages
- Procedural programming languages
- Object-oriented programming languages
- Functional languages