mit-scheme-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Help with MIT/GNU Scheme 12.1 compiler on Intel Macs


From: Kevin Lin
Subject: Re: Help with MIT/GNU Scheme 12.1 compiler on Intel Macs
Date: Thu, 19 Dec 2024 19:01:49 +0800
User-agent: mu4e 1.12.7; emacs 29.4

Thanks David, that's useful to know.  I haven't been
able to build Scheme using gcc (Homebrew, gcc-14): the
configure script craps out, and I haven't had time to
figure out what goes wrong.  I'm traveling now but
will try again when I get home.
-Kevin

-----Original Message-----
From: David Gray <dgray@iesl.forth.gr>
Cc: mit-scheme-users@gnu.org

For what it's worth, it is a problem with the apple compiler. I managed to get 
a butchered version working by using gcc13 with macports.
I just chopped out the lines with errors in the source,
copied the all.com from the previous version. Unlikely as it
seems this compiles scheme code correctly even with the
usual-integrations. However I’m not expert enough to go
anywhere further with this information.

> On 10 Dec 2024, at 6:23 AM, Kevin Lin <kkylin@alum.mit.edu> wrote:
> 
> Thanks David.  I've been doing something similar to
> you, but using a version of the work-around in my
> first msg (despite my own disclaimers).  So far it
> seems to work fine and I can get by with it.
> -Kevin
> 
> 
> -----Original Message-----
> From: David Gray <dgray@iesl.forth.gr>
> Cc: mit-scheme-users@gnu.org
> 
> I think you are correct in that it is saving that is the
> problem. I really just want a couple of slow functions to be
> compiled, so after digging around in the source I found
> compile-procedure which does what I need for the
> moment. Just load up the function, compile-procedure, then
> run it.
> 
> 
> 
> 
>> On 4 Dec 2024, at 10:43 PM, Kevin Lin <kkylin@alum.mit.edu> wrote:
>> 
>> Sorry, two things I forgot to say:
>> 
>> - If scode that's been directly compiled (as in my
>> example, and as opposed to loading it from a .bin
>> file generated by SF) is then compiled into native
>> code via say compile-scode, it does seem to run just
>> fine.  But saving to file (via fasdump) and
>> reloading leads to the same problems.
>> 
>> - Not necessarily recommending these kludges as a
>> work-around for anyone else having similar issues --
>> I don't know MIT Scheme internals and haven't tested
>> these things; the kludges came about as an effort to
>> isolate the issue.
>> 
>> Kevin
>> 
>> -----Original Message-----
>> To: mit-scheme-users@gnu.org
>> 
>> Hi all,
>> 
>> I'm trying to build and run MIT/GNU Scheme 12.1 on an Intel
>> Mac running Sequoia (15.1).  I've had similar issues as
>> described on this thread:
>> 
>> https://lists.gnu.org/archive/html/mit-scheme-users/2023-10/msg00004.html
>> 
>> I've been digging around this for a bit, so this is long.
>> I've broken this into sections.  Details on how I built
>> Scheme on my machine come at the end.  Any insights or just
>> knowing that someone has managed to get 12.1 running on a
>> recent macOS would be great.
>> 
>> Thanks!
>> 
>> Kevin <kkylin@alum.mit.edu>
>> 
>> *MAIN SYMPTOMS*
>> 
>> Here is a little transcript of what I get:
>> 
>> #|
>> (cf "fact.scm")
>> 
>> ;Generating SCode for file: "fact.scm" => "fact.bin"... done
>> ;Compiling file: "fact.bin" => "fact.com"... done
>> ;Unspecified return value
>> 
>> 1 ]=> (load "fact.com")
>> 
>> ;Loading "fact.com"...
>> ;The object fact, passed as an argument to
>> return-address->stack-frame-type, is not in the correct
>> range.
>> ;To continue, call RESTART with an option number:
>> ; (RESTART 1) => Return to read-eval-print level 1.
>> |#
>> 
>> The file "fact.scm" is something more or less straight from
>> SICP:
>> 
>> #|
>> (declare (usual-integrations))
>> 
>> (define (fact n)
>> (if (> n 1)
>>     (* n (fact (- n 1)))
>>     1))
>> |#
>> 
>> Moreover, there appear to be issues affecting SF as well:
>> 
>> #|
>> 1 ]=> (sf "fact.scm")
>> 
>> ;Generating SCode for file: "fact.scm" => "fact.bin"... done
>> ;Unspecified return value
>> 
>> 1 ]=> (pp (fasload "fact.bin"))
>> 
>> ;Loading "fact.bin"... done
>> (define (fact n)
>> (if (%record n 1)
>>     (%record n (fact (%record n)))
>>     1))
>> ;Unspecified return value
>> |#
>> 
>> If I remove (declare (usual-integrations)) then it seems to
>> be ok:
>> 
>> #|
>> 1 ]=> (sf/system "fact.scm")
>> 
>> ;Generating SCode for file: "fact.scm" => "fact.bin"...
>> ;  This program does not have a USUAL-INTEGRATIONS declaration.
>> ;  Without this declaration, the compiler will be unable to perform
>> ;  many optimizations, and as a result the compiled program will be
>> ;  slower and perhaps larger than it could be.  Please read the MIT
>> ;  Scheme User's Guide for more information about USUAL-INTEGRATIONS.
>> ;... done
>> ;Unspecified return value
>> 
>> 1 ]=> (pp (fasload "fact.bin"))
>> 
>> ;Loading "fact.bin"... done
>> (define (fact n)
>> (if (> n 1)
>>     (* n (fact (- n 1)))
>>     1))
>> ;Unspecified return value
>> |#
>> 
>> but CF continues to fail:
>> 
>> #|
>> 1 ]=> (cf/system "fact.scm")
>> 
>> ;Generating SCode for file: "fact.scm" => "fact.bin"...
>> ;  This program does not have a USUAL-INTEGRATIONS declaration.
>> ;  Without this declaration, the compiler will be unable to perform
>> ;  many optimizations, and as a result the compiled program will be
>> ;  slower and perhaps larger than it could be.  Please read the MIT
>> ;  Scheme User's Guide for more information about USUAL-INTEGRATIONS.
>> ;... done
>> ;Compiling file: "fact.bin" => "fact.com"... done
>> ;Unspecified return value
>> 
>> 1 ]=> (load "fact.com")
>> 
>> ;Loading "fact.com"...
>> ;The object fact, passed as an argument to
>> return-address->stack-frame-type, is not in the correct
>> range.
>> ;To continue, call RESTART with an option number:
>> ; (RESTART 1) => Return to read-eval-print level 1.
>> |#
>> 
>> *IS FASDUMP THE PROBLEM?*
>> 
>> One thing I noticed is that if I took a .bin or .com file
>> compiled on my Linux box and loaded it on my Intel Mac, it
>> works just fine: this code (and more complicated programs)
>> runs without a hiccup, and pretty-printing the .bin file
>> looks fine to me.  It suggests the issue *might* be centered
>> around saving binary files.  Digging around more, I found
>> that if I bypass the FASDUMP defined in fasdump.c, SF
>> appears to be ok again.  Here's a little kludge that does
>> that.
>> 
>> (define *target-fasl-format*
>> (eval '(target-fasl-format) (->environment cbf)))
>> 
>> (define (fasdump-kludge obj file)
>> (portable-fasdump obj file *target-fasl-format*))
>> 
>> and what we find is this:
>> 
>> #|
>> 1 ]=> (define fact-scode
>>       ;; compile SCode without saving to file
>>       (eval '(sf/file->scode "fact.scm" "" #f '())
>>         (package/environment
>>           (find-package '(scode-optimizer top-level)))))
>> ;Value: fact-scode
>> 
>> 1 ]=> (pp fact-scode)   ;; looks ok to me
>> (define (fact n)
>> (if (&> n 1)
>>     (&* n (fact (-1+ n)))
>>     1))
>> ;Unspecified return value
>> 
>> 1 ]=> (fasdump-kludge fact-scode "fact.bin")  ;; now save to file
>> 
>> ;Unspecified return value
>> 
>> 1 ]=> (pp (fasload "fact.bin"))  ;; reload and look
>> 
>> ;Loading "fact.bin"... done
>> (define (fact n)
>> (if (&> n 1)
>>     (&* n (fact (-1+ n)))
>>     1))
>> ;Unspecified return value
>> 
>> |#
>> The kludge doesn't work for compiled expressions and I
>> didn't test it on a .com file.  I've also dug around
>> fasdump.c but I don't understand the microcode and don't
>> know where to start tracking down the issue.
>> 
>> Anecdotally, the native code compiler worked just fine in
>> Monterey and earlier versions of macOS.
>> 
>> *MORE SYMPTOMS*
>> 
>> 1. One can get different errors by (i) adding more
>>  definitions to fact.scm, and (ii) selecting which
>>  primitives (+, *, >) get integrated.  I didn't include
>>  all the cases.
>> 
>> 2. DISK-SAVE also fails, but bands saved on working
>>  installations (e.g., ScmUtils) work just fine.
>> 
>> *HOW I BUILT SCHEME*
>> 
>> I use Apple's "gcc", which (I think) is just an alias for
>> clang.  I massage various env vars (happy to share
>> config.log), but none of that seems super important.  What
>> *is* important is to set SDKROOT to
>> 
>> `xcrun --sdk macosx --show-sdk-path`
>> 
>> or clang won't compile the microcode.  This may have
>> something to do with my having GCC installed (via Homebrew).
>> Incidentally, I haven't tried uninstalling gcc as that would
>> break too many things, but I did try unlinking gcc and it
>> didn't make a difference to the behavior above.
>> 
>> In case it matters, all this is on a 2015 Intel MBP.  I get
>> the same behavior on an M2 Mac via Rosetta, and on older
>> Intel Macs on Sequoia + OCLP.
>> 
>> -- 
>> 
>> -- 
>> 
> 
> --

-- 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]