Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jan 19 17:59
    fare opened #659
  • Jan 14 23:42
    gambiteer commented on ca8b488
  • Jan 14 22:02
    Windows-mingw build of CI run 486454730 failed
  • Jan 14 21:37

    gambiteer on master

    Speed up implementation of SRFI… (compare)

  • Jan 12 16:17
    feeley commented #658
  • Jan 12 16:11
    jcubic commented #658
  • Jan 12 15:48
    feeley commented #658
  • Jan 12 15:30
    feeley closed #658
  • Jan 12 15:30
    feeley commented #658
  • Jan 12 14:10
    jcubic opened #658
  • Jan 09 18:35
    feeley closed #657
  • Jan 09 18:35
    feeley commented #657
  • Jan 09 15:28
    jcubic opened #657
  • Jan 09 14:42
    Windows-mingw build of CI run 474136150 failed
  • Jan 09 14:15

    feeley on master

    Universal backend: add URL whit… (compare)

  • Jan 08 21:28
    feeley commented #655
  • Jan 08 20:48
    lassik commented #655
  • Jan 08 08:00
    jcubic commented #655
  • Jan 08 07:59
    jcubic commented #655
  • Jan 08 02:00
    Windows-mingw build of CI run 470488801 failed
François-René Rideau
@fare
^ I assume that's what the tags in (pointer ...) are for, though I'm a bit surprised by the "T’s primary tag is a member of E’s tags" criterion.
junkerjoe
@junkerjoe

I'm getting a failed unit test from make check when trying to build the Gambit master branch with the options:

./configure --prefix=/usr/local/gambit 
                       --enable-single-host
                       --enable-multiple-versions
                       --enable-shared
                       --enable-smp 
                       --enable-gcc-opts
                       --enable-openssl
                       --enable-absolute-shared-libs
                       --enable-poll
                       --enable-bignum

The relevant make check output is:

LD_LIBRARY_PATH=../lib:../gsi:../gsc: ../gsi/gsi -:tl,~~bin=../bin,~~lib=../lib,~~include=../include -f ./run-unit-tests.scm
[226|  0]  90% ##############.. 6.9s 13-modules/prim_exception.scm
*** FAILED 13-modules/prim_exception.scm WITH EXIT CODE HI=1 LO=0
(with-exception-handler ##list (lambda () (##cons 1 (##raise 123)))) in (include "~~lib/gambit/prim/exception#.scm") returned #<unbound-global-exception #2> but expected (1 123)
(with-exception-handler ##list (lambda () (##cons 1 (##raise 123)))) in (namespace ("##")) returned #<unbound-global-exception #3> but expected (1 123)
[250|  1] 100% ################ 7.5s
FAILED 1 UNIT TESTS OUT OF 251 (.4%)

This is my first time building Gambit with this many options. Any insights to share on why this might be happening?

Bob Coleman
@skilldown

@junkerjoe Those tests rely on the optional module system. From a fresh clone build with a normal make and build the module system with make modules before running the make check. This fixed the issue for me.

Make sure to use a fresh clone to avoid issues with build artifacts.

Jaime Fournier
@ober
@junkerjoe you should not need the --enable-gcc-opts any longer
junkerjoe
@junkerjoe
@skilldown I thought --enable-smp required make bootstrap; make bootclean; make before make modules; make check. I can try it without.
@ober Noted. I'll get rid of this option
junkerjoe
@junkerjoe
Decided to revert back to non-SMP, but I made a ticket on the issue I was having to get clarity on whether it was expected behavior: gambit/gambit#502
junkerjoe
@junkerjoe
Linked the wrong ticket woops. Correction: gambit/gambit#640
Bradley Lucier
@gambiteer
Marc: Simple file:
(define-structure point x)

expands to

gsc -c -expansion crap.scm
Expansion:

(define ##type-1-point
  ('#<procedure #2 ##structure> ##type-type ('#<procedure #3 ##string->uninterned-symbol> "##type-1-point") 'point 8 #f #(x 0 #f)))

(define make-point (lambda (p1) ('#<procedure #2 ##structure> ##type-1-point p1)))

(define point-copy (lambda (obj) (##structure-copy obj)))

(define point? (lambda (obj) ('#<procedure #4 ##structure-direct-instance-of?> obj ('#<procedure #5 ##type-id> ##type-1-point))))

(define point-x
  (lambda (obj)
    (let ((temp.3 point-x) (temp.2 ##type-1-point))
      (if ('#<procedure #4 ##structure-direct-instance-of?> obj ('#<procedure #5 ##type-id> temp.2))
          ('#<procedure #6 ##unchecked-structure-ref> obj 1 temp.2 temp.3)
          ('#<procedure #7 ##direct-structure-ref> obj 1 temp.2 temp.3)))))

(define point-x-set!
  (lambda (obj val)
    (let ((temp.8 point-x-set!) (temp.7 ##type-1-point))
      (if ('#<procedure #4 ##structure-direct-instance-of?> obj ('#<procedure #5 ##type-id> temp.7))
          ('#<procedure #8 ##unchecked-structure-set!> obj val 1 temp.7 temp.8)
          ('#<procedure #9 ##direct-structure-set!> obj val 1 temp.7 temp.8)))))

(define point-x-set (lambda (obj val) (##direct-structure-set obj val 1 ##type-1-point point-x-set)))

How do I get rid of point-copy? I want to define my own with that name.

Bradley Lucier
@gambiteer
If it's not easy to get rid of point-copy I'll just rename my function.
Marc Feeley
@feeley
@gambiteer (define-structure point x copier: #f)
junkerjoe
@junkerjoe
Should I expect an executable to be killed off, after exceeding a certain memory limit, when providing the -:max-heap runtime option to gsc?
junkerjoe
@junkerjoe
I'd love to see an example program compiled with the -:max-heap setting and heap overflow. I think I just don't understand how it works.
Bradley Lucier
@gambiteer

-:max-heap is a runtime setting, so if c.scm is

[Bradleys-Mac-mini:~] lucier% cat c.scm
(do ((r '() (cons (make-vector 1000000) r)))
    (#f))

then you get

gsi -:max-heap=1000 c.scm
*** ERROR IN ##make-vector -- Heap overflow
junkerjoe
@junkerjoe
does that mean -:max-heap cannot be used with gsc?
Bradley Lucier
@gambiteer
If you use it with gsc then that means that you're restricting the heap size of gsc when it runs. Perhaps you want to do
[Bradleys-Mac-mini:~] lucier% gsc -exe c.scm
[Bradleys-Mac-mini:~] lucier% ./c -:max-heap=1000
*** ERROR IN ##make-vector -- Heap overflow
junkerjoe
@junkerjoe
i think that's just what i needed
thank you!
from gsc -:help i would've thought the option would need to be provided with the compilation command
anyways that's great, and really simple too
Riley Levy
@rileylevy95_gitlab
To build a gambit program with emscripten, how do I get an emscripten version of libgambit.a?
Marc Feeley
@feeley
@junkerjoe you can also use the following trick... if your source program contains a shebang line gsc will read the runtime options on the shebang line and embed them in the executable. This is convenient if you program starts off as an interpreted script that is compiled when ready for production. For example :
% cat limited.scm
#! /usr/bin/env gsi -:max-heap=100M
(##gc-report-set! #t)
(##gc)
(define (go)
  (let loop ((size 1000000) (last #f))
    (println size)
    (loop (* size 2) (make-vector size))))
(with-exception-catcher pp go)
% chmod +x limited.scm
% ./limited.scm
*** GC: 135us, 130K alloc, 12M heap, 84K live (1% 84288+1488)
1000000
2000000
*** GC: 2.4ms, 135K alloc, 52M heap, 23M live (44% 85168+24001584)
4000000
*** GC: 5.1ms, 139K alloc, 101M heap, 46M live (46% 85168+48001584)
8000000
*** GC: 9.3ms, 143K alloc, 105M heap, 92M live (88% 85168+96001584)
16000000
*** GC: 17ms, 147K alloc, 108M heap, 61M live (57% 85168+64001536)
#<heap-overflow-exception #2>
% gsc -exe limited.scm
% ./limited
*** GC: 109us, 71K alloc, 12M heap, 64K live (1% 64464+1488)
1000000
2000000
*** GC: 525us, 75K alloc, 36M heap, 15M live (42% 64928+16001536)
4000000
*** GC: 260us, 79K alloc, 69M heap, 31M live (45% 64928+32001536)
8000000
*** GC: 1.9ms, 82K alloc, 108M heap, 61M live (57% 64928+64001536)
16000000
*** GC: 3.4ms, 86K alloc, 12M heap, 65K live (1% 64928+1488)
#<heap-overflow-exception #2>
@rileylevy95_gitlab Please check the file misc/build-gambit-emscripten.tgz... it is quite likely that it has suffered from bitrot, but it shouldn't be too hard to get it working again. This biggest problem is probably the evolution of emscripten, so doing a checkout of an old version of emscripten may be needed if you just want to quickly experiment with this.
Riley Levy
@rileylevy95_gitlab
Thank you
Ideally, would i run that script instead of ./configure?
junkerjoe
@junkerjoe
That is really useful. Thanks @feeley
luca regini
@lucaregini
Hi @feeley , how do you debug the gambit compiler? Do you run it completely in the interpreter? Do you start with the binary and then load in the interpreter what you'd like to debug?
luca regini
@lucaregini
By "debugging" I really intended single-stepping in the source of the compiler. What's the most convenient way to do that?
Bradley Lucier
@gambiteer
Try gsc/igsc.scm.
9 replies
François-René Rideau
@fare
In a clean git checkout of master, if I try to git checkout v4.9.3, I get an error about "local changes" to some files. My workaround was to use git worktree add v4.9.3 v4.9.3.
is it OK if the makefile tries to build some modules that fail with errors on some targets?
François-René Rideau
@fare
looks like gambit has been trying to compile _digest for riscv-64 at 100% cpu for 40 minutes.
Jaime Fournier
@ober
local changes happens I found when you are using a modified tree. git clean -xfd always fixed it for me. as per @belmarca advice
luca regini
@lucaregini
How to specify additional include directories in gsi?
luca regini
@lucaregini
(load "/home/lucar/gambit/gsc/igsc.scm")
  • ERROR -- Can't open file "/home/lucar/gambit-stage/usr/local/Gambit/lib/header.scm"
    1>
luca regini
@lucaregini
@drewc I saw that section, which is the right option? I see only The ‘=DIRECTORY’ option overrides the setting of the central installation directory.
and
The ‘~~DIR=DIRECTORY’ option overrides the setting of the DIR installation directory.
These options are not what I am looking for
I need to add paths, not to ovveride the installation directory
Drew Crampsie
@drewc
If you (or the code) is using "~~" as a prefix to the libs, is that not by its very nature an installed gambit library?
(eval '(begin
        (##namespace ("c#"))
        (##include "~~/lib/header.scm")))
Bradley Lucier
@gambiteer

This seems to work

heine:~/programs/gambit/gambit> gsi -:=. gsc/igsc.scm 
loading "~~/gsc/_host.scm"
loading "~~/gsc/_utils.scm"
loading "~~/gsc/_source.scm"
loading "~~/gsc/_parms.scm"
loading "~~/gsc/_env.scm"
loading "~~/gsc/_ptree1.scm"
loading "~~/gsc/_ptree2.scm"
loading "~~/gsc/_gvm.scm"
loading "~~/gsc/_back.scm"
loading "~~/gsc/_front.scm"
loading "~~/gsc/_prims.scm"
loading "~~/gsc/_assert.scm"
loading "~~/gsc/_asm.scm"
loading "~~/gsc/_x86.scm"
loading "~~/gsc/_arm.scm"
loading "~~/gsc/_riscv.scm"
loading "~~/gsc/_codegen.scm"
loading "~~/gsc/_t-univ-1.scm"
loading "~~/gsc/_t-univ-2.scm"
loading "~~/gsc/_t-univ-3.scm"
loading "~~/gsc/_t-univ-4.scm"
loading "~~/gsc/_t-cpu-abstract-machine.scm"
loading "~~/gsc/_t-cpu-primitives.scm"
loading "~~/gsc/_t-cpu-object-desc.scm"
loading "~~/gsc/_t-cpu-utils.scm"
loading "~~/gsc/_t-cpu-backend-x86.scm"
loading "~~/gsc/_t-cpu-backend-arm.scm"
loading "~~/gsc/_t-cpu-backend-riscv.scm"
loading "~~/gsc/_t-cpu.scm"
loading "~~/gsc/_t-c-1.scm"
loading "~~/gsc/_t-c-3.scm"
loading "~~/gsc/_t-c-2.scm"
loading "~~/gsc/_gsclib.scm"
loading "~~/gsc/_gsc.scm"
loading "~~/gsc/_gscdebug.scm"
Gambit v4.9.3-1234-g6acd87df

>  (compile-file "c.scm")
"/home/lucier/programs/gambit/gambit/c.o1"

This is in the Gambit source directory after a build.

luca regini
@lucaregini
thanks @gambiteer this works also for me.
Bradley Lucier
@gambiteer
I'm curious: What will you do with the interpreted compiler?
luca regini
@lucaregini
I want to study the compiler internals and document them as far as I can. This is something that I wanted to do for quite some time. Being able to step into the code helps considerably.
Bradley Lucier
@gambiteer
Cool.
Guillaume Cartier
@gcartier
I have built Gambit on Windows 10 using mingw-w64 using the Mingw-builds installer and choosing architecture: x86_64, threads: posix, exception: seh (mimicking the configuration used by Marc in Gambit’s appveyor.yml) and all seems to work but I get quite frequent access violation crashes that all point to longjmp. Any idea anyone? Any trail would be helpful I have no idea where to go
Guillaume Cartier
@gcartier
Addendum: I just saw the commit: "Use gcc __builtin_setjmp when available” on Jun 13 2020 that seems to be exactly the fix for the crashes I encounter. I will try and build using the latest Gambit and see if it fixes my crashes. Will report the results :)
François-René Rideau
@fare
:hamster: Gerbil Scheme
♞ Gambit Scheme