Catálogo de lenguajes de programación
A la vista de que al menos en HxC el problema de con que lenguaje de programación comenzar es algo recurrente, me he decidido a hacer una recopilación de mini programas en distintos lenguajes para que quien comience pueda encontrar facilmente uno que se acerce a su forma de ver las soluciones de los problemas (personalmente creo que es un buen criterio para escojer un primer lenguaje).
Para no quedarse en los 4 de siempre me he tomado la libertad en escojer unos cuantos lenguajes que no suelen tener tanta visibilidad (sin ser tipo brainf*ck), he intentado también ser todo lo imparcial posible pero como humano que soy eso no es algo que suela salir bien ;).
Por ahora contiene alrededor de 30 lenguajes, pero solo un código de cada uno, así que aún queda mucho por andar, los códigos serían:
-
Uno que calcule un número de la secuencia de fibonacci y lo muestre por pantalla indicando el índice y el número (me parece que es simple y da una buena visión de como se ve el lenguaje). (este es el ejemplo que ya está programado).
-
Otro que muestre los tipos basicos de datos, los comentarios, que muestre como crear una estructura a partir de los tipos basicos y como crear una clase (si es posible).
-
Condicionales, bucles, y subrutinas.
Y seguramente uno o dos más que estan sin decidir.
Nota: Este es un trabajo en curso, cualquier aportación es enormemente bienvenida. Todo el código se encuentra bajo la licencia WTFPL en este repositorio [ https://gitlab.com/kenkeiras/language-catalog ]. Además todos los lenguajes que se encuentran aquí disponen de algún intérprete o compilador libre.
A+
A+ es un lenguaje de programación de arrays descendiente del lenguaje A, diseñado este para sustituir a APL, fue diseñado para programas con muy centradas en los números, especialmente para las aplicaciones financieras.
Como curiosidad comentar que el lenguaje suele utilizarse con un editor y una fuente especiales, lo que permite escribir código casi como ecuaciones matemáticas, aunque también es posible sustituir los símbolos por caracteres ASCII, como en el ejemplo. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 |
|
Ada
Ada es un lenguaje orientado a objetos y concurrente diseñado por encargo del Departamente de Defensa de los EEUU, se utiliza principalmente en entornos que requiren mucha seguridad y fiabilidad. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Assembler (ensamblador)
El lenguaje ensamblador es el lenguaje más cercano a la máquina, sus códigos se traducen directamente a binario, lo que permite un control total sobre las operaciones dando la posibilidad de afinarlo para obtener el mejor rendimiento a costa de no tener ninguna capa de abstracción.
Una consecuencia lógica es que el código no es portable entre sistemas operativos ni distintas arquitecturas de procesador, el ejemplo se probó en Gnu/Linux en un x86, ensamblado con NASM. (por comodidad utiliza la librería de C para mostrar el resultado por pantalla) fibonacci_recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
Bash
Bash es realmente un lenguaje de intérprete de comandos, por ello no es un lenguaje prominente en la manipulación de datos, en cambio si el problema se puede resolver encadenando otros programas se convierte en una solución extremadamente potente.
Es importante tener en cuenta que Bash es el shell por defecto en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo UNIX. También se ha portado a Microsoft Windows por el proyecto Cygwin. (Wikipedia). fibonacci_recursivo
1 2 3 4 5 6 7 8 9 10 11 12 |
|
BASIC
BASIC es un lenguaje de progamación estructurado diseñado en los '60 como una herramienta de enseñanza para los principiantes. Fue una vez un lenguaje importante en la programación sobre Windows, pero últimamente está siendo desplazado poco a poco por C#.
El lenguaje sufrió una cierta fragmentación, el ejemplo esta probado con Yabasic. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 |
|
C
C es un lenguaje de programación que a diferencia del resto de los que se presentan aquí, considerados de alto nivel, se observa como de medio nivel ya que aunque presenta construcciones propias de lenguajes de alto nivel también permite ejercer un contro de bajo nivel.
Es uno de los lenguajes más utilizados en la programación de entornos Unix, y el lenguaje de facto en el desarrollo de sistemas operativos. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
C#
C# es un lenguaje orientado a objetos desarrollado por Microsoft para la plataforma .NET. Es un lenguaje en el que se puede observar la sintaxis de la familia C y el modelo fuertemente orientado a objetos de Java. Existe una implementación libre que permite ejecutar el código C# sobre distintos sistemas operativos, Mono. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Common Lisp
Common Lisp no es realmente un lenguaje de programación, sinó una especificación que estandariza el lenguaje Lisp, normalmente utilizado en la investigación de IA y el desarrollo rápido de aplicaciones.
Como anécdota sobre la potencia del debugger de Lisp se cuenta el caso de la sonda Deep Space 1 donde un programa en Lisp controlaba una secuencia de experimentos, y medio año después del lanzamiento, a 160 millones de Kilometros de la Tierra, un equipo fue capaz de diagnosticar y corregir sobre la marcha un escurridizo fallo que no había aparecido durante las pruebas en la tierra. Practical Common Lisp. fibonacci recursivo
1 2 3 4 5 6 7 8 |
|
Dart
Dart es un lenguaje de programación estructurado diseñado por Google como un lenguaje de programación web en el lado del cliente, como un intento de actualizar el panorama de la programación web en el cliente dominado por Javascript.
Es un lenguaje que aunque aún no ha sido implementado en ningún navegador (excepto quizá chrome), pero puede ser convertido a código Javascript. fibonacci_recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Erlang
Erlang es un lenguaje de programación concurrente desarrollado por Ericsson para realizar aplicaciones distribuidas, tolerantes a fallos, soft-real-time y de funcionamiento ininterrumpido. (Wikipedia).
Es un lenguaje funcional, un paradigma que pretende acercarse a la lógica formal a través de variables no mutables ('X' siempre tiene el mismo valor) y evitar funciones con efectos secundarios (que la llamada a una función tenga algun efecto en el programa mas que el valor que devuelve). fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Factor
Factor es un lenguaje de programación orientado a pila, esto es: para hacer una operación se introducen los datos en una pila global y después se llama a una función, por ejemplo para sumar dos números haríamos '10 20 +', añadiendo primero el 10 a la pila, después el 20 y a continuación llamando a la operación suma.
Aunque realmente es posible hacer operaciones con datos sin seguir ese esquema a través de llamadas a funciones o dentro de una misma función. fibonacci recursivohttps://gitlab.com/kenkeiras/language-catalog/blob/master/factor/fibonacci_recursivo.factor)
1 2 3 4 5 6 7 8 9 10 |
|
FORTRAN
Fortran es un lenguaje de programación que pone especial énfasis en el cálculo numérico, fue uno de los primeros lenguajes de programación que no se limitó a poner mnemónicos a instrucciones del procesador.
Fortran se utiliza en la programación de alto rendimiento y los test de rendimiento de los supercomputadores. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Genie
Genie es un lenguaje desarrollado por el proyecto GNOME como un dialecto más simple y limpio para el compilador de vala, manteniendo las funcionalidades de ese lenguaje.
Dado que Genie es fundamentalmente una representación alternativa del código vala, se pueden usar funciones, clases y demás de uno en el otro. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 |
|
Go
Desarrollado en Google, Go es un lenguaje de programación concurrente pensado para ofrecer la eficiencia de un lenguaje con tipado estático y la facilidad de programación de un lenguaje con tipado dinámico.
Curiosamente utiliza distintos nombres para el compilador y el enlazador según la arquitectura de la CPU. No confundir con el lenguaje Go!. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Haskell
Haskell es un lenguaje funcional puro. A pesar de que por su constitucion pueda parecer lo contrario es posible utilizarlo para, por ejemplo, programar gestores de ventanas, como Xmonad. fibonacci recursivo branching sintaxis
1 2 3 4 5 6 7 8 9 10 |
|
Java
Java es un lenguaje de programación fuertemente orientado a objetos desarrollado por Sun, hasta el punto de que todo en el programa es un objeto. Es un lenguaje que se utiliza para programación de teléfonos móviles, desde los clásicos con Java SE hasta smartphones Android. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Javascript
Javascript (que no tiene nada que ver con Java, de hecho se llamaba originalmente ECMAscript) es el lenguaje de programación web en lado de cliente, terrento en el que no tiene ningún competidos exceptuando el reciente Dart, que aún está en desarrollo. Además en 2009 comenzó el desarrollo de la ya madura plataforma node.js que permite utilizarlo en una arquitectura orientada a eventos muy práctica para la programación de servidores. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Logo
Logo es un lenguaje de programación diseñado como lenguaje de fácil aprendizaje, es especialmente conocido por que soporta de forma estándar los gráficos de tortuga, es decir, permite usar una "tortuga" a la que se le dan una serie de pasos a seguir (Avanza 10, Gira a la derecha, ...) y que deja un trazo como lo haría un lápiz, para hacer dibujos.
Hay varios intérpretes que permiten escribir las instrucciones en otros idiomas a parte del inglés, por ejemplo "Avanza" en vez de "Forward" o "Gira a la derecha" en vez de "Rotate right". fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 |
|
Lua
Lua es un lenguaje de scripting que por su sencillez se suele utilizar como lenguaje que interpretan los motores de programas grandes como juegos, escritos normalmente en lenguajes de más bajo nivel.
Además se puede utilizar para programar aplicaciones no oficiales en Wii y PSP, el gestor de ventanas AWESOME utiliza sus scripts como archivos de configuración y como lenguaje para extender juegos. (Lua uses). fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Objective C
Objective C es un lenguaje de programación orientado a objetos creado como una extension del lenguaje C.
Es el principal lenguaje de programación en Mac OS X e IPhone, pero también es posible utilizarlo en otras plataformas. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Ocaml
Ocaml es un lenguaje de la familia ML que permite los paradigmas de programación funcional, imperativa (se describen los pasos a realizar) y orientado a objetos. fibonacci recursivo
1 2 3 4 5 6 7 |
|
Octave
Octave es un programa y lenguaje de programación de alto nivel diseñado para realizar análisis numérico.
Se puede considerar la alternativa libre a MATLAB, con el que mantiene cierta compatibilidad. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 |
|
Pascal
Pascal es un lenguaje de programación estructurado diseñado con el objetivo de crear un lenguaje que facilitase el aprendizaje de la programación.
Hay un cierto número de dialectos bastante compatibles, el compilador utilizado en este ejemplo es FreePascal, pero debería funcionar sobre cualquiera que respete el estándar básico. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Perl
Perl es un lenguaje de scripting desarrollado para la manipulación de textos que provee de una gran flexibilidad. Cuenta con un repositorio de módulos central, CPAN que aloja código para programar compresores, servidores, web, interfaces gráficas, utilidades de red...
Es un lenguaje que ganó fama de ser poco legible precisamente por la libertad que da al programador pero en última instancia la claridad del código depende solo de quien lo escribe. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
PHP
PHP es un lenguaje de programación web del lado del servidor (aunque es posible utilizarlo en aplicaciones que no lo sean) siendo uno de los más utilizados, y normalmente el único lenguaje que suelen soportar los alojamientos web gratuitos.
Es un lenguaje especialmente diseñado para poder mezclarse con código HTML de forma cómoda. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Python/Python3
Python es un lenguaje de programación multiparadigma que puede ser usada como lenguaje de scripting, o para la programación web.
De python suele llamar la atención el hecho de los bloques del programa se
definen a través de la indentación (es decir, con espacios en blanco al
principio de la línea), al contrario que en otros que se delimitan con
simbolos '{
', '}
' o palabras clave 'begin', 'end', esto hay quien lo considera
un estorbo y hay quien piensa que es una buena forma de forzar a escribir
código legible.
La versión ultima versión, 3, añade unos cambios que no son compatibles hacia atrás.
fibonacci recursivo
py2
py3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
R
R es un entorno y un lenguaje de programación orientado a objetos pensado para el análisis estadístico.
Además el código en R puede ser invocado desde otros lenguajes como Perl y Python. fibonacci recursivo
1 2 3 4 5 6 7 8 9 |
|
Ruby
Ruby es un lenguaje de programación reflexivo y orientado a objetos. Es un lenguaje que ha tomado mucha fuerza en la comunidad de programación web gracias al framework Ruby On Rails. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Scala
Scala es un lenguaje de programación funcional orientado a objetos que funciona sobre la máquina virtual de java. fibonacci recursivo
1 2 3 4 5 6 7 |
|
Scheme
Scheme es un dialecto minimalista de Lisp.
El estándar de Scheme es realmente minimalista y específico en sí. Ello provoca que existan multitud de implementaciones diferentes, cada una de las cuales introduce extensiones y bibliotecas propias que las hace incompatibles entre sí. Los Scheme Requests for Implementation (SRFI) tratan de poner remedio a este problema. (Wikipedia). fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Tcl
Tcl es un lenguaje de scripting utilizado para el desarrollo de prototipos y de interfaces gráficas.
En su momento consiguió cierta popularidad gracias al plugin Expect que permitia automatizar tareas sobre herramientas como FTP, Telnet o SSH. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 |
|
Unicon
Unicon es un lenguaje de programación orientado a objetos de muy alto nivel descendiente de Icon, siendo ambos especiamente útiles para tratar con cadenas de texto. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Vala
Vala es un lenguaje orientado a objetos desarrollado por el proyecto GNOME como un lenguaje con las posibilidades de un lenguaje actual sin necesidad de librerías de runtime a mayores que las de C y con un coste adicional mínimo.
Vala se compila a código C, por ello es posible utilizar librerías y recursos escritos en este lenguaje. fibonacci recursivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Que aproveche ;)