Skip to content

ivankelly/sqeme-proto

Repository files navigation

Nick's Sqeme Prototype


* Getting started

To build and run the webkit example, run 'make' at the top-level and
run:

LD_LIBRARY_PATH=. ./browser


* What works

 - Basic hand-written bindings into C++, enough to have a working
   webkit example.

 - Basic support for connecting Qt slots to Scheme lambdas. Only
   no-argument slots are supported at the moment, though support for
   argument slots should be ready before too long.

 - tiny-clos wrappers over the bindings into C++. All Qt classes are
   represented as tiny-clos classes, and all Qt methods are tiny-clos
   generic methods.


* What needs to be done

The roadmap is roughly as follows:

 1. Write a source code generator using ivank's Scheme smoke bindings.

 2. Implement memory management. Currently we never free Qt instances,
    and tiny-clos instances can't be freed (this is how tiny-clos was
    designed). Additionally, a system is needed to track ownership
    of Qt objects.

 3. Port Qt's scribble example to Scheme. This should put the system
    under something of a heavy load, and will show me if I got memory
    management right.

 4. At this point an official project repository will be made and all
    further work will be done there.

 5. Research how to integrate Gambit's thread system, Qt's thread
    system, and continuations.

 6. Port Qt's mandelbrot example to Scheme. This should also put the
    system under a heavy load, and additionally, will test Sqeme's
    thread support.

 ?. Full support for signals and slots. Pieces of the system will
    probably be added as I go.

For more information, see:

http://sqeme.sourceforge.net/cgi-bin/moin.cgi/Todo


* Tree layout

src/sqeme     - Bindings into C++ and wrappers over them for CLOS.
src/examples  - Example Qt programs written in Scheme.
src/tiny-clos - Modified version of tiny-clos.


* Build system

tiny-clos and sqeme are built as shared libraries at the top-level.
The examples are built as binaries linked against them at the
top-level. Set LD_LIBRARY_PATH to . to run the binaries from the
top-level.

The build system is implemented as recursive Makefiles. The build is
incremental. Important make variables, like $(GSC) and $(CXXFLAGS),
can be found in Makefile.defs at the top-level of the tree. It is
included by all Makefiles which perform compilation.

Note that we do not use gsc to build C files generated by gsc, as the
gambit manual suggests. gsc calls gcc with many flags intended to
optimize the compiled code, which makes debugging with gdb
difficult. Also, as Gambit's C files are almost entirely macros, we
use gcc's -gdwarf-2 flag so that macro information is available to the
debugger.


* tiny-clos modifications

A sort function has been added as Gambit seems to lack one. It came
from The Scheme Programming Language, so I'm not sure I'm licensed to
use it. It will eventually be replaced with a FOSS quick-sort
function.

%instance? seemed to always return #t for some reason. I believe this
is a problem with Gambit, so it was re-written and now works as
expected.

Support for user-defined primitive types.  make-primitive-class has
been modified to accept a class name and a predicate which will return
true when an object should be considered an instance of that class by
e.g. class-of.


* Thanks

Thanks to df for many great ideas and suggestions.


* Contact

Web site: http://sqeme.sf.net

Mailing list: https://sourceforge.net/mail/?group_id=270291

Email me at nicktastic at gmail dot com.

I can usually be found on Freenode IRC on #minno.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages