/squirrel-modules

General-purpose Squirrel language project. Includes collection of basic modules (including module loading infrastructure)

Primary LanguageC++OtherNOASSERTION

squirrel-modules is a project to provide clean, flexible and extensible
module import system for Squirrel programming language
(http://squirrel-lang.org/), as well as few basic modules which would be
of interest to many users. It's not intended to be vast collection of
modules, but rather, set of technologies and best practices allowing
users to provide quality modules on their own, aiming towards distributed
community-supported module repositories as available for many popular
languages (CPAN for Perl, PyPi for Python, etc.)

Quick start:

1. Check out repository using "git clone --recursive". This will also
checkout modified Squirrel code as a git submodule. If you already
cloned without --recursive, run "git submodule update".

2. Install prerequisites. This includes: C++ compiler (GCC), GNU Make
and libffi (libffi-dev package on Debian systems).

3. "make; make install". This will build "sqrl" interpreter with
module import support, and included modules, and will install them
within your home directory (in ~/bin/ for binaries and scripts and
in ~/.squirrel/ for modules).

4. "export PATH=~/bin:$PATH", then run "sqrl".


squirrel-modules consists of the following components:

binmodule
    Support for dynamically loadable binary (i.e. compiled C/C++ code)
    modules. This code also provides means to support both static and
    dynamic using the same source code, as well as transparently support
    Squirrel source, Squirrel bytecode, and binary module loading.
    Summing up, binmodule provides low-level module import framework.

import
    High-level import framework. This uses binmodule facilities
    underneath. Import framework is modeled after Python's import
    functionality and provides import() and import_from() functions
    for flexible namespace and symbol management.

simple
    Example of trivial C module written using binmodule framework.

ffi
    Foreign Function Interface (FFI) module, allowing to call arbitrary
    functions from dynamic libraries. This module can be used to interface
    with arbitrary software written in compiled languages (usually C/C++).

os, socket
    Modules to wrap basic POSIX OS and socket functionality using FFI.

osstream
    Implementaton of popen stream object (read/write from/to a child
    process via pipe) and fdopen stream object (wrap POSIX file descriptors
    in a stream object, useful for sockets and many other things).

To use squirrel-modules, you need Squirrel with the patches to address
some language misfeatures or lack of builtin functionality:
https://github.com/pfalcon/squirrel-lang/tree/squirrel3-genpurpose
(git clone --recursive pulls it automatically as a submodule).

For more information about squirrel-modules ideas, see RFC on Squirrel
forum: http://forum.squirrel-lang.org/mainsite/forums/default.aspx?g=posts&t=3122