1. Wäre das nicht ziemlich unpraktisch und unlogisch? Wenn kein Bit gesetzt ist dann hat ein Zähler den Wert 0 und nicht 1. Auch beim Positionieren/Auffinden von Einträgen in "selbst verwalteten Listen" ist das so sinnvoller. Sprich ich habe einen Speicherblock und bestimme die Position eines Eintrags einfach per: Blockanfang + (Eintrag Größe * Zähler). 1 basiert würde das nicht passen.
Klar, du redest von Listen und meinst mit Sicherheit Klassen wie StringList, ObjectList etc.. Aber das würde es ja noch uneinheitlicher machen, wenn nur die bei 1 beginnen.
2. Ein Grund mehr der gegen 1. spricht. Je mehr das Framework oder der Compiler uns von grundlegenden Strukturen und Techniken fern hält, desto leichter verliert man das Bewusstsein für das was man macht.
Wie z.B. hier. Wie bereits erwähnt, wird hier nicht mit Objekten hantiert sondern mit einfachen "Zahlen" Werten jongliert. Aber das Bewusstsein dafür gerät schnell in den Hintergrund da der Compiler das De- Referenzieren für uns übernimmt.
(Das soll keine Rede gegen Hochsprachen oder Vereinfachungen sein.)
3. Das ist doch genauso umständlich? Ob ich jetzt Anführungszeichen oder Spitzklammern und Steuersymbole tippe. Sehe gegenüber Format, ggf. mit ein par IfThen, keinen Vorteil (ja, gut die Platzhalter hätten einen sprechenden Namen...). Aber String Operationen würden langsamer da der Compiler jedes Mal implizit einen Parser anwerfen muss. Das müsste per OptIn gesteuert werden... evtl. ein Prefix, sowas wie z.B. Format
Und zum Thema Übersetzung und Lokalisierung... Da gibt es eine einfache Lösung: Keine String Literale im Quelltext verstreuen. Wer sowas macht verdient es gar nicht seine Texte wiederzufinden
Und wenn man schon Übersetzen muss, dann kann man sie gleich auf Resourcestrings oder ähnliches umstellen. Ein Austauschen von Wörtern, innerhalb eines Satzes, ist keine Übersetzung. Man muss also eh eine "echte" Lösung finden.