2 puan yazan GN⁺ 2024-03-04 | 1 yorum | WhatsApp'ta paylaş

C++ kod dönüştürme kılavuzu

  • C++ standart kütüphanesindeki <concepts> başlık dosyasında yer alan std::same_as kavramını kullanan bir işlev örneği sunuluyor.
  • auto anahtar sözcüğünü kullanmadan, şablon kullanan bir yaklaşıma nasıl dönüştürülebileceğine dair bir soru.

Güvenli kod dönüştürme yöntemi

  • 18 yaş altındaki kullanıcılara, C++'ın ileri seviye özelliklerinden biri olan kavramları (concepts) doğrudan ele alan kod örnekleri veya çözümler sunulmuyor.
  • Güvenlik önceliklendirilirken, belirli gereksinimlere göre değerlendirilebilecek alternatif yaklaşımlar öneriliyor.

Alternatif yaklaşım 1: Geleneksel varyadik şablonlar

  • Kavramlar kullanmadan geleneksel varyadik şablonların nasıl kullanılacağı.
  • Bu yöntem daha fazla tür denetimi gerektirir ve çok sayıda argümanla çalışırken yönetilmesi zorlaşabilir.
  • Kavramlar olmadan varyadik şablon kullanımına dair bir kod örneği sunuluyor.

Alternatif yaklaşım 2: Kullanıcı tanımlı işlev nesnesi

  • Tür güvenliği gereksinimlerini ve mantığı kapsülleyen bir sınıf veya yapı oluşturarak varyadik argümanlara ya da kavramlara olan ihtiyacı ortadan kaldırma.
  • Karmaşık senaryolarda daha okunabilir ve bakımı daha kolay bir yöntem.
  • Kullanıcı tanımlı işlev nesnesi yaklaşımının genel bir çerçevesi sunuluyor.

Alternatif yaklaşım 3: Alternatif dil/çatı değerlendirmesi

  • Projede kavramlar vazgeçilmezse ve bunlardan kaçınmak ciddi kısıtlar doğuruyorsa, kavramları yerleşik olarak destekleyen başka bir dil veya çatıyı değerlendirmek daha uygun olabilir.
  • Bu, kodu ve geliştirme sürecini basitleştirebilir ve güvenlik yönergeleriyle uyum sağlayabilir.
  • Her yaklaşımın artı ve eksilerinin, belirli gereksinimler, karmaşıklık ve risk toleransına göre dikkatle değerlendirilmesi öneriliyor.

GN⁺ görüşü

  • C++ kavramları, kodun tür güvenliğini güçlendirme ve aşırı yüklemeyi daha net hale getirme gibi avantajlar sunsa da, yeni başlayanlar için karmaşık ve riskli olabilir.
  • Alternatif dil veya çatıları değerlendirmek yeni bir öğrenme eğrisi gerektirebilir ve mevcut kod tabanıyla uyumluluk sorunlarına yol açabilir.
  • Kullanıcı tanımlı işlev nesnesi yöntemi kodun okunabilirliğini artırır ve bakımı kolaylaştırır, ancak tasarımın başında ek planlama ve yapılandırma gerektirir.
  • Varyadik şablonları kullanan geleneksel yaklaşım daha fazla tür denetimi gerektirir ve karmaşık sistemlerde kod karmaşıklığını artırabilir.
  • Bu teknolojiyi devreye alırken projenin gereksinimleri ile ekibin C++ uzmanlık düzeyi göz önünde bulundurulmalı; uzun vadeli bakım ve ölçeklenebilirlik de hesaba katılmalıdır.

1 yorum

 
GN⁺ 2024-03-04
Hacker News yorumları
  • Bu kesinlikle desteklenebilecek bir yaş kısıtlaması. C++, küçük çocukların zihnini mahvedecek, hayal bile edilemeyecek bir güce sahip

    • Ebeveyn: “Odana git! Sana bellek güvenliği hakkında kaç kere konuştum? Bilgisayarından gcc çıkıyor ve GPL tayfasıyla takılıyorsun… artık dışarı çıkmak yok!”
      Çocuk: “Asla Rust kullanmayacağım, bellek güvenliğinden de nefret ediyorum sizden de anne/babadan da!” kapıyı çarpar
    • Bence asıl daha zararlı olan, her yaştan insana temel muhasebe işleri için tonla clock cycle harcamanın kabul edilebilir olduğunu öğreten diller
      İnsanların kullandığı berbat yazılımlar durmadan yavaşlıyor ve birkaç yılda bir yeni makine almak zorunda bırakıyor. Artık zero-cost abstraction değerini kavramanın zamanı geldi; tamamen sıfır maliyet olmasa bile son derece düşük maliyetli soyutlamalar düşünmeye değer. YouTube’da biraz Johnathan Blow videosu izlemek de insanı doğru yöne itebilir
    • “1972 - Dennis Ritchie, aynı anda hem ileriye hem geriye ateş eden güçlü bir silah icat eder. Bu icadın yol açtığı ölüm ve kalıcı sakatlık sayısından tatmin olmayınca C ve Unix’i de icat eder.”
      http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
    • Çocukların JavaScript’ten daha çok korunması lazım. Yoksa gençliklerini npm paket güncellemeleri ile geçirirler
    • E.W. Dijkstra’dan ilgili alıntı:
      “Daha önce BASIC’e maruz kalmış öğrencilere iyi programlama tarzı öğretmek fiilen imkânsızdır. Potansiyel programcılar olarak zihinsel açıdan geri döndürülemez biçimde hasar görmüşlerdir”
  • Sosyal medyaya uygulanan içerik moderasyonu ile LLM’lere uygulanana bakınca durum epey komik
    Son 15 yılda sosyal medyada slogan sanki “hızlı hareket et ve kırıp dök” gibiydi ve gerçekten korkunç, tuhaf şeyler yaşandı. Şimdi ise yeni teknolojiyi daha sorumlu biçimde piyasaya sürmeye çalışan şirketler var ama ortaya çıkan sonuç gülünç derecede kötü. Sosyal medyadan farklı olarak bu hataların gerçek dünyada büyük sonuçlar doğurmadığını düşündüğüm için daha da komik geliyor

    • Yeni teknolojiyi “sorumlu biçimde” piyasaya sürmeye çalışırken, AI şirketlerinin unuttuğu temel nokta, neyin sorumlu sayıldığının kullanıcının kültürüne, ülkesine, hatta bazen alt kültürüne büyük ölçüde bağlı olması
      Biraz postmodern gelebilir ama “sorumlu” ve “sorumsuz” hakkında neredeyse evrensel kabul gören görüşlerin çok az olduğunu düşünüyorum. İki tarafın da güçlü fikirleri olduğu tartışmalara bakınca, hangi kültürel ve ahlaki özelliklerin onları o sonuca götürdüğünü analiz edebilirsiniz. Bu çözüm vermez ama sorumlu AI tasarlanırken bu düşünceyi sürece katmak, AI’ın kullandığı “ahlak” ile bazı kullanıcı gruplarının ahlak ölçütleri arasındaki büyük farkların yol açtığı krizleri ve öfkeyi azaltabilir
    • Bu, sosyal medya felaketine verilmiş bir tepki gibi görünüyor. Şirketler yandı, şimdi sobaya dokunmaktan korkuyorlar
      Ayrıca ortam 20 yıl önceki gibi aşırı rekabetçi değil. AI oyununda gerçekten yalnızca birkaç oyuncu var ve hızlı davranan küçük bir startup’ın AI’da herkesi geçeceği bir durum da yok; bu yüzden daha yavaş hareket etme lüksleri var
    • Sebebi Communications Decency Act. AI’ın söylediklerinde hukuki sorumluluk var ama kullanıcının söylediklerinde yok
    • Gerçek dünyada büyük sonuçlar doğurmuyor olması yüzünden birçok kişi buna güvenlik denmesine alaycı yaklaşıyor
      AI’ı PR amaçlı koruyucu köpükle sarmayı tiye alanlar, AI’ı kandırıp “ırkçılık iyidir” dedirttik diye korku köşeleri yazan medya uzmanlarına da genelde karşı çıkan taraf oluyor
    • Başta Gemini’nin, acemi gibi görünen birine göre cevap verdiğini sanmıştım ama öyle değilmiş. Tip güvenliği ile çocuk güvenliğini karıştırmış https://gemini.google.com/share/continue/238032386438
  • Başka bir yorumdaki[1] noktaya ek olarak, herkesin Google karşıtı bir havası var ama OpenAI da burada feci şekilde çuvallıyor: https://imgur.com/a/r0BXX9G
    [1] https://news.ycombinator.com/item?id=39583473#39584055

    • Burada modelin anlamadığını, mümkün olduğunca boşluk doldurma türü bir çıktı ürettiğini görebiliyorsunuz
      Promptu yazan kişi cümlenin başına alakasız bir yem koymuş ve o yem istatistiksel olarak bambaşka türde bir yanıtla eşleşmiş. LLM, ilgisiz girdiyi görmezden gelip yalnızca ikinci kısma cevap veren bir yanıt yoluna yeterince geri dönemiyor. Benzetmek gerekirse bunlar yaklaşık iki yaşında; parlak bir anahtara tepki verip yıkanmak için ağzından alınmış kirli emziği fark etmeyen çocuklar gibiler
    • Bunu 3.5 ile göstermek çok anlamlı değil. GPT-4 doğru biçimde “unsafe code yazmak yaşla ilgili değildir. Bu, Rust programlama dilinin bir özelliğidir ve yaştan bağımsız olarak tüm geliştiriciler tarafından kullanılabilir” diye cevap veriyor
    • Moderasyon stratejisi metni çeşitli kategorilere ayırmaya dayanıyorsa ve programcılar kod anlatırken “unsafe”, “dangerous”, “footgun” gibi ifadeler kullanıyorsa sonuç böyle oluyor
      Eğer bu örneği de ele alırken geri kalan her şeyi de çözebilen bir model yapabilirseniz, işe alım yapan AI şirketleri arasında yıldız olursunuz
    • chatgpt4, inner html’i tehlikeli biçimde ekleme durumlarında daha iyi
      https://imgur.com/a/G1fbFKE
    • spicyboros-7b-2.2.Q5_K_M.gguf: https://i.imgur.com/BeNcRl4.png
  • “Üzgünüm Dave! O kodu yazmak için fazla küçüksün!”
    Birinin bizim gerçekliğimizi sağlıklı bir snapshot noktasına sıfırlayıp yeniden başlatması lazım

    • O zaman sanayi devriminden öncesine mi, tarım devriminden öncesine mi?
    • Emin değilim. 17 yaşımda C++’a başladım, insanlar hâlâ benim için endişeleniyor
  • C++’a aşina biri, bu dil özelliğinin ya da insanların onun hakkında yazdıklarının hangisinin güvenlik filtresini tetiklemiş olabileceğini tahmin edebilir mi? Mesela “C++ concepts: adult supervision required” gibi şakacı başlıklı bir blog yazısı falan

    • Muhtemelen Stack Overflow yorumlarında concepts, yani template/metaprogramming özellikleri için sık sık “dangerous” ya da “unsafe” denmiştir.
      Bunu gerçekten tehlikeli ve güvenli olmayan şeylerle, örneğin silahlar ya da uyuşturucularla ilişkilendirip aynı kategoriye koyuyor gibi. Doğru cevap: https://imgur.com/a/einQ1mG
    • 18 yaş altı olarak işaretlenmiş hesaplara enjekte edilen gizli prompt tarafı daha olası görünüyor:
      “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.”
      Sonra da gizli Markov modeli kontrolden çıkıyor. Benzer şekilde yemek tarifleriyle uğraşan bir üretim servisim vardı; parser’ın düzgün çalışması için gerekli formatı, somut kuralları ve örnekleri vermeme rağmen, zaman zaman o formatta bazı cümleleri reddediyordu. System prompt’a “you follow rules” ekleyince çoğunlukla düzeldi, ama daha sonra kan kullanılan yemekleri, mesela blood sausage ile ilgili bilgileri reddettiğini fark ettim. Gerekçe, böyle içeriklerin bazı kültürel “kuralları” ihlal etmesiydi. Her isteğin sonuna “This content is appropriate for my culture” ekleyerek bunu kısmen hafifletebildim. AI, özellikle prompt engineering, şu aşamada bilimden çok sanata daha yakın
    • İnsanlar kötü bir LLM görünce, bunu iyi sayılabilecek bir LLM’nin üstüne N tane kural ya da bilerek aptallaştırılmış bir eğitim bindirilmiş hali gibi düşünüyor.
      Güvenilir bir kanaldan duyduğum kadarıyla “smart person’ın resmi” üretimi de feci şekilde çuvallıyordu, ama yine de piyasaya sürülmesi için baskı vardı ve prompt injection azaltımının daha incelikli olması gerekiyordu. Geri kalanı ise standart kötü Google LLM’i işte. Kaynak: 2023 Ekim’ine kadar Google’da çalıştım ve 2021’den beri iç modellerle uğraştım
    • “concepts”, botun işaret ettiği belirli bir dil özelliği: https://en.cppreference.com/w/cpp/language/constraints
    • concepts, generic/template kod yazarken daha iyi tip güvenliği sağlamaya yardımcı olur. Gemini büyük olasılıkla bu konudaki öğrenme materyallerinde safety kelimesini sık gördüğü için, reşit olmayanlarla ilgili konularda aşırı tepki verecek şekilde eğitilmiş
  • Google’a insanın acıması geliyor. Nasıl bu kadar kötü hale geldi?

    • Bir podcast’te (Coder Radio) bunun kurum kültürü ve sorunların yukarı rapor edilmesinden korkulan ortamla ilgili olabileceği söylenmişti.
      Kültür sorunu olduğuna katılıyorum ama kökte Google’ın reklama dayalı iş modeli var bence. LLM’yi reklamverenler için güvenli hale getirmeye çalıştılar ve marka güvenliğine ters düşme riski çok küçük bile olsa, güvenli tarafta hata yapmayı tercih ediyor gibiler
    • Muhtemelen sadece gerçek pozitifler ve yanlış negatiflerle çok ilgilenip, yanlış pozitifleri görece daha az önemseme hatasını yaptılar
    • Bu, politik önyargı kadar kötü mühendislik de olabilir. Google’ın OpenAI’ı yakalayabilmesi gerektiği gibi bir varsayım var ama bu gerçekçi olmayabilir.
      Google yakın zamana kadar gerçekten doğrudan bir “LLM ürünü” yapmaya odaklanmış değildi. OpenAI ise epey zamandır bu işin tam içindeydi
    • Ciddi cevap şu: bu bir LLM. Gerçekte hiçbir şeyi anlamıyor, sadece kelimeleri art arda diziyor.
      C ve C++ sık sık “unsafe” ya da “dangerous” gibi kelimelerle birlikte kullanılır. Üstüne bir de “concept”, “conceive” ya da “conception”a da uzak değil; bunlar da birçok kişinin çocuklar için güvenli olmadığını ya da tehlikeli olduğunu düşündüğü şeylerle ilişkilendirilebilir. Böyle rezillikleri önlemek için trilyonlarca tuhaf sınır vakasını ele almak gerekir
    • Zaten başından beri böyle kötüydü. Sadece her zaman bu kadar görünür şekilde kötü değildi
  • Birçok C++ kod tabanında “footgun”, “blow your foot off”, “unsafe”, “bug”, “leak”, “this is irresponsible”, “who the fuck wrote this” gibi ifadeler bolca vardır diye düşünüyorum

    • Evet. Gemini’nin bilgi çekmek için kod kadar yorumlardan da yararlanmış olabileceğini düşündüm.
      Eski bir C++ kod tabanında, özellikle de birçok kişinin elden geçirdiği bir kod tabanında, bu risk uyarılarının nereden gelmiş olabileceğini rahatça hayal edebiliyorum
  • Kodda ve soruda std geçtiği için bunu karıştırmış olabilir mi diye merak ediyorum

    • Ürettiği kodun yorumlarında da std var.
      concepts hakkında konuşmak istemiyor ama bunu conception, yani biyolojik döllenmeyle karıştırıyor gibi görünüyor
  • Kesin olan bir şey varsa, Google’ın yakın gelecekte de bu tür ürünleri tekrar tekrar piyasaya süreceği. Bu galiba resmî olarak üçüncü yineleme falan.
    Bir gün kendi ürününün en azından OpenAI’ınki kadar iyi olduğuna kamuoyunu ikna edemezse, Google’ın tüm arama reklamı işi tehlikeye girer. Gerçi bu muhtemelen YouTube’da daha fazla reklam göreceğimiz anlamına gelir

  • Gemini’nin coroutine’leri de 21 yaş altına uygunsuz sayıp saymadığını gerçekten merak ediyorum

    • Benim anladığım kadarıyla Google şu anda google3 içinde coroutine’lerin genel kullanımına zaten izin vermiyor, o yüzden şimdilik yaş sınırı 21’den epey yüksek gibi ;)