bses un lenguaje de programación y un compilador / intérprete para programas de tamaño modesto en sistemas UNIX . [1] El bscomando se puede invocar para programación interactiva o con un archivo que contiene un programa, opcionalmente tomando argumentos, a través de un shell de Unix , por ejemplo, usando un Shebang (Unix) #!/usr/bin/bs .
Diseñada por | Richard C. Haight |
---|---|
Apareció por primera vez | 1980 |
SO | Unix |
Influenciado por | |
BÁSICO , SNOBOL4 , C |
Una de las primeras páginas del manual dice, "[ bs] es un descendiente remoto de Basic [sic] y SNOBOL4 , con un poco de C incluido". [1]
Historia
El bscomando aparece en UNIX System III Release 3.0 (1980), lanzado por primera vez fuera de Bell Labs en 1982. [1] Fue escrito por Dick Haight (Richard C. Haight) alrededor de 1978, quien lo relata de la siguiente manera: [2]
Escribí bsen ese momento Unix (¿V 3?) Y todos los comandos se estaban convirtiendo de ensamblador a C. Entonces [el de Ken Thompson ] se basconvirtió en mi bs... más o menos.
El manual de la Versión 3.0 menciona de manera bsdestacada en la página 9 (énfasis agregado): [3]
Escribiendo un programa. Para ingresar el texto de un programa fuente en un archivo UNIX, use ed(1). Los cuatro lenguajes principales disponibles en UNIX son C (ver cc(1)), Fortran (ver f77(1)), bs (un compilador / intérprete en el espíritu de Basic, ver bs(1)) y el lenguaje ensamblador (ver as(1)).
Aunque no se publicó en el exterior antes del Sistema III, el bscomando estaba presente internamente en UNIX / TS 1.0 (noviembre de 1978), [4] PWB / UNIX 2.0 (junio de 1979), [4] y CB UNIX ediciones 2.1 (noviembre de 1979) [5 ] [6] y 2.3 (1981). [7] El bscomando no aparece en algunas versiones internas anteriores, por ejemplo, la versión de marzo de 1977 del Grupo de soporte de UNIX, [4] ni el manual de PWB / UNIX con fecha de mayo de 1977, [8] sugiriendo su creación alrededor de 1978. No aparecen en cualquier versión de Research Unix ni en Berkeley Software Distribution .
Posteriormente y en la década de 1990, bsse incluyó en una variedad de sistemas operativos comerciales derivados del Sistema III o del Sistema V, incluidos, entre otros: PC / IX ; [9] Versiones 2 y 3 del Sistema V de UNIX : SVR2 , [10] SVR3 , SVR3.2 (1986); [11] HP-UX ; [12] AIX ; [13] y A / UX . [14] (El Manual del usuario para AT&T UNIX PC (3B1) menciona específicamente que el bscomando no está disponible, pero que está disponible en SVR3.2. [10] )
Ocasionalmente, bsfue promocionado como uno de los principales lenguajes de programación para el desarrollo bajo UNIX. [3] [9] [15] Sin embargo, bsno se incluye en los comandos y utilidades POSIX.1 (la Lista estándar de comandos Unix ) ni en la Especificación Única de UNIX y no se proporciona con la mayoría de los sistemas operativos contemporáneos. Por ejemplo, en Linux , bc , Perl y el shell POSIX proporcionan una sintaxis y una funcionalidad similares .
En el siglo XXI, bsestá presente, al menos, en HP-UX Release 11i (2000), [12] así como en las versiones AIX 6.1 (2007) [13] y 7.2 (2018), [16] probablemente debido a su UNIX Herencia de System V.
Diseño y características
La página de manual bs[1] , aparentemente la única especificación del lenguaje de programación, lo caracteriza de la siguiente manera:
Bs está diseñado para tareas de programación donde el tiempo de desarrollo del programa es tan importante como la velocidad de ejecución resultante. Se minimizan las formalidades de declaración de datos y manipulación de archivos / procesos. Línea-en-un-tiempo de depuración, el tracey dumplos mensajes de error en tiempo de ejecución útiles Todas las pruebas de programa de simplificar las sentencias, y. Además, los programas incompletos se pueden depurar; las funciones internas se pueden probar antes de que se hayan escrito las funciones externas y viceversa.
Un bsprograma se compila y ejecuta de manera diferente a los programas escritos en los otros lenguajes de programación Unix principales de la época: C , FORTRAN y lenguaje ensamblador , cuyos comandos respectivos compilan el código fuente del programa en la salida ejecutable del ensamblador ( a.out ). En su lugar, un bsprograma es, primero, convertido por el bscomando a una representación intermedia interna inversa polaca ( RPN ) y luego ejecutado por la máquina de pila virtual interna del comando . [17] El lenguaje, por lo tanto, es un intérprete y compilador híbrido y una divergencia en la programación Unix de Ancient Unix .bs
El bslenguaje comparte algunas características y sintaxis con BASIC , SNOBOL y C , los dos primeros presumiblemente inspiran su nombre. Al igual que BASIC, se puede utilizar de forma interactiva, ya sea ejecutando sentencias inmediatamente o recogiéndolas en un programa para ejecutarlas posteriormente. Como en SNOBOL4, el operador de asignación ( =) se usa para E / S y bspuede ejecutar código en cadenas, usando su función eval . También incluye el operador de interrogación de SNOBOL ( ?) que se usa para probar si una evaluación de expresión tiene éxito o no. La formatfunción incorporada, limitada a un argumento, admite un subconjunto de printfespecificadores de conversión de formato de C , por ejemplo, "% f".
El idioma tiene algunos elementos llamativos. Por ejemplo, sus funciones de programa se definen utilizando la sintaxis y sus funciones pueden tener variables locales. Además, puede operar en dos modos, ya sea interpretando (y ejecutando) declaraciones y programas o compilándolos, y cambiando entre los dos usando y . De lo contrario, su funcionalidad es única solo colectivamente (en un idioma), ya que las características individuales son redundantes con las de las herramientas coexistentes, como Unix Shell , por ejemplo, E / S de archivos y bucles, y AWK , por ejemplo, matrices asociativas y expresión regular. pareo.fun ... nufbscompilestop
El bslenguaje fue diseñado para el desarrollo conveniente y la depuración de pequeños programas modulares. Tiene una colección de sintaxis y características de lenguajes populares anteriores, pero se compila internamente, a diferencia de un script de Shell . Como tal, en propósito, diseño y función, bses un predecesor modesto y en gran parte desconocido de los lenguajes híbridos interpretados / compilados como Perl y Python .
Ejemplos de sintaxis
Los siguientes ejemplos se derivan de una bs(1) página de manual de A / UX . [18]
Este ejemplo utiliza bscomo calculadora:
$ bs # Distancia (pulgadas) que viaja la luz en un nanosegundo. 186000 * 5280 * 12 / 1e9 11 .78496...# Interés compuesto # (6% por 5 años sobre $ 1,000). int = .06 / 4 bal = 1000 para i = 1 5 * 4 bal = bal + bal * intbal - 1000 346 .855007... Salida
Este ejemplo es el esquema de un bsprograma típico :
# inicializar cosas: var1 = 1 open ( "read" , "infile" , "r" ) ... # compute: while ? ( str = leer ) ... Siguiente # limpiar: cerrar ( "leer" ) ... # última sentencia ejecutada (salir o detener): salir # última línea de entrada:correr
Este ejemplo demuestra E / S:
# Copie "archivo antiguo" en "archivo nuevo". abrir ( "leer" , "archivo antiguo" , "r" ) abrir ( "escribir" , "archivo nuevo" , "w" )... mientras ? ( escribir = leer ) ... # cerrar "leer" y "escribir": cerrar ( "leer" ) cerrar ( "escribir" ) # Canalizar entre comandos. open ( "ls" , "! ls *" , "r" ) open ( "pr" , "! pr -2 -h 'List'" , "w" ) while ? ( pr = ls ) ...... # asegúrese de cerrar (esperar) estos: close ( "ls" ) close ( "pr" )
Programa de muestra
El siguiente es un bsprograma de muestra que emite la letra de la canción 99 Bottles of Beer usando /usr/bin/bs. [19]
fun sing ( n , end ) s s = ( "s" , "" ) [ match ( n , "^ 1 $" ) ] put = format ( format ( format ( "% s botella %% s de cerveza %%% % s " , n ), s ), end ) nufpara n = 99 , n , poner = "" cantar ( formato ( "% -0.0f" , n ), "en la pared," ) cantar ( formato ( "% -0.0f" , n ), "," ) put = "toma uno, pásalo ," - n canta (( formato ( "% -0.0f" , n ), "no" ) [ 0 == n ] , "en la pared." ) siguiente
Ver también
- corriente continua
- antes de Cristo
Referencias
- ^ a b c d Manual del usuario de UNIX (versión 3.0 ed.). Bell Telephone Laboratories, Incorporated. 1980. p. 95.
- ^ Comunicación personal de Dick Haight, 10 de septiembre de 2019.
- ^ a b Manual del usuario de UNIX (PDF) (Versión 3.0 ed.). Bell Telephone Laboratories, Incorporated. 1980. p. 9.
- ^ a b c Conversación personal con John R. Mashey , 9 de septiembre de 2019.
- ^ "CB / UNIX man 7" , The Unix Heritage Society , noviembre de 1979. Consultado el 9 de septiembre de 2019.
- ^ "CB / UNIX man 1" , The Unix Heritage Society , noviembre de 1979. Consultado el 9 de septiembre de 2019.
- ^ JD Doan, ed. (Mayo de 1981). Manual del programador de CB-UNIX, edición 2.3 (PDF) . Columbus, OH: Bell Telephone Laboratories. pag. iii.
- ^ TA Dolotta; RC Haight; EM Piskorik, eds. (Mayo de 1977). "Sección 1". Manual del programador de PWB UNIX, edición 1 . Piscataway, Nueva Jersey: Bell Telephone Laboratories.
- ^ a b "IBM pasa a UNIX". Revista de PC . 12 de junio de 1984. p. 218.
- ^ a b "Volúmen 1". AT&T UNIX PC UNIX System V Manual del usuario (PDF) . AT&T. 1986. p. 8.
- ^ "Comandos y utilidades del volumen 1". Manual del programador de UNIX (PDF) . AT&T. 1986. p. 41.
- ^ a b "Sección 1 (AM)". Comandos de usuario de HP-UX Reference Release 11i (PDF) (1 ed.). Compañía Hewlett-Packard. 2000. p. 93.
- ^ a b "Sección 1 (ac)". Referencia de comandos de AIX versión 6.1 (PDF) (Primera edición). Corporación de Máquinas de Negocios Internacionales. 2007. p. 251.
- ^ "Sección 1 (AL)". Referencia de comandos A / UX (PDF) (2.0 ed.). Apple Computer, Inc. 1990. pág. 93.
- ^ "A / UX: Development Tools" , Apple, Inc , 18 de febrero de 2012. Consultado el 9 de septiembre de 2019.
- ^ "Sección 1 (ac)". Referencia de mandatos de AIX versión 7.2 . IBM Corporation. 2018. p. 282.
- ^ Conversación personal con Dick Haight, 12 de septiembre de 2019.
- ^ El/FILESarchivo, medio de instalación A / UX 3.0.1, Apple Inc. (1993)
- ^ "Language BS" , 99 Bottles of Beer , 8 de agosto de 1996. Consultado el 9 de septiembre de 2019.