Look out, here it comes, as Tracy Schwarz says. The following DISASSEMBLE might tell you what you need to do for native-compile. Speaking with the utmost sincerity, I know less about the following than I do about what Proust called the greatest painting in the world, the View of Delft by Vermmer. Check it out. https://www.mauritshuis.nl/en/our-collection/artworks/92-view-of-delft/ Again, this is in SBCL on my $100 Lenovo Chromebook. * (disassemble 'foo-with-declare) ; disassembly for FOO-WITH-DECLARE ; Size: 60 bytes. Origin: #x52A4AF19 ; FOO-WITH-DECLARE ; 19: 4883EC10 SUB RSP, 16 ; 1D: BA14000000 MOV EDX, 20 ; 22: B904000000 MOV ECX, 4 ; 27: 48892C24 MOV [RSP], RBP ; 2B: 488BEC MOV RBP, RSP ; 2E: B842BD3550 MOV EAX, #x5035BD42 ; # ; 33: FFD0 CALL RAX ; 35: 31C0 XOR EAX, EAX ; 37: 31C9 XOR ECX, ECX ; 39: EB0C JMP L1 ; 3B: 0F1F440000 NOP ; 40: L0: 4801C1 ADD RCX, RAX ; 43: 4883C002 ADD RAX, 2 ; 47: L1: 4839D0 CMP RAX, RDX ; 4A: 7EF4 JLE L0 ; 4C: 488BD1 MOV RDX, RCX ; 4F: 488BE5 MOV RSP, RBP ; 52: F8 CLC ; 53: 5D POP RBP ; 54: C3 RET NIL * Bob On Sun, Feb 18, 2024 at 4:25 PM Robert Boyer wrote: > And you should know what DECLARE and THE do for AREF. All the difference > in the world, and I will give you a simple demo if you wish. > > Bob > > On Sun, Feb 18, 2024 at 4:19 PM Robert Boyer > wrote: > >> This message is about how important DECLARE and THE are. If you do not >> handle DECLARE and THE right, people will laugh at native-compile. >> >> Here is an SBCL transcript. I am running on a $100 Lenovo Chromebook. >> >> I got SBCL with the command sudo apt-get install sbcl. >> >> * (declaim (optimize (safety 0) (speed 3) (debug 0))) >> NIL >> * (defun foo-with-declare (n) >> (let ((i 0) >> (sum 0) >> (max (expt 10 n))) >> (declare (fixnum i sum max)) >> (loop (cond ((<= i max) >> (setq sum (the fixnum (+ sum i)))) >> (t (return sum))) >> (incf i)))) >> FOO-WITH-DECLARE >> * (time (foo-with-declare 8)) >> Evaluation took: >> 0.125 seconds of real time >> 0.123203 seconds of total run time (0.123193 user, 0.000010 system) >> 98.40% CPU >> 135,905,516 processor cycles >> 0 bytes consed >> 5000000050000000 >> * (defun foo-without-declare (n) >> (let ((i 0) >> (sum 0) >> (max (expt 10 n))) >> (loop (cond ((<= i max) >> (setq sum (+ sum i))) >> (t (return sum))) >> (incf i)))) >> WARNING: redefining COMMON-LISP-USER::FOO-WITHOUT-DECLARE in DEFUN >> FOO-WITHOUT-DECLARE >> * (time (foo-without-declare 8)) >> Evaluation took: >> 1.080 seconds of real time >> 1.072932 seconds of total run time (1.072932 user, 0.000000 system) >> 99.35% CPU >> 1,181,369,303 processor cycles >> 0 bytes consed >> 5000000050000000 >> >> People go wow about 8X. How does native-compile do? >> >> There is a great song by Alabama 'If you gonna play in Texas, you gotta >> have a fiddle in the band'. Check it out! >> >> https://www.youtube.com/watch?v=w6r4E514nJg >> >> Bob >> >> >> Bob >> >> >> On Sun, Feb 18, 2024 at 3:28 PM Andreas Schwab >> wrote: >> >>> On Feb 18 2024, Robert Boyer wrote: >>> >>> > Furthermore, such declare forms are necessary for life as we know it >>> > in the free world, so that fixnum arithmetic can be used where >>> > appropriate! >>> >>> If you are programming in Emacs Lisp, you need to follow the rules of >>> Emacs Lisp. >>> >>> -- >>> Andreas Schwab, schwab@linux-m68k.org >>> GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 >>> "And now for something completely different." >>> >> >> >> -- >> Anything I seem to state should be taken as a question. I am at least 77 >> and feeble. >> > > > -- > Anything I seem to state should be taken as a question. I am at least 77 > and feeble. > -- Anything I seem to state should be taken as a question. I am at least 77 and feeble.