From 4be45d61b178171ce6c0d1841ffb72e7b4e67797 Mon Sep 17 00:00:00 2001 From: Lassi Kortela Date: Fri, 19 May 2023 12:01:46 +0300 Subject: [PATCH] Add wget mirror wget --mirror --no-parent --no-host-directories --cut-dirs 2 \ https://alumni.media.mit.edu/~kbrussel/Header2Scheme/ --- www/h2s2.jpg | Bin 0 -> 25807 bytes www/index.html | 305 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 305 insertions(+) create mode 100644 www/h2s2.jpg create mode 100644 www/index.html diff --git a/www/h2s2.jpg b/www/h2s2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f1a2664f0012748303110b2fe3418a1c18327b4 GIT binary patch literal 25807 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 +The Header2Scheme Home Page + +
+

+

+Header2Scheme: +

+

+An Automatic C++ to Scheme Interface Generator +

+
+
+

+ + Header2Scheme version 1.4 is now available, and contains a few bug fixes and enhancements. The source code is available +for download. + +

+

+The Problem +

+ +There are many situations in which more text-based interactivity is +desired in a C or C++ program than simple printf's and +scanf's. Unfortunately, to create a full-fledged interpreter is a +challenging and time-consuming task. Tcl is one solution that many +people choose, but has several disadvantages, among them that it is +slow and stores all data types as character strings. Scheme is a very +elegant interpreted language for which there are many implementations +of interpreters. Unfortunately, up until now, there have been +relatively few useful libraries for which Scheme bindings have been +created, so acceptance of Scheme as a general interpreted language +solution has been minimal. + +

+ +

+One solution +

+ +Header2Scheme is a program which reads in a directory tree full of C++ +header files and compiles them into C++ code. This new code, +when compiled and linked with SCM (Aubrey Jaffer's Scheme +interpreter) implements the back end for a Scheme interface to the +classes defined by these header files. + +

+ +

+Why SCM? +

+ +I looked at a few Scheme interpreters before deciding on SCM; two of +these included Scheme48 and libScheme. Each had its advantages, but SCM had +the distinction of being the fastest of the pack. Since my work focuses +mainly on real-time graphics applications, SCM had the obvious +advantage. (However, libScheme had a very elegant, object-oriented +programming interface which was very appealing.) + +

+Basic syntax defined by Header2Scheme +

+ +Given a C++ class: +
+	class Foo {
+	public:
+		int memberFunction();
+		Yabba *class_variable;
+	};
+
+ +The Scheme interface becomes +
+	(define my-foo (new-foo))
+	(define my-int (-> my-foo 'memberfunction))
+	(define my-yabba (-> my-foo 'class_variable))
+
+An alternative calling interface is +
+	(foo::memberfunction my-foo)
+	(foo::class_variable my-foo)
+
+ +
+ +

+More on the backend +

+ +When interfacing C++ and Scheme, there are several issues to take into +consideration: + +I have tried to address all of these problems in Header2Scheme. + +

+ +

Conversion of data structures

+ +Basic C types often have analagous Scheme data structures: +
    +
  • arrays/vectors +
  • strings +
  • ints, floats +
+ +Header2Scheme generates code to convert fixed-length C arrays into Scheme +vectors and back. (See the section below on pointers and references.) +Strings have essentially the same representation in Scheme and C, modulo a +type tag in Scheme. Floats and ints are likewise similarly represented and +have all the necessary conversion code generated by Header2Scheme. + +

+ +More sophisticated C data structures (i.e. the ones which Header2Scheme is +designed to provide access to) are represented in the Scheme backend as +pointers with a type tag. + +

+ +

Pointers and references

+ +All "complicated" C structures are represented in the Scheme backend +essentially as C pointers with a type tag. On the Scheme side of things, +there are no notions of pointers, references or dereferencing; everything +is an "object". + +

+ +When making a function call (see the section below on type checking) +pointers are automatically dereferenced. + +

+ +

Type checking and overloaded functions +

+ +One of the most elegant aspects of Scheme is that there is no type +checking; everything is considered to be "data". Because Header2Scheme +fundamentally is dealing with C, however, it necessarily enforces some type +checking. + +

+ +When you call a member function of a class via Scheme, the code that +Header2Scheme produced checks the Scheme arguments' types and attempts to +find the appropriate (possibly overloaded) C++ function. If one can't be +found, the interpreter produces a wrong type error (as opposed to a +segmentation fault). Otherwise, the arguments are converted to their C +equivalents, the function is called, and the return value, if any, is +converted to Scheme format and returned to the interpreter. + +

+ +In Scheme, all arguments to functions are passed by +value. Unfortunately, C++ allows passing pointers and references to +variables during function calls, and many C functions would become +unusable if they were unable to side-effect their parameters. Because +of this, the backend that Header2Scheme generates allows side-effects +to propagate, where possible, to all arguments that are passed by +reference (either via a pointer or a reference). (Scheme integers and +characters can not be mutated because they are always passed by +value.) It should be noted that this can cause unpleasant and +unexpected effects in code: + +

+	class SbVec3f {
+		(...)
+		void getValue(float &x, float &y, float &z);
+		(...)
+	};
+
+
+	> (define x 0.0)
+	> (define y 0.0)
+	> (define z 0.0)
+	> (define my-list (list x y z))
+	> my-list
+	(0.0 0.0 0.0)
+	> (define my-vec (new-SbVec3f 3 4 5))
+	> (-> my-vec 'getValue x y z)
+	> x
+	3.0
+	> y
+	4.0
+	> z
+	5.0
+	> my-list
+	#(3.0 4.0 5.0)	
+
+ +If, on the other hand, the command which had mutated x had been the +standard Scheme +
+	> (set! x 2.0)
+	> my-list
+	#(0.0 0.0 0.0)
+
+my-list is (correctly) not mutated in this example. + +

Inheritance

+ +Consider the following two classes: + +
+	class a {
+		void foo();
+	};
+
+	class b : public a {
+		void bar();
+	};
+
+ +The member function "foo" can be called from an object of type "a" or +"b". However, the member function "bar" can only be called from an object +of type "b". Standard Scheme has no built-in notion of inheritance, so the +question remains of how to decide at runtime whether a given member +function can correctly be called for a given Scheme object. + +

+ +Header2Scheme solves this problem by reconstructing its own idea of the +desired class hierarchy in a pre-processing step while the backend to the +Scheme interface is being generated. This hierarchy is then reconstructed +when the Scheme interpreter is run, and is referenced to resolve run-time +questions of type checking. + +

+ +


+ +

+What has been done with Header2Scheme? +

+ +I have used Header2Scheme to create a Scheme binding for Open Inventor, a +3D graphics toolkit developed by Silicon Graphics. This package is called +Ivy, and is available from the Ivy home page. + +

+ +

+ +Changes in version 1.4 +

+
    +
  • Fixed bugs in generated code for pointers returned from functions. +
  • Added long/short qualifiers in typedefs file for ints and doubles, and +output them in the argument extraction code so references to these types +work. +
  • Rewrote the C++ wrappers for the Scheme interpreter so they work +better; more consistent user interface (prompt is always there when +interpreter is listening) and more robust (Ctrl-C no longer crashes the +interpreter). +
+

+ +

+ +Downloading Header2Scheme + +

+ +h2s-1.4.tar.gz (290K) contains the source +code and documentation for Header2Scheme. Header2Scheme is Copyright 1995 +Kenneth B. Russell and is covered under the GNU General Public License. + +

+ +

+Other links +

+ +GUILE is a collaborative +effort to make embedded Scheme more ubiquitous. + +

+ +SWIG is a more up-to-date glue code +generator than Header2Scheme which supports multiple language bindings. + +

+Feedback +

+ +Please send me email if you +have any comments, questions or suggestions, or have problems with the +distribution. + +

+


+

+ Kenneth B. Russell - kbrussel@media.mit.edu + +

+$Id: index.html,v 1.15 2001/06/02 05:20:33 kbrussel Exp $