[Fikir] String'in İç Temsili ve Unicode/UTF-8 Stratejisi #87

Open
opened 2026-06-14 22:14:03 +03:00 by saqut · 0 comments
Owner

Giriş (Nedir, Neden Önemli?)

string tipi dil kimliğinde var ama "string nedir" sorusu (bayt dizisi mi, karakter dizisi mi, UTF-8 mi) henüz hiç tartışılmadı. Bu karar, length(), indeksleme (s[0]), ve dosya/konsol I/O'sunun davranışını doğrudan belirler.


Gelişme (Olası Yaklaşımlar)

  • UTF-8 bayt dizisi (Go/Rust tarzı): En basit runtime temsili (host C++ std::string'e doğrudan eşlenir, ADR-015 "host heap" ilkesiyle uyumlu). Ama s[0] bir bayt döner, bir "karakter" değil — Türkçe karakterler (ç, ş, ğ) çok-baytlı olduğundan indeksleme kafa karıştırabilir.
  • Kod-noktası (code point) dizisi: Her "karakter" tek birim — daha sezgisel ama dönüşüm/depolama maliyeti var.
  • v0 önerisi: UTF-8 bayt temsilini benimse (C++'la doğal uyum), ama length()/indeksleme dokümantasyonunda "bayt sayısı/bayt indeksi" olduğu açıkça yazılsın — ileride runeAt()/codepointLength() gibi yardımcı builtin'lerle (ADR-016/017) kod-noktası erişimi sağlanabilir.

Açık Sorular

  • String immutable (değişmez) mi olacak (Java/Python tarzı, value-semantics ile de uyumlu) yoksa mutable mi?
  • String birleştirme (+) ve karşılaştırma operatörleri tip denetiminde (Faz 3) nasıl ele alınacak — string + int gizli dönüşüm mü (ADR-010 "gizli dönüşüm yok" ile çatışır, muhtemelen E003)?

İmza/Yorum: Bu karar ne kadar erken alınırsa, sonraki tüm builtin/stdlib tasarımı (özellikle JSON/XML parser örnekleri, ADR-017) o kadar sağlam temellenir.

### Giriş (Nedir, Neden Önemli?) `string` tipi dil kimliğinde var ama "string nedir" sorusu (bayt dizisi mi, karakter dizisi mi, UTF-8 mi) henüz hiç tartışılmadı. Bu karar, `length()`, indeksleme (`s[0]`), ve dosya/konsol I/O'sunun davranışını doğrudan belirler. --- ### Gelişme (Olası Yaklaşımlar) - **UTF-8 bayt dizisi (Go/Rust tarzı):** En basit runtime temsili (host C++ `std::string`'e doğrudan eşlenir, ADR-015 "host heap" ilkesiyle uyumlu). Ama `s[0]` bir bayt döner, bir "karakter" değil — Türkçe karakterler (ç, ş, ğ) çok-baytlı olduğundan indeksleme kafa karıştırabilir. - **Kod-noktası (code point) dizisi:** Her "karakter" tek birim — daha sezgisel ama dönüşüm/depolama maliyeti var. - v0 önerisi: UTF-8 bayt temsilini benimse (C++'la doğal uyum), ama `length()`/indeksleme dokümantasyonunda "bayt sayısı/bayt indeksi" olduğu açıkça yazılsın — ileride `runeAt()`/`codepointLength()` gibi yardımcı builtin'lerle (ADR-016/017) kod-noktası erişimi sağlanabilir. --- ### Açık Sorular - String **immutable (değişmez)** mi olacak (Java/Python tarzı, value-semantics ile de uyumlu) yoksa mutable mi? - String birleştirme (`+`) ve karşılaştırma operatörleri tip denetiminde (Faz 3) nasıl ele alınacak — `string + int` gizli dönüşüm mü (ADR-010 "gizli dönüşüm yok" ile çatışır, muhtemelen `E003`)? *İmza/Yorum:* Bu karar ne kadar erken alınırsa, sonraki tüm builtin/stdlib tasarımı (özellikle JSON/XML parser örnekleri, ADR-017) o kadar sağlam temellenir.
saqut added the
fikir
tip-sistemi
labels 2026-06-14 22:14:03 +03:00
Sign in to join this conversation.
No description provided.