https://pascalabcnet.github.io/mydoc_release_notes_3_6_1.html
За перегрузки Pred
и Succ
особое спасибо. Насчёт вопроса - мне кажется должно происходить обычное переполнение. То есть Succ(char(word.MaxValue),1)
должно возвращать #0
.
А насчёт JoinIntoString
- много кода, конечно, сломается. Но всё же чистить такие мелочи в целом хорошая практика.
Не совсем понятно зачем они нужны, если проще написать +
или -
для некоторого значения. Ради чего они планируются? Ради совместимости с другими Pascal? Даже если и ради неё, то, как по мне, это странно, ибо язык много где отказался от неё, точнее некоторая каша - здесь за данную совместимость держаться, а тут нет. Но, если нет, то какая выгода от этих функций? И почему только для символов?
Лучше тогда уже сохранить обе версии, на время. Потом - старую удалить. Либо сразу перенести в специальный модуль для обратной совместимости, например PABCSystemBC
(back compatibility). Нужна обратная совместимость - пусть подключат дополнительный модуль. Это не только к переименованию относится, а вообще к изменениям, нарушающим обратную совместимость. Так делаю, например, в NETSquirrel
.
Для символов надо очень объёмный код для такого.
JoinIntoString останется, но нигде не будет виден
‘z’+1 это поведение уже определено - это ‘z1’
Хорошая идея. Думаю, поступим по-другому: 2 годика пусть побудет невидимым. Потом сделаем ключевое слово deprecated - и будет выдаваться предупреждение. А потом и уберём.
Есть атрибут ObsoleteAttribute
для этой цели уже. Сами же говорили не раз, лишние ключевые слова - ни к чему. Кстати, в Free Pascal
такое ключевое слово есть.
Да и поддерживать этот атрибут компилятором - лишним явно не будет. У многих .dll написанных на C# можно его встретить, но сейчас паскаль просто молчит о нём.
Если бы язык строго держался не только за .NET-языки, но и иные Pascal, то ключевое слово deprecated
было бы не лишним. Но, сейчас это не так. Сейчас у нас совместимости почти нет… Если @Admin решит взять курс на хорошую совместимость с другими диалектам Pascal, то флаг ему в руки, пусть делает. Но, сейчас если пытаться там делать что-то для совместимости, тут - нет, получится ещё лишь большая каша с этим… Не хотелось бы усугублять ситуацию.
ObsoleteAttribute - при использовании метода возвращается ошибка. Это не то, что мы хотим
Можно, всё-же, увидеть код? У меня всё в порядке:
uses System;
[Obsolete]
procedure P() := exit;
begin
end.
Скажем, так:
///--
function JoinIntoString(...): string; extensionmethod; deprecated;
begin
...
end;
Она не видна, но если кто-то использует, бросается Warning.
Вот, в Java:
@Deprecated — когда мы хотим сообщить компилятору то, что метод является устаревшим, мы должны использовать эту аннотацию. Документация по Java рекомендует предоставлять компилятору информацию о том, почему этот метод является устаревшим и какой метод следует использовать вместо него в Javadoc.
Это хорошее решение, но:
- Подобное ключевое слово используется в
Free Pascal
, вроде бы, всё хорошо. Но, почему тогда в других местах совместимости с ним почти нет? Вполне логичный вопрос. - Язык на платформе .NET и хорошо было бы, если бы он был совместим с другими языками. В данном случае - этого не будет (хотя, может, это ключевое слово - синтаксический сахар над
Obsolete
и тогда - этот пункт не в счёт). В общем, зависит от реализации.
А, да, увидел, спасибо. Там в Obsolete параметр есть, бросать исключение или warning
Всё-же, что на счёт первого пункта? У нас границы совместимости с другими диалектами Паскаля какие-то размытые. Может, стоить чётко решить, держаться ли за совместимость или нет? Точнее, чтобы не только Hello world
-ы с других диалектов на PascalABC.NET компилировались. Предлагаю посмотреть на Free Pascal
, там многие вещи включаются директивами.
Не понял. В каком первом пункте. И в чем вопрос.
Вопрос про новое ключевое слово:
Да, я согласился, что Obsolete правильнее
Добавлено s.IndicesOf
… но временно. Как и анонсировано, войдет в версию 3.6.2.