ICLP12-SWI25 - SWI
Download
Report
Transcript ICLP12-SWI25 - SWI
Jan Wielemaker
VU University
Amsterdam
2012-09-05
ICLP-2012
1
Contents
Viewpoint
A brief history of SWI-Prolog
The Prolog landscape
The place of Prolog in IT infrastructure
The Prolog software community
2012-09-05
ICLP-2012
2
Viewpoint
Logic programming
Programming languages
Prolog
2012-09-05
Prolog implementations
Prolog usage
Prolog community (user and developers)
Used TPLP special issue on Prolog
implementations
ICLP-2012
3
A brief history of SWI-Prolog
2012-09-05
1983 D. L. Bowen, L. M. Byrd, and WF.
Clocksin. “A portable Prolog compiler”
1986 I wrote a virtual machine based on
this paper
1987 Use in European KADS project,
replacing Quintus. Distributed using FTP
ICLP-2012
4
Success in KADS
2012-09-05
Bi-directional Prolog ↔ C interface allowed
for better integration to PCE (graphics)
Quintus compatibility on `as needed' basis
to support the project
Fast compiler, lazy loading (autoload)
Fast saved-state (based on `undump') and
reload of modified code using ?- make.
Command-line editing and completion
ICLP-2012
5
Yet another Prolog
(not to br confused YAP)
Satisfied our needs
We had full control
… but, nothing unique that was not added
to commercial systems within weeks
→ Released
2012-09-05
FTP
Academic `non-commercial use'
No need to fill out forms
ICLP-2012
6
Educational
Free of hassle (download, compile, use)
Supports popular academic Unix machines
Resource friendly
Compliant with primitives in textbooks
2012-09-05
ICLP-2012
7
The Carrot: quick release model
2012-09-05
Input
Contributions (mostly portability)
Bug reports
Functionality requests
Output
Fast response
Updated source on FTP, ranging from
hours to a week
ICLP-2012
8
The middle ages (1988-2001)
New libraries, bugfixes, etc.
ISO part-I
Port to Windows 95/NT3.5
Quality (CVS, test suite)
2012-09-05
But … we missed lots of Prolog research
(parallel, CLP, ...)
ICLP-2012
9
2001: License
GNU libreadline conflicts with noncommercial-use license
FSF: remove libreadline or change SWIProlog license
→ SWI-Prolog moved to LGPL
2012-09-05
Started http://www.swi-prolog.org
ICLP-2012
10
2003: CLP
After Mumbai ICLP, together with Tom
Schrijvers and Bart Demoen
Copy of `dynamic attributed variables' as
proposed by Demoen and implemented for
hProlog
Leuven CHR, coroutining
Markus Triska started pure Prolog clp(fd)
2012-09-05
ICLP-2012
11
2003.. Web support
Multi-threading
Unicode
Atom garbage collection
SGML/XML
HTTP Server and client libraries
RDF libraries and store
2012-09-05
ICLP-2012
12
Commercial involvement
2012-09-05
Contributions
JPL, the Java interface
Quality checks and bug fixes
Sponsored development
Unbounded integers and rationals (GMP)
SSL interface
Memory management
PlDoc, PlUnit
IF/Prolog portability layer
ICLP-2012
13
Success
Right time
Early hassle-free Prolog for education
Early port to Windows (students)
Model
Technical
2012-09-05
Quick release cycle: 2 weeks for
development, 6 months for stable version
Interface, do-what-I-mean, robustness,
interfaces
ICLP-2012
14
Failure
2012-09-05
Trying to do `everything'
Packages often rely on undocumented
SWI-specific extensions, making it hard to
reuse them
Improving
Development APIs (share with PDT)
Modularized I/O and OS interface (YAP)
Modularize (GIT) repository
ICLP-2012
15
Part-II
The Prolog landscape
2012-09-05
ICLP-2012
16
Is Prolog in BAD shape?
Ohloh (http://www.ohloh.net/)
Language
Lines of code in projects
Prolog
652,576
Erlang
20,217,024
Haskell
6,636,372
Lisp
2012-09-05
19,657,199
ICLP-2012
17
Is Prolog in BAD shape?
2012-09-05
Discontinued in many Dutch universities or
moved to a `language overview course'
Hard to convince our (PhD) students to use
it, even for RDF because
Perceived as `hard to learn'
No modern (IDE) tools
No library for X, Y and Z (you name it)
``An irrelevant language from the past''
``I always programmed in (often) Java''
ICLP-2012
18
Some often heard reasons
(Early) fragmentation of the language
No programmers/No jobs
2012-09-05
Logic programming/Prolog is unsuitable as
a general purpose language
Failed standardization
ICLP-2012
19
Fragmentation?
#Implementations (source: OpenDirectory)
70
60
50
40
30
20
10
0
Prolog
2012-09-05
Lisp
Scheme
ICLP-2012
Haskell
C
20
No programmers?
Language
vWorks expertise
Java
StackOverflow questions
18,700
286.290
Prolog
453
1845
Lisp
545
2068
Erlang
46
2587
Haskell
115
7854
2012-09-05
ICLP-2012
21
Books
Source: Amazon (UK)
6
5
4
3
2
1
0
1986
1988
1990
1992
1994
1996
1998
2000
2002
2004
2006
2008
2010
2012
1985
1987
1989
1991
1993
1995
1997
1999
2001
2003
2005
2007
2009
2011
2012-09-05
ICLP-2012
22
The Gartner Hype Cycle
Explained
2012-09-05
ICLP-2012
23
Part III
The place of Prolog in IT infrastructure
2012-09-05
ICLP-2012
24
General Purpose
vs Logic server
`General purpose'
Missing language features (e.g.,
destructive assignment)
Needs graphics, Web, DB, etc.,
interfaces
`Logic server'
Needs language interfaces
Suffers from object/relational impedance
mismatchhttp://en.wikipedia.org/wiki/Objectrelational_impedance_mismatch
2012-09-05
ICLP-2012
25
Logic server
Native (Amzi!)
JVM based (Jinni, Minerva, Jekejeke, …)
Successor
2012-09-05
BinProlog → Jinni
IF/Prolog → Minerva
ICLP-2012
26
Embedding is popular
2012-09-05
SWI-Prolog has interfaces for C (native),
C++ (native and contributed), Java, C#,
Python, Perl (contributed)
113 projects on GitHUB combine Prolog
with:
ICLP-2012
27
SWI-Prolog: `glue'
2012-09-05
Prolog is good at `glue' due to
Dynamic nature (incl. typing)
Flexible dynamically typed data
representation makes it simple to
represent data from external systems
Natural mapping of tabular data
Interactive development environment
Rules, DSLs, ...
ICLP-2012
28
Some realized `glue' (for SWI)
Databases (ODBC)
RDF
XML/SGML/HTML
R (statistical computing)
HTTP Server library
Spatial reasoning (geos library)
OpenGL, OSC, MIDI, Gtk, Matlab, ...
2012-09-05
ICLP-2012
29
Prolog as primary language
(SecuritEase)
2012-09-05
ICLP-2012
30
Conclusion
2012-09-05
`Logic server' seems a more natural and
easier to sell first option
Provided with well designed `glue', Prolog
is also attractive as primary application
language, including scripting
ICLP-2012
31
Part IV
The Prolog software community
2012-09-05
ICLP-2012
32
Comparing models
Implementation
Maintenance
Progress Shared
API
Stable
API
Independent
development
duplicate
duplicate
++
--
-
Shared
design
duplicate
duplicate
+++
na.
na.
Shared
specification
duplicate
duplicate*
--
+++
+++
Forked
specification
duplicate
duplicate
+++
++
+
Forked code
single
duplicate
++++
++
+
Shared code
single
shared
++
++++
++
* Stability of specification makes duplicates easier to handle
2012-09-05
ICLP-2012
33
Forking (Unix wars)
Source: Wikipedia
2012-09-05
ICLP-2012
34
Distributions (Linux)
2012-09-05
ICLP-2012
35
Summary
Shared standards are good but slow. Fits
poorly in a culture of innovation.
Shared code leads to
Reuse (stand on the shoulders of giants)
Fast innovation
Sharing needs a common ground
And, where do we stand?
2012-09-05
ICLP-2012
36
Independent Development
Various module systems
Operating system access
File system, networking
Interfaces
2012-09-05
Predicate based ↔ name based
DB, Graphics, C, Java, C#, ...
ICLP-2012
37
Shared design
WAM
Garbage collectors
Tabled evaluation
Attributed variables
2012-09-05
ICLP-2012
38
Shared specification
2012-09-05
ISO standard
ICLP-2012
39
Forked specification
2012-09-05
Quintus module system (SICStus, Ciao,
YAP, SWI)
hProlog Dynamic attributed vars (SWI,
YAP, XSB)
SWI Thread API (YAP, XSB)
ICLP-2012
40
Forked code
DEC10 library (forked many times)
clp(q,r)
Draxler's Prolog → SQL compiler
SWI I/O and OS access (YAP, close to shared)
SWI XML/SGML (XSB)
SWI PlUnit (SICStus)
Parts of XSB tabling (YAP)?
2012-09-05
ICLP-2012
41
Shared Prolog components
Logtalk (many)
CHR (hProlog, SWI, XSB, YAP, B-Prolog, SICStus, Ciao)
2012-09-05
ICLP-2012
42
Requirements for sharing
Common ground for
Core Prolog
(++)
Prolog extensions (attvar,tabling) (+)
Structuring (modules, objects)
Interface to non-Prolog resources (–)
(+/-)
http://www.cs.unipr.it/~bagnara/Papers/Prolog-FLI-survey
2012-09-05
Always remaining issues → need work-around
Conditional compilation
(++)
ICLP-2012
Macro expansion
43
Comparision of FLI
Syst./Charac.
B-Prolog
Bin
Ciao
Eclipse
GNU
SICStus
SWI
XSB
YAP
Glue code
m
m
b
m
b
b
m(b)
b
m
Int. style
f
l
f
f
f
p
p
p
f
Term constr.
t
b
b
b
b
b
b/t
t
b
Non-det.
n
n
s
n
y
n
y
n
y
Exceptions
n
n
y
n
y
y
y
n
n
C to Prolog
r
r
r
y
r
r
r
y
r
(De)Init
n
n
i
n
n
b
b
n
n
Compilation
m
m
a
m
m
e
m
a
m
Linking
s
s
d
b
s
b
b
s
d
m: manual, f: functional, p: procedural, l: low level, s: static, d: dynamic, b: both
http://www.cs.unipr.it/~bagnara/Papers/Prolog-FLI-survey
2012-09-05
ICLP-2012
44
Progress (Foreign)
2012-09-05
FLI emulations
SICStus ↔ SWI (Alpino, XPCE)
YAP ← SWI (SWI packages)
YAP ← Bprolog (PRISM)
Reuse SWI I/O and OS builtins in YAP
In part based on FLI emulation
Also emulated low-level SWI FLI
ICLP-2012
45
Prolog Commons
Goal: arrive at a shared Prolog library
Minimal shared module support
Shared document and annotation model
2012-09-05
Ciao effort
Website, GIT repo
ICLP-2012
46
YAP/SWI
`dialect' framework
:- expects_dialect(X) says
Text is written for X
Loads dialect(X) (= library(dialect/X))
Defines built-ins of X not in target
Rewrites conflicting built-ins using macros
Rewrites module API using macros
Pushes X-compatible library
2012-09-05
ICLP-2012
47
Dialects implemented
YAP
BProlog, Commons, hProlog, SWI-Prolog
SWI
YAP, BIM, hProlog, Commons, Ciao,
IF/Prolog
`As-needed' basis
2012-09-05
ICLP-2012
48
Dialect applied (SWI)
2012-09-05
Alpino (now maintained as portable code)
500Klines, C,C++,Tcl/Tk
SICStus → SWI
Prosyn (ported)
1Mlines, C,C++ (Windows MFC)
IF/Prolog → SWI
Replaced MFC with web-GUI, other C
with pure Prolog code
ICLP-2012
49
Dialect Applied (YAP)
Many of SWI's extension packages
PRISM
2012-09-05
ICLP-2012
50
Commons ↔ Dialect
Shared spec/code
Slow to start
Must be useable
Use each others
code
Immediate result
`As needed'
I. Use commons as a `dialect'
II. Slowly, a comprehensive commons can
act as shared library for many projects
2012-09-05
ICLP-2012
51
Distribution: Pack
2012-09-05
Simple directory with
File pack.pl containing meta-data
Sub-dir prolog that is added to the library
Optional configure[.in], makefile[.in] for
foreign parts
http://www.swi-prolog.org/pack/list
ICLP-2012
52
Conclusions
2012-09-05
Prolog was hyped and its community was
fragmented. There are signs indicating
Prolog reached the enlightenment phase:
New books get published again
Compatibility and portable applications
are becoming more common
Stability and compiling improved much
(Paulo Moura, CICLOPS)
Sharing resources (libraries, applications,
tutorials, books, …) is important
ICLP-2012
53
Next steps (also open.pl)
Organize new `commons' meetings to
Bootstrap the common library/dialect
Establish a common Prolog ↔ C binding
Establish macro expansion
A package distribution format
Implement the dialect emulation
Share!
2012-09-05
ICLP-2012
54