Articulo de referencia

bs (lenguaje de programación)

bs es un lenguaje de programación y un compilador/intérprete para programas de tamaño moderado en sistemas UNIX . [ 1 ] El bs comando se puede invocar tanto para programación in...

bses un lenguaje de programación y un compilador/intérprete para programas de tamaño moderado en sistemas UNIX . [ 1 ] El bscomando se puede invocar tanto para programación interactiva como con un archivo que contiene un programa, que opcionalmente acepta argumentos, a través de un intérprete de comandos Unix , por ejemplo, usando un Shebang (Unix)#!/usr/bin/bs .

Una página de manual antigua afirma: "[ bs] es un descendiente remoto de Basic [sic] y SNOBOL4 , con un poco de C añadido." [ 1 ]

Historia

El bscomando aparece en UNIX System III Release 3.0 (1980), publicado 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 ]

En aquel entonces yo escribía bsen Unix (¿V 3?) y todos los comandos se estaban convirtiendo de ensamblador a C. Así que [ el de Ken Thompson ] basse convirtió en el mío bs, más o menos.

El manual de la versión 3.0 menciona bsde forma destacada en la página 9 (énfasis añadido): [ 3 ]

Escribir un programa. Para introducir el texto de un programa fuente en un archivo UNIX, utilice ed(1). Los cuatro lenguajes principales disponibles en UNIX son C (véase cc(1)), Fortran (véase f77(1)), bs (un compilador/intérprete al estilo de Basic, véase bs(1)) y lenguaje ensamblador (véase as(1)).

Aunque no se publicó fuera 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 las ediciones CB UNIX 2.1 (noviembre de 1979) [ 5 ] y 2.3 (1981). [ 6 ] El bscomando no aparece en algunas versiones internas anteriores, por ejemplo, la versión de marzo de 1977 del UNIX Support Group, [ 4 ] ni en el manual de PWB/UNIX de mayo de 1977, [ 7 ] lo que sugiere su creación alrededor de 1978. No aparece en ninguna versión de Research Unix ni en Berkeley Software Distribution .

Posteriormente, y hasta la década de 1990, bsse incluyó en una variedad de sistemas operativos comerciales derivados de System III o System V, incluyendo, entre otros: PC/IX ; [ 8 ] UNIX System V Versiones 2 y 3: SVR2 , [ 9 ] SVR3 , SVR3.2 (1986); [ 10 ] HP-UX ; [ 11 ] AIX ; [ 12 ] y A/UX . [ 13 ] (El manual del usuario para la PC UNIX de AT&T (3B1) menciona específicamente que el bscomando no está disponible, pero que sí lo está en SVR3.2. [ 9 ] )

Ocasionalmente, bsse promocionó como uno de los lenguajes de programación principales para el desarrollo bajo UNIX. [ 3 ] [ 8 ] [ 14 ] Sin embargo, bsno está incluido 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 en la mayoría de los sistemas operativos contemporáneos. Por ejemplo, en Linux , bc , Perl y el shell POSIX proporcionan una sintaxis y funcionalidad similares .

En el siglo XXI, bsestá presente, al menos, en HP-UX Release 11i (2000), [ 11 ] así como en las versiones 6.1 (2007) [ 12 ] y 7.2 (2018) de AIX , [ 15 ] probablemente debido a su herencia de UNIX 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 es tan importante como la velocidad de ejecución. Se minimizan las formalidades de la declaración de datos y la manipulación de archivos y procesos. La depuración línea por línea, las sentencias ` traceand` dumpy los mensajes de error útiles en tiempo de ejecución simplifican las pruebas del programa. Además, se pueden depurar programas incompletos; las funciones internas se pueden probar antes de escribir las 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 a una salida ejecutable en ensamblador ( a.out ). En cambio, un bsprograma es, primero, convertido por el bscomando a una representación intermedia interna de notación polaca inversa ( RPN ) y luego ejecutado por la máquina de pila virtual interna del comando . [ 16 ] El lenguaje, por lo tanto, es un intérprete y compilador híbrido y una divergencia en la programación Unix con respecto a Ancient Unix .bs

El bslenguaje comparte algunas características y sintaxis con BASIC , SNOBOL y C , presumiblemente los dos primeros inspiraron su nombre. Al igual que BASIC, se puede usar de forma interactiva, ya sea ejecutando instrucciones inmediatamente o recopilándolas en un programa para ejecutarlo 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 ( ?) usado para comprobar si una evaluación de expresión tiene éxito o no. La función integrada format, limitada a un argumento, admite un subconjunto de especificadores de conversión de formato de C printf, por ejemplo, "%f".

El lenguaje presenta algunos elementos distintivos. Por ejemplo, sus funciones de programa se definen mediante la sintaxis y pueden contener variables locales. Además, puede operar en dos modos: interpretando (y ejecutando) sentencias y programas, o compilándolos, alternando entre ambos mediante y . Por lo demás, su funcionalidad es única en su conjunto (dentro de un lenguaje), ya que sus características individuales son redundantes con las de herramientas coexistentes, como el Shell de Unix (por ejemplo, E/S de archivos y bucles) y AWK (por ejemplo, matrices asociativas y coincidencia de expresiones regulares ).fun ... nufbscompilestop

El bslenguaje fue diseñado para facilitar el desarrollo y la depuración de programas pequeños y modulares. Incorpora sintaxis y características de lenguajes populares anteriores, pero se compila internamente, a diferencia de un script de shell . Por ello, en cuanto a su propósito, diseño y funcionamiento, bses un predecesor modesto y poco conocido de lenguajes híbridos interpretados/compilados como Perl y Python .

Ejemplos de sintaxis

Los siguientes ejemplos se derivan de una bs(1)página man de A/UX . [ 17 ]

Este ejemplo utiliza bscomo calculadora:

$ bs # Distancia (pulgadas) que recorre la luz en un nanosegundo. 186000 * 5280 * 12 / 1e9 11 .78496 ... # Interés compuesto # (6% durante 5 años sobre $1,000). int = 0.06 / 4 bal = 1000 para i = 1 5 *4 bal = bal + bal*int bal - 1000 346 0.855007 ... salir

Este ejemplo es el esquema de un bsprograma típico:

# inicializar cosas: var1 = 1 abrir ( "leer" , "archivo de entrada" , "r" ) ... # calcular: mientras ? ( str = leer ) ... siguiente # limpiar: cerrar ( "leer" ) ... # última instrucción ejecutada (salir o detener): salir # última línea de entrada: correr 

Este ejemplo demuestra la entrada/salida:

# Copia "oldfile" a "newfile". open ( "read" , "oldfile" , "r" ) open ( "write" , "newfile" , "w" ) ... while ? ( write = read ) ... # cierra "read" y "write": close ( "read" ) close ( "write" ) # Tubería entre comandos. open ( "ls" , "!ls *" , "r" ) open ( "pr" , "!pr -2 -h 'List'" , "w" ) while ? ( pr = ls ) ... ... # asegúrate de cerrar (esperar) estos: close ( "ls" ) close ( "pr" )

Programa de ejemplo

El siguiente es un bsprograma de ejemplo que emite las palabras de la canción 99 Bottles of Beer usando /usr/bin/bs. [ 18 ]

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 ), "," ) poner = "toma uno, pásalo," -- n cantar (( formato ( "%-0.0f" , n ), "no" ) [ 0 == n ] , " en la pared." ) siguiente

Véase también

Referencias

  1. 1 2 3 4 Manual del usuario de UNIX (  Edición versión 3.0). Bell Telephone Laboratories, Incorporated. 1980. pág.  95.
  2. Comunicación personal de Dick Haight, 10 de septiembre de 2019.
  3. 1 2 Manual del usuario de UNIX (PDF) (Edición versión 3.0 ). Bell Telephone Laboratories, Incorporated. 1980. pág. 9.  
  4. 1 2 3 Conversación personal con John R. Mashey , 9 de septiembre de 2019.
  5. "CB/UNIX bs(1)" , The Unix Heritage Society , noviembre de 1979. Consultado el 2 de julio de 2025.
  6. JD Doan, ed. (mayo de 1981). Manual del programador de CB-UNIX, edición 2.3 (PDF) . Columbus, OH: Bell Telephone Laboratories. pág. iii. 
  7. TA Dolotta; RC Haight; EM Piskorik, eds. (mayo de 1977). "Sección 1". Manual del programador de PWB UNIX, 1.ª edición . Piscataway, Nueva Jersey: Bell Telephone Laboratories.
  8. 1 2 "IBM se pasa a UNIX". PC Magazine . 12 de junio de 1984. pág. 218. 
  9. 1 2 "Volumen 1". Manual del usuario del sistema UNIX V para PC UNIX de AT&T (PDF) . AT&T. 1986. pág. 8. 
  10. "Volumen 1 Comandos y utilidades". Manual del programador de UNIX (PDF) . AT&T. 1986. pág. 41. 
  11. 1 2 "Sección 1 (AM)". Comandos de usuario de la versión de referencia HP-UX 11i (PDF) (1.ª ed.). Hewlett-Packard Company. 2000. pág. 93.  
  12. 1 2 "Sección 1 (ac)". Referencia de comandos de AIX versión 6.1 (PDF) (Primera ed.). International Business Machines Corporation. 2007. pág. 251.  
  13. "Sección 1 (AL)". Referencia de comandos A/UX (PDF) (ed. 2.0 ). Apple Computer, Inc. 1990. pág. 93.  
  14. "A/UX: Herramientas de desarrollo" , Apple, Inc. , 18 de febrero de 2012. Consultado el 9 de septiembre de 2019.
  15. "Sección 1 (ac)". Referencia de comandos de AIX versión 7.2 . IBM Corporation. 2018. pág. 282. 
  16. Conversación personal con Dick Haight, 12 de septiembre de 2019.
  17. El/FILESarchivo, medios de instalación de A/UX 3.0.1, Apple Inc. (1993)
  18. "Language BS" , 99 Bottles of Beer , 8 de agosto de 1996. Consultado el 9 de septiembre de 2019.