HeMet
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Я хочу использовать old objects, индексировать массивы при помощи (. .) | А я хочу это только в музее видеть. Вместо старых объектов можно использовать современные записи, вложенные в друг друга, а массивы уже давно индексируются через квадратные скобки. Цитата: использовать наследование record helper, поля automated и диспетчирезацию методов по dispId. | With тройной вложенности и absolute вместо приведения типа, прямое обращение к портам ввода-вывода и обработка прерываний в прикладном коде. Динамическая диспетчеризация под COM затачивалась, пусть там и остается. Цитата: Потому что это мое наследие, наследие всех, | Может мне тоже вспомнить про моё TP-«наследие» со школьной скамьи? Вообще, это называется древний, дремучий код, но «наследие» определённо звучит красивее. Цитата: кто однажды полюбил TP или Delphi. | Любите дальше: ставьте DOS на виртуалку, туда TP и ностальгируйте сколько угодно, а в современном языке таких выкрутасов не надо. Цитата: Когда я слышу это, мне хочется кого-нибудь убить. | Тому, кто будет сопровождать код, написанный, как сказано выше, захочется того же. Цитата: А сейчас как раз такие веяния. Пришли новые люди в команду компилятора, запудрили мозги тупым менеджерам, | Программисты, под чью дудку пляшут менеджеры — это что-то новое. Цитата: Нету их ещё и не будет, пока не будет доказана их исключительная полезность. Даже под iOS это COW-строки. То ли народ ничего не читает, то ли у ЭМРО талант свои намерения подавать самым поганым образом. Цитата: ARC - причем принудительно. | Он на iOS везде. Ругать iOS-ный компилятор за то, что там везде ARC. Это всё равно, что ругать виндовый за то, что у него весь COM на интерфейсах. Цитата: А что будет сломана совместимость с кодом, написанным десять лет назад - что им до того? | Они его как раз вводят таким образом, что бы старый код работал без видимых отличий и переписываний. Разница проявится в особых случаях: например, когда убивается объект, на который есть ссылки из других частей программы. Под десктопам это приводит к висячим-указателям (dangling pointer), когда не понятно жив пациент или уже нет. А там и двойное высвобождение памяти подоспевает или использование мертвого объекта, короче говоря, бомбы замедленного действия. В случае ARC объект просто будет жить до тех пор пока на него не пропадут ссылки, либо до конца программы. Если ссылка была на какой-нить файл или типа того, это плохо, но код, который до этого довел, в любом случае, хуже. Проблемы висячих указателей с ARC тоже нет: свойство Disposed однозначно указывает на состояние объекта. Цитата: Это поколение ушибленное додНЕТ. | Не путайте, в .NET сборщик мусора (недерминированный механизм), а ARC - это, по сути, то, что сейчас используется для интерфейсов, динамических массивов и строк. Цитата: А что, мордой салат в корпоративах? | Пусть лучше среду развивают, а не древности стерегут. Цитата: Там такой говнокод под капотом, что его наследованием не расширить, и если бы не helpers и доступ к приватным полям и методам, пришлось бы модифицировать стандартный код, что, разумеется нежелательно. | Вы того же самое могли получить, скопировав себе файлы в папку проекта и поправив там, что нужно. Правда, правки были бы не отделимы от остального кода. С другой стороны у хелперов есть неслабый минус: нельзя просто так перекрыть непубличный метод - нужно ещё и перекрыть публичные, которые к нему ведут. Я на это напоролся, когда правил TPathData из FMX: пришлось в хелпер пихать то, что совсем туда пихать не хотелось. В итоге сделал, как написал выше. Цитата: Придут кодеры, покалеченные Доднедом, и начнут говнокодить... | И чем их говнокод хуже говнокода с old objects, absolute вложенными with и прочим? Тем что он не «родной»? Цитата: Ты вообще в курсе, как в нетривиальном коде все может обстоять? Мы не университетской аудитории, это wild-wild-world, там такая может быть "грязная" арифметика указателей, что только держись. | Вы ругаетесь на говнокод от дотнетчиков, а сами пишите про «нетривиальный код», который, видимо, написан из расчета, что каждый кто к нему прикоснулся должен страдать. Считай, что в лоб, что по лбу. Цитата: Ты в курсе, еще раз спрошу, как трудно выловить баги, связанные с двойным освобождением памяти? | А в таком коде, который вы описываете, что угодно сложно отследить, тем более двойное освобождение памяти, но ARC хотя бы позволяет это как-то отслеживать. Цитата: А [weak] следует пристрелить просто за использование скобок, чертова безвкусица. | Он — атрибут, они все в скобках. Но лучше бы сделали ключевым словом. Цитата: И я дожен везде его расставлять? | Не надо его везде расставлять. Они нужны только там, где иначе будут циклические ссылки, либо там где доступность ресурса не обязательна (аля кнопка и TAction). Цитата: Вы и так полно уродства описали, чем Вас это так напрягло? Цитата: Ведь в сложной системе трудно предсказать, когда разрешится последняя ссылка. | Только если в ней ссылки на конкретный объект расползаются чёрт знает куда. Тут два варианта: 1. Объект всем нужен - ARC сохранит его до тех пор пока он кому-то нужен, а потом замочит. 2. Анти-шаблон «Плюшкин»: хватаем всё что мимо пробегает и ни за что не отпускаем. Косяк в архитектуре: используем слабые ссылки. Без ARC это бы привело либо к утечкам памяти, либо к висячим указателям и двойной очистке памяти. Цитата: Так что [weak] практически бесполезен для идеологии ARC | В чистом ARC он архи-полезен, так как решает проблему циклических ссылок и повисших указателей. Цитата: либо нужно явно контролировать время жизни самого указателя. | Что ARC и делает, когда обнуляет слабые ссылки на очередной убитый объект. Цитата: Да! Я могу все что хочу, и хочу все что могу! | А я не хочу поддерживать код, который написан под таким лозунгом. |