Я предпринимал некоторые предварительные усилия по реализации UTF8String
, для которых мне приходилось решать проблемы, связанные с сообщениями, такими как #size
, #at:
, #do:
и т. Д. Среди них есть некоторые, для которых я не мог найти подходящего решения. Примеры включают #new:
(класс) и #at:put:
(экземпляр), потому что количество байтов, которое им потребуется (или использование), зависит от фактических символов, которые в конце концов будет содержать строка.Как люди внедряют UTF-8 в Smalltalk?
Одной из идей, которую можно было бы рассмотреть, является выделение дополнительных (неиспользуемых) нулевых байтов в хвосте, которые на самом деле не были бы частью строки, и использовать #become:
только в тех случаях, когда один из них заканчивается из нулевых позиций. Это хорошая (или плохая) идея? Как должна работать надлежащая реализация?
Спасибо aka.nice. Я рассмотрел это, но не пробовал (пока), потому что новый класс не наследовал бы от String, и это могло бы создать некоторые проблемы синхронизации (оба класса развиваются вместе) плюс то, что кажется значительным дубликатом кода (не так уверен это все же). –
@LeandroCaniglia ok, может быть проблемой в Cuis, в этой схеме String должен быть абстрактный (указательный) класс, UTF8String переменнойByteSubclass и ByteString другой (с некоторым известным соглашением кодировки), как в Squeak. –
О да. Ты прав! Я не рассматривал эту возможность. Я не использую Cuis, но в моей системе абстрактный класс 'String' равен байтам. Ваша идея для рефакторинга теперь имеет для меня большой смысл. –