|
![]() |
#1 |
Участник
|
final изначально пришел из Java.
в Java все методы были виртуальными по умолчанию. это значит, что их надо вызывать через таблицу виртуальных методов. в то далекое время руководство Sun Microsystems болело идеей "Джаву в каждый утюг" (примерно как сейчас руководство Майкрософт болеет идееей "Всё в облака"). Поэтому вопрос вызова джава кода из всяких девайсов, С, С++, ASM казался очень-очень актуальным. изначально модификатор final был сугубо техническим, применялся к методам и менял сигнатуру вызова метода - не через виртуальную таблицу, а напрямую. как побочный эффект - такой метод нельзя было наследовать. потом, когда болезнь стала менее актуальной, final стали применять к классам. а потом и к пропертям класса, а потом и к переменным метода. Теперь модификатор final в Джаве трактуется как const. то, что final запрещает наследовать, на практике стали использовать гораздо позже, когда в джаве появились enum. ============= классическая аксапта до CIL использует очень древнуюю виртуальную машину Java. Final там никаким боком. Поэтому использовали его достаточно хаотически. Насколько я понимаю, единственное его оправданное применение - это классы, которые реализованы в ядре. Типа TextBuffer. Но и то не уверен. final в x++ не дает заметных преимуществ в скорости работы. проверено ============= лично я оставляю модфикатор final в коде X++ во взаимосвязанных классах. когда изменение в одном неизбежно должно повлечь изменение в другом. причем появление final обильно комментирую. как правило, это код, который работает с внешними dll, .net или com. final конечно же не помешает моим коллегам поменять класс или отнаследоваться. он просто повышает вероятность, что натолкнувшись на ошибки компиляции и матюкнувшись на криворукого автора, коллеги таки прочтут комментарий. на проектах никаких других гарантий final в X++ не дает ============= также модификаторы final/private часто использую при рефакторинге в своих иерархий классов. типа наваял 3-5-10 дочерних классов, потом подумал (как обычно) и изменил методы внутре. если при этом нужно удалить какой-то базовый метод, то очень даже удобно сначала пометить его как final или private и сделать инкрементную компиляцию - компилятор выдает ошибки в дочерних методах, которые надо изменить. ============= Цитата:
но то, что вендор оставляет private/final, говорит лишь о том, что вендор ни фига не понимает какой продукт и для кого он делает. и просто убивает аксапту и делает из него совершенно другой продукт для других людей. что ж, это его право. https://coub.com/view/itbtz Последний раз редактировалось mazzy; 29.09.2021 в 20:21. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
![]() |
#2 |
Участник
|
|
|
![]() |
#3 |
Moderator
|
Я тоже много раз читал рассуждения mazzy по поводу того что Аксапта использует древнюю явовскую VM, но никогда не читал что-то подобного в воспоминаниях участников процесса или даже архивных внутренних документах MS. При этом схожесть с явой в старой аксапте - она тоже достаточно относительная. Я бы скорее назвал X++ версии 2.5 "Visual Basic с явовским синтаксисом". Все-таки многие очень фундаментальные явовские идеи - типа интерфейсов, появились в языке только где-то в DAX2009 (хотя да - interface был reserved word со времен версии 2.1).
Последний раз редактировалось fed; 30.09.2021 в 10:19. |
|
![]() |
#4 |
Участник
|
Цитата:
В Ax<=2012 своя ВМ и свой рантайм. Это можно даже по внешним свойствам догадаться. Оно ведет себя не как ява, а как динамический рантайм со статическим проверщиком типа тайпскрипт. final - оно ж прежде всего логическая вещь, а не для перформанса. |
|
|
|