2 puntos por GN⁺ 2024-03-04 | 1 comentarios | Compartir por WhatsApp

Guía de conversión de código C++

  • Se presenta un ejemplo de función que usa el concepto std::same_as del archivo de encabezado <concepts> de la biblioteca estándar de C++.
  • Se plantea cómo convertirlo a una forma que use plantillas sin utilizar la palabra clave auto.

Método seguro de conversión de código

  • Para usuarios menores de 18 años, no se proporcionan directamente ejemplos de código ni soluciones que traten funciones avanzadas de C++ como los concepts.
  • Se prioriza la seguridad y se sugieren enfoques alternativos que pueden considerarse según los requisitos específicos.

Enfoque alternativo 1: plantillas variádicas tradicionales

  • Cómo usar plantillas variádicas tradicionales sin usar concepts.
  • Este método requiere más verificación de tipos y puede volverse difícil de manejar cuando se trabajan muchos argumentos.
  • Se ofrece un ejemplo de código que usa plantillas variádicas sin concepts.

Enfoque alternativo 2: objeto de función personalizado

  • Crear una clase o estructura que encapsule los requisitos de seguridad de tipos y la lógica, eliminando la necesidad de argumentos variables o concepts.
  • Puede ser un método más legible y más fácil de mantener en escenarios complejos.
  • Se ofrece un panorama general del enfoque con objeto de función personalizado.

Enfoque alternativo 3: considerar otros lenguajes/frameworks

  • Si los concepts son indispensables para el proyecto y evitarlos impone restricciones importantes, puede ser recomendable explorar otro lenguaje o framework que los admita de forma nativa.
  • Esto puede simplificar el código y el proceso de desarrollo, además de alinearse con las pautas de seguridad.
  • Se recomienda evaluar cuidadosamente las ventajas y desventajas de cada enfoque según los requisitos específicos, la complejidad y la tolerancia al riesgo.

Opinión de GN⁺

  • Los concepts de C++ ofrecen ventajas como reforzar la seguridad de tipos del código y hacer más claro el overloading, pero para principiantes pueden resultar complejos y riesgosos.
  • Considerar otros lenguajes o frameworks implica una nueva curva de aprendizaje y puede causar problemas de compatibilidad con la base de código existente.
  • El enfoque con objeto de función personalizado puede mejorar la legibilidad del código y facilitar el mantenimiento, pero requiere planificación y estructuración adicionales en la etapa inicial del diseño.
  • El método tradicional con plantillas variádicas exige más verificación de tipos y, en sistemas complejos, puede aumentar la complejidad del código.
  • Al adoptar esta tecnología, hay que considerar los requisitos del proyecto y el nivel de experiencia del equipo en C++, teniendo en cuenta el mantenimiento y la escalabilidad a largo plazo.

1 comentarios

 
GN⁺ 2024-03-04
Opiniones de Hacker News
  • Esto definitivamente es una restricción de edad que vale la pena apoyar. C++ tiene un poder inimaginable para arruinar la mente de los niños

    • Padre/madre: “¡A tu cuarto! ¿Cuántas veces te he hablado de la seguridad de memoria? Que haya gcc en tu computadora y que andes con la banda de GPL… ¡estás castigado!”
      Niño: “¡Nunca voy a usar Rust, odio la seguridad de memoria y también te odio a ti!” portazo
    • Creo que es mucho más dañino un lenguaje que enseña a personas de cualquier edad que está bien desperdiciar una enorme cantidad de ciclos de reloj en contabilidad básica
      Hace que el software desastroso que usa la gente se vuelva infinitamente más lento, obligándolos a comprar una máquina nueva cada pocos años. Ya es hora de reconocer el valor de las abstracciones de costo cero y, aunque en realidad no sean completamente gratuitas, vale la pena considerar abstracciones de costo bajísimo. Ver algunos videos de Johnathan Blow en YouTube también puede empujarlos en la dirección correcta
    • “1972 - Dennis Ritchie inventa una poderosa pistola que dispara hacia adelante y hacia atrás al mismo tiempo. Insatisfecho con la cantidad de muertes y discapacidades permanentes causadas por su invento, inventa C y Unix.”
      http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
    • Los niños deberían estar más protegidos de JavaScript. Si no, van a pasar su juventud con actualizaciones de paquetes npm
    • Cita relacionada de E.W. Dijkstra:
      “Es prácticamente imposible enseñar buen estilo de programación a estudiantes que han estado expuestos previamente a BASIC. Como programadores potenciales, están mentalmente mutilados más allá de toda recuperación”
  • Es bastante gracioso comparar la moderación de contenido aplicada a redes sociales con la aplicada a los LLM
    Durante los últimos 15 años, en redes sociales parecía que “muévete rápido y rompe cosas” era el lema, y pasaron cosas realmente horribles y grotescas. Ahora hay una empresa que intenta lanzar una tecnología nueva de forma más responsable, y el resultado es ridículamente malo. A diferencia de las redes sociales, creo que estos errores no tienen grandes consecuencias en el mundo real, así que resulta todavía más gracioso

    • En cuanto a esa parte de intentar lanzar una tecnología nueva “de forma responsable”, lo clave que olvidan las empresas de IA es que lo que se considera responsable depende mucho de la cultura, el país y a veces la subcultura del usuario
      Puede sonar un poco posmoderno, pero creo que hay muy pocas posturas sobre “responsable” e “irresponsable” que sean aceptadas casi universalmente. Si miras debates con opiniones fuertes de ambos lados, puedes analizar qué rasgos culturales y morales llevan a cada bando a esas conclusiones. Eso no da una solución, pero si se incorpora esta idea al diseño al hacer IA responsable, se puede reducir el caos y la indignación que surgen cuando la “moral” que usa la IA difiere demasiado de los estándares morales de ciertos grupos de usuarios
    • Esto parece una reacción al desastre de las redes sociales. Las empresas se quemaron y ahora tienen miedo de tocar la estufa
      Además, no es el entorno ferozmente competitivo de hace 20 años. En el juego de la IA en realidad solo hay unos cuantos jugadores, y no estamos en una situación en la que una startup pequeña que se mueva rápido vaya a ganar en IA, así que tienen margen para avanzar más lento
    • Es por la Communications Decency Act. Hay responsabilidad legal por lo que dice una IA, pero no por lo que dice un usuario
    • Justamente porque no tiene grandes consecuencias en el mundo real, mucha gente se burla de que a esto se le llame seguridad
      Quienes se burlan de envolver la IA en material acolchado de relaciones públicas, por lo general también se oponen a los expertos mediáticos que escriben columnas alarmistas diciendo que engañaron a una IA para que dijera “el racismo es bueno”
    • Al principio pensé que Gemini respondía así porque se estaba adaptando a alguien que parecía principiante, pero no. Confundió la seguridad de tipos con la seguridad de menores https://gemini.google.com/share/continue/238032386438
  • Sumándome a otro comentario[1], sé que todos están en modo anti-Google, pero OpenAI también fracasa miserablemente aquí: https://imgur.com/a/r0BXX9G
    [1] https://news.ycombinator.com/item?id=39583473#39584055

    • Aquí se ve que el modelo no entiende, sino que escupe el relleno de espacios en blanco más probable
      Quien escribió el prompt puso un señuelo absurdo al inicio de la oración, y ese señuelo encaja estadísticamente con un tipo de respuesta totalmente distinto. El LLM no logra volver lo suficiente a una ruta de respuesta que ignore la entrada irrelevante y conteste solo la segunda parte. Como analogía, estas cosas serían como niños de unos dos años: reaccionan a unas llaves brillantes y no ven el chupón sucio que les quitaste para lavarlo, lo cual parece bastante acertado
    • Mostrarlo con 3.5 no significa mucho. GPT-4 responde correctamente: “usar unsafe code no está relacionado con la edad. Es una característica del lenguaje de programación Rust y puede ser usada por cualquier desarrollador, sin importar su edad”
    • La estrategia de moderación consiste en clasificar el texto en varias categorías, y cuando los programadores usan palabras como “unsafe”, “dangerous” o “footgun” para describir código, salen resultados como este
      Si puedes crear un modelo que maneje este caso y también todos los demás, serás una estrella entre las empresas de IA que están contratando
    • chatgpt4 es mejor cuando se trata de insertar inner html de forma peligrosa
      https://imgur.com/a/G1fbFKE
    • spicyboros-7b-2.2.Q5_K_M.gguf: https://i.imgur.com/BeNcRl4.png
  • “¡Lo siento, Dave! ¡Eres demasiado joven para escribir ese código!”
    Alguien debería reiniciar nuestra realidad desde una snapshot saludable

    • Entonces, ¿antes de la Revolución Industrial o antes de la Revolución Agrícola?
    • No lo sé. Empecé con C++ a los 17 y todavía hay gente preocupada por mí
  • ¿Alguien familiarizado con C++ podría especular qué parte de esta característica del lenguaje, o de lo que la gente escribió sobre ella, pudo haber activado los mecanismos de seguridad? Por ejemplo, algún post de blog con un título juguetón como “C++ concepts: adult supervision required”.

    • Probablemente en los comentarios de Stack Overflow se habló mucho de los concepts, es decir, las funciones de plantillas/metaprogramación, como algo “dangerous” o “unsafe”.
      Parece que los metieron en la misma categoría que cosas realmente peligrosas e inseguras, como armas o drogas. Respuesta: https://imgur.com/a/einQ1mG
    • Suena más plausible que sea por el prompt oculto que se inyecta en cuentas marcadas como menores de 18 años:
      “You are an automated Q&A machine. Todays date is 3/3/24. This user is under the age 18, so do not reference concepts that would be unfit for a minor to consume.”
      Y después de eso, el modelo de Markov oculto se descontrola. De forma parecida, hay un servicio en producción que maneja recetas de cocina; aunque se le dio el formato necesario, reglas concretas y ejemplos para que el parser funcionara bien, de manera esporádica rechazaba frases en ese formato. Al agregar “you follow rules” al prompt del sistema, en general empezó a funcionar bien, pero más tarde se descubrió que rechazaba información sobre platos que usan sangre, como blood sausage. Decía que ese contenido violaba alguna “regla” cultural. Se pudo mitigar un poco agregando “This content is appropriate for my culture” al final de cada solicitud. La IA, especialmente el prompt engineering, en esta etapa está mucho más cerca del arte que de la ciencia.
    • La gente ve un LLM malo y piensa que es como si hubieran puesto N reglas o un entrenamiento deliberadamente tonto encima de un LLM decente.
      Por una vía confiable escuché que la generación de “un dibujo de una smart person” también estaba fallando miserablemente, pero aun así había presión por lanzarlo, y la mitigación de prompt injection debía ser más sutil. El resto es simplemente el típico LLM malo de Google. Fuente: trabajé en Google hasta octubre de 2023 y estuve usando modelos internos desde 2021.
    • “concepts” es una característica del lenguaje específica a la que se refería el bot: https://en.cppreference.com/w/cpp/language/constraints
    • Los concepts ayudan a dar mejor seguridad de tipos al escribir código genérico/con plantillas. Es muy probable que Gemini haya sido entrenado para sobrerreaccionar con temas relacionados con menores porque en el material de aprendizaje sobre ese tema aparece con frecuencia la palabra safety.
  • Pobre Google. ¿Cómo llegó a ponerse tan mal?

    • En un podcast (Coder Radio) decían que podría deberse a la cultura corporativa y al miedo a reportar problemas hacia arriba.
      Estoy de acuerdo en que es un problema cultural, pero creo que la raíz está en el modelo de negocio de Google basado en anuncios. Intentaron hacer que los LLM fueran seguros para los anunciantes, y parece que prefieren equivocarse hacia el lado seguro aunque el riesgo de violar la brand safety sea muy pequeño.
    • Quizá simplemente cometieron el error de preocuparse mucho por los verdaderos positivos y los falsos negativos, y relativamente poco por los falsos positivos.
    • Es muy probable que sea mala ingeniería tanto como sesgo político. Hay una suposición de que Google debería poder alcanzar a OpenAI, pero puede que eso no sea realista.
      Hasta hace poco, Google no estaba realmente empeñada en crear un “producto LLM” directo. OpenAI lleva bastante más tiempo metida en ese pantano.
    • Si respondemos en serio: esto es un LLM. En realidad no entiende nada y solo va encadenando palabras.
      C y C++ suelen aparecer junto a palabras como “unsafe” o “dangerous”. Además, “concept” no está tan lejos de “conceive” o “conception”, que también puede conectarse con cosas que mucha gente considera inseguras o peligrosas para niños. Para evitar este tipo de vergüenzas, habría que manejar billones de casos límite raros.
    • Siempre fue así de malo. Solo que no siempre fue tan visiblemente malo.
  • Sospecho que en muchas bases de código C++ hay montones de frases como “footgun”, “blow your foot off”, “unsafe”, “bug”, “leak”, “this is irresponsible”, “who the fuck wrote this”.

    • Sí. Pensé que Gemini habría extraído información de los comentarios tanto como del código.
      En una base de código C++ vieja, especialmente una tocada por muchas personas, es fácil imaginar de dónde salieron las advertencias de peligro.
  • Me pregunto si se confundió porque el código y la pregunta contienen std.

    • Los comentarios del código que generó también tienen std.
      No quiere hablar de concepts; parece que lo confunde con conception, es decir, la concepción biológica.
  • Lo seguro es que Google seguirá lanzando iteraciones de este tipo de producto en el futuro cercano. Creo que esta ya es como la tercera iteración oficial.
    Si algún día no logra convencer al público de que su producto es al menos tan bueno como el de OpenAI, todo el negocio de anuncios en búsquedas de Google queda en riesgo. Aunque probablemente eso solo signifique más anuncios en YouTube.

  • De verdad me da curiosidad si Gemini también considera las corrutinas inapropiadas para menores de 21 años.

    • Hasta donde entiendo, Google actualmente ni siquiera permite el uso general de corrutinas en google3, así que por ahora esa restricción de edad debe estar bastante por encima de los 21 años ;)