Hi Ralph!
Yeah Black Hole on Windows is completely relevant.
Re BH, you may be interested in checking out the nonsyntactic tower version at https://github.com/pereckerdal/blackhole/tree/legacy as that one is most tested and tried currently.
You find a current version of this nicely bundled on http://dynamo.iro.umontreal.ca/wiki/index.php/Dumping_Grounds#Module_systems under the download link http://dynamo.iro.umontreal.ca/wiki/images/6/64/2012-11-28-bh-non-syntactict....
For installation please refer to the mailing list post of 2012-11-29.
Further updates are coming to Black Hole, at a currently unspecified date.
I would guess it works great on Windows either directly or with some trivla tweak, feel free to let the list know.
Now, did this solve your problem, or do you by some reason want to proceed with digging into the (compile-file-to-target "/dev/null" ... issue with syntactictower BH?
Mikael
2013/4/13 Ralph Moritz ralph.moeritz@outlook.com
On Unix the null device is /dev/null. On Windows NT+ the equivalent is NUL. We can verify this by writing the following small C++11 program:
#include <cstdio> int main() { auto f = fopen("NUL", "r"); if (f == nullptr) { fprintf(stderr, "Cannot open file `NUL'."); return 0; } printf("Opened file `NUL' successfully."); }
The above program, when compiled and run on Windows, will always print "Opened file `NUL' successfully."
This brings me to Gambit, via Black Hole. BH contains some code (in compile-load.scm and lib.scm) that assumes `/dev/null' exists. This is obviously not true on Windows where instead we have `NUL'. It's easy enough to modify BH accordingly but the problem remains that Gambit tries to normalize all paths passed to `compile-file-to-target' so we end up with `<absolute path to cwd>\NUL' instead of just `NUL'. This essentially prevents us from using the null device as input to `compile-file-to-target' on Windows & means the following code from BH will fail on Windows:
(define (compile-sexp-to-c sexp fn #!key (options '())) (##gc) ;; Avoid out-of-memory related crashes (let ((hook (lambda (_) sexp)) (prev-hook #f)) (dynamic-wind (lambda () (set! prev-hook c#expand-source) (set! c#expand-source hook)) (lambda () (compile-file-to-target "/dev/null" ;; Change to "NUL" on Windows output: fn options: options)) (lambda () (set! c#expand-source prev-hook)))))
I've searched through the Gambit source code & tried to make the necessary changes to get this working but have been unable to do so. I probably just don't yet have a good enough understanding of the code. (I tried modifying ___os_path_normalize_directory in lib/os_files.c)
Is anyone able to help with this? I really want to run Black Hole on Windows!
Many thanks, Ralph
Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list