Go's UTF-Unterstützung: Eine interessante Einschränkung

Susan Sarandon
Freigeben: 2024-11-09 00:09:02
Original
209 Leute haben es durchsucht

Go

Ich habe mich in letzter Zeit mit der UTF-8-Unterstützung von Go beschäftigt und war neugierig, wie gut es nicht-lateinische Skripte im Code verarbeitet.

Los und UTF-8

Go-Quelldateien sind standardmäßig UTF-8-kodiert. Das bedeutet, dass Sie theoretisch Unicode-Zeichen in Ihren Variablennamen, Funktionsnamen und mehr verwenden können.

Zum Beispiel könnten Sie im offiziellen Go-Playground-Codebeispiel auf Code wie diesen stoßen:

package main

import "fmt"

func main() {
    消息 := "Hello, World!"
    fmt.Println(消息)
}
Nach dem Login kopieren

Hier ist 消息 Chinesisch für „Nachricht“. Go meistert dies dank der Unicode-Unterstützung problemlos. Diese Fähigkeit ist einer der Gründe, warum Go in Ländern wie China und Japan an Popularität gewonnen hat – Entwickler können Code mit Bezeichnern schreiben, die in ihrer eigenen Sprache aussagekräftig sind. Sie werden es nicht glauben, aber es ist in China sehr beliebt, Code in ihrer Muttersprache zu schreiben, und ich liebe es.


Versuch, tamilische Identifikatoren zu verwenden

Natürlich wollte ich das mit Tamil, meiner Muttersprache, ausprobieren.

Hier ist ein einfaches Beispiel, das ich geschrieben habe:

package main

import "fmt"

func main() {
    எண்ணிக்கை := 42 // "எண்ணிக்கை" means "number"
    fmt.Println("Value:", எண்ணிக்கை)
}
Nach dem Login kopieren

Auf den ersten Blick scheint dies unkompliziert zu sein und kann fehlerfrei ausgeführt werden.

Aber als ich versuchte, den Code zu kompilieren, stieß ich auf Fehler

./prog.go:6:11: invalid character U+0BCD '்' in identifier
./prog.go:6:17: invalid character U+0BBF 'ி' in identifier
./prog.go:6:23: invalid character U+0BCD '்' in identifier
./prog.go:6:29: invalid character U+0BC8 'ை' in identifier
./prog.go:7:33: invalid character U+0BCD '்' in identifier
./prog.go:7:39: invalid character U+0BBF 'ி' in identifier
./prog.go:7:45: invalid character U+0BCD '்' in identifier
./prog.go:7:51: invalid character U+0BC8 'ை' in identifier
Nach dem Login kopieren

Das Problem mit der tamilischen Kombination von Zeichen verstehen

Um zu verstehen, was vor sich geht, ist es wichtig, ein wenig über die Funktionsweise der tamilischen Schrift zu wissen.

Tamil ist ein Abugida – ein Schriftsystem, bei dem jede Konsonant-Vokal-Sequenz als Einheit geschrieben wird. In Unicode beinhaltet dies häufig die Kombination eines Basiskonsonantenzeichens mit einem oder mehreren Kombinationszeichen, die Vokale oder andere Modifikatoren darstellen.

Zum Beispiel:

  • Der tamilische Buchstabe க (U 0B95) repräsentiert den Konsonantenlaut „ka“

  • Um „ki“ darzustellen, würden Sie க mit dem Vokalzeichen ி (U 0BBF) kombinieren, was zu கி.

  • führt
  • Das Vokalzeichen ி ist ein Kombinationszeichen, das in Unicode speziell als „Non-Spacing Mark“ klassifiziert wird.

Hier entsteht das Problem.

Die Sprachspezifikation von Go erlaubt Unicode-Buchstaben in Bezeichnern, schließt jedoch Kombinationszeichen aus. Insbesondere können Bezeichner Zeichen umfassen, die als „Buchstaben“ (Kategorien Lu, Ll, Lt, Lm, Lo oder Nl) und Ziffern klassifiziert sind, jedoch keine Kombinationszeichen (Kategorien Mn, Mc, Me).


Beispiele für die Kombination von Zeichen auf Tamil

Sehen wir uns an, wie tamilische Schriftzeichen gebildet werden:

  • Eigenständiger Konsonant: க (U 0B95) – Erlaubt in Go-Bezeichnern.

  • Konsonantenvokalzeichen: கா (U 0B95 U 0BBE) – Nicht zulässig, da ா (U 0BBE) ein Kombinationszeichen (Mc) ist.

  • Konsonantenvokalzeichen: கி (U 0B95 U 0BBF) – Nicht zulässig, da ி (U 0BBF) ein Kombinationszeichen (Mn) ist.

  • Konsonantenvokalzeichen: கூ (U 0B95 U 0BC2) – Nicht zulässig, da ூ (U 0BC2) ein Kombinationszeichen (Mc) ist.

Im Bezeichner எண்ணிக்கை („Zahl“) enthalten die Zeichen Kombinationszeichen:

  • எ (U 0B8E) – Buchstabe, erlaubt.

  • ண் (U 0BA3 U 0BCD) – Gebildet aus ண (U 0BA3) und dem virama ் (U 0BCD), einem verbindenden Zeichen (Mn).

  • ண (U 0BA3) – Buchstabe, erlaubt.

  • ிக்கை – Enthält Kombinationszeichen wie ி (U 0BBF) und ை (U 0BC8).

Da diese Kombinationszeichen in Go-Bezeichnern nicht zulässig sind, gibt der Compiler Fehler aus, wenn er auf sie stößt.


Warum chinesische Schriftzeichen funktionieren, Tamil jedoch nicht

Chinesische Zeichen werden in Unicode im Allgemeinen in die Kategorie „Buchstabe, Andere“ (Lo) eingeordnet. Es handelt sich um eigenständige Symbole, die keine Kombinationszeichen erfordern, um vollständige Zeichen zu bilden. Aus diesem Grund funktionieren Bezeichner wie 消息 in Go perfekt.

Praktische Implikationen

Die Unfähigkeit, Kombinationszeichen in Bezeichnern zu verwenden, hat erhebliche Auswirkungen auf Skripte wie Tamil:

  • Eingeschränkte Ausdrucksfähigkeit: Ohne die Kombination von Markierungen ist es nahezu unmöglich, aussagekräftige Bezeichner auf Tamilisch zu schreiben.

  • Bildungsbarrieren: Die Verwendung nativer Skripte kann das Erlernen des Programmierens leichter machen, aber diese Einschränkungen behindern diese Möglichkeit, insbesondere für Sprachen, die dem Abugida-basierten Schriftsystem folgen.

  • Inklusivitätsherausforderungen: Während Go mit seiner UTF-8-Unterstützung auf Inklusivität abzielt, schließen die Einschränkungen beim Kombinieren von Marken viele Sprachen aus, die darauf angewiesen sind.

Zusammenfassung

Die UTF-8-Unterstützung von Go ist ein großer Schritt hin zu einer inklusiveren Programmierung. Der Ausschluss von Kombinationszeichen in Bezeichnern schafft jedoch Hindernisse für Sprachen wie Tamil, Hindi und Arabisch, wo Kombinationszeichen integraler Bestandteil der Schrift sind.

Für mich als Entwickler aus Tamilnadu, der hauptsächlich mit Go arbeitet, war diese Entdeckung sowohl aufregend als auch etwas enttäuschend. Es beleuchtet die Komplexität einer echten Internationalisierung in Programmiersprachen.

Wer programmiert in Muttersprachen für die Entwicklung von Softwareprodukten !?!!!!

Absolut! Nicht so sehr, abgesehen von der ostasiatischen Region, wo das auf „Abugida“ basierende Schriftsystem nicht befolgt wird.

Und natürlich hätten die Macher von Go die UTF-8-Konformität für die „Muttersprachliche Codierung“ von vornherein nicht vorgesehen. Der Grund lag eher in der Bereitstellung einer besseren ASCII-Verarbeitung, der Angleichung an moderne Webstandards, einer konsistenten String-Verarbeitung und einem Schritt in Richtung Interoperabilität.

Dieser Versuch war nur meine Neugier, zu verstehen, wie weit wir die UTF-8-Konformität in Go bringen können. Als jemand, der an der Entwicklung skalierbarer, verteilter Fintech-Systeme in Go arbeitet, fand ich es wichtig, sich dieser Nuancen bewusst zu sein.


Das ist alles. Danke fürs Mitlesen.

Viel Spaß beim Codieren :) Möge der Code mit dir sein.

Das obige ist der detaillierte Inhalt vonGo's UTF-Unterstützung: Eine interessante Einschränkung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage