Un lenguaje de programación es un conjunto de símbolos y reglas similares a un «idioma», con el cuál podremos crear aplicaciones o sistemas para controlar una máquina o determinadas funciones. Existen muchos y muy variados, algunos muy famosos son: Java, C/C++, Basic o Perl.
Sin embargo, existen algunos, mucho menos conocidos que podrían entrar en la categoría de Lenguajes de programación complicados dada su naturaleza. Echemos un vistazo a alguno de ellos:
Intercal (1972): Se diseñó en un principio como una parodia de los lenguajes Fortran y Cobol, por la compleja didáctica que poseían. Se trata de una especie de lenguaje máquina. Como curiosidad, Intercal significa «Lenguaje compilado con ningún acrónimo pronunciable».
Ejemplo del Hello World! en Intercal:
PLEASE DO ,1 <- #13
DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #112
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #238
DO ,1 SUB #7 <- #26
DO ,1 SUB #8 <- #248
DO ,1 SUB #9 <- #168
DO ,1 SUB #10 <- #24
DO ,1 SUB #11 <- #16
DO ,1 SUB #12 <- #158
DO ,1 SUB #13 <- #52
PLEASE READ OUT ,1
PLEASE GIVE UPBrainfuck (1993): Se trata de un lenguaje de programación que a la vez que se basa en un concepto simple, resulta altamente complejo: Funciona sólo realizando operaciones sobre punteros.
Ejemplo del Hello World! en Brainfuck:
++++++++++
[
>+++++++>++++++++++>+++>+<<<<-
]
>++.
>+.
+++++++.
.
+++.
>++.
<<+++++++++++++++.
>.
+++.
------.
--------.
>+.
>.Befunge93 (1993): Este lenguaje de programación se caracteriza por estar basado en el modelo de una máquina de pila para pasar parámetros y utilizar una especie de matriz bidimensional para sus instrucciones, que podrán dirigir el control de flujo en cualquier dirección, volviendo en círculo al mismo lugar si se excede en las dimensiones.
Ejemplo del Hello World! en Befunge:
> v
v ,,,,,"Hello"<
>48*, v
v,,,,,,"World!"<
>25*,@
Malbolge (1998): Se diseñó para ser un lenguaje de programación muy complicado y se basa en teorías de criptoanálisis. Su nombre está basado en el 8º círculo del infierno (La Divina Comedia, Dante).
Ejemplo del Hello World! en Malbolge:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<Unlambda (2001): Este lenguaje nace de la mezcla entre dos conceptos característicos de la programación usual: los lenguajes ofuscados y los lenguajes funcionales (sólo se maneja la función). Se basa en la lógica combinatoria y el cálculo de operaciones lambda.
Ejemplo del Hello World! en Unlambda:
`r```````````.H.e.l.l.o. .w.o.r.l.diWhitespace (2003): Quizás el lenguaje de programación más original. Su característica principal es que se desarrolla con espacios en blanco, tabulaciones y retornos de carro (enter). Especialmente curioso el resaltado de sintaxis en VIM del Whitespace.
Ejemplo del Hello World! en Whitespace.
Ook! (2003): Otro lenguaje de programación bastante original. Se basa en la imitación de un gruñido de un orangután como manejador de punteros. Contiene 3 palabras reservadas (Ook., Ook? y Ook!). Es una parodia del Brainfuck y se basa en un personaje (mago-bibliotecario) de Mundodisco, que se convertía en orangután.
Ejemplo del Hello World! en Ook!:
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook?
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook.
Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.Chef (2003): Este lenguajde programación se basa en que su sintaxis simula ser una receta de cocina. Funciona con un modelo de pila, donde puedes manejar variables, datos e instrucciones.
Ejemplo del Hello World! en Chef:
Hello World Souffle.
Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes
más...
Piet (2003): En este lenguaje de programación, los programas son bitmaps que simulan ser pinturas de arte abstracto. El nombre del lenguaje es en honor al pintor holandés Piet Mondrian.
Ejemplo del Hello World! en Piet.
Los programadores (sobre todo los que estamos aprendiendo) solemos preocuparnos poco de la optimización de código cuando realizamos un programa. A priori, le damos importancia a dos factores:
Otros factores como rapidez, comprensión del código, optimización, documentación... no son evaluados como criterios primarios. Sin embargo, son muy importantes.
En la programación web (más si cabe) uno de los criterios más importantes es la optimización, ya que disponemos de un servidor con recursos limitados. Si conseguimos que nuestro código sea más eficiente, dispondremos de más capacidad en nuestro servidor (menos carga).
Esto es especialmente importante cuando tenemos muchas visitas diarias: optimizar un script PHP de un artículo no repercute especialmente, en cambio, optimizar un script PHP que se ejecuta siempre (por ejemplo, el sidebar) mejora ampliamente la eficiencia de nuestro código.
En PHP Benchmark hacen algunas pruebas de eficiencia con respecto a funciones similares de PHP. A continuación voy a hacer un breve repaso, con algunos añadidos:
Fuentes: 12 PHP tricks / PHP benchmarks / 7 tips for PHP / More PHP tips.
Después del manual para reducir el consumo de CPU y memoria RAM del servidor, seguimos con los consejos para optimizar nuestro servidor. Uno de los aspectos que más debemos cuidar es el uso de memoria RAM que hacemos a medida que se ejecutan nuestros scripts.
Cuando los visitantes acceden a nuestras páginas, la ejecución de los scripts PHP (o Perl, Ruby...), las consultas SQL a la base de datos, la optimización de la programación y otros factores ayudan o perjudican en el uso de memoria RAM. La mayoría de las veces no tenemos ni idea de cuanta memoria estamos utilizando en cada petición de página, pero vamos a averiguarlo.
echo 'Memoria usada: ' . round(memory_get_usage() / 1024,1) . ' KB de ' . round(memory_get_usage(1) / 1024,1) . ' KB';
echo 'Memoria usada: ' . round(memory_get_usage() / 1024,1) . ' KB';
Con este código PHP (sólo en PHP 4.3.2 o superior) obtendremos la cantidad de memoria que está consumiendo por petición nuestro blog o página web. Pero puede ocurrir que nuestro sistema no esté compilado con esta opción, para ello podemos utilizar la siguiente función. Obviamente, necesitaremos
function memory_get_usage() {
$pid = getmypid();
exec("ps -o rss -p $pid", $output);
return $output[1] *1024;
}
En muchos casos nos resultaría más útil guardar en una variable (recuerda, no debes usar echo al principio si envías cabeceras, obtendrás un error) el consumo de memoria que hay al principio del script:
$mem_inicio = round(memory_get_usage() / 1024,1);
Así, más tarde lo podríamos imprimir por pantalla para compararlo con el consumo final y conocer el verdadero gasto del script, ya que el consumo final puede estar debido a razones «anteriores» a la petición del script, como el uso del mod_rewrite, gestión de los procesos del apache y muchos otros criterios.
Date cuenta que esta es una buena forma de ver cuánto está consumiendo por petición nuestro Wordpress (o cualquier otro CMS). ¿Y tu blog cuánto consume por petición?
¡OJO! Si no eres informático o estudiante de ingenieria computacional, probablemente este artículo no te interese.
Hace unos días necesité implementar el algoritmo de Booth en C++ para una parte de una de las prácticas de la asignatura Teoría de autómatas y lenguajes formales y la verdad, aunque existe bastante información, eché en falta una explicación didáctica para comprender el procedimiento desde un punto de partida. Asi pues, en este artículo intentaré explicar el procedimiento del algoritmo lo mejor posible.
El algoritmo de Booth es un método rápido y sencillo para obtener el producto de dos números binarios con signo en notación complemento a dos.
Debemos saber que un número binario está formado por bits de ceros y unos, y que se puede traducir a decimal fácilmente de la siguiente forma:
Sabiendo que la posición de cada bit es 2^n (elevado a n) y partimos de n=0 de derecha a izquierda, sólo queda realizar la suma total de multiplicar por dicho bit, en este caso:
(0·2^7+1·2^6+0·2^5+1·2^4+0·2^3+1·2^2+1·2^1+0·2^0 = 86).
También debemos saber que el complemento a uno de un número binario es cambiar sus ceros por unos, y sus unos por ceros (complementar): (010010 -> ca1: 101101) y que el complemento a dos de un número binario es el resultado de sumar 1 al complemento a uno de dicho número binario:
Realizar una suma con dos números binarios es tarea fácil, pero la multiplicación resulta algo más complicada. Con el algoritmo de Booth, resulta mucho más sencillo de implementar. Partimos del ejemplo de la multiplicación 6·2=12:
Como se puede ver en la imagen superior, partiendo de los números binarios de la multiplicación 6·2 (multiplicando y multiplicador) creamos tres nuevos números binarios del doble de tamaño (16 en el ejemplo): A, S y P.
Partiendo del número P (producto) comenzamos a comparar los últimos 2 bits de la derecha, siguiendo los casos base del recuadro:
Se realizará esta comparación 8 veces en este ejemplo (número de bits de los operandos) y al final de cada comparación, realizamos un desplazamiento de un bit hacia la derecha, manteniendo el último bit de la izquierda, y descartando el último bit del lado contrario. Si hacemos una traza paso a paso nos quedarían los siguientes resultados:
Finalmente obtenemos el número en binario resultante (12 en este ejemplo), descartando el bit extra que hemos añadido al principio del procedimiento y que se encuentra en el extremo a la derecha.
Espero que esto les sirva tanto como me sirvió a mi en su momento.
6 consultas efectuadas / Página generada en 0.035 segundos
Programado íntegramente por José Román (Manz) en XHTML y CSS estándar.
Sindicado bajo Feed RSS. Contenido bajo licencia Creative Commons
Estadísticas de visitas · Términos y condiciones · Contacto · Publicidad · Preguntas frecuentes (FAQ)