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

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

Re: [MIT-Scheme-devel] Is it still a PORT?


From: Joe Marshall
Subject: Re: [MIT-Scheme-devel] Is it still a PORT?
Date: Tue, 24 Nov 2009 10:40:59 -0800

On Tue, Nov 24, 2009 at 10:21 AM, Taylor R Campbell <address@hidden> wrote:
>   Date: Tue, 24 Nov 2009 09:37:39 -0800
>   From: Joe Marshall <address@hidden>
>
>   It turns out that when you read a source code file that the
>   inner loop of the parser does a lot of superfluous checking
>   of PORT?  Although PORT? is an inexpensive operation,
>   it still involves an out-of-line call, and it gets called eleven times
>   for each character of input.
>
> Hmm...  How about caching the values of (port/operation/read-char
> port) and (port/operation port 'DISCRETIONARY-WRITE-CHAR) in the db,
> which should also avoid some ASSQ calls?

Here's what I've got so far:
(View in fixed-width.  Left column is original, right column is changes so far.)

read-unquoted                                         read-unquoted
#[unnamed-procedure]
#[unnamed-procedure]
peek-char                                             %peek-char
#[let-procedure]                                      #[let-procedure]
#[internal-lambda]
#[internal-lambda]
loop                                                  loop
input-port/peek-char
port/operation/peek-char
port/type
port?                         ***
#[unnamed-procedure]
#[unnamed-procedure]
generic-io/peek-char
generic-io/peek-char
generic-io/read-char
generic-io/read-char
port/state                                            port/state
port?                         ***                     port?
reset-prev-char                                       reset-prev-char
#[let-procedure]                                      #[let-procedure]
#[internal-lambda]
#[internal-lambda]
loop                                                  loop
read-next-char                                        read-next-char
#[unnamed-procedure]
#[unnamed-procedure]
decode-char                                           decode-char
#[unnamed-procedure]
#[unnamed-procedure]
port/state                                            port/state
port?                         ***                     port?
transcribe-input-char
transcribe-input-char
transcribe-char                                       transcribe-char
eof-object?                                           eof-object?
char-set-member?                                      char-set-member?
char-set?                                             char-set?
%char-set-member?
%char-set-member?
guarantee-constituent
guarantee-constituent
char-set-member?                                      char-set-member?
char-set?                                             char-set?
%char-set-member?
%char-set-member?
#[unnamed-procedure]
#[unnamed-procedure]
read-char                                             %read-char
port/operation
port-type/%operation
port/type
port?                        ***
port-type/operation
guarantee-port-type
port-type?
assq                                                  assq
#[let-procedure]                                      #[let-procedure]
#[internal-lambda]
#[internal-lambda]
loop                                                  loop
loop                                                  loop
loop                                                  loop
#[let-procedure]                                      #[let-procedure]
#[internal-lambda]
#[internal-lambda]
loop                                                  loop
input-port/read-char
port/operation/read-char
port/type
port?                        ***
#[unnamed-procedure]
#[unnamed-procedure]
operation/read-char
operation/read-char
generic-io/read-char
generic-io/read-char
port/state                                            port/state
port?                        ***                      port?
reset-prev-char                                       reset-prev-char
#[let-procedure]                                      #[let-procedure]
#[internal-lambda]
#[internal-lambda]
loop                                                  loop
read-next-char                                        read-next-char
#[unnamed-procedure]
#[unnamed-procedure]
decode-char                                           decode-char
#[unnamed-procedure]
#[unnamed-procedure]
eof-object?                                           eof-object?
transcribe-input-char
transcribe-input-char
#[let-procedure]                                      #[let-procedure]
operation/discretionary-write-char
operation/discretionary-write-char
#[unnamed-procedure]
#[unnamed-procedure]
port/state                                            port/state
port?                        ***                      port?
char-downcase                                         char-downcase
%char-downcase                                        %char-downcase
optional-output-port
guarantee-output-port
output-port?
port?                        ***
output-port/write-char                                %write-char
port/operation/write-char
port/type
port?                        ***
#[unnamed-procedure]
#[unnamed-procedure]
narrow-out/write-char
narrow-out/write-char
port/state                                            port/state
port?                        ***                      port?
maybe-grow-buffer
maybe-grow-buffer
#[let-procedure]                                      #[let-procedure]
wide-string?                                          wide-string?
new-column                                            new-column
transcribe-char                                       transcribe-char
output-port/discretionary-flush
port/operation/discretionary-flush-output
port/type
port?                        ***
#[unnamed-procedure]
#[unnamed-procedure]
no-flush                                              no-flush
discretionary-flush-transcript
discretionary-flush-transcript

I'll get to the ASSQ call when it is a larger proportion of the calls.
I have to fix port/state first.

-- 
~jrm




reply via email to

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