# Ann: SWI-Prolog 9.3.9

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-9/7705>\
**Category:** Releases\
**Created:** [August 19, 2024, 11:07am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-9/7705 "2024-08-19T11:07:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [August 19, 2024, 11:07am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-9/7705/1 "2024-08-19T11:07:44Z")

</div>

Dear SWI-Prolog user,

> I forgot to send this when making the release. Sorry.

SWI-Prolog 9.3.9 is ready for download. It comes with quite a few  
fixes thanks to contributions and bug reports. Highlights:

- Packs now support “apps”. By adding a directory `app` to a pack  
and adding a file `<name>.pl`, `swipl <name> [arg ...]` runs the  
application.

- During compilation, relative file names are resolved relative to  
the file being loaded **only**. Older versions first searched  
relative to the file and then relative to the process working  
directory. The latter no longer happens, which makes loading  
sources more reliable and improves security.

- Various portability patches, notably for OpenBSD, LibreSSL and  
MacOS.

- XPCE GUI provides better support for hi-res displays by allowing  
dimension resources in `mm`, and scaling bitmaps. This should  
work out of the box on systems on which the display DPI detection  
is correct. Otherwise the xpce `Defaults` file can be used to  
overrule the detected DPI. Font and image sizing can be specified  
independently. Currently only fully supported on X11.

# SWI-Prolog Changelog since version 9.3.8

- DOC: #1303 EBNF description of sequence//3 and sequence//5.

- FIXED: print\_term/2 to add a space behind : when printing dicts  
vertically. This avoids syntax error due to symbol glueing and  
looks prettier.

- FIXED: Handle “apps” from packs

- FIXED: Handling of indirect data types in delimited continuations.

- BUILD: Added CMake options SWIPL\_CC and SWIPL\_CXX This selects the  
defaults for the `c_cc` and `c_cxx` flags. Distributions should  
normally set these to the common C and C++ compiler of the platform.  
Local builds typically leave them default, setting these flags to  
the same as used to build SWI-Prolog.

- FIXED: #1300 Modify prefix block operator to plain term if there is  
no argument.

- TEST: make string\_upper/2 test succeed if `LANG=C`

- FIXED: `qlf` app to not import the compiled library into `user`.  
This leads to conflicts.

- MODIFIED: drop library(checkselect) and library(checklast). These  
modules help debugging reordered arguments for select/3 and last/2  
from old non-(de-facto)-standard to common practice long ago.

- DOC: Improved docs for prolog\_alert\_signal/2.

- FIXED: `swipl pack install .` to install using a symlink.

- MODIFIED: absolute\_file\_name/3 relative to source Up to this patch,  
predicates that used absolute\_file\_name/3 (including load\_files/2,  
use\_module/1, etc) interpreted plain non-absolute names relative  
to the source and on failure, relative to the working directory.  
As of this patch we only consider files relative to the source.

- PORT: Another iteration trying to tame MacOS.

- PORT: Deal with wcsxfrm() nor immediately returning required size

## Package clib

- PORT: Proper ip6 support detection for OpenBSD

## Package cpp

- TEST: Disable scoped term tests for 9.2.x

## Package http

- DOC: Fix building docs in single threaded version.

## Package semweb

- DOC: Clarify rdf\_retractall/3 and rdf\_load/2

## Package ssl

- CLEANUP: Abstract from OpenSSL/LibreSSL versions and use more CMake

- PORT: Fix building with modern LibreSSL versions LibreSSL 3.5.0.

## Package xpce

- ADDED: Better support hir-res screens. This patch provides  
`@display<-dpi`, `image.scale` and some additional features to allow  
scaling images and general sizes. It should work fully automatically  
on systems where the DPI can be computed properly. Otherwise the  
DPI of the display can be overruled in the resource file.

- ENHANCED: Use screen resolution to scale text cursor

- ADDED: Provide support to get and overrule the screen resolution (DPI)

- ADDED: Modifiable resolution (DPI).

- ADDED: implement `display<-dots_per_inch` for X11

- PORT: Make compile on Windows after switching to getaddrinfo()

- PORT: #1299 Replace deprecated gethostbyname() by getaddrinfo()

- PORT: Initialization of `builtin_names`. This used two structs,  
one for initialization (bname) and one for access (name) due to the  
lack of support for designated initializers in old C. We can now do  
it cleanly.

- PORT: Work around MacOS 15 (beta) pulling socket.h with sys/ioctl.h
