Hace 1 año | Por borer a theregister.com
Publicado hace 1 año por borer a theregister.com

Científicos informáticos del MIT y sus colegas creen que han encontrado una manera de tenerlo todo: la accesibilidad de un lenguaje de alto nivel con la velocidad de un lenguaje de bajo nivel. Han desarrollado un compilador de Python llamado Codon que convierte el código de Python en código de máquina nativo sin afectar el rendimiento del tiempo de ejecución. En lugar de necesitar... reescribir totalmente en un lenguaje como C, Codon puede usar la misma implementación de Python y brindar el mismo rendimiento que obtendrá al reescribir en C.

Comentarios

eltoloco

Python es igual de alto nivel que C.

No hay “niveles” de lenguajes de programación, hay bajo nivel que es lenguaje máquina y ensamblador, es decir, usar directamente las instrucciones de la CPU y direcciones de memoria, y después hay alto nivel que son todos los demás, sin diferenciación entre ellos, por mucho que algunos te permitan reservar y liberar memoria manualmente o incluso acceder a direcciones relativas, eso no hace que dejen de ser de alto nivel o que sean “de más bajo nivel”.

La diferencia de rendimiento entre Python y C es que el primero es interpretado y el segundo compilado. Si traduces el primero a C, obviamente tendrá mejor rendimiento.

pkreuzt

#5 Claro que hay niveles, a ver si me vas a comparar a un programador de C con uno de esos cartoneros del javascript o del php

eltoloco

#c-6" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3790430/order/6">#6 como broma está bien, pero intenta programar un marketplace como Amazon (Java) o una red social como Facebook (PHP) con C y me lo cuentas.

La web sin Javascript no sería ni la sombra de lo que es actualmente, pues es el único lenguaje que entiende un navegador. Y en lado de backend más de lo mismo, PHP (Symfony), Python (Django), Java (Spring), JS (Node) y C# (.NET) dominan la mayoría de las aplicaciones web. C no existe porque no está pensado para ello.

mecha

#8 En una aplicación web el tiempo de respuesta viene dado mayormente por conexión a una API o base de datos (tema de redes aparte). El lenguaje de programación es casi indiferente porque las webs apenas requieren capacidad de proceso.

eltoloco

#19 nada más lejos de la realidad. El rendimiento es súper importante en cualquier web, como en cualquier otro tipo de aplicación. Y en los servidores hay infinidad de procesos que requieren muchísima capacidad de cálculo, por lo que la optimización lo es todo.

Creo que problema es que estás pensando en una web estática o con contenido dinámico “simple”, de hacer una query y devolver datos, y te olvidas mil diferentes procesos que requieren potencia de cálculo, como puede ser gestionar ficheros de datos de miles de lineas, imágenes, sonido, vídeo, etc. Netflix, Spotify, Instagram o Dropbox son también aplicaciones web. Pero es que incluso aunque se trate solo de texto, el rendimiento es súper importante, por ejemplo imagina la cantidad de datos que gestiona Reddit.

Por ello las grandes empresas gastan millonadas en optimizar todos los procesos, por ejemplo Google y Netflix invierten muchísimo en algoritmos de compresión, o Facebook diseñó su propia VM (HHVM) para mejorar el rendimiento de PHP. Si consigues una mejor del 20% de rendimiento, reduces en el mismo porcentaje tus gastos en hardware y energía.

El problema es que C no está pensado para gestionar peticiones HTTP, es decir, para web, en cambio todos frameworks que he mencionado antes (Symfony, Django, Sprint, etc) están hechos expresamente para este propósito. Además de que la curva de aprendizaje de C es mucho mayor, por lo que es más difícil encontrar programadores cualificados y es mucho más fácil generar bugs y agujeros de seguridad. Si la gestión de memoria es automática no te tienes que preocupar de eso, a costa de una penalización en el rendimiento. También este es el motivo del auge de Rust, que es compilado pero con gestión de memoria segura.

UnoYDos

#19 Como se nota que no te han hecho mediciones de tus procesos en la vida. En un sitio serio tienes que cumplir especificaciones de todo tipo, incluído tiempo máximo de ejecución. Hacer una web seria para una empresa seria, no es lo mismo que hacerle la web con wordpress a la pescadería Paco. Hay muchos tipos de aplicaciones webs, no todo son catálogos. Como bien te indica #21

Un ejemplo clásico es el tratamiento de ficheros de forma masiva, ya que por ejemplo muchos clientes siguen con sus softwares del año la pera y tu tienes que darles compatibilidad con tus procesos.

mecha

#21 por supuesto que hay aplicaciones en las que el rendimiento es importante. Y las hay a cientos. Pero por cada una en la que el rendimiento es importante hay mil en las que no lo es.

E incluso en las que el rendimiento es importante, solo es importante en algunos procesos concretos. La mayoría del tiempo el acceso a los datos es lo más problemático. Como comentas, facebook por mucho que hiciera tal y cual, no deja de ser php + mysql. Y potencia tiene como empresa para usar C++ por ejemplo si quisiera.

CC: #24

eltoloco

#27 además de ser mentira, decir que “facebook no deja de ser php + mysql” es una simplificación totalmente absurda, se nota que no has trabajado en ninguna empresa mínimamente seria con un producto potente.

Facebook tiene más de 1.000 millones de usuarios registrados, con un sistema básico de php+mysql sería simplemente imposible que funcione. Vamos, es que ni con 1 millón de usuarios aguantas con eso. PHP+Mysql sirve para el blog de Menganito y poco más.

En cuanto al lenguaje de programación, en Facebook empezaron con PHP y en nada se les quedó pequeño, y sacaron su propia VM con mayor rendimiento, que es HHVM. Después incluso eso se les quedó pequeño y sacaron Hack, que es un lenguaje propio que corre sobre HHVM. Y no es la única, por ejemplo Amazon tiene su propia VM de Java optimizada para sus requisitos y servidores.

Después no se de donde sacas que usan MySQL, no hay información en ningún sitio sobre esto. Es probable que en sus inicios lo usasen, pero de nuevo se les quedó corto. La gestión de datos de Facebook, como la de cualquier web mínimamente grande, tiene muchas capas, desde el motor de base de datos que de nuevo tienen uno a medida (RocksDB) hasta la cache en memoria (Memcached).

a

#8 Supongo que habrás oido hablar de webassembly

https://developer.mozilla.org/en-US/docs/WebAssembly

eltoloco

#23 cierto, pero al final esto tiene usos muy específicos y concretos. También en su día estaba flash y los applets de Java que se ejecutaban en el navegador. También hoy en día se programa en TypeScript, pero luego se traduce a JS que es lo que recibe el navegador. Al final del día la programación en cliente es Javascript en el 99.9% de los casos.

b

#6 los códigos en Python o JavaScript profesionales deben estar optimizados o sería infumable

D

#5 ¡Hala!

D

#5 Dices chorradas.
Estudia más.
Vas a equipatar C compilado con PHP por ejemplo. Madre mía.

eltoloco

#17 frena, que las chorradas dices tú, confundiendo un lenguaje de alto o bajo nivel con el rendimiento y si es compilado o interpretado.

Soy ingeniero con mención en computación, lo cual implica estudiar compiladores 1 y 2 y programar un compilador como práctica final. Por lo que te puedes imaginar que conozco perfectamente como funciona un lenguaje de programación desde el análisis sintáctico hasta la traducción a binario pasando por las optimizaciones.

Como ya he dicho, la diferencia de rendimiento entre C y Python o PHP es porque el primero es compilado y los segundos son interpretados, punto.

Todos los lenguajes son de alto nivel, excepto lenguaje máquina y ensamblador. No hay más que eso. Estudia y aprende.

#18 Está muy bien tener conocimiento, pero deberías probar también a cultivar otras habilidades, como la prudencia y la empatía. Es fácil comprender la diferencia entre lenguajes interpretados y compilados no hace falta ser ingeniero con mención en computación, ni haber estudiado a fondo los compiladores.
También podríamos argumentar que la diferencia de rendimiento está en la calidad del compilador y no en el hecho de que sea interpretado o compilado. No existen lenguajes intepretados, todos son compilados. Lo que difiere es el momento de la compilación y la calidad del código generado.

a

#5 Yo veo mucha diferencia entre los lenguajes procedurales y los funcionales, especialmente en el nivel de abstracción que es posible implementar.

eltoloco

#22 los paradigmas de programación es otro tipo de categorización de los lenguajes de programación, nada tiene que ver con el nivel de abstracción del hardware.

Todos los lenguajes de programación son de alto nivel excepto binario o máquina y ensamblador, que es lo mismo pero con reglas nemotécnicas. Esa es la definición académica.

https://en.wikipedia.org/wiki/Low-level_programming_language

“this refers to either machine code or assembly language”

https://es.wikipedia.org/wiki/Lenguaje_de_bajo_nivel

El problema es que en los medios sobre tecnología estilo Xataka le dejan escribir a cualquiera, y haciendo alarde de la ignorancia escriben cualquier tontería y confunden a la gente. Con este tema se ha llegado a un nivel tal de confusión que incluso gente con estudios de informática confunde algo tan sencillo.

b

#4 cython es hacer llamadas a c desde Python. Cpython es la implementación oficial de Python en C. La ventaja ahora es no tener que usar C para nada

D

#7 no, cython sirve para escribir código compilado. Es python con alguna pequeña modificación que permite tipos estáticos de c

O

Genial, ya solo falta que evolucionen Python hasta que su sintaxis sea la misma que C++

D

#11 Chicken Scheme >>>> C++

oraculus_reloaded

Genial, ya sólo le falta un entorno de desarrollo con diseño visual del GUI.

C

Python es el rey de "usa librerías escritas en otros lenguajes". Luego no es súper impactante está noticia, si la velocidad de una aplicación en "Python" recae muy mayoritariamente es en la velocidad de las librerías usadas.

D

Cual es la diferencia con un compilador ya existente como cython?

pkreuzt

#2 CPython no es lo mismo que Cython.

D

#2 y cuál es la diferencia real, de dónde sale esa diferencia de rendimiento?

a

¿qué diferencia hay con Julia?

https://julialang.org/

D

Prefiero Chicken scheme 5 con Hypergiant para pinitos 3D.