repos
/
doc
/ annotate_shade
summary
|
shortlog
|
log
|
tree
|
commit
|
commitdiff
|
headdiff
|
annotate
|
headblob
|
headfilediff
|
filehistory
normal
|
plain
|
shade
|
zebra
phonon & :arg0
Annotate for file introduction.xml
2009-04-05 tobias
1
<?xml version="1.0"?>
17:58:25 '
2
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
'
3
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
'
4
<chapter id="introduction">
'
5
<title>Introduction</title>
'
6
<para>
'
7
CL-Smoke provides CLOS bindings for the Qt and KDE libraries.
'
8
</para>
'
9
<section><title>Related</title>
'
10
<itemizedlist>
'
11
<listitem><para><ulink url="http://common-lisp.net/project/commonqt/">
'
12
CommonQt</ulink> (No CLOS, no startup overhead)</para></listitem>
'
13
<listitem><para><ulink url="http://sourceforge.net/projects/lisp-cffi-qt4">
'
14
Lisp-CFFI-Qt4</ulink> (dead)</para></listitem>
'
15
</itemizedlist>
'
16
</section>
2009-07-06 tobias
17
<section id="limitations"><title>Limitations</title>
2009-04-05 tobias
18
<itemizedlist>
2009-06-04 tobias
19
<listitem><para>Ownership transfer to / from C++ of non QObject objects is seldom known to cl-smoke.
21:20:49 '
20
E.g.: cl-smoke might delete an instance even though it is still needed by C++.
'
21
(One that is known is <ulink url="http://doc.qtsoftware.com/4.5-snapshot/qundostack.html#push">QUndoStack::push()</ulink>.)
'
22
</para></listitem>
'
23
<listitem><para>Limited conversions to and from C++. You will get an NO-APPLICABLE-CXX-METHOD error
'
24
when a Lisp to C++ conversion is missing and a pointer will be returned when there is no C++ to Lisp
'
25
conversion.
'
26
</para></listitem>
2010-01-10 tobias
27
<listitem><para>10 seconds startup time<footnote>
2009-05-14 tobias
28
<para>
2009-07-22 tobias
29
Using a core image it is around 1 second.
2009-05-14 tobias
30
(see <xref linkend="core-image"/>)
12:56:16 '
31
</para></footnote>
'
32
(for <package>qt.examples</package>) on a
2010-01-10 tobias
33
Pentium M 1.7GHz. (Compilation ~20 seconds)</para></listitem>
2009-04-05 tobias
34
<listitem><para>Needs to be recompiled when the Smoke library is updated.</para></listitem>
2009-06-04 tobias
35
<listitem><para>Could be faster</para></listitem>
2009-08-27 tobias
36
<listitem><para>No const-correctness</para></listitem>
2009-04-05 tobias
37
</itemizedlist>
2009-06-21 tobias
38
<section><title>Performance</title>
09:29:52 '
39
<para>
'
40
Method calling is near 3000 times slower than native C++. The overhead is mainly in the overload
'
41
resolution and to/from foreign object translation. Some measurements by
'
42
<code><ulink url="http://tobias.rautenkranz.ch/darcsweb/darcsweb.cgi?r=cl-smoke/benchmark;a=summary">:cl-smoke.benchmark</ulink></code>
'
43
are in
'
44
<filename><ulink url="../benchmark.pdf">benchmark.pdf</ulink></filename>.
'
45
</para>
'
46
</section>
2009-04-05 tobias
47
</section>
2009-07-06 tobias
48
<section id="installation"><title>Installation</title>
2009-04-05 tobias
49
<section><title>Dependencies</title>
17:58:25 '
50
<itemizedlist>
'
51
<listitem><para><ulink
'
52
url="http://techbase.kde.org/Development/Languages/Smoke">Smoke2</ulink>
2009-08-27 tobias
53
bindings 4.2 or later</para></listitem>
2009-04-05 tobias
54
<listitem><para><ulink url="http://qtsoftware.com">Qt</ulink>
17:58:25 '
55
(development package)</para></listitem>
'
56
<listitem><para>
'
57
<ulink url="http://cmake.org">CMake</ulink> 2.6
'
58
</para></listitem>
2010-01-10 tobias
59
<listitem><para>a make program (preferably Gnu Make)</para></listitem>
2009-04-05 tobias
60
<listitem><para>a C++ compiler (GCC)</para></listitem>
17:58:25 '
61
</itemizedlist>
'
62
<para>
2009-12-13 tobias
63
On the Lisp side you need <ulink url="http://mudballs.com">Mudballs</ulink>
13:22:09 '
64
and <ulink url="http://tobias.rautenkranz.ch/lisp/sysdef.cmake">sysdef.cmake</ulink>.
'
65
</para>
'
66
<para>
'
67
If you prefer to use <ulink url="http://common-lisp.net/project/asdf/">ASDF</ulink> instead of Mudballs, you need these systems:
2009-06-03 tobias
68
<itemizedlist>
22:31:34 '
69
<listitem><para><ulink url="http://common-lisp.net/project/alexandria/">alexandria</ulink></para></listitem>
'
70
<listitem><para><ulink url="http://common-lisp.net/project/bordeaux-threads/">bordeaux-threads</ulink></para></listitem>
'
71
<listitem><para><ulink url="http://common-lisp.net/project/cffi/">cffi</ulink></para></listitem>
'
72
<listitem><para><ulink url="http://common-lisp.net/project/closer/closer-mop.html">closer-mop</ulink></para></listitem>
'
73
<listitem><para><ulink url="http://www.cliki.net/trivial-garbage">trivial-garbage</ulink></para></listitem>
'
74
</itemizedlist>
'
75
</para>
2009-04-05 tobias
76
</section>
17:58:25 '
77
'
78
<section><title>Supported Platforms</title>
2009-05-12 tobias
79
<section><title>Working</title>
17:03:22 '
80
<itemizedlist>
'
81
<listitem><para>
'
82
<ulink url="http://www.sbcl.org">SBCL</ulink> on Linux x86 (and x86_64)
'
83
</para></listitem>
'
84
<listitem> <para>
2009-07-02 tobias
85
<ulink url="http://trac.clozure.com/openmcl">Clozure CL</ulink> on Linux x86.
2009-05-12 tobias
86
</para></listitem>
17:03:22 '
87
</itemizedlist>
'
88
</section>
'
89
<section><title>Not Working</title>
'
90
<itemizedlist>
'
91
<listitem><para>
2009-04-09 tobias
92
<ulink url="http://www.cons.org/cmucl/">CMUCL</ulink>
2009-05-12 tobias
93
</para></listitem>
17:03:22 '
94
<listitem><para>
'
95
<ulink url="http://clisp.cons.org/">CLISP</ulink>
'
96
</para></listitem>
'
97
</itemizedlist>
'
98
</section>
2009-04-05 tobias
99
</section>
17:58:25 '
100
<section><title>Installation</title>
'
101
<para>
2009-12-13 tobias
102
For loading the systems you can use Mudballs or ASDF. But first get the sources:
13:22:09 '
103
</para>
'
104
<para>
2009-04-05 tobias
105
You need to checkout the darcs repositories:
17:58:25 '
106
<programlisting>
'
107
cd <userinput>SOME_DIR</userinput>
2009-07-22 tobias
108
for r in smoke qt qt.test qt.tests qt.examples qt.uitools qt.webkit kde kde.tests kde.examples repl; do
2009-04-05 tobias
109
darcs get "http://tobias.rautenkranz.ch/lisp/cl-smoke/$r"
17:58:25 '
110
done
'
111
</programlisting>
2009-06-03 tobias
112
</para>
2009-12-13 tobias
113
<section><title>Mudballs</title>
2009-06-03 tobias
114
<para>
2009-12-13 tobias
115
Then add the directory <userinput>SOME_DIR</userinput> to the mudballs search paths by adding
13:22:09 '
116
<programlisting>
'
117
(push (wildcard-searcher "<userinput>SOME_DIR</userinput>/*/*.mbd")
'
118
*custom-search-modules*)
'
119
</programlisting>
'
120
to <filename>~/.mudballs</filename>.
'
121
</para>
'
122
<note>
'
123
<para>
'
124
Loading the packages with <code>mb:load</code> compiles the C wrapper libraries as needed.
'
125
</para>
'
126
</note>
'
127
</section>
'
128
'
129
<section><title>ASDF</title>
'
130
<para>
'
131
The <code>.asd</code> files are
'
132
<ulink url="http://tobias.rautenkranz.ch/darcsweb/darcsweb.cgi?r=mudballs-to-asdf;a=summary">generated</ulink>
'
133
from the mudballs files.
'
134
<ulink url="http://tobias.rautenkranz.ch/lisp/cl-smoke/cl-smoke-asd.tar.bz2">Get the <code>.asd</code> files</ulink> and
'
135
place them in the corresponding source directories. Then symlink the <code>.asd</code> files in a ASDF search path.
'
136
You can for example run: <code>ln -s <userinput>SOME_DIR/*/*.asd</userinput> <userinput>ASDF_PATH</userinput></code>
'
137
</para>
'
138
<para>
'
139
Now build and install the <package>:smoke</package> and <package>:qt</package> C wrapper libraries with:
2009-06-03 tobias
140
<informalexample>
2009-07-02 tobias
141
<programlisting>cmake ./ && make && sudo make install</programlisting>
2009-06-03 tobias
142
</informalexample>
22:31:34 '
143
in the <filename>smoke/</filename> and <filename>qt/</filename> directories.
'
144
</para>
2009-12-13 tobias
145
<note><para>
13:22:09 '
146
Some examples get the paths for the files to load from their Mudballs system (ui and i18n) and thus will not work.
'
147
</para></note>
'
148
</section>
2009-04-05 tobias
149
</section>
17:58:25 '
150
</section>
'
151
</chapter>