Este es el comando sbcl que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
SBCL - Lisp común del banco de acero
DESCRIPCIÓN
SBCL es una implementación de ANSI Common Lisp, con un nativo de alto rendimiento
compilador, subprocesos nativos en varias plataformas, una interfaz de socket, un nivel de fuente
depurador, perfilador estadístico y mucho más.
Es software libre, principalmente de dominio público, pero con algunos subsistemas al estilo BSD.
licencias que permiten la modificación y reutilización siempre que se dé crédito. Se proporciona "como
es ", sin garantía de ningún tipo.
Para obtener más información sobre problemas de licencia, consulte el archivo COPIA en la distribución. Para
más información sobre el historial, consulte el archivo CRÉDITOS en la distribución.
RUNNING SBCL
Para ejecutar SBCL, escriba "sbcl". Después de los mensajes de inicio, aparece un mensaje ("*"). Ingrese un Lisp
expresión, y SBCL la leerá y ejecutará, imprimirá cualquier valor devuelto, le dará otro
y espere su siguiente entrada.
$sbcl
... [mensajes de inicio omitidos] ...
* (+ 1 2 3 )
6
* (Salida)
A la mayoría de la gente le gusta ejecutar SBCL como un subproceso en Emacs. El modo "Slime" de Emacs proporciona
muchas funciones convenientes, como la edición de la línea de comandos, la finalización de pestañas y varios tipos de
acoplamiento entre archivos fuente Common Lisp y el subproceso interactivo SBCL.
Para obtener información sobre la creación de "ejecutables independientes" mediante SBCL, consulte
SB-EXT: SAVE-LISP-AND-DIE en el Manual del usuario.
COMANDO LÍNEA SINTAXIS
Para el uso interactivo ordinario, no deberían ser necesarios argumentos de línea de comando.
Para comprender la sintaxis de la línea de comandos SBCL, es útil comprender que el
El sistema se compone de dos partes: un entorno de ejecución y el sistema Common Lisp que
apoyos. Algunos argumentos de la línea de comando se procesan durante la inicialización del
tiempo de ejecución, y algunos durante la inicialización del sistema Lisp - cualquier comando restante
Los argumentos de línea se pasan al código de usuario.
La sintaxis general de la línea de comandos es:
sbl [tiempo de ejecución opciones] --end-runtime-opciones [nivel superior opciones] - opciones de nivel final
[usuario opciones]
Tanto --end-runtime-options como --end-toplevel-options son opcionales y pueden omitirse.
Están pensados para su uso en situaciones en las que las opciones de la línea de comandos están bajo el usuario
control (por ejemplo, en archivos por lotes): al usarlos, puede evitar las opciones destinadas a su
programa siendo procesado accidentalmente por SBCL.
Las opciones de tiempo de ejecución admitidas son
--centro
Utilice el archivo central Lisp especificado en lugar del predeterminado. (Consulte la sección ARCHIVOS para
núcleo estándar o la documentación del sistema para SB-EXT: SAVE-LISP-AND-DIE para obtener información
sobre cómo crear un núcleo personalizado.) Tenga en cuenta que si el archivo del núcleo Lisp es un
archivo central, puede ejecutar un nivel superior no estándar que no reconoce el estándar
opciones de nivel superior.
- tamaño-espacio-dinámico
Tamaño del espacio dinámico reservado al inicio en megabytes. El valor predeterminado es plataforma
dependiente.
--control-tamaño de pila
Tamaño de la pila de control reservada para cada subproceso en megabytes. El valor predeterminado es 2.
--noinformar
Suprima la impresión de cualquier banner u otro mensaje informativo al inicio. (Esta
hace que sea más fácil escribir programas Lisp que funcionen limpiamente en pipelines Unix. Ver también
las opciones "--noprint" y "--disable-debugger").
--disable-ldb
Deshabilite el depurador de bajo nivel. Solo es efectivo si SBCL se compila con LDB.
- perder-por-corrupción
Hay algunos errores peligrosos de bajo nivel (por ejemplo, pila de control agotada,
falla de memoria) que (o cuyos controladores) pueden dañar la imagen. Por defecto, SBCL imprime un
advertencia, luego intenta continuar y manejar el error en Lisp, pero esto no siempre
funciona y SBCL puede funcionar mal o incluso colgarse. Con esta opción, al encontrar tal
error SBCL invocará ldb (si está presente y habilitado) o saldrá.
--guión
Como una opción de tiempo de ejecución equivalente a --noinform --disable-ldb --lose-on-corrupt
--end-runtime-options --script . Consulte la descripción de --script como
opción de nivel superior a continuación.
--merge-core-páginas
Cuando exista compatibilidad con la plataforma, proporcione sugerencias al sistema operativo que identifiquen
las páginas se pueden compartir entre procesos hasta que se escriben en ellas. Esto puede ser útil para
Reducir el uso de memoria en sistemas con múltiples procesos SBCL iniciados desde similares
pero archivos de núcleo con nombres diferentes, o de núcleos comprimidos. Sin soporte de plataforma,
hacer nada.
--no-merge-core-pages
Garantiza que no se proporcione ninguna sugerencia de uso compartido al sistema operativo.
--default-merge-core-pages
Revierte la política de sugerencias para compartir al valor predeterminado: solo los núcleos comprimidos activan las sugerencias.
Los núcleos sin comprimir se asignan directamente desde el archivo del núcleo, que suele ser suficiente para
asegurarse de compartir.
--ayuda
Imprima información básica sobre SBCL, luego salga.
--versión
Imprima la información de la versión de SBCL, luego salga.
En el futuro, se pueden agregar opciones de tiempo de ejecución para controlar el comportamiento, como la asignación diferida de
memoria.
Las opciones de tiempo de ejecución, incluida cualquier opción --end-runtime-options, se eliminan del
línea de comando antes de que la lógica de nivel superior Lisp tenga la oportunidad de verlo.
Las opciones de nivel superior admitidas por el núcleo SBCL estándar son
--sysinit
Cargue el nombre del archivo en lugar del archivo de inicialización predeterminado para todo el sistema. (Ver ARCHIVOS
sección.)
--no-sysinit
No cargue un archivo de inicialización de todo el sistema. Si se da esta opción, el --sysinit
se ignora la opción.
--usuario
Cargue el nombre del archivo en lugar del archivo de inicialización del usuario predeterminado. (Vea la sección ARCHIVOS).
--no-userinit
No cargue un archivo de inicialización de usuario. Si se da esta opción, la opción --userinit
se ignora.
--evaluar
Después de ejecutar cualquier archivo de inicialización, pero antes de iniciar el ciclo de lectura-evaluación-impresión
en la entrada estándar, lea y evalúe el comando dado. Más de una opción --eval puede
se utilizará, y todo se leerá y ejecutará, en el orden en que aparecen en el comando
la línea.
--carga
Esto es equivalente a --eval '(cargar " ") '. La sintaxis especial está destinada a
reduzca los dolores de cabeza entre comillas al invocar SBCL desde scripts de shell.
--sin imprimir
Cuando normalmente se ejecutaría el nivel superior "bucle de lectura-evaluación-impresión", ejecute un "ciclo de lectura
eval loop "en su lugar, es decir, no imprima un mensaje y no haga eco de los resultados. Combinado con el
--noinform runtime option, esto hace que sea más fácil escribir "scripts" Lisp que funcionan
limpiamente en las canalizaciones de Unix.
--deshabilitar-depurador
De forma predeterminada, cuando SBCL encuentra un error, ingresa al depurador incorporado, lo que permite
diagnóstico interactivo y posible intercesión. Esta opción deshabilita el depurador,
provocando errores para imprimir un retroceso y salir con el estado 1 en su lugar, que es un modo
de operación más adecuado para el procesamiento por lotes. Consulte el Manual de usuario en
SB-EXT: DISABLE-DEBUGGER para más detalles.
--dejar
Al final del procesamiento de la opción de nivel superior, salga de SBCL con un código exitoso de cero.
Tenga en cuenta que el efecto de esta opción se retrasa hasta después de las opciones de nivel superior siguientes
éste.
--no interactivo
Esta opción deshabilita el ciclo de lectura-evaluación-impresión tanto para casos excepcionales como no excepcionales.
razones. Es la abreviatura de --disable-debugger y --quit en combinación y es útil
para usos por lotes donde no se desea el procesamiento de opciones especiales implícitas en --script.
--guión
Implica --no-sysinit --no-userinit --disable-debugger --end-toplevel-options.
Hace que el sistema cargue el archivo especificado y salga inmediatamente después, en su lugar
de entrar en el ciclo de lectura-evaluación-impresión. Si el archivo comienza con una línea shebang, es
ignorado
Independientemente del orden en el que aparezcan las opciones de nivel superior en la línea de
acciones es:
1. El depurador está deshabilitado, si se solicita.
2. Se carga cualquier archivo de inicialización del sistema, a menos que esté prohibido.
3. Se carga cualquier archivo de inicialización de usuario, a menos que esté prohibido.
4. Las opciones --eval y --load se procesan en el orden indicado.
Finalmente, se ingresa el ciclo read-eval-print o el archivo especificado con --script
se carga la opción.
Cuando se ejecuta en el ciclo de lectura-evaluación-impresión, el sistema sale al final del archivo. Del mismo modo, el
el sistema sale inmediatamente después de procesar el archivo especificado con --script.
Tenga en cuenta que cuando se ejecuta SBCL con la opción --core, se usa un archivo central creado por un usuario
llamar al SB-EXT: SAVE-LISP-AND-DIE, las opciones de nivel superior pueden estar bajo el control de
código de usuario pasado como argumentos a SB-EXT: SAVE-LISP-AND-DIE. Para ello, el
La opción --end-toplevel-options en sí misma puede considerarse una opción de nivel superior, es decir, el usuario
core, a su opción, puede que no lo admita.
En la secuencia de inicio estándar SBCL (es decir, sin núcleo de usuario involucrado) opciones de nivel superior
y cualquier opción --end-toplevel-options se elimina de la lista de argumentos de la línea de comando
antes de que el código de usuario tenga la oportunidad de verlo.
Descripción
SBCL se deriva de CMU CL. (El nombre está destinado a reconocer la conexión:
el acero y la banca son las industrias en las que Carnegie y Mellon ganaron mucho dinero).
SBCL se compila de forma predeterminada: incluso las funciones ingresadas en el ciclo de lectura-evaluación-impresión se compilan
al código nativo, a menos que el evaluador se haya activado explícitamente. (Incluso hoy, unos 30
años después del compilador de MacLisp, la gente le dirá que Lisp es un
idioma. Ingnóralos.)
SBCL tiene como objetivo, pero no ha logrado completamente el cumplimiento con el estándar ANSI para Common
Ceceo. Más información sobre esto está disponible en la sección de ERRORES a continuación.
SBCL también incluye varias extensiones que no son ANSI, que se describen con más detalle en el Manual del usuario.
Algunos de estos están en el sistema base y otros son módulos "contrib" cargados a pedido.
usando REQUIRE. Por ejemplo, para cargar el módulo SB-BSD-SOCKETS que proporciona TCP / IP
conectividad,
* (requiere 'asdf)
* (requiere 'sb-bsd-sockets)
Para obtener más información, consulte el Manual de usuario.
EL COMPILADOR
SBCL hereda de CMU CL el compilador de código nativo "Python". (Aunque a menudo evitamos eso
nombre para evitar confusiones con el lenguaje de programación también llamado Python).
El compilador es muy inteligente para comprender el sistema de tipos de Common Lisp y usarlo para
optimizar el código y producir notas para que el usuario sepa cuando el compilador no
tener suficiente información de tipo para producir un código eficiente. También intenta (casi siempre
con éxito) para seguir el principio inusual pero muy útil de que "las declaraciones son
afirmaciones ", es decir, las declaraciones de tipo deben comprobarse en tiempo de ejecución a menos que el usuario
le dice explícitamente al sistema que la velocidad es más importante que la seguridad.
El código compilado utiliza la recolección de basura para administrar la memoria automáticamente. La basura
La implementación del recopilador varía considerablemente de una CPU a otra. En particular, en algunas CPU
el GC es casi exacto, mientras que en otros es más conservador, y en algunas CPU el GC es
generacional, mientras que en otros se utilizan estrategias más simples de detener y copiar.
Para obtener más información sobre el compilador, consulte el manual del usuario.
LITE PARA TECHOS PLANOS REQUISITOS
SBCL actualmente se ejecuta en X86 (Linux, FreeBSD, OpenBSD y NetBSD), X86-64 (Linux), Alpha
(Linux, Tru64), PPC (Linux, Darwin / MacOS X), SPARC (Linux y Solaris 2.x) y MIPS
(Linux). Para obtener información sobre otros puertos en curso y posibles, consulte el envío de correos de sbcl-devel
lista y / o el sitio web.
SBCL requiere del orden de 16 Mb de RAM para ejecutarse en sistemas X86, aunque todos menos los más pequeños
los programas estarían más contentos con 32Mb o más.
CONOCIDO LOCO
Esta sección intenta enumerar los errores más graves y más antiguos. Para más detalles
e información actual sobre errores, consulte el archivo BUGS en la distribución.
Es posible meterse en serios problemas agotando la memoria acumulada. El sistema SBCL
sobrecomprime la memoria al inicio, por lo que, en típicos similares a Unix como Linux y FreeBSD, esto
significa que si el sistema SBCL utiliza más memoria virtual de la que tiene
disponible para ello, otros procesos tienden a ser eliminados aleatoriamente (!).
El manejo del compilador de los valores de retorno de funciones viola innecesariamente las "declaraciones
son afirmaciones "principio al que se adhiere. El uso de PROCLAIM o DECLAIM para
especificar el tipo de retorno de una función hace que el compilador le crea sin comprobarlo.
Así compilando un archivo que contiene
(DECLAIM (FTYPE (FUNCTION (T) NULL) ALGUNAS VECES))
(DEFUN ALGUNAS VECES (X) (ODDP X))
(DEFUN FOO (X) (SI (ALGUNAS VECES X) 'ESTA VEZ' NO ESTA VEZ))
luego ejecutar (FOO 1) da NOT-THIS-TIME, porque el compilador confió en la verdad de la
RECLAMAR sin comprobarlo.
Algunas cosas se implementan de manera muy ineficiente.
- Las matrices multidimensionales son ineficientes, especialmente las matrices multidimensionales de flotantes
números de puntos.
- SBCL, como la mayoría (¿quizás todas?) De las implementaciones de Common Lisp en hardware estándar, tiene
problemas para pasar números de punto flotante de manera eficiente, porque un punto flotante
número, más algunos bits adicionales para identificar su tipo, es más grande que una palabra de máquina.
(Por lo tanto, se "encajonan" en el almacenamiento asignado al montón, lo que provoca una sobrecarga de GC).
unidad de compilación única, o al realizar operaciones integradas como SQRT y AREF, o algunas
operaciones especiales como accesos a ranuras de estructura, esto se puede evitar: consulte el manual del usuario
para algunas sugerencias de eficiencia. Pero para llamadas a funciones generales a través de los límites de
unidades de compilación, pasando el resultado de un cálculo de coma flotante como función
argumento (o devolver un resultado de punto flotante como un valor de función) es fundamentalmente
funcionamiento lento.
PRESENTACIÓN DE INFORMES LOCO
Para informar un error, envíe un correo a las listas de correo sbcl-help o sbcl-devel. Usted puede
encuentre las direcciones completas de la lista de correo en las páginas web en
<http://sbcl.sourceforge.net/>; tenga en cuenta que como medida de reducción de spam debe suscribirse
a las listas antes de poder publicar. (También puede encontrar un elegante seguimiento de errores de SourceForge
maquinaria allí, pero no se deje engañar. De todos modos, a partir del 2002 de julio de 07, no supervisamos activamente
esa maquinaria, y existe sólo porque no hemos podido averiguar cómo girar
apagado.)
Al igual que con cualquier informe de errores de software, es más útil si puede proporcionar suficiente información
para reproducir los síntomas de manera confiable, y si dice claramente cuáles son los síntomas. Para
ejemplo, "Parece haber algo mal con TAN de argumentos negativos muy pequeños.
Cuando ejecuto (TAN LEAST-NEGATIVE-SINGLE-FLOAT) de forma interactiva en sbcl-1.2.3 en mi Linux
4.5 Caja X86, obtengo un error VARIABLE UNBOUND. "
DIFERENCIAS DESDE CMU CL
SBCL se puede construir desde cero usando un sistema simple de vainilla ANSI Common Lisp y un C
compilador, y todas sus propiedades están especificadas por la versión del código fuente que
fue creado a partir de. Esta capacidad de arranque limpia fue la motivación inmediata para bifurcar
fuera del árbol de desarrollo de CMU CL. Una variedad de diferencias de implementación están motivadas
por este objetivo de diseño.
El trabajo de mantenimiento en SBCL ya que la horquilla se ha alejado un poco del trabajo de mantenimiento en
CMU CL. Muchas, pero no todas las correcciones de errores y mejoras, se han compartido entre los dos
proyectos y, a veces, los dos proyectos no están de acuerdo sobre lo que sería una mejora.
La mayoría de las extensiones compatibles con CMU CL se han separado de SBCL, incluido Motif
soporte, el editor Hemlock, rutas de búsqueda, el protocolo WIRE, varias macros a nivel de usuario
y funciones (por ejemplo: documentación que demuestre copropiedad de bienes, residencia compartida, recursos económicos combinados, declaraciones juradas de personas que lo conocen y que puedan dar fe de su relación y vida compartida, Decretos o certificados de adopción, Constancia de custodia legal de un niño adoptado durante un período de dos años LETF, ITERATE, MEMQ, REQUIRED-ARGUMENT) y muchos otros.
(¿Por qué SBCL no admite más extensiones de forma nativa?
de CMU CL cuando el código ya existe? Esta es una pregunta frecuente en el
lista de correo. Hay dos razones principales. Primero, es una cuestión de filosofía de diseño:
Podría decirse que SBCL ha hecho su trabajo al proporcionar un FFI estable, y la decisión de diseño correcta es
para mover la funcionalidad derivada de eso, como el soporte de socket, a bibliotecas separadas.
Algunos de estos se distribuyen con SBCL como módulos "contrib", otros se distribuyen como
paquetes de software separados por mantenedores separados. En segundo lugar, es una decisión práctica:
concentrarnos en un número menor de cosas, esperamos, nos permitirá hacer un mejor trabajo en ellas).
SOPORTE
Hay diversa información sobre SBCL disponible enhttp://www.sbcl.org/>. Las listas de correo
hay el lugar recomendado para buscar apoyo.
AUTORES
Docenas de personas han hecho contribuciones sustanciales a SBCL y sus subsistemas, y a
el sistema CMU CL en el que se basó, a lo largo de los años. Ver el archivo CREDITS en el
distribución para más información.
MEDIO AMBIENTE
SBCL_INICIO Esta variable controla dónde archivos como "sbclrc", "sbcl.core" y el complemento
Se buscan sistemas "contrib". Si no está configurado, entonces sbcl lo establece desde un
ubicación predeterminada en tiempo de compilación que suele ser / usr / local / lib / sbcl / pero puede tener
ha sido cambiado por ejemplo: documentación que demuestre copropiedad de bienes, residencia compartida, recursos económicos combinados, declaraciones juradas de personas que lo conocen y que puedan dar fe de su relación y vida compartida, Decretos o certificados de adopción, Constancia de custodia legal de un niño adoptado durante un período de dos años por un empaquetador externo.
Utilice sbcl en línea utilizando los servicios de onworks.net