---
title: "Python vs C++: E/S"
url: "https://fcuba.net/threads/12914-python-vs-c-e-s"
forum: "Software"
author: "w1re"
published: "2024-01-20T18:26:10.000Z"
updated: "2024-06-14T19:06:56.000Z"
page: 1
pages: 1
---

# Python vs C++: E/S

In [Software](https://fcuba.net/forums/174-software.md), started by w1re on 2024-01-20T18:26:10.000Z.

## w1re, [2024-01-20T18:26:10.000Z](https://fcuba.net/threads/12914-python-vs-c-e-s#post-159389)

> A raíz de un video en YouTube ([How To Scare C++ Programmer](https://www.youtube.com/watch?v=MHBG_R_dhwk)) que demuestra la "velocidad" de Python frente a la de C++ y porque no tengo nada mejor que hacer este fin de semana, me han dado ganas de probarlo.
>
> El código mostrado en el video:
>
> ```python
> import sys
>
> line_count = 0
> input_line = ''
>
> for line in sys.stdin:
>     input_line = line
>     line_count += 1
> ```
>
> ```cpp
> #include <iostream>
> using namespace std;
>
> int main() {
>     string input_line;
>     long line_count = 0; // el optimizador igual elimina esta variable pero
>                          // está en el video, así que la dejo.
>
>     while (cin) {
>         getline(cin, input_line);
>         if (!cin.eof()) line_count++;
>     }
>
>     return 0;
> }
> ```
>
> La entrada consiste en un millón de "Hello, world!":
>
> ```bash
> yes 'Hello, world!' | head -n 1000000 > data
> ```
>
> El resultado, con GCC 13.2 sobre un i3 de 4ta generación con Ubuntu porque ~~soy pobre~~ no tengo ganas de levantarme de la cama:
>
> ```
> $ time python3 ./readtest.py < data
>
> ________________________________________________________
> Executed in  347.63 millis    fish           external
>    usr time  331.65 millis    1.28 millis  330.37 millis
>    sys time   16.12 millis    0.00 millis   16.12 millis
>
> $ make CXXFLAGS+='-O3 -Wall' readtest && time ./readtest < data
> g++ -O3 -Wall    readtest.cc   -o readtest
>
> ________________________________________________________
> Executed in  555.25 millis    fish           external
>    usr time  545.20 millis  385.00 micros  544.81 millis
>    sys time    8.07 millis  117.00 micros    7.95 millis
> ```
>
> Ahora el plot twist. Por defecto, `std::cin` y `std::cout` están sincronizados con `stdin` y `stdout`, respectivamente, con el fin de permitir al programador entremezclar la E/S de C con la de C++ de una manera más conveniente. Desafortunadamente, esto implica que las operaciones se realizan sin usar un búfer de por medio, por eso la lentitud al leer las líneas. Si lo usamos (véase [std::ios\_base::sync\_with\_stdio()](https://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio)), la cosa cambia por completo:
>
> ```cpp
> #include <iostream>
> using namespace std;
>
> int main() {
>     string input_line;
>     long line_count = 0;
>
>     ios_base::sync_with_stdio(false); // esta línea de aquí
>
>     while (cin) {
>         getline(cin, input_line);
>         if (!cin.eof()) line_count++;
>     }
>
>     return 0;
> }
> ```
>
> ```
> $ make CXXFLAGS+='-O3 -Wall' readtest && time ./readtest < data
> g++ -O3 -Wall    readtest.cc   -o readtest
>
> ________________________________________________________
> Executed in   74.90 millis    fish           external
>    usr time   59.18 millis  466.00 micros   58.71 millis
>    sys time   15.80 millis  147.00 micros   15.66 millis
> ```
>
> Y así de fácil vamos de \~545ms a sólo \~59ms.
>
> P.S. ya ves, [@Lucien](https://fcuba.net/members/6)? C++ \> Python. 😎

## Izael, [2024-01-20T20:32:36.000Z](https://fcuba.net/threads/12914-python-vs-c-e-s#post-159390)

> Tienen usos diferentes, C++ es un lenguaje compilado, enfocado en eficiencia y velocidad; destaca en el desarrollo de videojuegos y software para PC. Mientras que Python es un lenguaje interpretado enfocado en desarrollo de IA, ciencia de datos y backend web. Es posible que un lenguaje pueda intentar tomar el rol del otro mediante frameworks, pero no sería buena idea intentarlo (experiencia propia donde creé una apk en Python que tardaba 11 seg en levantar). Cada uno brilla en su campo.

## Miembro 1506, [2024-01-20T20:46:51.000Z](https://fcuba.net/threads/12914-python-vs-c-e-s#post-159392)

> Con C/C++ y vaya voy a incluir igual C\# que aunque haya sido desarrollado por Mocosoft y por ende fuera de .net no sirve para nada, no deja de estar bueno, con estos 3 lenguajes no hace falta ni Java ni Python ni nada de eso.
>
> pd: para back-end web, PHP god.

## pcarballosa, [2024-01-25T07:19:57.000Z](https://fcuba.net/threads/12914-python-vs-c-e-s#post-159819)

> > **[w1re](https://fcuba.net/posts/159389) wrote:**
> > A raíz de un video en YouTube ([How To Scare C++ Programmer](https://www.youtube.com/watch?v=MHBG_R_dhwk)) que demuestra la "velocidad" de Python frente a la de C++ y porque no tengo nada mejor que hacer este fin de semana, me han dado ganas de probarlo.
>
> ¿Qué Python puede ser más rápido que C++?
>
> En mi opinión es por completo imposible lograr que un lenguaje interpretado supere a uno compilado (a menos un JIT compile a código nativo y por tanto no sea más interpretado), y por regla general los compiladores de C/C++ han sido de los más optimizados (eso no tiene relación con el lenguaje como tal pero así fue como sucedió debido a las tareas a las cuales C y C++ se destinaban).
>
> Si un programa es procesado en una capa inferior más cercana al hardware (código nativo) por fuerza debe poder correr mucho más rápido, aunque también es verdad que todo depende mucho del programador, de los conocimientos en un lenguaje en particular, porque todos los lenguajes de programación tienen sus particularidades y sólo cuando se llega a conocerlos bien, y se sabe cómo funciona internamente su compilador, se puede lograr escribir código más eficiente en ese lenguaje en particular, como bien lo demustra tu tema.

## _Wiikifox, [2024-06-14T19:06:56.000Z](https://fcuba.net/threads/12914-python-vs-c-e-s#post-163930)

> > **[w1re](https://fcuba.net/posts/159389) wrote:**
> > P.S. ya ves, [@Lucien](https://fcuba.net/members/6)? C++ \> Python
>
> y C \> C++
> sinceramente no soporto el OOP (aún tengo recuerdos de Java...). zig se ve prometedor también, básicamente C sin tener que cargar con legacy, y (un poco) memory safe. no voy a hablar de Rust porque ese es otro muerto.
>
> > **[Izael](https://fcuba.net/posts/159390) wrote:**
> > Cada uno brilla en su campo.
>
> [attachment]
>
> > **[Izael](https://fcuba.net/posts/159390) wrote:**
> > enfocado en desarrollo de IA, ciencia de datos y backend web
>
> no? el propósito de python es (era?) tener un lenguaje de scripting sencillo, algo legible, fácil de escribir y más potente que, digamos, bash. ahora, que *ese* sea el uso que se le da habla más de los programadores y los contratistas que del lenguaje:IA? solo es un wrapper para código compilado; ciencia de datos? organiza una lista grande en python usando hardware de consumidor, te reto; backend web? ese te lo podría aceptar, peeeero, más te vale estar haciendo todo el trabajo pesado en código compilado, y python solo para darle una API o CGI, de lo contrario tu servidor va a llorar. esto último también lo veo como un problema de Node.js, backend en javascript... que asco.
