JVM internals - what does the JVM do? — Ian Rogers

User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

crypto5 wrote:
rzen wrote:иногда сеттеры и геттеры помимо присвоений производят дополнительные пляски бубном, например проверяют правильность переданного значения переменной или вообще прячут тот факт что за ними переменной нет вообще, а значение возможно читается из присоединённого объекта (а этот получается как прокси). вариантов много разные. суть в том чтобы спрятать конкретику от пользователя.
Ну вот я считаю что для иногда писать кучу ненужного кода это premature optimization. При необходимости можно потом отрефакторить.
компилятор джавы оптимизирует сеттеры/геттеры, вместо вызовов они компилируются инлайн (если только это не более сложные чем присвоение методы которые могут быть скомпилированы как вызов). иными словами отсутствие сеттера ничего не даёт кроме несколько меньшего визуального шума.
Don't code today what you can't debug tomorrow.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

crypto5 wrote:
Интеррапт wrote:
crypto5 wrote:
Интеррапт wrote:
Леонид Ильич Брежнев wrote: Какой ужас.
Ну чего ужас? Костыли они и есть костыли. Для тех, кто ненавидит сотни строчек с обьявлениями getXXX и setXXX.
А почему бы просто паблик поля не использовать?
А что если хочешь работать с JPA, где нельзя просто повесить аннотации на public instance variables, т.к. все равно обязательно нужны getters/setters.
вроде не обязательно, кажется есть какой то AccessType.FIELD который говорить JPA работать с филдами а не с accessor-ами
AccessType.FIELD позволяет обращаться к полям напрямую, но всё равно приходится помнить что перед вами может быть объект а может быть и прокси и приходится проверку на этот факт делать вручную. только в некоторых случаях (например при первичном создании объекта) можно быть уверенным что перед вами объект, что, вобщем, может оказаться удобным. но стоит ли экономия нескольких строк кода двух разных способов доступа к полям объекта в вашем коде? вам решать.

при этом я абсолютно согласен что отсутствие в языке джава полноценной концепции properties, с синтезируемыми сеттерами/геттерами и синтаксисом присвоения это однозначный косяк. причём давно и активно обсуждаемый, насколько мне известно джависты у руля не хотят сдаваться. пожуём увидим, как говорит Интеррапт, может в джаве 9 это изменится :-)
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

А каким образоm в языках поддерживающих концепцию properties имплементируется инкапсуляция? Киньте ссылку на какую-нибудь статью плст, гуглить что-то лень.
User avatar
Flash-04
Уже с Приветом
Posts: 63430
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Flash-04 »

http://stackoverflow.com/questions/3739 ... properties
Encapsulating data is not about hiding it from the client of the class or making it unaccessible, it's about ensuring a consistent interface and internal object state.

Let's say you have an object representing a stick shift car, and a property to set the speed. You probably know that you should shift gears in between speed intervals, so that's where encapsulation comes in.

Instead of simply making the property public, thus allowing public access without any verification, you can use property getters and setters in C#:
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Montchik wrote:А каким образоm в языках поддерживающих концепцию properties имплементируется инкапсуляция? Киньте ссылку на какую-нибудь статью плст, гуглить что-то лень.

Code: Select all

obj.property = value
компилируется в

Code: Select all

obj.setProperty(value)
А в языке предусматривается способ определить свои сеттеры/гетеры либо синтезировать автоматом.
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

Ага, то есть если я определю сеттер(setGear()) для проперти (gear), то он будет использоваться, а если не определю - то компилятор его сгенерит. А что, удобно. Исходный код чище получается. А в Java разве нельзя того же эффекта с помощью annotations добиться? Что-то типа: @Property private int gear;
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Montchik wrote:Ага, то есть если я определю сеттер(setGear()) для проперти (gear), то он будет использоваться, а если не определю - то компилятор его сгенерит. А что, удобно. Исходный код чище получается. А в Java разве нельзя того же эффекта с помощью annotations добиться? Что-то типа: @Property private int gear;
можно, этим и занимается упомянутый Интерраптиком ломбок.
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

Посмотрел я на этот ломбок. Проект в начальной стадии еще...
Было бы неплохо если бы в Java появились стандартные аннотации для этого. Типа как JSTL для JSP. И лучше конечно пораньше, чем в 9й версии.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Montchik wrote:Посмотрел я на этот ломбок. Проект в начальной стадии еще...
Было бы неплохо если бы в Java появились стандартные аннотации для этого. Типа как JSTL для JSP. И лучше конечно пораньше, чем в 9й версии.
раньше девятой врядли, седьмая уже вышла, восьмая для новых фич закрыта.

Не обязательно аннотации, лучше бы фичей синтаксиса языка.
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

Блин, к девятой версии энтузазисты успеют налабать несколько таких ломбоков. Опять придется тратить время на мертворожденные фреимворки, написанные пьяными студентами на коленках их боевых подруг. :cry:
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

Montchik wrote:Блин, к девятой версии энтузазисты успеют налабать несколько таких ломбоков. Опять придется тратить время на мертворожденные фреимворки, написанные пьяными студентами на коленках их боевых подруг. :cry:
вот изза такого соплежевания я в своё время отошёл от жавы. Вроде стало меняться к лучшему. Тьфу тьфу.
Don't code today what you can't debug tomorrow.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

:D На самом деле не все так плохо. Просто надо старательно и аккуратно отделять зерна от плевел и будет щастье.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Интеррапт »

Montchik wrote:Посмотрел я на этот ломбок. Проект в начальной стадии еще...
Было бы неплохо если бы в Java появились стандартные аннотации для этого. Типа как JSTL для JSP. И лучше конечно пораньше, чем в 9й версии.
Смотря, что именно там в начальной стадии. Проекту несколько лет уже. Всякие getters, setters, data и т.п. там уже давно и все хорошо работает.
User avatar
Montchik
Уже с Приветом
Posts: 2119
Joined: 27 Dec 1999 10:01
Location: Воронеж -> Naperville, IL

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Montchik »

Первичный признак "начальной стадии" выделен на скриншоте. Ну и второй момент это отсутствие документации. Я не говорю, что этот фреимворк плохой или там полно багов. Не вкурсе я, ибо не использовал. Но имхо выглядит сыровато, а когда это до ума доведут, в саму Java уже могут быть включены основные фичи.
You do not have the required permissions to view the files attached to this post.
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by M. Ridcully »

Ё-моё, геттеры-сеттеры.

Я про многословность немного другое имел в виду. Ну типа (кстати, подскажите - может это можно уже как-то сделать? Я Java не знаю, в-принципе): нельзя из функции несколько значений вернуть, нельзя функцию swap() написать (ну или tuple assignment). Даже то, что для hello word программы нужно класс рожать, как-то странно очень.

А геттеры-сеттеры - тут проблема не в языке, а в том, что вы от него хотите. Если автоматически чем-то там нагенерите, код от этого умнее не станет.
Мир Украине. Свободу России.
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by M. Ridcully »

dotcom wrote:Никак не хотел разводить флейм.
Хи-хи. Первый раз в интернеты зашли? :mrgreen:
Мир Украине. Свободу России.
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by valchkou »

M. Ridcully wrote:Ё-моё, геттеры-сеттеры.
Я Java не знаю, в-принципе): нельзя из функции несколько значений вернуть.
вернуть List или HashMap или другой класс с кучей значений
Last edited by valchkou on 23 Jul 2012 19:22, edited 1 time in total.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by Интеррапт »

Montchik wrote:Не вкурсе я, ибо не использовал. Но имхо выглядит сыровато
Ну вам виднее :mrgreen:
На самом деле какая там еще документация нужна? Показан код с lombok и показан аналогичный vanilla Java код, который генерится, с комментариями автора. Если кто-то не сможет в таком разобраться - ну так значит ему этот фреймворк и не нужен.
Montchik wrote:а когда это до ума доведут, в саму Java уже могут быть включены основные фичи.
Так вы расскажите, что там до ума доводить то нужно? :) Веб сайт красивее переделать? А так все хорошо работает - новые фичи добавляет, баги для новых фич оперативно фиксят.
А насчет, что в Джаву будут включены такие фичи, то ждите, ждите. Учитывая, что Java 8 выйдет только через год и никаких конкретных планов по поводу Java 9 нет (и еще не факт, что туда такое добавят), то ждать вам как минимум года 3.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

M. Ridcully wrote:Ё-моё, геттеры-сеттеры.

Я про многословность немного другое имел в виду. Ну типа (кстати, подскажите - может это можно уже как-то сделать? Я Java не знаю, в-принципе): нельзя из функции несколько значений вернуть, нельзя функцию swap() написать (ну или tuple assignment). Даже то, что для hello word программы нужно класс рожать, как-то странно очень.

А геттеры-сеттеры - тут проблема не в языке, а в том, что вы от него хотите. Если автоматически чем-то там нагенерите, код от этого умнее не станет.
класс рожать это не изменится, джава это не перл, на таких вещах никто экономить не будет.

что касается работы с кортежами это тоже не случится, какими бы удобными они ни были. кортежи это из другой вселенной. если сеттеры/геттеры появятся в 9тке то кортежи в 99тке :-)
Don't code today what you can't debug tomorrow.
User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by M. Ridcully »

rzen wrote:с кортежами
Ух ты, запахло дачным подвалом и пачками журналов "Наука и Жизнь"...
Мир Украине. Свободу России.
User avatar
rzen
Уже с Приветом
Posts: 24375
Joined: 18 Nov 2003 16:42

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by rzen »

M. Ridcully wrote:
rzen wrote:с кортежами
Ух ты, запахло дачным подвалом и пачками журналов "Наука и Жизнь"...
:love:
Don't code today what you can't debug tomorrow.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by crypto5 »

valchkou wrote:
M. Ridcully wrote:Ё-моё, геттеры-сеттеры.
Я Java не знаю, в-принципе): нельзя из функции несколько значений вернуть.
вернуть List или HashMap или другой класс с кучей значений
Меня больше всего в джаве бесит отсутствие type inference и лямбд. А так со всем остальным можно жить.
In vino Veritas!
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by dotcom »

M. Ridcully wrote:
rzen wrote:с кортежами
Ух ты, запахло дачным подвалом и пачками журналов "Наука и Жизнь"...
Это было больше в "Кванте". :D

Возвращаясь к теме плохой Жабы. Меня больше всего забавляет, сколько фреймворков создано вокруг Java, чтобы добавить динамические типы в язык, а в Javascript каждый фреймворк в то же время пытается добавить классы и библиотеки. При этом в последней редакции ECMA собирались ввести (опять) классы. Торпедировали. Догадайтесь кто. Не подглядывать в Eich'овский блог! :P
User avatar
flip_flop
Уже с Приветом
Posts: 4379
Joined: 20 Jun 2001 09:01

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by flip_flop »

dotcom wrote:
M. Ridcully wrote:
rzen wrote:с кортежами
Ух ты, запахло дачным подвалом и пачками журналов "Наука и Жизнь"...
Это было больше в "Кванте". :D
Да и в научной (не популярной) литературе было много до начала конца империи. Приятно вспомнить :fr:
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: JVM internals - what does the JVM do? — Ian Rogers

Post by valchkou »

Montchik wrote:Посмотрел я на этот ломбок
проект был бы более популярен если бы не "м"

Return to “Вопросы и новости IT”