Ya lo saben: mi educación superior, la susodicha ingeniería en sistemas
computacionales, fue muy precaria. Cada día de mi vida profesional
descubro y redescubro una carencia nueva y más escandalosa que la
anterior. En esta ocasión ha sido sobre el apasionante tema de los
compiladores.
Durante los primero meses de este año estuve trabajando con
v8, el motor de JavaScript desarrollado
por Google y parte de su navegador Chrome. Y sólo bastaron pocas semanas
para darme cuenta de que no tenía ni la más mínima idea sobre el tema.
El proyecto para mi terminó con un valioso aprendizaje: darme cuenta
cabal de que no sé nada de compiladores. Es una deuda que tengo para
conmigo mismo.
Con el fin de comenzar a pagar ese mal karma, dediqué este fin de semana
a escribir un compilador de juguete. Bueno, ahora ni siquiera llega a
compilador: en un mero analizador sintáctico del lenguaje BASIC, en su
primera encarnación de 1964.
Utilizo flex para hacer en analizador
léxico, y bison para el analizador
sintáctico.
Sospecho que aún puedo simplificar más la gramática y alguno que otro
retoque más. El siguiente paso es hacer el árbol sintáctico
abstracto,
para luego recorrerlo e intentar hacer optimizaciones locas.
El código está en
gitorious y recuerden
armarse con el clásico libro del
dragón.
¡Son menos de 450 líneas de código!
Chavos que están estudiando alguna carrera relacionada con las ciencias
computacionales: No dejen que el mal karma les desdibuje sus
aspiraciones profesionales. Programen sus propios compiladores, sistemas
operativos, manejadores de bases de datos, máquinas virtuales. Al menos
inténtenlo. Verán que el esfuerzo paga muy buenos dividendos.
De regreso por estos lares linuxeros, después de haberme retirado de
telecable y comenzado una aventura entre otro amigo y un servidor,
tratando de crear una empresa.
Les comento por anticipado, estamos creando una distro muy parecida a
backtrack. De hecho está basada en Debian y le hemos instalado software
de backtrack. Pero lo emocionante de esta disto es que estamos creando
una interfaz gráfica que sea fácil para el usuario y así poder
diagnosticar. Aún no le ponemos nombre al sistema, ¿sugerencias?, serán
bienvenidas. El sistema que integra todas las herramientas de forma de
combinación de linea de comandos está basada en GAMBAS.
Les estaré subiendo y explicando cada una de las herramientas que
utilizamos y que , claro son GNU la gran mayoría.
Para ir dando un adelanto, quiero saber el ancho de banda que utiliza mi
red:
ICT Consulting busca personas que deseen
integrarse a su equipo de trabajo:
Agente de Service Desk:
Proporcionar atención telefónica y solucionar problemas de primer nivel
para todas las llamadas entrantes. Desarrollar todas las fases de
solución del problema incluyendo interpretación, análisis, investigación
y resolución de problemas técnicos de distintas plataformas y categorías
de software y hardware.
En 1995, Netscape Navigator estaba en su cúspide como el navegador de Internet,
cuando su recién fichaje, Brendan Eich, tuvo la genial idea de insertar un
lenguaje de programación dentro del navegador, pudiendo así ofrecer páginas web
cuya interfaz con el usuario fuera más dinámica.
Eich primero esbozó un lenguaje muy cercano a Scheme, un dialecto de Lisp, pero
los empleados de cuello blanco pusieron el grito en el cielo: “¿cómo iba la
gente a usar un lenguaje de programación funcional para hacer sus páginas?”, así
que trocaron hacia un diseño ecléctico, por no decir “frankesteiniano”: Una
sintaxis similar a C, un conjunto de estructuras predefinidas cuyos nombres
fueron tomados de Java, y los conceptos principales de diseño fueron tomados de
Scheme y del poco conocido lenguaje de programación, Self.
Así es, el lenguaje de programación JavaScript, el que recobró importancia tras
el advenimiento de Ajax, tiene tanta relación con los lenguajes funcionales
clásicos, como con los lenguajes imperativos como C, Pascal o Java. Y tal vez
sea precisamente eso, su enfoque mixto, el motivo principal de su éxito.
El nombre de JavaScript se debe a la lamentable consecuencia de una negociación
económica entre Sun y Netscape, ya que el primero quería que todo en Internet
tuviera el prefijo Java y el segundo, poder distribuir la máquina virtual de
Java junto con el navegador. El lenguaje tuvo, antes de su distribución al
público, nombres mucho más sugerentes, como LiveScript, o, más anteriormente,
Mocha.
En 1996, Netscape sometió el lenguaje a ECMA Internacional, para que, dentro de
un comité internacional, se decidiera el desarrollo del lenguaje, y no estuviera
a merced de intereses comerciales que conducirían a un cisma de la Web. No
obstante, se rebautizó el lenguaje dentro del comité a ECMAScript. Actualmente
existen varias encarnaciones de esta especificación, tal como el mismo
JavaScript, JScript de Microsoft, ActionScript de Adobe, QtScript, etcétera.
Pero veamos más de cerca las características de diseño más relevantes del
lenguaje:
En 1966 un profesor de la Universidad de Stanford, Michael J. Flynn propuso una
clasificación para la arquitectura de computadoras conocida como la Taxonomía de
Flynn [1].
Esta clasificación está basada en el número concurrente de instrucciones y en
los flujos de datos disponibles en la arquitectura:
Single Instruction
Multiple Instruction
Single Data
SISD
MISD
Multiple Data
SIMD
MIMD
De manera general los ordenadores personales pueden considerarse como SISD:
Single Instruction, Single Data. Estos procesadores solamente pueden hacer
una operación sobre un valor a la vez.
Sin embargo, con la llegada del procesamiento multimedia, el mercado de los
ordenadores personales comenzó a ejercer presión sobre los fabricantes de chips
para proveer de hardware más potente capaz de reproducir audio y vídeo
(actividad muy demandante de poder de cómputo), sin afectar la sensación de
desempeño en las demás tareas.