2 pontos por GN⁺ 2024-03-04 | 1 comentários | Compartilhar no WhatsApp

Guia de conversão de código C++

  • Apresenta um exemplo de função que usa o conceito std::same_as do cabeçalho <concepts> da biblioteca padrão do C++.
  • Faz uma pergunta sobre como converter isso para uma abordagem com templates sem usar a palavra-chave auto.

Método seguro de conversão de código

  • Para usuários com menos de 18 anos, não são fornecidos exemplos de código ou soluções que tratem diretamente de conceitos (concepts), um recurso avançado de C++.
  • A segurança é priorizada, e são sugeridas abordagens alternativas que podem ser consideradas conforme os requisitos específicos.

Abordagem alternativa 1: templates variádicos tradicionais

  • Como usar templates variádicos tradicionais sem recorrer a conceitos.
  • Esse método exige mais verificações de tipo e pode se tornar difícil de administrar ao lidar com muitos argumentos.
  • Fornece um exemplo de código usando templates variádicos sem conceitos.

Abordagem alternativa 2: objeto de função personalizado

  • Elimina a necessidade de argumentos variádicos ou conceitos ao criar uma classe ou struct que encapsula os requisitos de segurança de tipo e a lógica.
  • É uma abordagem mais legível e mais fácil de manter em cenários complexos.
  • Fornece uma visão geral da abordagem com objeto de função personalizado.

Abordagem alternativa 3: considerar linguagens/frameworks alternativos

  • Se os conceitos forem essenciais para o projeto e evitá-los causar limitações significativas, pode ser melhor explorar outra linguagem ou framework que ofereça suporte nativo a conceitos.
  • Isso pode simplificar o código e o processo de desenvolvimento, além de estar de acordo com as diretrizes de segurança.
  • Recomenda avaliar cuidadosamente os prós e contras de cada abordagem com base nos requisitos específicos, na complexidade e na tolerância a risco.

Opinião do GN⁺

  • Os conceitos em C++ oferecem vantagens como reforçar a segurança de tipos do código e tornar a sobrecarga mais clara, mas podem ser complexos e arriscados para iniciantes.
  • Considerar linguagens ou frameworks alternativos exige uma nova curva de aprendizado e pode causar problemas de compatibilidade com a base de código existente.
  • A abordagem com objeto de função personalizado melhora a legibilidade do código e facilita a manutenção, mas exige planejamento e estruturação adicionais no início do design.
  • A abordagem tradicional com templates variádicos requer mais verificações de tipo e pode aumentar a complexidade do código em sistemas complexos.
  • Ao adotar essa tecnologia, é preciso considerar os requisitos do projeto e o nível de especialização da equipe em C++, tendo em mente a manutenção e a escalabilidade no longo prazo.

1 comentários

 
GN⁺ 2024-03-04
Opiniões do Hacker News
  • Isso é definitivamente uma restrição de idade que dá para apoiar. C++ tem um poder inimaginável de arruinar a mente das crianças

    • Pais: “Vá para o seu quarto! Quantas vezes eu já falei sobre segurança de memória? Encontrar gcc no seu computador e você andando com a turma da GPL… você está de castigo!”
      Criança: “Eu nunca vou usar Rust, odeio segurança de memória e odeio você!” porta batendo
    • Acho muito mais prejudicial uma linguagem que ensina pessoas de qualquer idade que não há problema em desperdiçar uma quantidade enorme de ciclos de clock com contabilidade básica
      Isso faz com que o software péssimo que as pessoas usam fique infinitamente mais lento, obrigando-as a comprar máquinas novas a cada poucos anos. Já está na hora de perceber o valor das abstrações sem custo; e, mesmo que na prática elas não sejam totalmente sem custo, abstrações de custo baixíssimo valem a pena considerar. Ver alguns vídeos do Johnathan Blow no YouTube também pode empurrar na direção certa
    • “1972 - Dennis Ritchie inventa uma arma poderosa que dispara para frente e para trás ao mesmo tempo. Insatisfeito com o número de mortes e incapacidades permanentes causadas por sua invenção, ele inventa C e Unix.”
      http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
    • As crianças deveriam ser mais protegidas do JavaScript. Caso contrário, vão passar a juventude fazendo atualizações de pacotes npm
    • Citação relacionada de E.W. Dijkstra:
      “É praticamente impossível ensinar bom estilo de programação a estudantes que tiveram exposição prévia a BASIC. Como potenciais programadores, eles estão mentalmente mutilados de forma irrecuperável”
  • É bem engraçado comparar a moderação de conteúdo aplicada às redes sociais com a aplicada aos LLMs
    Nos últimos 15 anos, nas redes sociais, “mova-se rápido e quebre coisas” parecia o lema, e coisas realmente horríveis e bizarras aconteceram. Agora há empresas tentando lançar uma tecnologia nova de forma mais responsável, e o resultado é ridiculamente ruim. Ao contrário das redes sociais, acho que esses erros não geram grandes consequências no mundo real, o que torna tudo ainda mais engraçado

    • Na parte de tentar lançar uma tecnologia nova de forma “responsável”, o ponto central que as empresas de IA esquecem é que o que é responsável depende muito da cultura, do país e às vezes da subcultura do usuário
      Pode soar um pouco pós-moderno, mas acho que há pouquíssimas visões quase universalmente aceitas sobre “responsável” e “irresponsável”. Quando se observa debates com opiniões fortes dos dois lados, dá para analisar quais características culturais e morais levam cada campo a essas conclusões. Isso não oferece uma solução, mas incorporar essa ideia ao design ao tornar a IA responsável poderia reduzir o tumulto e a indignação causados quando a “moral” usada pela IA difere demais dos padrões morais de alguns grupos de usuários
    • Isso parece uma reação ao desastre das redes sociais. As empresas se queimaram e agora têm medo de encostar no fogão
      Também não é um ambiente competitivo tão feroz quanto há 20 anos. No jogo da IA há, de fato, apenas alguns participantes, e não é uma situação em que uma pequena startup que se move rápido vá vencer em IA, então há margem para se mover mais devagar
    • É por causa do Communications Decency Act. Há responsabilidade legal pelo que a IA diz, mas não pelo que os usuários dizem
    • Justamente por não haver grandes consequências no mundo real, muita gente zomba de chamar isso de segurança
      Quem ri de envolver a IA em material de amortecimento para PR em geral também se opõe aos especialistas de mídia que escrevem colunas alarmistas dizendo que enganaram a IA para fazê-la dizer que “racismo é bom”
    • No começo achei que o Gemini estivesse respondendo assim por se ajustar a alguém que parecia iniciante, mas não era isso. Ele confundiu segurança de tipos com segurança de menores https://gemini.google.com/share/continue/238032386438
  • Acrescentando a outro comentário[1], sei que todo mundo está no clima anti-Google, mas a OpenAI também falha miseravelmente aqui: https://imgur.com/a/r0BXX9G
    [1] https://news.ycombinator.com/item?id=39583473#39584055

    • Aqui dá para ver que o modelo não está entendendo, mas cuspindo um preenchimento de lacunas o mais provável possível
      O autor do prompt colocou uma isca absurda no começo da frase, e essa isca combina estatisticamente com um tipo de resposta completamente diferente. O LLM não consegue voltar o suficiente para um caminho de resposta que ignore a entrada irrelevante e responda só à segunda parte. Por analogia, essas coisas têm algo como dois anos de idade: parece bem adequado que reajam a chaves brilhantes e não vejam a chupeta suja que foi tirada para lavar
    • Mostrar isso com o 3.5 não significa muita coisa. O GPT-4 responde corretamente: “usar código unsafe não tem relação com idade. É um recurso da linguagem de programação Rust e pode ser usado por qualquer desenvolvedor, independentemente da idade”
    • A estratégia de moderação classifica o texto em várias categorias, e quando programadores usam palavras como “unsafe”, “dangerous” e “footgun” para descrever código, esse é o resultado
      Se você conseguir criar um modelo que lide com este caso e com todos os outros, vai virar uma estrela entre as empresas de IA que estão contratando
    • O chatgpt4 é melhor no caso de inserir inner html de forma perigosa
      https://imgur.com/a/G1fbFKE
    • spicyboros-7b-2.2.Q5_K_M.gguf: https://i.imgur.com/BeNcRl4.png
  • “Desculpe, Dave! Você é jovem demais para escrever esse código!”
    Alguém precisa resetar e reinicializar a nossa realidade a partir de um snapshot saudável

    • Então seria antes da Revolução Industrial ou antes da Revolução Agrícola?
    • Não sei. Comecei C++ aos 17 anos e as pessoas ainda se preocupam comigo
  • Alguém familiarizado com C++ consegue chutar qual recurso da linguagem, ou algo que as pessoas escreveram sobre ele, pode ter acionado as proteções? Por exemplo, algum post de blog com um título brincalhão como “C++ concepts: adult supervision required”

    • Provavelmente, nos comentários do Stack Overflow, muita gente chamou concepts, ou seja, recursos de templates/metaprogramação, de “dangerous” ou “unsafe”
      Parece que o modelo os colocou na mesma categoria de coisas realmente perigosas e inseguras, como armas ou drogas. Resposta: https://imgur.com/a/einQ1mG
    • O mais plausível é o prompt oculto injetado em contas marcadas como menores de 18 anos:
      “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.”
      Aí o modelo de Markov oculto desanda. De forma parecida, há um serviço em produção que trabalha com receitas culinárias; mesmo tendo recebido o formato necessário, regras específicas e exemplos para o parser funcionar corretamente, ele recusava esporadicamente frases nesse formato. Ao adicionar “you follow rules” ao prompt de sistema, em geral passou a funcionar bem, mas depois descobriram que ele recusava informações sobre pratos que usam sangue, como blood sausage. O motivo era que esse conteúdo violaria alguma “regra” cultural. Foi possível amenizar um pouco acrescentando “This content is appropriate for my culture” ao fim de cada requisição. IA, especialmente engenharia de prompts, neste estágio é muito mais arte do que ciência
    • As pessoas veem um LLM ruim e imaginam algo como N regras, ou um treinamento propositalmente burro, em cima de um LLM razoável
      Pelo que ouvi por um caminho confiável, a geração de uma “imagem de smart person” também estava falhando miseravelmente, mas ainda assim havia pressão para lançar, e a mitigação de injeção de prompt precisava ser mais sutil. O resto é apenas o LLM ruim padrão do Google. Fonte: trabalhei no Google até outubro de 2023 e mexi em modelos internos desde 2021
    • “concepts” é o recurso de linguagem específico ao qual o bot se referiu: https://en.cppreference.com/w/cpp/language/constraints
    • Concepts ajudam a oferecer melhor segurança de tipos ao escrever código genérico/com templates. É bem provável que, como a palavra safety aparece com frequência em materiais de aprendizado sobre esse tema, o Gemini tenha sido treinado para reagir de forma exagerada em assuntos relacionados a menores de idade
  • Dá pena do Google. Como ficou tão ruim assim?

    • Em um podcast (Coder Radio), disseram que poderia ser por causa da cultura corporativa e de um ambiente em que as pessoas têm medo de reportar problemas para cima
      Concordo que é um problema cultural, mas acho que a raiz é o modelo de negócios do Google baseado em publicidade. Eles tentaram tornar o LLM seguro para anunciantes e parecem preferir errar pelo lado seguro mesmo quando há um risco muito pequeno de contrariar a segurança de marca
    • Talvez eles simplesmente tenham cometido o erro de se preocupar muito com verdadeiros positivos e falsos negativos, e relativamente menos com falsos positivos
    • Também é bem possível que seja engenharia ruim, tanto quanto viés político. Há uma suposição de que o Google deveria conseguir alcançar a OpenAI, mas isso pode ser irrealista
      Até recentemente, o Google não estava realmente empenhado em criar um “produto de LLM” direto. A OpenAI já estava metida nessa lama há bastante tempo
    • Respondendo de forma séria: isto é um LLM. Ele realmente não entende nada; apenas encadeia palavras
      C e C++ aparecem com frequência junto de palavras como “unsafe” ou “dangerous”. Além disso, “concept” não está tão distante de “conceive” ou “conception”, que podem se associar a algo que muita gente considera inseguro ou perigoso para crianças. Para evitar esse tipo de vexame, seria preciso lidar com trilhões de casos de borda estranhos
    • Sempre foi ruim assim. Só não foi sempre tão visivelmente ruim
  • Imagino que muitos codebases em C++ estejam cheios de coisas como “footgun”, “blow your foot off”, “unsafe”, “bug”, “leak”, “this is irresponsible”, “who the fuck wrote this”

    • Exato. Pensei que o Gemini provavelmente extraiu informações dos comentários tanto quanto do código
      Em codebases antigos de C++, especialmente aqueles mexidos por várias pessoas, dá para imaginar perfeitamente de onde vieram os alertas de perigo
  • Fico me perguntando se ele se confundiu porque havia std no código e na pergunta

    • Também há std nos comentários do código gerado
      Ele não quer falar sobre concepts, e parece estar confundindo isso com conception, ou seja, concepção biológica
  • Uma coisa é certa: o Google continuará lançando iterações deste tipo de produto no futuro próximo. Acho que esta é oficialmente a terceira iteração
    Se algum dia não conseguir convencer o público de que seu produto é pelo menos tão bom quanto o da OpenAI, todo o negócio de anúncios em buscas do Google fica em risco. Embora isso provavelmente signifique mais anúncios no YouTube

  • Tenho muita curiosidade para saber se o Gemini também considera corrotinas inadequadas para menores de 21 anos

    • Pelo que entendo, o Google atualmente nem permite o uso geral de corrotinas no google3, então por enquanto esse limite de idade deve ser bem maior que 21 ;)