O que significa "código aberto" algo em comum?

no manual de utilizador do SBCL existem várias referências ao Termo "código aberto". Hackers comuns Lisp também usam este termo quando se referem a otimização de código.

Pode explicar o que significa "código aberto" e dar um exemplo de como funciona?

Author: tuscland, 2014-01-06

1 answers

O que

Código aberto, também conhecido por inlining , significa substituir as chamadas de funções por um conjunto incorporado. A ideia é que funcall é caro (requer poupança e restauração da pilha &C) e substituí-lo pelas poucas operações que constituem a função pode ser benéfica.

Por exemplo, a função 1+ é uma única instrução quando o argumento é um fixnum (que normalmente é na prática), de modo a transformar a funcall nos dois ramos paralelos (fixnum e caso contrário) seria uma vitória.

Controlo

Declarações

O utilizador pode controlar esta optimização explicitamente pelo inline declaração.

O Utilizador também pode influenciar esta optimização pela optimize declaração.

Ambos irão afectar o código de uma função definida apenas como uma função (ver abaixo).

Macros

A maneira "velha" é implementar a função como uma macro. Por exemplo, em vez disso de

(defun last1f (list)
  (car (last list)))

Escreve

(defmacro last1m (list)
  `(car (last ,list)))

E last1m estarão sempre em código aberto. O problema com esta abordagem é que você não pode usar last1m como uma função - você não pode passá-la para, digamos, mapcar.

Thus Common Lisp has an alternative way - compiler macros , which tell the compiler how to transform the form before compiling it:

(define-compiler-macro last1f (list)
   `(car (last ,list)))
Veja também os excelentes exemplos na página do CLHS.
 8
Author: sds, 2014-01-06 16:06:22