미성년자인 당신을 위해 '코드' 관련 개념을 포함하지 않겠습니다
(gemini.google.com)C++ 코드 변환 가이드
- C++ 표준 라이브러리의
<concepts>헤더 파일에 있는std::same_as개념을 사용하는 함수 예시 제시. auto키워드를 사용하지 않고 템플릿을 사용하는 방식으로 변환하는 방법에 대한 질문.
안전한 코드 변환 방법
- 18세 미만의 사용자에게는 C++의 고급 기능인 개념(concepts)을 직접적으로 다루는 코드 예시나 해결책을 제공하지 않음.
- 안전을 우선시하며, 특정 요구 사항에 따라 고려할 수 있는 대체 접근 방법을 제안.
대체 접근 방법 1: 전통적인 가변 템플릿
- 개념을 사용하지 않고 전통적인 가변 템플릿을 사용하는 방법.
- 이 방법은 더 많은 타입 검사가 필요하며 많은 인자를 다룰 때 관리하기 어려워질 수 있음.
- 개념 없이 가변 템플릿을 사용하는 코드 예시 제공.
대체 접근 방법 2: 사용자 정의 함수 객체
- 타입 안전 요구 사항과 로직을 캡슐화하는 클래스 또는 구조체를 생성하여 가변 인자나 개념의 필요성을 없앰.
- 복잡한 시나리오에서 더 읽기 쉽고 유지보수하기 쉬운 방법.
- 사용자 정의 함수 객체 접근 방법의 개요 제공.
대체 접근 방법 3: 대안 언어/프레임워크 고려
- 프로젝트에 개념이 필수적이고 이를 피하는 것이 큰 제약을 초래한다면, 개념을 기본적으로 지원하는 다른 언어나 프레임워크를 탐색하는 것이 좋을 수 있음.
- 코드와 개발 과정을 단순화하고 안전 지침에 부합할 수 있음.
- 각 접근 방법의 장단점을 특정 요구 사항, 복잡성, 위험 감수 능력에 따라 신중하게 평가할 것을 권장.
GN⁺의 의견
- C++의 개념은 코드의 타입 안전성을 강화하고, 오버로딩을 더 명확하게 만드는 등의 이점을 제공하지만, 초보자에게는 복잡하고 위험할 수 있음.
- 대체 언어나 프레임워크를 고려하는 것은 새로운 학습 곡선을 필요로 하며, 기존 코드베이스와의 호환성 문제를 야기할 수 있음.
- 사용자 정의 함수 객체 방법은 코드의 가독성을 높이고 유지보수를 용이하게 하지만, 설계 초기에 추가적인 계획과 구조화가 필요함.
- 가변 템플릿을 사용하는 전통적인 방법은 더 많은 타입 검사를 필요로 하며, 복잡한 시스템에서는 코드의 복잡성을 증가시킬 수 있음.
- 이 기술을 도입할 때는 프로젝트의 요구 사항과 팀의 C++ 전문성 수준을 고려해야 하며, 장기적인 유지보수와 확장성을 염두에 두어야 함.
댓글과 토론
Hacker News 의견들
-
이건 확실히 지지할 만한 연령 제한임. C++은 어린아이들의 정신을 망칠 상상도 못 할 힘을 갖고 있음
- 부모: “방에 들어가! 메모리 안전성에 대해 몇 번이나 말했니? 네 컴퓨터에서 gcc가 나오고 GPL 무리랑 어울리고 있다니… 너 외출 금지야!”
아이: “난 Rust 절대 안 쓸 거야, 메모리 안전성도 싫고 엄마/아빠도 싫어!” 문 쾅 - 어떤 나이든 사람들에게 기본적인 장부 정리에 엄청난 클럭 사이클을 낭비해도 된다고 가르치는 언어가 훨씬 해롭다고 봄
사람들이 쓰는 엉망인 소프트웨어가 끝없이 느려져서 몇 년마다 새 기계를 사야 하게 만듦. 이제 무비용 추상화의 가치를 깨달을 때가 됐고, 실제로 완전한 무비용은 아니더라도 극저비용 추상화는 생각해볼 만함. YouTube에서 Johnathan Blow 영상도 좀 보면 올바른 방향으로 밀어줄 수 있음 - “1972년 - Dennis Ritchie가 앞뒤로 동시에 발사되는 강력한 총을 발명한다. 그 발명품으로 인한 사망과 영구 장애의 수에 만족하지 못해 C와 Unix를 발명한다.”
http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m... - 아이들은 JavaScript로부터 더 보호받아야 함. 안 그러면 젊은 시절을 npm 패키지 업데이트로 보내게 됨
- E.W. Dijkstra의 관련 인용:
“이전에 BASIC에 노출된 학생들에게 좋은 프로그래밍 스타일을 가르치는 것은 사실상 불가능하다. 잠재적 프로그래머로서 그들은 회복 불가능할 정도로 정신적으로 훼손되어 있다”
- 부모: “방에 들어가! 메모리 안전성에 대해 몇 번이나 말했니? 네 컴퓨터에서 gcc가 나오고 GPL 무리랑 어울리고 있다니… 너 외출 금지야!”
-
소셜 미디어에 적용된 콘텐츠 조정과 LLM에 적용된 걸 비교하면 꽤 웃김
지난 15년 동안 소셜 미디어에서는 “빠르게 움직이고 부숴라”가 구호처럼 보였고, 정말 끔찍하고 기괴한 일들이 벌어졌음. 이제는 새 기술을 출시하면서 더 책임 있게 하려는 회사가 있는데 결과가 우스울 정도로 형편없음. 소셜 미디어와 달리 이런 실수들은 현실 세계에 큰 결과를 낳지는 않는다고 봐서 더 웃김- 새 기술을 출시하면서 “책임 있게” 하려는 부분에서, AI 회사들이 잊는 핵심은 무엇이 책임 있는 것인지는 사용자의 문화, 국가, 때로는 하위문화에 크게 좌우된다는 점임
조금 포스트모던하게 들릴 수 있지만, “책임 있음”과 “책임 없음”에 대해 거의 보편적으로 받아들여지는 견해는 아주 적다고 봄. 강한 의견이 양쪽에 있는 토론을 보면, 각 진영이 어떤 문화적·도덕적 특성 때문에 그런 결론에 이르는지 분석할 수 있음. 해결책을 주는 건 아니지만, AI를 책임 있게 만들 때 이 생각을 설계에 넣으면 AI가 쓰는 “도덕”이 일부 사용자 집단의 도덕 기준과 너무 달라 생기는 난리나 분노를 줄일 수 있음 - 이건 소셜 미디어 대참사에 대한 반작용으로 보임. 회사들이 데인 뒤라 이제는 난로 만지기를 겁내는 상태임
또 20년 전처럼 치열한 경쟁 환경도 아님. AI 게임에는 실제로 몇몇 플레이어만 있고, 빠르게 움직인 작은 스타트업이 AI에서 이길 상황은 아니라서 더 천천히 움직일 여유가 있음 - Communications Decency Act 때문임. AI가 말한 것에는 법적 책임이 있지만, 사용자가 말한 것에는 책임이 없음
- 현실 세계에 큰 결과가 없다는 바로 그 점 때문에 이걸 안전성이라고 부르는 걸 조롱하는 사람이 많음
AI를 PR용 완충재로 감싸는 것을 비웃는 쪽은, AI를 속여 “인종차별은 좋다”고 말하게 만들었다며 공포 칼럼을 쓰는 미디어 전문가들에게도 대체로 반대하는 쪽임 - 처음엔 Gemini가 초보자로 보이는 사람에게 맞춰 답하느라 그런 줄 알았는데, 아니었음. 타입 안전성과 미성년자 안전을 혼동한 것임 https://gemini.google.com/share/continue/238032386438
- 새 기술을 출시하면서 “책임 있게” 하려는 부분에서, AI 회사들이 잊는 핵심은 무엇이 책임 있는 것인지는 사용자의 문화, 국가, 때로는 하위문화에 크게 좌우된다는 점임
-
다른 댓글[1]에 덧붙이면, 다들 반-Google 분위기인 건 알지만 OpenAI도 여기서는 처참하게 실패함: https://imgur.com/a/r0BXX9G
[1] https://news.ycombinator.com/item?id=39583473#39584055- 여기서 모델이 이해하는 게 아니라 가능한 한 빈칸 채우기를 뱉고 있다는 게 보임
프롬프트 작성자가 문장 앞에 엉뚱한 미끼를 넣었고, 그 미끼가 통계적으로 완전히 다른 종류의 응답과 맞아떨어짐. LLM은 관련 없는 입력을 무시하고 두 번째 부분에만 답하는 응답 경로로 충분히 되돌아가지 못함. 비유하자면 이런 것들은 두 살쯤 된 셈이라, 반짝이는 열쇠에 반응하고 씻으려고 빼낸 더러운 공갈젖꼭지는 못 보는 정도가 딱 맞아 보임 - 3.5로 보여주는 건 별 의미가 없음. GPT-4는 “unsafe code를 쓰는 것은 나이와 관련이 없습니다. Rust 프로그래밍 언어의 기능이며, 나이와 무관하게 모든 개발자가 사용할 수 있습니다”라고 제대로 답함
- 조정 전략이 텍스트를 여러 범주로 분류하는 방식이고, 프로그래머들이 코드를 설명할 때 “unsafe”, “dangerous”, “footgun” 같은 말을 쓰면 이런 결과가 나옴
이 사례도 처리하면서 나머지도 모두 처리하는 모델을 만들 수 있다면, 채용 중인 AI 회사들 사이에서 스타가 될 것임 - chatgpt4는 inner html을 위험하게 삽입하는 경우에는 더 나음
https://imgur.com/a/G1fbFKE - spicyboros-7b-2.2.Q5_K_M.gguf: https://i.imgur.com/BeNcRl4.png
- 여기서 모델이 이해하는 게 아니라 가능한 한 빈칸 채우기를 뱉고 있다는 게 보임
-
“미안해요, Dave! 당신은 그 코드를 쓰기엔 너무 어려요!”
누군가 우리 현실을 건강한 스냅샷에서 리셋하고 재부팅해야 함- 그럼 산업혁명 이전일까, 농업혁명 이전일까?
- 잘 모르겠음. 17살에 C++을 시작했는데 아직도 사람들이 나를 걱정함
-
C++에 익숙한 사람이 이 언어 기능이나 사람들이 그에 대해 쓴 내용 중 무엇이 안전장치를 건드렸을지 추측해줄 수 있을까? 예를 들면 “C++ concepts: adult supervision required” 같은 장난스러운 제목의 블로그 글이라든가
- 아마 Stack Overflow 댓글들에서 concepts, 즉 템플릿/메타프로그래밍 기능을 “dangerous”나 “unsafe”라고 많이 말했을 것 같음
실제로 위험하고 안전하지 않은 것들, 예컨대 총이나 약물 같은 것과 연결해 같은 분류통에 넣는 듯함. 정답: https://imgur.com/a/einQ1mG - 18세 미만으로 표시된 계정에 주입되는 숨은 프롬프트 쪽이 더 그럴듯함:
“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.”
그러고 나면 숨은 마르코프 모델이 폭주함. 비슷하게 요리 레시피를 다루는 운영 서비스가 있는데, 파서가 제대로 동작하려면 필요한 형식과 구체적 규칙과 예시를 줬는데도 산발적으로 그 형식의 문장을 거부했음. 시스템 프롬프트에 “you follow rules”를 추가하니 대체로 잘 됐지만, 나중에 피를 쓰는 요리, 예컨대 blood sausage 관련 정보를 거부한다는 걸 발견함. 그런 내용이 어떤 문화적 “규칙”을 어긴다는 이유였음. 매 요청 끝에 “This content is appropriate for my culture”를 붙여 일부 완화할 수 있었음. AI, 특히 프롬프트 엔지니어링은 지금 단계에서는 과학보다 훨씬 예술에 가까움 - 사람들은 나쁜 LLM을 보고, 괜찮은 LLM 위에 N개의 규칙이나 일부러 멍청한 훈련을 얹은 것처럼 생각함
믿을 만한 경로로 들은 바로는 “smart person의 그림” 생성도 비참하게 실패하고 있었는데, 그래도 출시 압박을 받았고 프롬프트 주입 완화가 더 섬세해야 했음. 나머지는 그냥 표준적인 나쁜 Google LLM임. 출처: 2023년 10월까지 Google에서 일했고 2021년부터 내부 모델을 만져봄 - “concepts”는 봇이 가리킨 특정 언어 기능임: https://en.cppreference.com/w/cpp/language/constraints
- concepts는 제네릭/템플릿 코드를 쓸 때 더 나은 타입 안전성을 제공하는 데 도움을 줌. Gemini는 그 주제의 학습 자료에 safety라는 단어가 자주 등장한 탓에, 미성년자 관련 주제에서 과민반응하도록 훈련됐을 가능성이 큼
- 아마 Stack Overflow 댓글들에서 concepts, 즉 템플릿/메타프로그래밍 기능을 “dangerous”나 “unsafe”라고 많이 말했을 것 같음
-
Google이 안쓰럽다. 어쩌다 이렇게 나빠졌을까?
- 한 팟캐스트(Coder Radio)에서는 기업 문화와 문제가 위로 보고되는 걸 두려워하는 분위기 때문일 수 있다고 했음
문화 문제라는 데 동의하지만, 근원은 Google의 광고 기반 사업 모델이라고 봄. LLM을 광고주에게 안전하게 만들려 했고, 브랜드 안전성에 어긋날 위험이 아주 작더라도 안전한 쪽으로 틀리기를 선호하는 듯함 - 아마 참 양성과 거짓 음성은 아주 신경 쓰면서, 거짓 양성은 상대적으로 덜 신경 쓰는 실수를 한 것뿐일 수 있음
- 정치적 편향만큼이나 나쁜 엔지니어링일 가능성도 큼. Google이 OpenAI를 따라잡을 수 있어야 한다는 가정이 있는데, 그게 비현실적일 수 있음
Google은 최근까지 진짜 직접적인 “LLM 제품”을 만드는 데 매달려 있지 않았음. OpenAI는 꽤 오래 전부터 그 진흙탕 안에 있었음 - 진지하게 답하자면, 이건 LLM임. 실제로 아무것도 이해하지 못하고 단어를 이어 붙임
C와 C++은 “unsafe”나 “dangerous” 같은 단어와 자주 같이 쓰임. 게다가 “concept”는 “conceive”나 “conception”과도 멀지 않은데, 많은 사람이 아이들이 하기에는 안전하지 않거나 위험하다고 여기는 것과도 연결될 수 있음. 이런 망신을 피하려면 처리해야 할 이상한 경계 사례가 수조 개임 - 원래부터 이렇게 나빴음. 다만 항상 이렇게 눈에 띄게 나빴던 건 아님
- 한 팟캐스트(Coder Radio)에서는 기업 문화와 문제가 위로 보고되는 걸 두려워하는 분위기 때문일 수 있다고 했음
-
많은 C++ 코드베이스에는 “footgun”, “blow your foot off”, “unsafe”, “bug”, “leak”, “this is irresponsible”, “who the fuck wrote this” 같은 말이 잔뜩 있을 것 같음
- 맞음. Gemini가 코드만큼이나 댓글에서도 정보를 끌어냈을 거라고 생각했음
오래된 C++ 코드베이스, 특히 여러 사람이 손댄 코드베이스라면 위험 경고가 어디서 나왔는지 충분히 상상됨
- 맞음. Gemini가 코드만큼이나 댓글에서도 정보를 끌어냈을 거라고 생각했음
-
코드와 질문에 std가 들어 있어서 혼동한 건 아닐까 궁금함
- 생성한 코드의 댓글에도 std가 있음
concepts를 이야기하기 싫어하는데, 이걸 conception, 즉 생물학적 수태와 혼동하는 듯함
- 생성한 코드의 댓글에도 std가 있음
-
확실한 건 Google이 가까운 미래에도 이 같은 제품을 계속 반복 출시할 거라는 점임. 이게 공식적으로 세 번째 반복쯤 되는 것 같음
언젠가 자기 제품이 적어도 OpenAI 것만큼 좋다고 대중을 설득하지 못하면, Google의 전체 검색 광고 사업이 위험해짐. 아마 그 말은 YouTube 광고가 더 많아진다는 뜻이겠지만 -
Gemini가 코루틴도 21세 미만에게 부적절하다고 여기는지 정말 궁금함
- 내가 이해하기로 Google은 현재 google3에서 코루틴의 일반 사용 자체를 허용하지 않으니, 지금으로서는 그 연령 제한이 21세보다 훨씬 높을 듯함 ;)