222 meneos
3137 clics
![Finalizada la especificación de C++14 [ENG]](cache/22/27/media_thumb-link-2238268.jpeg?1417830912)
Finalizada la especificación de C++14 [ENG]
La especificación de C++14 ha sido aprobada y será enviada a la Organización Internacional de Normalización (ISO) para su publicación. Bjarne Stroustrup, creador de C++, ha dicho que “C++14 fue entregado a tiempo y las implementaciones ya están siendo desplegadas por los principales proveedores. ¡Esto es excepcional! Es una bendición para la gente que desea utilizar C++ como un lenguaje moderno”.
|
comentarios cerrados
Bueno... si él lo dice será verdad.
'C' + '+' * 14
Lamento no poder contestarte adecuadamente.
#9 No me toques el for...
La noticia puede estar en lo que aporte una versión de lo que sea, que sea realmente novedoso o importante, pero sacar en portada simplemente que un lenguaje o un SO tiene una nueva versión... yo eso no lo entiendo.
#10 No recuerdo quien decia por ahi, que C++ sería un buen lenguaje si le quitas la C. No podría estar mas de acuerdo, pero claro, la retrocompatibilidad es la retrocompatibilidad.
#9 a que te refieres? En C++11 ya puedes usar bucles tipo java para recorrer contenedores. Como for_each, pero sin rangos, vaya.
#25 No hasta que Stroustrup se muera, probablemente.
De todas formas C++14 es una actualización "menor". Los verdaderos cambios vinieron con C++11, solo falta que la gente lo use como debe y deje de programar en C con clases. A mi personalmente es una lenguaje que me tiene enamorado, pero le pasa como al comunismo, debido a razones historicas aun suscita muchos odios
for(int x=2;x<20;x+=2)
Esto no tiene perdón de dios. Hasta el puto Basic se entiende mejor: for x = 2 to 20 step 2
Lo que no tenia perdón eran los chorizos que tenias que poner para recorrer un contenedor, ahora en cambio:
for(int element : vector);
for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++) { op(*it); }
(Aunque como te dice #26 esto ahora se puede hacer de una forma más bonita: for(auto x : v) { op(x); } )
eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
After reviewing national body comments to n3690, this library component was voted out from C++14 working paper into a separate Technical Specification. This container is not a part of the draft C++14 as of n3797
en.cppreference.com/w/cpp/container/dynarray
std::for_each(v.begin(), v.end(), std::bind(&decltype(*this)::op, this, std::placeholders::_1));
Está usted haciendo deberes de más
De hecho ¿no sería más versátil for(auto x : v) {op(x);} ?
Vale en cualquier contexto donde exista un v de cualquier clase con un begin() y end()1 que devuelvan algo que defina operator++, operator== y un operator* que devuelva cualquier cosa, y esté definida la función op que acepte lo que devuelva operator*. op podría ser un miembro de la clase actual (si aplica) o una función definida globalmente.
1 EDIT: de hecho, aunque no estoy 100% seguro, también valdría si existen begin(decltype(v)) y end(decltype(v)), aunque nunca me he visto en esa situación, pero lo deduzco de los mensajes de error al compilar.
'C%s' % ('+' * 11)
"It’s not even consistent: NULL < -1, and NULL == 0. Sorting is thus nondeterministic; it depends on the order in which the sort algorithm happens to compare elements." ¿Que? La ordenación utilizará un solo operador que permita obtener un conjunto ordenado, en ese ejemplo "<". Para que la ordenación sea indeterminista, $a < $b debería dar cierto unas veces y falso otras sin cambiar sus valores ¿Qué algoritmos de ordenado utiliza este señor?
"@fopen('http://example.com/not-existing-file', 'r');"
"If PHP was compiled with --disable-url-fopen-wrapper, it won’t work. (Docs don’t say what “won’t work” means; returns null, throws exception?) Note that this flag was removed in PHP 5.2.5."
La documentación dice:
"Return Values: Returns a file pointer resource on success, or FALSE on error."
"Errors/Exceptions: If the open fails, an error of level E_WARNING is generated. You may use @ to suppress this warning."
O lo han corregido y no ponía eso o es bastante claro "FALSE on error".
Y luego se queja de que, según la configuración del servidor, se registra o no el error, y se muestra o no... no se que espera de un lenguaje destinado a interpretarse durante un renderizado ajeno...
"In C, functions like strpos return -1 if the item isn’t found. If you don’t check for that case and try to use that as an index, you’ll hit junk memory and your program will blow up. (Probably. It’s C. Who the fuck knows. I’m sure there are tools for this, at least.)"
Mentira gorda, hay varios casos:
-si es una variable de llamada, en el stack, solo cascará si resulta ser el array que está guardado el primero (según el compilador las ordene) de esa llamada, y dependiendo del stack según el tipo de sistema, puede que sea aún peor, modificando los valores de retorno y pasando, literalmente, cualquier cosa (es C, es su magia
¿Y esto a que venía? A que si no usa el comparador adecuado en PHP con strpos(), puede convertir el FALSE que devuelve si la búsqueda no encuentra nada en un 0 que sería si se encuentra la cadena en el primer carácter... pues mira, si te quejas de eso, no pongas a C como ejemplo ¡Joder! Por lo menos en PHP no corre riesgo tu sistema operativo y tus archivos si la lías como programador en la comparación.
En fin, que puede que diga cosas con mucho sentido, pero de las que he leído, la mitad me han parecido chorradas o problemas de comprensión por su parte (sort es indeterminista porque dos operadores de comparación no cumplen las condiciones algebraicas que a mi me de la gana), y la otra mitad son rebuscadas y no me apetece comprobarlas una a una.
A mi esta noticia no me parece relevante.
Con esto lo que te quiero decir es que te puede gustar php, C, C++, Java, C#, python, object pascal,... pero no hay que defenderlos a muerte, cada uno tiene sus más y sus menos, y a cada persona le puede gustar uno diferente. Lo jodido es dar con fanboys del tipo "Java es el mejor y C# es una puta mierda" o "C# es el mejor y java una puta mierda". También es importante saber para qué se usa cada uno, ¿te gustaría que la web de tu banco estuviese hecha en php?
Lo de C++14, me alegra que se siga evolucionando, al fin y al cabo es un lenguaje que seguirá vivo para sistemas de tiempo real o drivers, y que le hagan un lavado de cara siempre viene bien.
for(;(i < j*10*sqrt(z)) && funcionPropia(z); j-= z*10, z--){ }
¿Como se pasa eso al for de Basic?
A mi el for de C también me costó asimilarlo y no me gusta mucho, pero bueno, hay que reconocer que es así por un motivo y que ese motivo es coherente con los objetivos del lenguaje.
Si NULL < -1 y NULL==0 entonces un algoritmo puede "suponer" que 0 < -1 por transitividad. Si lo miras desde otra perspectiva, no tiene sentido que si a < b y b < c entonces al comparar a y b tengas algo como c < a
Así que al ordenar "algo" puedes tener cosas como:
Está ordenado: -1, NULL, 0
Está ordenado: NULL,-1, 0
Ahí quizás el problema parece irrelevante, pero si tienes más elementos podría pasar algo así:
Esta ordenado: -5 -3 -1, 0, 0, NULL
Está ordenado: -2, -1, 0, NULL, -5, -3, 0.
Eso ocurre porque no se cumple la transitividad, así que algoritmos que hacen log(n) comparaciones pueden dar resultados indeterministas.
No te lo tomes a mal, pero eso pasa cuando se programa sin tener una base real de lo que se está haciendo.
Eso díselo a quien ha publicado un enlace echando pestes de un lenguaje y diciendo abiertamente que es un despropósito todo él ¿O te crees que yo estoy defendiendo a muerte algo? ¿He defendido yo a toda costa algo sobre otro algo?
Hay que joderse...
El problema es sencillo, se espera que el operador == se comporte de una forma, como no lo hace se inventa una circunstancia ad-hoc para criticar su comportamiento ¿Dice la documentación que == es transitivo? Entonces no lo uses si requieres un operador transitivo.
No veo forma en que un sort con el operador "<" de como salida "-2, -1, 0, NULL, -5, -3, 0". Solo necesitas un operando para un sort, no conozco, o ahora mismo no caigo, un algoritmo de sort que requiera dos comparadores. Si lo hay tendré que dar la razón, si no, no tiene sentido la crítica.
Ese supuesto sort que mencionáis que utiliza el igual y el menor, debe ser una auténtica joya, ya que es en principio menos eficiente que uno que solo use el menor, así que tiene que ser muy bueno para que compense y se utilice. Si lo hay me gustaría conocerlo.
Básicamente porque es una herramienta (recordemos que usar C++ es un medio para programar algo, no un fin en sí mismo) cuyo manual de instrucciones tiene miles de recovecos y casos extraños. La mejor forma de comprobarlo es hacer este sencillo test: cppquiz.org/quiz/start o ver presetentaciones como "The Last Thing D Needs" de Scott Meyers: www.ustream.tv/recorded/47947981.
Cierto es que uno puede desenvolverse bastante bien conociendo un subconjunto relativamente pequeño de las normas, eso sí.
Es como si me dices que no puedo utilizar una rueda para el coche, porque las ventanas no son redondas.
Empiezo a pensar que no conoces el funcionamiento de un algoritmo de ordenación...
No tiene ningún sentido que si tienes a < b, c = a luego puedas tener b > c eso es una putada enorme. Ahí vas a tener que el programador evite el problema, y encima hay mucha gente que no entiende ese problema (#68) ni aunque se lo expliques porque no tienen base para ello.
El problema de PHP es que las malas prácticas se hicieron al crear el lenguaje, no se trata de echar pestes sobre él, el problema es que realmente nunca fue un lenguaje. Nació como algo que quería conseguir cosas prácticas de forma fácil y a partir de ahí se extendió con el mismo propósito, sin buscar que fuera coherente, simplemente buscando que fuera práctico.
#61 Si solo fueran sistemas RT o drivers... La industria del videojuego se mueve en C++
#62 A mi me pones eso en un código y te dejo de hablar
Pero sí, desde luego para programación de alto rendimiento (que es la que me gusta a mi) C++ no tiene mucha competencia (quizás C, pero la OOP facilita mucho mantener el código si se usa bien).
Es normal, en un principio y desde fuera, pensar que en una comparación se utilizan varios operadores. Es uno de esos casos en los que la intuición nos engaña.
También es ridículo criticar un lenguaje por algo que ocurre en muchos otros (como ya dije y no quisiste leer, en varios lenguajes tienes el mismo problema con el operador "==").
"No tiene ningún sentido que si tienes a < b, c = a luego puedas tener b > c eso es una putada enorme."
No es una putada, es una característica algebraica del conjunto de valores y operadores que utilizas. Es muy cuadrado pensar que porque se represente con un "==" y sea similar al "=" de las matemáticas del cole tiene que comportarse exactamente igual. Solo tienes que conocer las definiciones de "<" y de "=". Insisto, PHP no es el primer lenguaje en el que pasa, no es un defecto particular de él.
#74 A mi me pones eso en un código y te dejo de hablar.
Yo también lo haría
Dale un saludo a tu novia de mi parte, Ella también sabrá que eres un cabezón
En serio, y sin acritud. Es que esperaba algún argumento por tu parte, o algún ejemplo que me hiciese replanteármelo.
Ya te lo dije, te falta base para entender lo que dije. Y hay mucho material en internet, si te interesa el tema investigalo. Si quieres ejemplos, ya te los dí, utiliza algoritmos de comparación distintos y mira que resultados salen.
Por poder, hasta puedes mirarte la implementación de ordenación que se usa en PHP (github.com/php/php-src/blob/master/Zend/zend_qsort.c) y nos dices cómo es indeterminista utilizando como comparador "<". Pero primero, mírate la definición de indeterminista.
Es decir, se dirigirte a la base que te falta, no simplemente limitarme a "te falta base", porque se realmente cuales son las carencias de tu razonamiento.
Y esto lo se por que hace unos años, antes de haber estudiado todo eso, podría estar dándote la razón.
PD: Todo esto, no te lo respondo por ti, ni por que me caigas especialmente bien o mal, es para otros lectores que puedan estar interesados y que duden al leer tus comentarios.
Ahí hay un enlace, en el primer párrafo de la noticia. Pero si no lo habías encontrado dudo que puedas ir más lejos tú solo.
'C%s' % ('+' * 11)
I'm very sorry. Supongo que tardaré en librarme de los vicios.
'C{}'.format('+'* 14)
Esta mola, pero es larga.
phpsadness.com/
www.phpwtf.org/
Tu comentario de la segunda frase es bastante despectivo, te tengo que votar negativo.
La gracia de los lenguajes imperativos
esera que el programador dice cómo se tienen que hacer las cosas. Luego llegamos al punto en que los lenguajes imperativos permiten aberraciones como permitir recorrer instancias de cosas que implementan tal o cual clase/interface, donde el programador acaba no teniendo ni puta idea de como se está haciendo ese recorrido. Y si, es cierto que en la mayoría de casos no hace falta saberlo, pero si lo que queréis es decirle al programa que haga algo, pasaros a lenguajes funcionales, los lenguajes imperativosestánestaban para que el programador explique todo pasito a pasito.Si no eres capaz de valorar la importancia de un avance, tampoco eres capaz para valorar su irrelevancia.
#21 Y Cobol, no te olvides de Cobol
Pero aquí no hay nada, la noticia es que sale una nueva versión de un lenguaje y por algún motivo que desconozco simplemente nos tenemos que creer que eso es muy importante, sin que en ningún sitio se mencione una sola ventaja para el común de los mortales.
Ah, calla, "A proposal to rename shared_mutex to shared_timed_mutex" DIOS QUÉ IMPORTANTE
Que no es tu caso.
Además, D todavía está en desarrollo. Además están en una fase de investigación bastante grande; el lenguaje es estable, pero de vez en cuando cambian algo importante (para mejor, habitualmente) que hace que sea bastante complicado de usar en entornos laborales.
Pero, lo dicho, es amor
Y luego llega 65, lo reafirma y se lleva positivos... uno tuyo por cierto. Pues no, la ordenación es determinista y no depende del orden inicial si el operador establece una relación de orden estricto, y el operador de orden no es "==" si no "<" o ">".
Como digo, PHP tendrá muchos defectos (encontrarás páginas similares sobre casi cualquier lenguaje), pero de lo que ha puesto ese tipo en concreto en ese enlace no se puede concluir gran cosa.
Por ejemplo, que "funciones" internas del lenguaje no estén definidas como funciones si me parece un gran defecto, pero corresponde a la implementación y diseño del intérprete más que al lenguaje en si.