./wip/pure, Modern-style functional programming language based on term rewriting

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 0.68, Package name: pure-0.68, Maintainer: jan.smydke

Pure is a modern-style functional programming language based on term rewriting.
It offers equational definitions with pattern matching, full symbolic rewriting
capabilities, dynamic typing, eager and lazy evaluation, lexical closures,
built-in list and matrix support and an easy-to-use C interface. The
interpreter uses LLVM as a backend to JIT-compile Pure programs to fast native
code.


Required to run:
[math/mpfr] [devel/gmp] [devel/readline] [lang/libLLVM34]

Required to build:
[pkgtools/cwrappers]

Master sites:


Version history: (Expand)


CVS history: (Expand)


   2015-03-04 20:43:31 by Tobias Nygren | Files touched by this commit (1)
Log message:
Use llvm 3.4 instead of 3.6. Now works fine.
   2015-03-04 19:31:09 by Tobias Nygren | Files touched by this commit (2)
Log message:
Update to the latest version. Switch to libLLVM. XXX needs 3.5, we have 3.6

** Pure 0.64 2014-10-28
improvements in the batch compiler
support for Perl-style regular expressions

** Pure 0.63 2014-10-22
support for inlining ATS
fixes in the built-in Faust interface

** Pure 0.62 2014-09-16
cross compilation fixes

** Pure 0.61 2014-09-10
LLVM 3.5 compatibility fixes

** Pure 0.60 2014-03-24
bugfixes
   2014-06-01 14:49:35 by Thomas Klausner | Files touched by this commit (208)
Log message:
Remove FETCH_USING.
It is a user-defined variable and should NOT be set in Makefiles.
   2014-03-07 17:26:40 by Hiramatsu Yoshifumi | Files touched by this commit (2) | Package updated
Log message:
Update pure to 0.59.

NEWS from 0.56:
----------------------
** Pure 0.59 2014-02-26

Update for LLVM 3.4 compatibility.

** Pure 0.58 2013-09-16

This release brings some bugfixes and LLVM 3.3 compatibility. It also adds
conversion routines between numeric/bigint matrices and 64 bit integer
vectors, as well as new built-in macros __dir__ and __file__ which return the
directory and absolute filename of the current script, respectively. Moreover,
the new --symbolic and --nosymbolic code generation options allow you to set
the default evaluation mode of global functions, supplementing the --defined/
--nodefined pragmas which have been available since Pure 0.48.

The most important user-visible changes are in the command line syntax. The
-x option is now optional, so that a script can be invoked with arguments
simply as 'pure script args ...', which also makes it possible to have
shebangs using /usr/bin/env. To invoke multiple scripts in batch mode you now
have to specify the new -b option. Please check the manual for details.

** Pure 0.57 2013-02-14

This release sports some improvements in the build system, fixes for changed
linker defaults on recent Linux systems, compatibility with the latest Faust2
revisions, as well as some changes for compatibility with C++0x/11. Please
check the ChangeLog for more details.

The big news is that Pure has moved to Bitbucket. GoogleCode has served us
well over the past few years, but it's time to move on and take advantage of
the improved collaboration features offered by modern source code hosting
services. Here are the new URLs so that you can update your bookmarks:

Project website: http://purelang.bitbucket.org/
Mercurial repository: https://bitbucket.org/purelang/pure-lang
Bug reports: https://bitbucket.org/purelang/pure-lang/issues

We kindly ask you to use the issue tracker on Bitbucket for future bug
reports. Old releases will continue to be available at GoogleCode, and the
mailing list remains at http://groups.google.com/group/pure-lang.
   2013-03-27 01:53:26 by Hiramatsu Yoshifumi | Files touched by this commit (3) | Package updated
Log message:
Update pure to 0.56.

Changes from previous:
----------------------
2012-11-19  Albert Graef  <Dr.Graef@t-online.de>

	* 0.56 release.

	* configure.ac, interpreter.cc/hh: LLVM 3.2 compatibility.

2012-11-13  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc (pure_str): Alternative str() implementation which
	returns a Pure string instead of a raw C string. We use this in
	primitives.pure now to prevent the memory leaks resulting from
	calling str() directly from Pure.

	* util.cc (my_strdup, my_strfree): strdup/free replacements to
	reduce the number of temporary string allocations. This is still
	experimental.

	* interpreter.cc (compile_interface): Get rid of bogus warnings
	for abstract (unimplemented) interface types.
	(finalize_interface_rules): Fix detection of empty interfaces.
	This fixes issue #95.

	* lib/prelude.pure, lib/matrices.pure: Fixes to all, any, unzip
	(cf. issue #92 and #93). Also, smatrix accepts a dimension
	argument now like the other matrix construction functions
	(issue #96).

	* lib/primitives.pure: Improved simplifications of partially
	evaluated logical connectives. E.g., both 1&&x and x&&1 give x
	now.

2012-11-06  Albert Graef  <Dr.Graef@t-online.de>

	* texmacs: Overhaul of TeXmacs plugin.

2012-10-19  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc (reduce): Fixed a memory leak and resolved a rather
	obscure segfault due to global closures becoming invalidated by a
	recent recompile.

2012-10-16  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: TeXmacs completion support.

2012-10-12  Albert Graef  <Dr.Graef@t-online.de>

	* pure.cc, lexer.ll, runtime.cc: Improved readline support: Add
	secondary command input, so that the debugger has its own command
	history.

2012-10-08  Albert Graef  <Dr.Graef@t-online.de>

	* lib/prelude.pure (n..m): Bugfix: For consistency with the
	n1:n2..m case, do a quick check that m-n yields a real value (this
	will fail if n and m don't belong to the same enumerated type,
	in which case we want to leave n..m as a normal form).

	* interpreter.cc (exec): Improvements in TeXmacs mode. The REPL
	now temporarily replaces __show__ with __texmacs__ in order to
	allow for custom pretty-printing of expressions in TeXmacs
	mode. (Note that simply redefining __show__ may break applications
	which rely on print representations returned by the `str`
	function.)

2012-10-04  Albert Graef  <Dr.Graef@t-online.de>

	* lib/primitives.pure: Rename break, trace to __break__, __trace__
	to prevent naming conflicts. While `break` isn't likely to occur
	in user code, `trace` is commonly used, e.g., as a matrix
	operation.

2012-10-02  Albert Graef  <Dr.Graef@t-online.de>

	* examples/texmacs: Added TeXmacs/LaTeX template contributed by
	Kurt Pagani.

2012-09-28  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc: Use a reasonable default for the advisory stack
	limit so that stack checks are always done by default.

2012-09-27  Albert Graef  <Dr.Graef@t-online.de>

	* examples/matrix_inversion.pure: Added matrix inversion example
	by Rob Hubbard, ported from Q to Pure by Jiri Spitz.

	* lexer.ll (docmd): Add -h (help) option to the del, trace and run
	commands.

2012-09-26  Albert Graef  <Dr.Graef@t-online.de>

	* etc/*: Add new break and trace builtins to keyword tables.

	* lib/primitives.pure: New break and trace builtins (see below).

	* runtime.cc/h: New pure_break() and pure_trace() primitives.
	These trigger debugging and tracing when called from a Pure
	program with debugging enabled.

2012-09-24  Albert Graef  <Dr.Graef@t-online.de>

	* examples/lu.pure: Example contributed by Johannes Engels.

	* interpreter.hh (interpreter), interpreter.cc (exec), lexer.ll
	(lex_input), runtime.cc (pure_debug_rule), pure.cc (main): Add
	minimal support for texmacs (http://www.texmacs.org/), per request
	by Kurt Pagani (issue #89).

	* etc/pure-mode.el.in: Add a pure-send-yank command which allows
	to send lines from the kill ring to the interpreter. This works in
	both pure-mode and pure-eval-mode. Also added a new
	pure-send-skip-prompts flag (enabled by default). This causes the
	send commands to preprocess input which looks like a session
	transcript containing both command prompts and results, by
	removing prompts and skipping non-command lines. This is
	convenient, in particular, to send samples of interpreter
	interactions from the online documentation.

2012-09-20  Albert Graef  <Dr.Graef@t-online.de>

	* lib/prelude.pure, lib/primitives.pure: Declare 'true' and
	'false' as nonfix symbols so that they can be used in patterns.
	Also add a 'bool' type along with a corresponding 'boolp'
	predicate for normalized truth values (0 and 1), and a 'bool'
	function to convert machine integers to normalized truth values.

2012-09-11  Albert Graef  <Dr.Graef@t-online.de>

	* lib/prelude.pure: Adjust the __do__ macro for generator clauses
	involving patterns (see below).

	* interpreter.cc (mklistcomp_expr, mkmatcomp_expr): Add the
	necessary magic to make comprehensions involving patterns filter
	out unmatched generator values automatically, as it is in Haskell.

2012-09-07  Albert Graef  <Dr.Graef@t-online.de>

	* lib/enum.pure: New enum.pure module which provides some
	convenience functions to facilitate the creation of enumeration
	types. Experimental.

2012-09-06  Albert Graef  <Dr.Graef@t-online.de>

	* lib/prelude.pure (..): Fix some glitches in the generic
	arithmetic sequences with step size, so that they work with
	general enumerated types.

2012-09-05  Albert Graef  <Dr.Graef@t-online.de>

	* pure.cc (main): Spiffy new logo for the sign-on message. You can
	disable this with the --plain option or by setting the PURE_PLAIN
	environment variable, if you prefer the old sign-on message.

2012-08-22  Albert Graef  <Dr.Graef@t-online.de>

	* parser.yy: Uncaught exceptions of mklistcomp_expr/mkmatcomp_expr
	in parser (fixes issue #88 reported by kp@scios.ch).

2012-08-15  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: Cosmetic changes to the parsing of special command
	syntax (fixes issue #84).

2012-08-14  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (build_map): 'case' needs a separate FMap root
	for each rule so that the call to FMap::select() in try_rules()
	does the right thing (fixes issue #87 reported by Jim Pryor).

2012-07-17  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc/hh, runtime.cc, pure.cc, lexer.ll: Integrated a
	patch by Jim Pryor (with modifications) which allows the escape
	mode command prefix to be specified with the --escape option and
	the PURE_ESCAPE environment variable. Thanks Jim!

2012-07-16  Albert Graef  <Dr.Graef@t-online.de>

	* printer.cc (printx): Bugfix in pretty-printer: Type tags must be
	padded with whitespace if compile time expressions are printed
	with deBruijn annotations (-v2). Otherwise the pretty-printed code
	won't be reparsed correctly, since x/*...*/::y will be parsed as
	x ::y rather than x :: y.

	This bug affected, in particular, test/special.pure. Many of the
	other golden test logs were also updated accordingly.

2012-07-06  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll, parser.yy, interpreter.cc/hh, symtable.cc/hh:
	Implemented namespace brackets, based on an idea by Yann Orlarey.
	This makes it much more convenient to use embedded domain-specific
	sublanguages in Pure. For instance, you may now write something
	like:

	outfix « »;
	namespace faust (« »);

	This means that the namespace 'faust' can now be accessed on the
	fly in expressions like «(a,b,c) : (sin,cos,tan)». The
	subexpression inside the namespace brackets is then parsed by
	temporarily switching to the corresponding namespace. The
	namespace brackets themselves must be a pair of outfix symbols
	which has been declared already, and are removed from the
	resulting expression. This works pretty much like a 'namespace'
	declaration, but only gives access to the public symbols of the
	namespace, and can be used anywhere inside an expression (even on
	the left-hand side of a rule). Nesting these constructs is also
	possible.

	Also, to accommodate these changes, the declaration syntax is now
	slightly more liberal in that qualified symbols are permitted in
	symbol and namespace declarations. (In the case of symbol and
	'using namespace' declarations, it will also be checked that
	qualified symbols are declared in or imported from the proper
	namespace.) This allows you to write stuff like:

	namespace faust with outfix faust::begin faust::end; end;
	namespace faust (faust::begin faust::end);

	which isn't possible without using namespace qualifiers because
	'end' by itself is a reserved keyword in Pure.

2012-06-28  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll (docmd): Bugfixes and improvements in the interactive
	command parser. In particular, clear, dump and show will now
	complain about undefined symbols. This doesn't detect unmatched
	glob patterns and so isn't 100% foolproof, but it should catch
	most common errors and typos.

2012-06-27  Albert Graef  <Dr.Graef@t-online.de>

	* pure.cc: Add -e/--escape option and PURE_ESCAPE environment
	variable to switch on new escaped command syntax. Also fix up
	command completion accordingly.

	* lexer.ll, interpreter.cc/hh: Add support for escaped command
	syntax, as discussed on the mailing list. If this option is
	enabled, all interactive commands are prefixed with '!'. (This
	only applies to the command line, evalcmd works as before.)

2012-06-26  Albert Graef  <Dr.Graef@t-online.de>

	* examples/msort.pure: Added merge sort example by Jim Pryor.

	* configure.ac: Bump version number.

	* interpreter.cc (macspecial), symtable.cc/hh: Add a new built-in
	__gensym__ macro, per request by Jim Pryor. This enables you to
	create new, unqualified symbols on the fly, which is useful if a
	macro needs to generate block constructs such as lambdas and
	when/with clauses from scratch.

2012-06-25  Albert Graef  <Dr.Graef@t-online.de>

	* lib/matrices.pure: Experimental: As suggested by Jim Pryor, add
	non-splicing vector brackets as a shorthand notation for nested
	vectors.

	* runtime.cc (hash): Include environment in closure hashes (fixes
	second part of issue #82).

2012-06-24  Albert Graef  <Dr.Graef@t-online.de>

	* examples/do.pure: Add __do__ macro example from the Macros
	section of the manual.

	* runtime.cc (hash): Bogus assertion for anonymous closure (fixes
	issue #82 reported by Jim Pryor).

2012-06-20  Albert Graef  <Dr.Graef@t-online.de>

	* etc/pure.ssh: Added Eddie Rucker's a2ps style sheet for Pure.

2012-06-17  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (quoted_tag): Missing "as" pattern in quoted
	pattern (fixes issue #79 reported by Jim Pryor).

2012-06-16  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (macspecial): Leave the cases of __lambda__,
	__case__, __when__ and __with__ with an empty list argument
	undefined by the built-in macro rules (fixes issue #78 reported by
	Jim Pryor).

	* interpreter.cc (const_defn, clearsym): Make sure that we
	allocate a fresh expression pointer for each constant value cached
	in a read-only variable. This will leak a tiny amount of memory
	each time such a constant is redefined (which is possible using
	interactive commands and the introspection facilities), but this
	is needed to keep any dangling references to the constant intact.
	This fixes issue #77.

2012-06-15  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc (get_funptr): get_funptr() might be invoked after a
	function was already purged from the environment.

2012-06-14  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (checkfuns): Remove bogus assertion (issue #75).
	(next_statem): Missing case in code generation for matrix matching
	(issue #76). Reported by Jim Pryor.

2012-06-04  Albert Graef  <Dr.Graef@t-online.de>

	* 0.55 release.

	* interpreter.cc: Make clang and gfortran -fdragonegg the default
	compilers for inlined C/C++/Fortran code, as llvm-gcc isn't
	supported in the LLVM 3.x series any more.

2012-06-03  Albert Graef  <Dr.Graef@t-online.de>

	* configure.ac: Bump version number.

	* configure.ac, interpreter.cc: Add some options to deal with
	systems such as Mac OSX and Ubuntu which may have the LLVM
	toolchain and configure script installed under different prefixes,
	so that several LLVM versions can coexist on the same system.

	First, the configure option --with-tool-prefix allows to specify
	the prefix for the LLVM toolchain. This option, if specified, is
	also used to locate the llvm-config script, so that the proper
	LLVM version is selected.

	Second, the --with-llvm-version option allows to set the desired
	LLVM version, in which case configure tries to locate the
	llvm-config-<version> script on the PATH (after trying the tool
	prefix, if specified). If this option isn't specified, we default
	to looking for the llvm-config script on the PATH, which matches
	the behaviour in previous releases.

	If none of these yield a usable llvm-config script, we fall back
	to trying llvm-config-<version> for recent LLVM versions,
	preferring the latest version if found. Otherwise we give up and
	print an error message.

2012-06-02  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc/hh: Bugfix in type name resolution. Reported by
	Lucas Paul. Fixes issue #71.

2012-05-22  Albert Graef  <Dr.Graef@t-online.de>

	* Debian support: Add Debian packaging and a corresponding goal in
	the Makefile.

2012-05-19  Albert Graef  <Dr.Graef@t-online.de>

	* 0.54 release.

	* interpreter.cc (funsubstw): Fix clobbering of qualified symbols
	in the global namespace.

2012-05-15  Albert Graef  <Dr.Graef@t-online.de>

	* lib/prelude.pure: Fix up regression in optimization rules for
	list slices introduced in Pure 0.49. Reported by Yann Le Du.

2012-05-09  Albert Graef  <Dr.Graef@t-online.de>

	* configure.ac: Version bump.

	* interpreter.cc/hh, runtime.cc, pure.cc: LLVM 3.1 compatibility
	fixes.

2012-03-22  Albert Graef  <Dr.Graef@t-online.de>

	* 0.53 release.

	* runtime.cc (pure_sort): As suggested by Peter Summerland,
	optimize the case of POD types (int, bigint, double, string) in
	conjunction with the standard (<) and (>) predicates. In this case
	we don't actually have to invoke the Pure predicates, but can just
	execute the comparisons directly in C++. With int lists this gives
	a 10x speedup.

2012-03-08  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: Add -r and -s options to the trace command to switch
	between the new recursive and the previous skip tracing mode (see
	below).

	* interpreter.cc/hh, runtime.cc: Fix up function and macro call
	tracing to allow for recursive tracing of reductions while a
	tracepoint was invoked. Make this the default, as it's more useful
	in most situations.

2012-03-08  Albert Graef  <Dr.Graef@t-online.de>

	* 0.52 release.

	* lexer.ll (docmd): Add a -a option to the trace command which
	sets tracepoints on all (global) symbols.

2012-03-06  Albert Graef  <Dr.Graef@t-online.de>

	* Makefile.in: Fix a glitch causing discrepancies between
	generated log and actual test log for the prelude.

	* lib/prelude.pure: Fix up the definition of the __do__ macro for
	the reworked treatment of macro arguments.

	* interpreter.cc/hh, lexer.ll: Fixed some of the bad side-effects
	of autoquoting of macro arguments which would break macro hygiene.

	Implicit quoting of macro arguments is now disabled by default,
	and can be selectively enabled for individual macros with the new
	--quoteargs pragma. Also, autoquoted macro parameters are now
	actually quoted, i.e., embedded macro calls are not evaluated.

	This fixes name capture issues due to premature evaluation of
	embedded macros in quoted macro arguments. One minor defect which
	remains is the case of a free variable in a macro substition being
	captured by a local definition if the entire construct is quoted;
	see the last example in test078.pure. (One might argue, though,
	that in this specific case the behaviour of the macro evaluator is
	actually correct.)

2012-03-02  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc: Update for the latest Faust revision after cleanup
	of the Faust UI data structures.

2012-02-20  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (lcsubst): Added a missing recursion in the
	conditional, lambda, case, when and with cases. This fixes a
	failed assertion in the bind() method which could also occur, in
	particular, when processing comprehensions on the left-hand side
	of an equation or lambda. Reported by Richard Grossman.

2012-01-05  Albert Graef  <Dr.Graef@t-online.de>

	* parser.yy: Refactor some grammar rules so that some types of
	syntax errors in toplevel constructs are caught a bit earlier (see
	issue #69 reported by Jiri Spitz).
   2012-10-05 15:52:02 by Aleksej Saushev | Files touched by this commit (32)
Log message:
Drop superfluous PKG_DESTDIR_SUPPORT, "user-destdir" is default these days.
Mark packages that don't or might probably not have staged installation.
   2012-02-03 03:53:54 by Hiramatsu Yoshifumi | Files touched by this commit (3)
Log message:
Update pure to 0.51.

Changes from previous:
----------------------
2011-12-21  Albert Graef  <Dr.Graef@t-online.de>

	* 0.51 release.

	* interpreter.cc: Bugfixes in macro substitution involving 'when'
	expressions (fallout from changes in when_codegen 2011-11-25).

2011-12-20  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc, runtime.cc/h: Add a new faust_load() runtime
	function which makes it possible to load a Faust dsp directly,
	without using eval (which isn't available in batch-compiled
	programs). Also fixed a bug in the Faust bitcode loader which
	would make it segfault in case of an existing but invalid Faust
	bitcode file.

2011-12-18  Albert Graef  <Dr.Graef@t-online.de>

	* 0.50 release.

	* interpreter.cc (compiler): Add a --main option to the batch
	compiler which allows to set the name of the main entry point of
	the compiled module. This allows different batch-compiled modules
	to coexist in the same program.

2011-12-16  Albert Graef  <Dr.Graef@t-online.de>

	* examples/bitcode/myinterp.pure: New example which illustrates
	how to create and use a secondary interpreter instance in Pure.

2011-12-15  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (inline_code): Add FAUST_OPT environment variable
	to allow optimization of inline Faust code. This is to be set to
	something like '| opt -O3'. Also add the -cn option with the Faust
	module name as argument to the Faust command of the inline compiler.

2011-12-13  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc, lib/faustui.pure: Add support for metadata in Faust
	control groups.

2011-12-07  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc, lib/faustui.pure: Add support for controller
	metadata in Faust dsps. To these ends, controls are now
	represented in the form 'f ref meta initargs', where the
	additional 'meta' argument is a list of key=>val string pairs.

	* interpreter.cc (bctype_name): Make gsl_matrix type detection
	work with dragonegg.

	* interpreter.cc, runtime.cc/h: Add support for retrieving the
	global metadata of Faust dsp classes.

2011-12-06  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll, interpreter.cc/hh: New conditional --ifdef and
	--ifndef pragmas. Also change the way that compilation options are
	initialized using PURE_OPTION environment variables.

2011-12-05  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc, interpreter.cc: Add custom hashing of tagged
	pointers. Reported by Peter Summerland.
	(hash): Added missing matrix cases. Reported by Peter Summerland.

2011-12-04  Albert Graef  <Dr.Graef@t-online.de>

	* runtime.cc (pure_force): Plugged a memleak in recursive
	pure_force() calls. Reported by Stephan Rudlof.

2011-12-02  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (LoadFaustDSP): Proper cleanup for all globals in
	Faust modules when a module gets reloaded.

2011-11-30  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (compile_interface): Optimize away superflous
	candidate patterns which are subsumed by other interface patterns.

	* interpreter.cc (LoadFaustDSP, compiler): Bugfixes in the bitcode
	linker. Make sure that external function declarations and internal
	Faust functions are never stripped from batch-compiled code. Also
	make sure that old code for internal Faust functions gets cleaned
	before reloading a Faust module.

2011-11-25  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (when_codegen): Optimization of non-binding
	'when' clauses. This eliminates superflous environments and
	function calls for clauses of the form 'when x end' where x is
	just an expression. These now just compute x, then throw it away
	immediately, just like the $$ operator.

	* etc/pure-mode.el.in: Have #! (shebang) treated as preprocessor
	lines rather than comments, so that they aren't skipped by the
	movement and pure-send-line commands. Also, make pure-send-line
	skip over multi-line comments (if you really want to send such a
	comment to the interpreter, you can use pure-send-defun for that
	now; this will send the entire comment at once).

	* interpreter.cc/hh, runtime.cc/h, lib/primitives.pure: Add
	get_interface_typedef() operation.

2011-11-24  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: Add --rewarn, --rewarn2 pragmas which reset the
	corresponding warning options to their defaults.

2011-11-23  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc/hh, expr.cc/hh, parser.yy: Lots of cosmetic
	changes and bugfixes in the interfaces implementation. Also
	improved the diagnostics (-w).

2011-11-22  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc/hh, runtime.cc/h, lib/primitives.pure: Add meta
	operations for managing interfaces from Pure.

	* etc/*: Add new 'interface' keyword to the language modes.

	* pure.cc, lexer.ll: Add new 'interface' keyword to the keyword
	table. Add type symbols to the completion table.

	* lexer.ll: Add 'show interface' command.

	* expr.cc/hh, interpreter.cc/hh, lexer.ll, parser.yy: Add basic
	implementation of interface types (experimental).

2011-11-18  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc: Resolve type aliases at compile time as far as
	possible, so that the best possible matching code can be
	generated.

	* interpreter.cc: New read-only interactive and debugging options
	for conditional compilation.

2011-11-17  Albert Graef  <Dr.Graef@t-online.de>

	* configure.ac: Bump version.

	* lib/primitives.pure: The rlist type can now be defined in a
	straightforward way.

	* interpreter.cc (try_rules): Implement tail call elimination on
	simple recursive type definitions.

2011-11-16  Albert Graef  <Dr.Graef@t-online.de>

	* 0.49 release.

2011-11-15  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc/hh: Integrate code generation options (--checks
	et al) with the new conditional compilation pragmas, so that they
	can be set with --enable, --disable and queried with --if,
	--ifnot.

2011-11-14  Albert Graef  <Dr.Graef@t-online.de>

	* lib/prelude.pure, lib/matrices.pure: Add some conditional
	pragmas so that various kinds of optimization rules in the prelude
	can be disabled if the user wants to do that.

	* pure.cc, pure_norl.cc, runtime.cc: Add --enable and --disable
	command line options.

	* interpreter.cc/hh, lexer.ll: Add conditional compilation pragmas
	--enable, --disable, --if, --ifnot, --else, --endif.

	* lib/matrices.pure: Add some experimental optimization rules for
	vector et al, which make them use vectorseq et al to create
	vectors of int and double values from arithmetic seqences in an
	efficient way. (This is similar to the slices optimization in that
	it prevents the construction of an intermediate list value, which
	saves memory and speeds up things considerably for large vectors.)

2011-11-13  Albert Graef  <Dr.Graef@t-online.de>

	* lib/prelude.pure, lib/strings.pure, lib/matrices.pure: Add some
	experimental optimization rules for slices with contiguous int
	ranges, so that we don't actually construct the index list any
	more. This speeds up slices considerably and can also save
	substantial amounts of memory, especially in the matrix case.

2011-11-11  Albert Graef  <Dr.Graef@t-online.de>

	* lib/avltrees.pure, lib/dict.pure, lib/set.pure: Some bugfixes
	and optimizations in the comparison operations. Also, as discussed
	on the mailing list, we now fall back to syntactic equality of
	values in dictionary operations if semantic equality isn't
	defined.

2011-10-27  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc/hh, runtime.cc/h: Add interpreter-local storage,
	exposed by means of the pure_interp_key(), pure_interp_set() and
	pure_interp_get() functions in the runtime. This allows
	applications to keep track of static data which depends on the
	particular interpreter instance, such as symbols and Pure
	expression data. The interface is similar to the POSIX
	thread-local storage functions (pthread_key_create and friends).

2011-10-25  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.hh, runtime.cc/h: Add a pointer equality callback,
	so that tagged pointer types can hook into same() and the null
	check for pointers.

2011-10-23  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc, symtable.cc/hh: Add a new built-in __list__
	macro. This expands a tuple to a list, preserving embedded tuples
	in the same way that list values are parsed. This is provided for
	the benefit of custom aggregate notations (usually outfix
	operators) which are supposed to be parsed like the built-in list
	and matrix brackets. Note that there's no way to actually define
	this macro in Pure, so it is provided as a builtin instead.

	* configure.ac: Bump version number.

2011-10-21  Albert Graef  <Dr.Graef@t-online.de>

	* INSTALL: Slight reorganization of the installation manual, to
	make it easier to link to various subsections from the wiki and
	elsewhere. Also added a note about ready-made packages now being
	available on FreeBSD.

2011-10-18  Albert Graef  <Dr.Graef@t-online.de>

	* 0.48 release.

	* interpreter.cc (inline_code): Add experimental DragonEgg
	support.

2011-10-17  Albert Graef  <Dr.Graef@t-online.de>

	* configure.ac, interpreter.cc/hh, runtime.cc: LLVM 3.0
	compatibility fixes.

2011-10-15  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc, runtime.cc/h, lib/primitives.pure: Add a
	function lasterrpos to give more detailed error information about
	a failed val, eval or evalcmd operation. Per request by Peter
	Summerland.

2011-10-14  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: As suggested by John Cowan, add a --bigint pragma
	which, if enabled, causes all integer literals in the source to be
	interpreted as bigint values. This feature is still somewhat
	broken and thus not enabled by default. If you want to try it
	anyway, define USE_BIGINT_PRAGMA in lexer.ll at build time.

2011-10-13  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: Make the --eager, --required and --(no)defined pragmas
	accept any kind of symbol (not just an identifier), so that they
	can be applied to special operator symbols. No checking is done on
	the syntax, and a following line comment (// ...) must be set off
	from the symbol with whitespace. Note that any of these options
	implicitly declare the symbol if necessary, so if the symbol is to
	be declared using special properties such as fixity, that
	declaration must come *before* any pragma involving the symbol.

	* lexer.ll, interpreter.cc: Implemented --defined and --nodefined
	pragmas, as discussed on the mailing list. These take a global
	function symbol as parameter and mark or unmark it as a "defined"
	symbol, respectively. If a symbol that is marked as "defined" is
	defined as a function in the Pure program, then the compiler
	generates special code which ensures that each application of the
	function actually reduces to something else. Otherwise, instead of
	returning a normal form, a 'failed_match' exception will be raised.
	The --defined status of a function can be changed at any time,
	causing the function to be recompiled on the fly. The --nodefined
	pragma restores the default behaviour of returning a normal form
	upon failure.

2011-10-12  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: Add a special case rule so that double constants like
	1e100 are properly recognized.

	* lib/regex.pure: Move regex support into a separate module which
	can be loaded independently of the system module.

	* lib/system.pure: Improved printf/scanf implementation which
	supports GMP/MPFR (%Zd, %Rg) conversions.

2011-10-11  Albert Graef  <Dr.Graef@t-online.de>

	* Makefile.in: Bump runtime library version.

	* configure.ac: Add MPFR checks.

	* runtime.cc/h: Add GMP/MPFR printf/scanf support to the runtime.

2011-10-08  Albert Graef  <Dr.Graef@t-online.de>

	* lib/pointers.pure: Moved pointer arithmetic into separate
	module, as suggested by Max Wolf.

2011-10-05  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.hh, runtime.cc/h, printer.cc: Add light-weight
	support for pretty printing of tagged pointer values. This adds
	another way to hook into the expression pretty-printer in order to
	define custom unparsing of opaque C/C++ data structures from C/C++
	code.

2011-10-04  Albert Graef  <Dr.Graef@t-online.de>

	* lexer.ll: Add support for --warn/--nowarn pragmas, as suggested
	by Peter Summerland.

2011-09-11  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc/hh: Implement __locals__ as a built-in macro (rather
	than subsituting it away at code generation time) so that proper
	lambda lifting is performed on the local function references.

2011-09-06  Albert Graef  <Dr.Graef@t-online.de>

	* etc/pure-mode.el.in: Changed the keybindings for the block
	traversal commands to use the Meta prefix. (This used to be
	Ctrl+Shift, but this interferes with the standard binding for the
	shifted word movement commands for selecting ranges of text in cua
	mode.)

	Also, pure-mark-defun (C-M-h) and pure-send-defun (C-c C-f) now
	allow you to mark or send an inline code section (%< ... %>), if
	point is at or inside such a section.

2011-06-05  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (macspecial): Add a __namespace__ macro which
	expands to the current namespace at the point of the call, as a
	string.

2011-05-27  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc (LoadFaustDSP): Add dsp::samplingFreq interface
	routine to retrieve the sampling rate of a Faust dsp.

	* runtime.cc (faust_method): Add primitive to retrieve the
	interface operations of a Faust dsp. This is also available under
	the name dsp_fun in lib/faustui.pure.

2011-05-13  Albert Graef  <Dr.Graef@t-online.de>

	* configure.ac: Bump version number.

	* runtime.cc (clear_lasterr): Add a routine to have lasterr()
	cleared.

	* interpreter.cc/hh (interpreter::logging), runtime.cc/h
	(pure_start_logging, pure_stop_logging): Add a logging facility
	for error messages and warnings from the compiler.

	This is still experimental and not exposed in the Pure library
	right now. It is intended to be used by modules compiling Pure
	source, so that they can have messages logged and later retrieved
	with lasterr(), in order to display the messages to the user in
	any desired way.

2011-04-17  Albert Graef  <Dr.Graef@t-online.de>

	* interpreter.cc: Experimental __func__ builtin which yields the
	lexically enclosing function (named closure or lambda). As
	suggested by Saptarshi Guha on the mailing list.

2011-04-01  Albert Graef  <Dr.Graef@t-online.de>

	* configure.ac, interpreter.cc/hh: LLVM 3.0(svn) compatibility
	fixes.
   2011-09-27 23:32:20 by crocusino | Files touched by this commit (1)
Log message:
wip/pure: emacs-lisp files installation disabled (thanks to HIRAMATSU Yoshifumi)