Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 59 60 [61] 62 63 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#901
,
|
|
|
|
Цитата D_KEY @ Отказывается. Связность-то как это увеличивает? У некой подсистемы есть иерархия ошибок. Кроме того, не проверяются runtime-исключения(не помню названия базового класса). увеличивает количество ограничений на "клиентский модуль". грубо говоря: если возникает исключение в "серверном" методе, то он сам должен либо его обработать и выполниться корректно, чтобы "клиентский" метод этого не заметил, либо завалить всю систему с громким звуком, а если он пробрасывает исключение клиенту, то клиент волен сам выбирать, что с ним делать, и нужно ли вообще с ним что-то делать. это вообще должно разруливаться не клиентом, а средством взаимодействия клиента и сервера. как в POSIX-шелле операторы && и ||. т.е. "клиентский" метод не должен заботится, попадут ли к нему данные или нет. Добавлено вряд ли брешут, большинство говноподелий написаны на делфи, не думаю, что QIP -- исключение Добавлено Цитата Qraizer @ Боже мой... раздутые сахарные properties, мегатеоритики в типах и концепциях и впервыеслышащиеословоconst... 20 страниц... почти во всех ЯП, где есть зарезервированное слово const, оно служит средством объявления констант, а не приписывание иммутабельности некоему значению (иными словами -- образованию типа иммутабельных значений), потому и удивление. |
|
Сообщ.
#902
,
|
|
|
|
Цитата korvin @ почти во всех ЯП, где есть зарезервированное слово const, оно служит средством объявления констант, а не приписывание иммутабельности некоему значению (иными словами -- образованию типа иммутабельных значений), потому и удивление. На самом деле там все вполне логично: ![]() ![]() const SomeClass Object(100500L); int i = Object.Method(); // Method должен быть объявлен как const |
|
Сообщ.
#903
,
|
|
|
|
Цитата Мяут-Настоящий @ На самом деле там все вполне логично: ![]() ![]() const SomeClass Object(100500L); int i = Object.Method(); // Method должен быть объявлен как const ![]() такое применение -- следствие и частный случай. да, оно логично вытекает из смысла const, но не соответствует семантике const в других ЯП. т.е. здесь в C++ ты объявляешь, что Object является значением типа (const SomeClass), в других ЯП объявления вида ![]() ![]() const a = someValue; означает лишь то, что a -- константа, равная someValue. в Go например константы даже не типизированы. в делфи для констант, значения которых примитивны (почти все кроме record и class, емнип) тип также не обязан указываться. грубо говоря, почти во всех ЯП семантика const соответствует #define CONSTNAME value (с некоторыми оговорками) значительно больше, чем плюсовому const name value; |
|
Сообщ.
#904
,
|
|
|
|
Цитата korvin @ А как реагируют другие ЯП, на вызов метода, меняющего состояние? Или вообще на любую попытку изменить состояние, как то присваивание?такое применение -- следствие и частный случай. да, оно логично вытекает из смысла const, но не соответствует семантике const в других ЯП. т.е. здесь в C++ ты объявляешь, что Object является значением типа (const SomeClass), в других ЯП объявления вида Цитата korvin @ Не знаю как в делфи, а в старом борландовском паскале константы вообще вели себя по странному. Значение константы всегда можно было поменять. в делфи для констант, значения которых примитивны (почти все кроме record и class, емнип) тип также не обязан указываться. Т.е. от обычной переменной они отличались только тем, что инициализировались не нулями, а указанными значениями. |
|
Сообщ.
#905
,
|
|
|
|
Цитата Повстанець @ А как реагируют другие ЯП, на вызов метода, меняющего состояние? Или вообще на любую попытку изменить состояние, как то присваивание? код ![]() ![]() const a = x a = y в любом ЯП вызовет ошибку, остальное может зависеть от языка. Цитата Повстанець @ Не знаю как в делфи, а в старом борландовском паскале константы вообще вели себя по странному. Значение константы всегда можно было поменять. Т.е. от обычной переменной они отличались только тем, что инициализировались не нулями, а указанными значениями.ты что-то путаешь. |
|
Сообщ.
#906
,
|
|
|
|
Цитата korvin @ ты что-то путаешь. ![]() ![]() program HelloWorld; const a : Byte = 10; begin a := 15; writeln(a); end. |
|
Сообщ.
#907
,
|
|
|
|
Цитата Повстанець @ Цитата korvin @ ты что-то путаешь. ![]() ![]() program HelloWorld; const a : Byte = 10; begin a := 15; writeln(a); end. вот именно, что мутном =) есть менее мутные ресурсы впрочем проверил во фрипаскале твой код, вначале удивился, потом понял. все дело в ссылках. объявляя ![]() ![]() const a = 10; ты объявляешь константу равную числу 10. объявляя ![]() ![]() const a : Byte = 10; ты объявляешь константу равную ссылке на значение типа Byte имхо, логика понятна, но это ппц как не очевидно, особенно учитывая, что Byte -- не ссылочный тип. тут Вирт грубо нарушил принцип наименьшего удивления, спору нет. |
|
Сообщ.
#908
,
|
|
|
|
Это не Вирт, это Канн. Вот с бухты-барахты решил, что типизированные константы - это круто и решил их объединить с новомодным Сшным/Плюсовым приколом с инициализацией переменных при определении, дабы ошибок использования неинициализированных сущностей поубавить. Взял т.с. лучшее с прямого конкурента, угу. Ему Вирт просто синтаксических вариантов немного оставил. Однако они были, и никто его под дулом пистолета вот так делать не заставлял. ИМХО взять лучшее и воплотить по-индусски - это отсюда в Дельфи и началось.
Справедливости ради замечу, что потом у компилятора появилась галка, чтоб типизированные константы "без базара" считать константами. Круто-то как. Поставишь CONST и потом ещё не забыть галку чекнуть, мол, слышь, вот там если CONST увидишь, так это..., то мамой клянусь CONST, без базара. И константные параметры к слову тоже были, просто пишешь CONST заместо VAR, и они в натуре были константными ссылками, D_KEY! OBJECTы в хипе самоконструктятся и самодеструктятся в отличие от автоматических или локальных, полиморфность (опциональная!) набирает обороты в лице OWL и её динамических методов, структурная модульность с их ещё не введёнными в язык, но уже вот-вот initialization/finalization, обретает второе дыхание в лице динамических библиотек... В общем, выруливать язык стал помалеху. Но потом Филипп ушёл в отставку, и понеслась... Чем больше номер Дельфей, тем меньше логики, зато толще мануал, больше расслабухи лентяям и ещё больше диктатуры программерам. Грустно. |
|
Сообщ.
#909
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ Отказывается. Связность-то как это увеличивает? У некой подсистемы есть иерархия ошибок. Кроме того, не проверяются runtime-исключения(не помню названия базового класса). увеличивает количество ограничений на "клиентский модуль". грубо говоря: если возникает исключение в "серверном" методе, то он сам должен либо его обработать и выполниться корректно, чтобы "клиентский" метод этого не заметил, либо завалить всю систему с громким звуком, а если он пробрасывает исключение клиенту, то клиент волен сам выбирать, что с ним делать, и нужно ли вообще с ним что-то делать. это вообще должно разруливаться не клиентом, а средством взаимодействия клиента и сервера. как в POSIX-шелле операторы && и ||. т.е. "клиентский" метод не должен заботится, попадут ли к нему данные или нет. Брр.. Тебе никто не мешает следовать такому подходу. Проверяемые исключения позволяют лишь документировать те исключения, которые может ожидать клиент + предоставление гарантий о том, что других исключений, кроме указанных(а также runtime'овских) быть не может. Цитата почти во всех ЯП, где есть зарезервированное слово const, оно служит средством объявления констант, а не приписывание иммутабельности некоему значению Объясни разницу между первым и вторым. В С++ просто константа может иметь любой тип, в том числе и класс. Вот и вся разница. Цитата Ты по-моему не совсем понял смысл const.иными словами -- образованию типа иммутабельных значений Представь, что мы имеем константу, тип которой описан классом. Некоторые операции этот объект делать может, так как они не требует измнения его состояния, а некоторые - нет. Так понятнее? Добавлено Цитата korvin @ Go например константы даже не типизированы. Это как? Каким образом определяется, в каких операциях может участвовать объявленная константа? |
|
Сообщ.
#910
,
|
|
|
|
Цитата korvin @ тут Вирт грубо нарушил принцип наименьшего удивления, спору нет. Вирт тут ни причем, это фишка именно Delphi. Честно говоря, глубокий смысл типизированных констант от меня ускользает так же Цитата Повстанець @ Не знаю как в делфи, а в старом борландовском паскале константы вообще вели себя по странному. Значение константы всегда можно было поменять. Ты что-то путаешь. Константы поменять нельзя было, это уже типизированные константы - какие-то особенные объекты Delphi, еще раз повторю, чей смысл ускользает и от меня. |
|
Сообщ.
#911
,
|
|
|
|
Цитата --Ins-- @ Цитата korvin @ тут Вирт грубо нарушил принцип наименьшего удивления, спору нет. Вирт тут ни причем, это фишка именно Delphi. Честно говоря, глубокий смысл типизированных констант от меня ускользает так же Как определить, какие сообщения(методы) могут быть обработаны данной константной? В каких операциях константа может использоваться? Разве эти веши определяются не типом? А чем тогда? Добавлено Цитата korvin @ грубо говоря, почти во всех ЯП семантика const соответствует #define CONSTNAME value Тип этой константы - это тип value. То есть typeof(value) или, по новому стандарту, decltype(value) |
|
Сообщ.
#912
,
|
|
|
|
Цитата D_KEY @ Разве эти веши определяются не типом? А чем тогда? Типом, который определяется значением константы. |
|
Сообщ.
#913
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Разве эти веши определяются не типом? А чем тогда? Типом, который определяется значением константы. Ну так и тут также |
|
Сообщ.
#914
,
|
|
|
|
Цитата D_KEY @ Ну так и тут также Тут - это где? Это ты к кому вообще обращаешься? |
|
Сообщ.
#915
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Ну так и тут также Тут - это где? Это ты к кому вообще обращаешься? В случае т.н. "типизированной" константы. Если ты говоришь, что поведение определяется типом значения константы, то константа типизированна. Если не согласен, то поясни пожалуйста, в чем отличие? |