Re: Ann: SWI-Prolog 7.1.9
Jan Wielemaker <[email protected]>
| Newsgroups | gmane.comp.ai.prolog.swi |
|---|---|
| Message-ID | <[email protected]> |
On 02/27/2014 06:39 PM, Jose F. Morales wrote: > It is not optional (well, there is --traditional). I think that the Ciao > modular and strict architecture is a great piece of engineering. I > prefer to keep things `just available' though. That approach surely has > disadvantages, but quite likely it contributed a lot in the popularity > of the system. > > > You are definitely right that 'just available' is a great idea to push > the language forward. However, that implies that each SWI version is > potentially implementing a slightly different language/dialect. To some extend, yes. In practice the backward compatibility seems to be pretty reasonable, even with the major changes of V7. > I wonder if there is any best practice for specifying the expected > dialect, system version, etc. Per-module declarations are precise but > too noisy for medium/large projects. Is it possible to specify the > requirements to the 'pack' definition in SWI? You refer to these packs [1]? They can specify requirements, but not in enough detail to be very meaningful. In my experience, :- if does a good job writing programs and libraries that run over multiple versions that are not compatible. In most cases :- if(\+current_predicate(xyz/2)). xyz(X, Y) :- <write a replacement>. :- endif. That nicely deals with the the introduction of xyz in version V. The only issue is that you cannot deal with code that is syntactically invalid. That can be a problem if you want to write code that runs in V7 using dicts or quasi quotations and other Prolog systems. In such cases, I guess the only way is not to use dicts or use another syntactic abstraction and implement that with and without dicts. Possibly ECLiPSe's idea of having a hook that provides term rewriting after read_term/3 is a good idea after all. When I heart about it I was sceptical. p.s. We could consider ignoring syntax errors in excluded conditional code? The problem is of course that it needs to find the :- endif. or :- elif or :- else. I guess we can define some way around, but it would be harder to get that accepted by all systems providing conditional compilation. Cheers --- Jan [1] http://www.swi-prolog.org/pack/list