# ECLiPSe 7.1 Release Notes

## Version 7.1 (DRAFT)

Not yet frozen, features may still be added...

## Built-In Predicates

### Engines and Threads

New predicate

- engine_clone(+Original, +Clone, +Options)
- Make a duplicate of the Original engine by copying all its computational state.

### Random Numbers

Multiple random number generators can now be selected
as `random_mode`

via
set_flag/2:

- lcg
- (default) a Linear Congruential Generator with a period of 2^31-1.
- xs
- xorshift64* generator with a period of 2^64-1.
- system
- the system's random() or rand() library function.

- random(+Limit, -N), N is random(Limit)
- Generates a random integer N between 0 and Limit-1.

## Constraint Solvers

### EPLEX (LP/MIP Solver Interface)

The LP/MIP Solver Interface library(eplex) now also works with the free GLPK (GNU Linear Programming Kit).

### GFD Gecode Solver Interface

The Gecode interface library(gfd) has been updated for Gecode 6.2.

### IC Solver (interval and finite domain constraints)

The interval solver library(ic) now supports additional functions in constraint expressions:

- floor(Expr)
- Expr rounded down to nearest integer.
- ceiling(Expr)
- Expr rounded up to nearest integer.
- truncate(Expr)
- Expr rounded to nearest integer toward zero.
- Expr1//Expr2
- Integer division, rounding towards zero. This is only defined over integral arguments and yields an integral result.
- Expr1 rem Expr2
- Remainder corresponding to integer division //. This is only defined over integral arguments and yields an integral result.

- ?BoolExprX <=> ?BoolExprY
- BoolExprX and BoolExprY are equivalent.
- <=>(?BoolExprX, ?BoolExprY, ?Bool)
- Bool is the truth value of the equivalence BoolExprX <=> BoolExprY being true.

## Other Libraries

### New Libraries

- lib(json)
- Read/write JSON format.

### Library Enhancements

- library(hash)
- Add hash_update/5 and hash_map/3.
- library(csv)
- Add options and csv_read_row/3.
- library(lips)
- Made thread-safe and added par_lips/1.

### Kernel and Built-in Predicates

- Named references
- References can now be initialised with a free variable. Added built-in swapref(+Name, -OldValue, ?NewValue)

## Supported Architectures

This release is available for the following architectures:

- Linux/ARM 32-bit (armv7_linux), for Raspberry Pi 2&3
- NEW: Linux/ARM 64-bit (aarch64_linux), for Raspberry Pi 3&4
- Linux/x86 (Intel, AMD,...) 32-bit (i386_linux)
- Linux/x86-64 (Intel, AMD) 64-bit (x86_64_linux)
- Windows 32-bit (i386_nt)
- Windows 64-bit (x86_64_nt)