Pure is a modern-style functional programming language based on term rewriting, slated to become the much improved successor of the author's Q language. The interpreter uses LLVM as a backend to JIT-compile Pure programs to fast native code.


http://pure-lang.sourceforge.net





Separate each tag with a space.

Release Date:

2008-09-28

Topic:

License:

Intended Audience:

Programming Language:

Registered:

2008-04-27

Ratings and Reviews

Be the first to post a text review of Pure. Rate and review a project by clicking thumbs up or thumbs down in the right column.

Project Feed

  • pure 0.8 file released: pure-0.8.tar.gz

    2008-09-28 Albert Graef <Dr.Graef@t-online.de> * 0.8 release. * test/test025.pure: matrix tests. NOTE: This test is expected to fail if Pure was built without GSL support. * test/test024.pure: catmap and stream tests. 2008-09-27 Albert Graef <Dr.Graef@t-online.de> * configure.ac: Bump version number. * lib/matrices.pure, runtime.cc/h: Added missing complex->double/int matrix conversions. Thorough overhaul of matrix<->pointer conversions, which now provide a complete set of conversions from/to any reasonable C array representation, including float, complex float, short and byte arrays. * lib/prelude.pure: Fix a bug in cat which broke catmap on strings. Reported by Eddie Rucker.

    posted 500 days ago

  • pure 0.8 file released: pure-0.8.msi

    2008-09-28 Albert Graef <Dr.Graef@t-online.de> * 0.8 release. * test/test025.pure: matrix tests. NOTE: This test is expected to fail if Pure was built without GSL support. * test/test024.pure: catmap and stream tests. 2008-09-27 Albert Graef <Dr.Graef@t-online.de> * configure.ac: Bump version number. * lib/matrices.pure, runtime.cc/h: Added missing complex->double/int matrix conversions. Thorough overhaul of matrix<->pointer conversions, which now provide a complete set of conversions from/to any reasonable C array representation, including float, complex float, short and byte arrays. * lib/prelude.pure: Fix a bug in cat which broke catmap on strings. Reported by Eddie Rucker.

    posted 500 days ago

  • File released: /pure/0.8/pure-0.8.tar.gz

    posted 500 days ago

  • File released: /pure/0.8/pure-0.8.msi

    posted 500 days ago

  • pure 0.7 file released: pure-0.7.msi

    2008-09-25 Albert Graef <Dr.Graef@t-online.de> * 0.7 release. * examples/gauss.pure, examples/linalg.pure: Add some examples for doing matrix computations in Pure. * runtime.cc, lib/matrices.pure: Minor bugfixes. 2008-09-23 Albert Graef <Dr.Graef@t-online.de> * lib/matrices.pure: Moved the matrix operations from primitives.pure to their own module. * lib/primitives.pure: Added a bunch of new matrix operations. In particular, list operations like filter and map now work on matrices, too. 2008-09-20 Albert Graef <Dr.Graef@t-online.de> * Implemented basic GSL matrix support, including support for symbolic matrices (which is independent from GSL, so these will also work when building the interpreter without GSL) and matrix comprehensions. Marshalling of matrices in the C interface is also implemented, so that you can interface to GSL matrix functions without much ado. This required many additions and changes to the parser, interpreter, compiler, runtime and the prelude; details can be found in the svn log (see r759 and r769ff.). Preliminary documentation is in the NEWS file for now (the manual still needs to be updated). 2008-09-15 Albert Graef <Dr.Graef@t-online.de> * configure.ac: Bump version number. * printer.cc: Fix up precedence calculation so that it properly deals with the case of negative floating point zeros. * lib/primitives.pure: Moved the inf and nan constants to the end of the module so that double arithmetic is already defined when these definitions are processed. Simplified the definitions of infp and nanp. Corrected the definition of abs so that it always returns 0.0 for both IEEE 754 positive and negative zeros. * configure.ac: Add configury for GSL support. Also added basic GSL checks and setup to interpreter.cc, pure.cc and runtime.cc.

    posted 502 days ago

  • pure 0.7 file released: pure-0.7.tar.gz

    2008-09-25 Albert Graef <Dr.Graef@t-online.de> * 0.7 release. * examples/gauss.pure, examples/linalg.pure: Add some examples for doing matrix computations in Pure. * runtime.cc, lib/matrices.pure: Minor bugfixes. 2008-09-23 Albert Graef <Dr.Graef@t-online.de> * lib/matrices.pure: Moved the matrix operations from primitives.pure to their own module. * lib/primitives.pure: Added a bunch of new matrix operations. In particular, list operations like filter and map now work on matrices, too. 2008-09-20 Albert Graef <Dr.Graef@t-online.de> * Implemented basic GSL matrix support, including support for symbolic matrices (which is independent from GSL, so these will also work when building the interpreter without GSL) and matrix comprehensions. Marshalling of matrices in the C interface is also implemented, so that you can interface to GSL matrix functions without much ado. This required many additions and changes to the parser, interpreter, compiler, runtime and the prelude; details can be found in the svn log (see r759 and r769ff.). Preliminary documentation is in the NEWS file for now (the manual still needs to be updated). 2008-09-15 Albert Graef <Dr.Graef@t-online.de> * configure.ac: Bump version number. * printer.cc: Fix up precedence calculation so that it properly deals with the case of negative floating point zeros. * lib/primitives.pure: Moved the inf and nan constants to the end of the module so that double arithmetic is already defined when these definitions are processed. Simplified the definitions of infp and nanp. Corrected the definition of abs so that it always returns 0.0 for both IEEE 754 positive and negative zeros. * configure.ac: Add configury for GSL support. Also added basic GSL checks and setup to interpreter.cc, pure.cc and runtime.cc.

    posted 502 days ago

  • Pure 0.7 released

    Pure is a functional programming language based on term rewriting, featuring dynamic typing, unrestricted polymorphism, full symbolic rewriting capabilities, curried functions, lexical closures, and an LLVM backend which JIT-compiles Pure scripts to fast native code. This release features support for GNU Octave-style matrices, implemented using the GNU Scientific Library. Downloads and release notes can be found here: http://sourceforge.net/project/showfiles.php?group_id=226193

    posted by agraef 502 days ago

  • File released: /pure/0.7/pure-0.7.msi

    posted 502 days ago

  • File released: /pure/0.7/pure-0.7.tar.gz

    posted 502 days ago

  • pure 0.6 file released: pure-0.6.msi

    2008-09-12 Albert Graef <Dr.Graef@t-online.de> * 0.6 release. * interpreter.cc: Speedups in pattern-matching code. 2008-09-11 Albert Graef <Dr.Graef@t-online.de> * runtime.cc, lib/math.pure: More bugfixes. 2008-09-06 Albert Graef <Dr.Graef@t-online.de> * pure.cc, lexer.ll: Add 'dump' command. This is similar to 'show', but dumps definitions to a file (named '.pure' by default, which, if present, is loaded after .purerc during interactive startup). This provides a quick-and-dirty means to save an interactive session and have it restored later. (This is not perfect, though, as variable values containing special objects such as thunks and pointers can't be reconstructed, and 'using' or 'extern' declarations are not recorded. For those you should use the .purerc file instead.) * runtime.cc (pure_create_interp): Add new command line options (see below). * pure.cc (main): Source interactive startup files (first $HOME/.purerc, then $PWD/.purerc). Add options --norc to not source the rc files and --noediting to suppress readline editing, as well as --noprelude (long form of -n), --help (long form of -h) and --version (like --help, but only print version information). Overhaul help message. 2008-09-05 Albert Graef <Dr.Graef@t-online.de> * pure.cc (main): In interactive mode, print a warning if -n was not specified and the prelude wasn't found. Suggested by Rob Hubbard. * printer.cc (operator << (ostream& os, const pure_expr *x)): Experimental support for calling a user-defined __show__ function to override print representations of expressions at runtime. * configure.ac, runtime.cc (pure_sys_vars): Add configure checks for POSIX/ISOC99 complex types. (Requires reconfigure.) * runtime.cc (pure_force): Fix a rather obscure segfault in the thunk implementation. See also test/test023.pure. * lexer.ll: Warn about used identifiers which are also interactive commands. * printer.cc: Changed <<...>> syntax for "external" objects such as closures, thunks and pointers to #<...> syntax pilfered from Scheme. This is less likely to be mistaken for a valid Pure expression. * pure.cc, lexer.ll: Renamed the interactive 'list' command to 'show', as suggested by John Cowan. This hopefully puts an end to inadvertent execution of that command, since 'show' is no prelude function and is deemed less likely to be used as a function name by the programmer. 2008-09-04 Albert Graef <Dr.Graef@t-online.de> * lib/prelude.pure: Added the normal order fixed point combinator, 'fix'. * lib/prelude.pure: Overhaul of list operations in the prelude, so that they properly work with "thunked" lists (streams). Where possible, these operations have been redesigned to make them non-strict, while keeping them tail-recursive for the parts of a list which have already been evaluated. In particular, the cat and catmap operations now handle infinite streams of infinite streams, and hence list comprehensions can draw values from infinite streams as well. The 'list' function can be used to convert a (finite) stream to an ordinary list, forcing its evaluation. Conversely, the new 'stream' function converts an ordinary list (tuple, string) to a stream. There are a few other related changes in the prelude: - The slicing operation (!!) is now implemented in a completely generic way which works with any container data structure which implements the indexing (!) operation. It also works properly if both operands are infinite streams. - Arithmetic sequences (..) now take an infinity (inf or -inf) as the second operand and will generate the appropriate stream in such cases. - The repeat and cycle functions have been rewritten to make them Haskell-compatible, i.e., they only take a single argument now and generate infinite streams. Haskell's iterate function is now also implemented. The previous versions of repeat and cycle, which take an additional integer parameter to denote the desired length of the result and return an ordinary (eager) list, are now available under the names repeatn and cyclen. (To make cyclen compatible with cycle, it now also returns a list if applied to a string, use strcat to convert the result back to a string if needed.) 2008-09-01 Albert Graef <Dr.Graef@t-online.de> * interpreter.cc, runtime.cc, symtable.cc/h, lib/prelude.pure: Added thunks (anonymous parameterless closures), represented using the new postfix operator '&' (see prelude.pure). As usual, these use "call by need", i.e., they will be evaluated (and the results memoized) automatically when the value of a thunk is needed during pattern-matching or when calling a C function. 2008-08-31 Albert Graef <Dr.Graef@t-online.de> * lib/primitives.pure: Added references (expression pointers). 2008-08-29 Albert Graef <Dr.Graef@t-online.de> * etc/gpure.lang: Added syntax highlighting for gedit. Contributed by Eddie Rucker. 2008-08-28 Albert Graef <Dr.Graef@t-online.de> * lib/system.pure: New definitions of fopen/popen and fclose/pclose, using sentries which take care of closing a file object automagically when it's garbage-collected. * lib/primitives.pure: Add interface to sentries (see below). * runtime.cc/h: Added sentries -- expression "guards" which are applied to the target expression when it is garbage-collected. Only sentries on applications and pointer objects are supported right now. * Makefile.in: Set LC_ALL=C, to work around failed math tests due to locale-related problems on some systems. Note: This requires a reconfigure. * lib/system.pure: Add setlocale function. * runtime.cc (pure_sys_vars): Add NULL and LC_* constants. * lexer.ll: Add option -p to list only private/public symbols to the 'list' command. 2008-08-27 Albert Graef <Dr.Graef@t-online.de> * lib/: Clean up the public namespace. * lexer.ll: Added limited support for unicode symbols. These can now be declared as operator or nullary symbols. (At present this is only guaranteed to work if your scripts are encoded in UTF-8.) * parser.yy, etc.: Symbols can now be declared 'private'. These aren't visible anywhere except in the module that declares them. 2008-08-26 Albert Graef <Dr.Graef@t-online.de> * test/test022.pure: Add macro test script. * lib/prelude.pure: Add optimization rules for ($) and (.) so that they are expanded at compile time if possible. 2008-08-25 Albert Graef <Dr.Graef@t-online.de> * parser.yy, lexer.ll, interpreter.cc: Added macro substitution facility. Pure macros are meta functions executed at compile time, which are defined by any number of equations (rewriting rules) prefixed with the 'def' keyword, e.g.: def foo (bar x) = foo x+1; def foo x = x; Only simple, unconditional rules are supported by now, but these are quite powerful already, since, as shown above, the macro parameters can be arbitrary patterns and macro definitions can also be recursive. Pure macros are lexically scoped, i.e., symbols on the rhs of a macro definition can never refer to anything outside the macro definition. (These are also known as "hygienic" macros.) * configure.ac: Bump version number. (Needs reconfigure.)

    posted 516 days ago

Rate and Review

Be the first person to add a text review.

Would you recommend this project?






<

Related Projects

Thanks for your rating!

Would you also like to write a review?





Skip Review

Thanks for your review!

Get credit for your review by logging in via OpenID. Click your account provider:

No Thanks