Ann: SWI-Prolog 7.1.0

Jan Wielemaker <[email protected]>
Newsgroups gmane.comp.ai.prolog.swi
Message-ID <[email protected]>
Hi,

I have uploaded SWI-Prolog 7.1.0. As the major release indicates, this
makes SWI-Prolog a different system. You find more elaborate
documentation including motivations in the chapter "SWI-Prolog
extensions" in the manual.
(http://www.swi-prolog.org/pldoc/man?section=extensions).

I understand that this move will make some users deeply unhappy. I am
also convinced that (SWI-)Prolog badly needed some refreshment that
enables smoother integration with modern IT platforms while making the
language appear more natural to new users. The key issue is that
many of us need a language to write applications that talk to other
systems and not only a language that can "solve N-queens very elegantly,
but in splendid isolation". Don't worry, it can still solve N-queens
very elegantly, especially using Markus' clp(fd).

I would like to thank all people that provided feedback on the original
proposal.

Vitor Santos Costa has expressed that he likes most aspects of the
current proposal, which makes it likely that YAP users can enjoy
these gadgets too at some point in the future.

Below are the highlights:

   - Lists are no longer represented as .(H,T).  Instead, the list
     functor is now '$cons'(H, T).  The empty list is still [], but
     this is not an atom.  I.e., '[]' == [] fails.

   - By default, double quoted "text" is mapped to an object of type
     string.  This already raised some discussions.

   - The system introduces `maps' as primary citizens.  Maps are
     collections of key-value pairs, optionally typed. Maps are
     supported by read and write.  The syntax is

	type{key1:value1, key2:value2, ...}

     Keys in a map can be addressed using the functional notation
     Map.Key.  User functions on maps can be accessed as Map.Compound
     (e.g., Vector.multiply(V2)).

   - Quoted atoms are no longer operators.

   - Unquoted atoms may contain internal dots.  E.g., a.b is an
     atom.

   - functor() is valid syntax.  It produces a term that is distinct
     from 'functor'.  The `block' operator '()' to hack this syntax
     has been removed.

   - The `block' operators [] and {} remain.

Most of this can be disabled using "swipl --traditional". Notable this
gets the old list datastructure and "text" as a list of character codes.
It also disables functional notations on maps. The other syntax
extensions remain valid as they do not cause incompatibilites by
themselves.

I expect the system to run fairly stable.  Depending on feedback, there
could be minor changes to the extensions.  Certainly, there will be more
predicates operating on strings and maps and more of the libraries will
be prepared to work with these extensions.


	Enjoy --- Jan


========================================
SWI-Prolog Changelog since version 6.5.3
========================================

  * CLEANUP: Renamed `meta_atom' into `reserved_symbol'.  This is a mostly
    internal name, only showing up when using blob/2 on [].

  * FIXED: edit/0: file detection and edit/1: allow for file.<ext>

  * FIXED: Map.put(New).

  * FIXED: specify access as access([read,write]).  Map-based option
    processing does not allow for multiple options with the same name.

  * ADDED: Make set_stream(S, file_name(Name)) accept a string a Name.

  * ADDED: read_term/2 option dot_lists(Bool) to read lists in traditional
    canonical syntax.

  * MODIFIED: Deleted PL_WRT_LIST from SWI-Prolog.h.  This is no longer
    used.

  * FIXED: char_type(X, prolog_atom_start)

  * DOC: Added desction on when to use which representation for text.

  * ADDED: Colour support for maps.

  * ADDED: Finished subterm position representation for maps

  * DOC: Added new operators to the table

  * DOC: Updated section on operators, pointing to YAP and to the
    extension section.

  * DOC: Integrate V7 changes in type checking section.

  * DOC: Moved section on strings to extensions

  * DOC: Moves section on block operators from hackers corner to
    extensions.

  * DOC: Updated block operators since '()' is no longer part of them.

  * ADDED: get_map_ex/3, raise exception from Map.Key if Key is not in
    Map and added Map.get(Key).

  * FIXED: Consider map functions evaluable.

  * FIXED: number_codes/2 reports errors as if it was number_chars/2.
    Paulo Moura.

  * DOC: Document the back_quotes option of write_term/3

  * FIXED: Quote the `, unless =back_quotes= is set to =symbol_char=.

  * ADDED: map_select/2, map_select/3.

  * ADDED: b_set_map/3, nb_set_map/3, nb_link_map/3.

  * ADDED: existence_error(Type, Object, In) to express that Object does
    not exist in In.

  * ADDED: =~=/2

  * ADDED: map_pairs/3

  * ADDED: partial processing of maps in library(options).

  * ADDED: is_map/1.

  * ADDED: built-in predicate option processing (scan_options()) now also
    processes maps.

  * CLEANUP: Reorganize option scanning code, preparing for reuse in
    analyzing maps

  * DOC: Small stuff

  * DOC: Various errors

  * BUILD: Suppress some warnings for building the online manual.

  * DQUOTES: Update manual index generation

  * ADDED: Functional syntax for maps

  * ADDED: Allow for embedding the dot (.) in unquoted atoms.  E.g.,
    math.abs is a valid Prolog atom.  This is controlled by the flag
    =allow_dot_in_atom=.

  * ADDED: Various additions to support zero-argument compounds:
      - compound_name_arity/3, - compound_name_arguments/3 -
      PL_get_compound_name_arity() - PL_unify_compound()

  * MODIFIED: Allow reading functor()

  * ADDED: Type check on DCG in/out.

  * DQUOTES: Various fixes to the library

  * MODIFIED: Removed library(am_match).  This library contained a simple
      regex matching library.  It was buggy, mostly undocumented and
      hopefully not used.

  * ADDED: list_strings/0 and list_strings/1 to find portability issues
      do to the changed interpretation of "..."

  * DQUOTES: Fix processing in git.pl

  * DQUOTES: Fix double quote dependency in the library.

  * MODIFIED: Default setting of the prolog flag double quote has been
      changed to 'string', causing "hello" to read as the string onject
      "hello".  Note that the flag is module-aware.

  * MODIFIED: Quoting an atom disables it as an operator.  Trying to define
      an operator from an atom that needs quotes raises a domain error.

  * ADDED: --traditional option to get traditional behaviour wrt . and [].

  * ENHANCED: Save [] and . special in QLF files.  More compact, faster
      and provides portable states between extended and traditional modes.

  * ADDED: subterm position support for maps

  * ADDED: Reading maps (needs sorting and position handling)

  * ADDED: Write maps with {}-syntax.

  * ADDED: is_map/1, map_create/3, map_get/3, map_put/3, map_put/4.

  * ADDED: write_term/3: options fullstop(Bool) and nl(Bool).

  * ADDED: ATOM_nil and ATOM_dot constants to SWI-Prolog.h

  * ADDED: Options dot_lists and brace_terms to write_term/3

  * TEST: Compensate for meta atoms

  * ADDED: . \== '.'

  * MODIFIED: Introduce flag back_quotes, just like double_quotes.

  * ADDED: Introduced meta-atoms

  * ADDED: Forward compatibility using ATOM_nil and ATOM_dot

  * ENHANCED: Avoid that debug/3 messages from multiple threads get
      mixed up.

  * DOC: Updated HTML readme for MacOS application

  * FIXED: Now really fixed qsave_program/2.  Jos de Roo.

  * FIXED: library(pack): answered_default/1 was undefined.  Nicos
      Angelopoulos.

  * FIXED: qsave_program('/tmp/img'). ERROR: Undefined procedure: 0/0.
      Jos de Roo.

  * FIXED: Syntax error in library(dialect/sicstus).

  * MODIFIED: Removed style_check/1 =string= style.  See the Prolog flag
      =double_quotes=.  This change also enhances runtime check of the
      argument to style_check/1.

  * PPA: Prepare making a PPA for Saucy Salamander (13.10)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.