On 28-Dec-07, at 3:45 AM, Nick wrote:
Hi!
Although the Gambit compiler is quite cool (especially I like code performance, that it produces :-) ), it has a few quirks and I tried to fix them.
I have Visual Studio 2003 and wanted to build Gambit-C with it. So I downloaded the gambc-v4_1_2.tgz package, and of course it didn't compile out of box, because there is no ready to use "gambit.h" in the package, because "gambit.h" should be generated with "configure".
For the include/gambit.h file, you can create it with the commands
echo #ifndef ___VOIDSTAR_WIDTH > include\gambit.h echo #define ___VOIDSTAR_WIDTH ___LONG_WIDTH >> include\gambit.h echo #endif >> include\gambit.h echo #ifndef ___MAX_CHR >> include\gambit.h echo #define ___MAX_CHR 0x10ffff >> include\gambit.h echo #endif >> include\gambit.h type include\gambit.h.in >> include\gambit.h
By the way, have you tried using one of the Windows installers to avoid building Gambit from source?
Ok, I've downloaded and installed msys (only, i.e. without mingw), and run the usual sequence:
sh
sh-2.04$ configure sh-2.04$ make sh-2.04$ make install The resulting distribution is working fine, except one thing. gsc.exe and gsi.exe are opening new console window and the window immediately disappears after gs(c|i) finishes. In case of some errors it is impossible to catch the error messages. Even piping (gsc ... > out.txt) doesn't help, "out.txt" just doesn't being created.
If you want error messages to be sent to stdout you must use the -:d- runtime option or the -:dr option, i.e.
% gsi -:d- foobar.scm > out.txt
(this will send the error message to the file out.txt)
and
% gsi -:dr foobar.scm < input > output
(this will start a REPL in the new console)
I admit it is annoying that the newly created console vanishes immediately after displaying the error message and I will look into a fix.
For your information the console is being created because Gambit was designed to allow debugging programs which redirect stdin and stdout. When you use the -:dr option, you will get a REPL at the console which is independent from stdin and stdout, so you can type REPL commands without any interference with stdin. On UNIX it is the "controlling terminal" that is used.
Previously, I've compiled version 4.1.0 and it built under VS2003 without single problem. So I decided to compile version 4.1.2 under VS too but it fails to compile.
After some investigation I created new Visual Studio project files, and with them everything goes ok. I created two additional projects, ~~/gsc/libgsc.vcproj and ~~/gsi/libgsi.vcproj with the following dependence graph: lib -> gsc libgsc -> gsc lib -> gsi libgsi -> gsi Please, see the attachment with new project files.
Thank you for the project file. I will check it out. You seem to have missed this information in the INSTALL.txt file:
4) Building on Microsoft Windows ================================
There are several alternatives for building the system on Microsoft Windows:
a) Use the free MSYS/MinGW development environment (Minimalist GNU for Windows, www.mingw.org). Install MinGW and MSYS, then follow the instructions above (i.e. "./configure" followed by "make").
b) Use the free Cygwin development environment (http://www.cygwin.com/). Install Cygwin, then follow the instructions above (i.e. "./configure" followed by "make").
c) Use the Open Watcom compiler which can be obtained at no charge from http://openwatcom.mirrors.pair.com/. You must perform a full installation of the Open Watcom compiler in C:\WATCOM. From the shell, execute the batch file "misc\openwatcom.bat".
d) Use the Microsoft Visual C++ 2005 Express Edition which can be obtained at no charge from Microsoft at this URL: http://msdn.microsoft.com/vstudio/express/downloads/default.aspx . You must also install the Microsoft Platform SDK. From the shell, execute the batch file "misc\vcexpress.bat".
e) Use Microsoft Visual Studio .NET 2003. You must unzip "misc\vstudio.zip" in the Gambit distribution's root directory. Then with Microsoft Visual Studio open "gambc.sln" and select "Build Solution" (Ctrl+Shift+B).
I'm sure that option "e" is not working (because I recently added some source files to the Gambit runtime and did not update vstudio.zip). So your project file may come in handy.
Best regards, Nick.
ps: What is six.exe and how to build it?
You can build six.exe with:
copy gsi.exe six.exe
(i.e. six.exe is merely the Gambit interpreter under a different name).
When you start six.exe the interpreter will use the "Scheme infix syntax" by default. To revert to the prefix syntax you must prefix the expression with a backslash (instead of the other way around). This syntax is based on the C/Java syntax so it makes the Gambit runtime accessible to many programmers who do not know Scheme/Lisp. It is also interesting for writing compact arithmetic expressions, and for writing compact for loops (for scripts, etc). Here's an example:
Gambit v4.1.2
1+expt(10,40)*5;
50000000000000000000000000000000000000001
for (int i=1; i<=4; i++) display([i," ",i*i,"\n"]);
1 1 2 4 3 9 4 16
int f(int x) { return expt(2,x)/x; } f(3);
8/3
append([1,2,3],[4,5,6]);
(1 2 3 4 5 6)
map(int (int x) { return x*x; },[1,2,3]);
(1 4 9)
map((lambda (x) (* x x)),[1,2,3]);
(1 4 9)
Note that any file with a ".six" extension will be parsed using the Scheme infix syntax, so you can write scripts containing only SIX code.
Marc