нет задачи поддерживать код для TP или ещё какого-то легаси?
В его случае достаточно было бы перейти на Integer даже
Потому что это паскаль, где базовый числовой тип - integer
но ведь дженерики и AdvancedRecords ты используешь?
К тому, что фичи появляются и ты их используешь, так же можно и новыми типами/алиасами типов пользоваться... язык развивается потихоньку и типы тоже можно развивать
Именно, и читаю и копипашу тонны кода, где везде integer, а не int32. Еще не хватало и тут месива типов.
Все развивается, но TurboPascal compatibility - FIRST
получается ты переносил какой-то старый код, писанный не под FPC и столкнулся с таким поведением, что System.Integer<>32bit ? Ну такое с легаси бывает...
Это не легаси, это валидный и БОЛЕЕ НАДЕЖНЫЙ код, где системные штуки, которой является и Integer достаются через System.xxx, таким образом защищая от того что где-то в стороннем Uses могут переопределить Integer/Length/xx и все сломать, с трудноуловимыми багами
Как я должен защищаться о переопределения Length?
тогда смирись, что в FPC не стали убивать совместимость со старыми версиями и system.integer оставили таким же, каким он был в оригинале
Ты ко всем типам добавляешь префикс system. на всякий случай, вдруг его кто-то в интерфейсной части переопределит?
Ну вот видишь, так что проснулись под «капиталистов» выходит, ой ой
извини, но ты дурак или как? ФПЦ не 10 лет, они начинали хз как давно ещё под дос. причем тут капиталисты?
Да для доступа к системным штукам в каких-то сложных сценариях, когда возможно получить конфликт имен я именно так и делаю, еще и повышая читаемость.
Тем не менее переопределение возможно, в одном из модулей, что использует небольшой юнит, и поиском потом бага. А с system.xxx, не сломаным - это исключено
возможно, и я не спорю но это будет конкретная такая диверсия, и то, что это диверсия согласятся 100% людей в группе в отличие от спора что же такое integer, тут как видим голоса разделились
Ок кейс. Я использую модуль MegaCool, где автор, в какой-то момент, определил свой Length для строки, который считает и нультерминал, по какой-то там, нужной автору, причине. И вынес из его в интерфейс, для инлайнинга. И все мой код сломался что юзал Length для строк. А что юзал System.Length и тд - не сломался. Пример понятен? Это же касается и всего остального системного.
Понятен конечно, но это диверсия
и не только системного. ты ведь всегда пишешь MegaCool.MegaFoo?
Нет, это почти реальный кейс. Диверсия это про си, разные сильная сторона паскаля не то что его трудно так «взорвать»? Вот имеем что имеем FPC более подвержен сишным «диверсиям»
в смысле в Delphi этот код с переопределенным Length - он бы что нормально бы себя вёл? а в FPC ломается? Именно переопределение Length
Иногда именно так для читаемости, если нет префиксов и тд у типов/функций и они оч стандартные имена имеют, что возможно перекрытие и багадром
вот именно что иногда и для читаемости. а не для страховки
Да, и в дельфи и в фпц system.length - это настоящий length, тоже самое касается и всего остального «системного» в дельфи, но не в фпц. Я понятия не имею что там еще кроме System.Integer по приколу сломали.
Именно что для страховки
Но можно чуть улучшить ситуацию используя system.xxx, не так ли?
Можно, я одно время так и делал. Потом понял, что проще не тащить в проект что попало. А если надо притащить, то изолировать в модули и абстракци.
Воооот, и тут у мы приходим к тому, что FPC/Lazarus это 999999 инклюдов «чего попало», и тысяч дубликатов типов и функций, и вероятность «залететь» очень большая. От чего спас бы system.xxx, если бы не был сломан.
@rouse_79 ты же вроде тоже сталкивался с подставой подобной?, мб тебя услышат, я сдаюсь))
Мне проще один раз в начале модуля нужные режимы и дефайны поставить, чем в каждой строке неймспейсы указывать.
Дык в режиме Delphi - System.Integer = 16 бит 🤗🤗🤗
Напиши свой system.pas, делов-то =)
Проще выкинуть паскаль тогда
Ок, я ж проверил ) всё работает Где я облажался?
Вот видишь system.xx полезен - тоже самое с system.integer. Но он в fpc сломан в угоду TP
так ты утверждал, что System.Length тебе злой автор Cool модуля переопределил и ко всему этому приплёл типы, что вот мол и поэтому я с типами прав Но Length не переопределился! А типы юзай Int[Size]
Я говорил что если Length переопределили, в System.xxx можно достучаться до оригинала, тоже самое и для типов. Кроме Integer, который сломан в fpc.
вот ты просто запиши себе что system.integer - ты стучишь не в ту дверь
А вот тут и проблема - я хз что еще там сломали, ради каких-то странных идей
Все через system.xxx, а тут исключение, а есть ли еще такие исключения?(я не могу прочитать все 99999 инклюдов) Вот так код и становится «жидким».
https://t.me/Delphi_Lazarus/335740 https://t.me/Delphi_Lazarus/335694 Вот тебе ответы на все вопросы! 😝
Запомнить все нюансы физически невозможно. Да и паскаль вроде не цпп, чтобы читать 999 страничные стандарты. Разве не в этом сила этого яп? Паскаль про очевидность. То что в fpc Integer <> System.Intger - не очевидно. Косяк и точка.
Integer - это вообще не очевидно, вот Int32/Native - очень очевидно https://t.me/Delphi_Lazarus/335937
Integer, простите, это базовый числовой тип в языке.
И это наверное даже задокументировано в каком-то стандарте языка, да?!
Это задокументировано в отчете о паскале вирта - что есть базовый тип Integer, все остальное уже позже было.
гугл не находит такого отчёта...
https://oberoncore.ru/_media/library/wirth_the_programming_language_pascal.pdf Никаких Int32
Так кхм...кхм... сам Вирт тебе и говорит, что тип зависит от реализации завтра будет 5 битным юзай Int32 ! 😄
Именно так - в си тоже самое - подразумевается что это соответствует ABI системы, а не мамонта ДОСА, с 16 бит интом.
так то не вопрос, что он зависит от реализации. вопрос в том, что в компиляторе в зоне видимости два разных интеджера.
Это тоже кстати
Где тут слова система или аби? Тут есть слово реализация и всё.
Если мне в паскальном коде надо будет везде писать int32, то проще перейти на go. Integer - базовый тип, int32 - нашлепка, полезная для особых случаев.
Это уже разные... Один System. другой просто
Это оно и есть, не было тогда таких слов, под реализацией имелось ввиду «нативное», а не «давайте совместимость с не нативным досом сделаем, а с системой не сделаем, под x64/х32, и пофиг что int везде 32бит, у нас будет 16!»
Если ты пишешь код, в котором детерминирована размерность integer, то пиши Int32 (в чем я сомневаюсь). Никого же не напрягает использовать Int64 для больших чисел и т.д. Но реальная причина ведь не в этом. А в твоей странной привычке использовать system.Integer Да, и если ты не знаешь точно какой-тип в модуле у тебя, то нужно пересмотреть архитектуру приложения. Вообще у меня за правило, если я вдруг что-то начинаю делать в коде на всякий случай, то стоит задуматься, может у меня недостаточно квалификации в данном вопросе и стоит погрузиться в тематику или пересмотреть и отрефакторить код. Вот меня корежит, когда мне требуется что-то делать на всякий случай
Косяк и грабли - это переопределять в васяпупкинском модуле глобально типы, а систем.штото и просто штото это не косяк
Это не странная привычка, это использование базовой возможности. Если она сломана и приводит к тому что есть два разных Integer - пусть вырезают.
Дык fpc постоянно и переопределяет типы из System в каких-то там инклюдах неясных 🤡🤡🤡
Как раз ничего не сломано. Сломали в свое время в другом месте ) В Lazarus сделали по умному для совместимости
Это не васяпупкинский модуль А Cool-вася.pas - пупкинский, ибо решил глобально переопределить что-то
О, наконец-то назвал всё своими именами - привычка = СиндромУтёнка 😁
Я уже показал как это можно сделать случайно. И язык поддерживает разрешение этой проблемы через System.xxx, но в fpc фича сломана, из-за дефективности базового типа Integer
Где написано что System.xxx deprecated? Раз не написано - базовая фича, которую можно использовать.
Лонгинт заюзай
Спор начал не я.
Почему я должен использовать дополнительный тип, заместо базового Pascal типа?
Это уже 3 или 4-ый раз когда тебя "вынуждают" вести этот спор. В следующий раз можешь написать мне в личку, если кто-то тебя будет вынуждать )
Чтобы всё работало, а не ломалось
ДЛя чего вообще столько типа целочисленных, да и вообще типов? ЧТобы Петра запутать?
Что мешает не спорить? Я написал - костяк есть и точка, но мне пытаются доказать что 16бит Integer - это норма.
Мне на инт пофиг
А всего то лишь надо сделать Integer нормальным на уровне компилятора, и проблем не было бы.
Зачем тогда споришь?))
Так он нормальный, сам Вирт подтвердил
Я уже выше писал что имплементацион специфик = нативный, а не «древний дос 16 бит, денди»
Задевает камнебросание в сторону ФПЦ, там других проблем полно (о которых я бы и не спорил)
Это личное мнение, интерпретация, четкого определения не дано, можно понимать как угодно эти слова(Вирта)
Также как меня задевает бред о капиталистах в ембе которые что-то там специально делают несовместимым с фпц, я всего то привел обратный пример.
Это Алексей, не я, я с ним не согласен в этом
Дык и для си и тд не дано - есть сложившиеся реальность/дефакто
Тогда тебе не к чему задеваться тут, пройти мимо и все
для C все просто. Переопределять фундаментальные типы НЕЛЬЗЯ.
ну какбы модули. имеют свои типы - на то он и модульный язык
Вы хотите об этом поговорить? У меня есть что ответить и немало. Но не будут, ок
даже try..except? 😊
Эм. Ну его не на всякий случай делают. Строго говоря для обработки исключений. Собственно, обычно если его ставят на всякий случай правило, ИМХО такое же: стоит подумать на кодом, чтобы таких чувств не возникало 🤷♂️ Это мое мнение, которому я стараюсь следовать
если исходить, что трай-эксцепт - соломка/мат - то, имхо, стелить ее надо в тех местах, где вероятность падения велика :)
try except - это к тому, что не соломка/мат, а инcтрумент для обработки исключений. Ну вот так, банально ) Я вот в некоторых классах намеренно свои делаю классы исключений и даже генерирую исключение. Ведь не для того, чтобы внести долю неопределенности, чтобы кто-то думал о том, чтобы на всякий случай где-то вставить try except, а для упрощения работы алгоритма, так потому что логичнее. Я в целом понимаю, о чем ты мне хочешь сказать. Каюсь, в исключительных случаях я ставлю try except не столько для обработки, а "на всякий случай". Но мне такие места не нравятся и как правило к ним мне приходится возвращаться, чтобы сделать его более осознанным и без всяких "на всякий случай"
А как обработаешь исключение?
Да в баню это исключение)
покажу ошибку и посоветую позвонить разработчику :)
Обсуждают сегодня