|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
А вполне такой себе приличный язычок программирования, с которым можно жить... Closable, лямбды, потоки обработки, методы как объекты, отложенные вычисления, автоматическое распараллеливание и прочие вкусности, и вроде бы уже можно попрограммировать чего-то! Я сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды. Прогресс налицо! Гай Стил, I love you! ---- Читал хинты оракла. Много думал... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2016, 19:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivА вполне такой себе приличный язычок программирования, с которым можно жить... Да, я ссылок на методы много лет ждал. Теперь появился новый способ переиспользовать код не плодя при этом тонны фигурных скобок. MasterZivClosable Since 1.5 :) AutoClosable - Since 1.7 MasterZivавтоматическое распараллеливание Ага. И при этом плохо управляемое. MasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды. Тоже тащусь уже несколько месяцев. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2016, 20:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды. А можно код увидеть ? Хочется проникнуться вместе с вами :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2016, 09:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Я бы тоже хотел посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2016, 10:06 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZiv, всё. Пропал Илья. Стал на скользкую дорожку... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2016, 10:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
korshun, JonnySKS, http://www.leveluplunch.com/java/examples/count-distinct-word-occurrences-in-file/ ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2016, 10:44 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
grasoff.netkorshun, JonnySKS, http://www.leveluplunch.com/java/examples/count-distinct-word-occurrences-in-file/ ps этот из гугла ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2016, 10:45 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
korshunMasterZivЯ сегодня написал программу подсчета частоты слов в тексте, заняла примерно 5 строк, и обработала первый том "Войны и мира" за что-то типа секунды. А можно код увидеть ? Хочется проникнуться вместе с вами :) пошою, конечно... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2016, 13:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Обещаный код. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 15:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZiv, Если уж использовать Java 8, то только на полную катушку Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 16:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Воинствующий во мне бюрократ не удержался и накатил патчик. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 17:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
А пока писал кто-то уже опередил. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 17:13 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
автоматическое распараллеливание Можно спросить - что под этим подразумевается ? Выполнение в несколько потоков? Выполнение на нескольких компьютерах ? В этом коде распараллеливание где-то происходит? В какой строке? На С++ та же задача вычисляется за то же время или быстрее/медленнее ? Понятно, что это тест, но на мой вкус, подсчет частоты слов - вообще для SQL сервера задача. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 19:06 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Наверное речь идёт о Collections.parallelStream и ему подобном API. Но у меня есть сомнения что это будет полезно для 99% софта. Он практически весь - последовательный по своей природе. А оставшийся один процент надо еще суметь правильно распараллелить. Старик Амдал хохочет над нами. Практически сегодня когда говорят о параллелизме в Java-development - подразумевают способность задачи прогружаться в контейнеры Hadoop или Spark. Со всеми вытекающими. Тоесть и датасорс тоже должен параллелиться. Лежать на специальных БД или в специальных ФС. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 19:17 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, Спасибо, вот и я о том же подумал: "а как же данные?" а оно вон как оказывается - HDFS же :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 20:06 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Нет. Чтоб гонять параллельные алгоритмы - HDFS не обязателен. Но если взять наш конкретный пример - чтение текста с подсчётом слов то ему опция параллелизма не даёт ничего. Пожалуй если мы "Войну и Мир.txt" прогрузим в heap - возможно и будет какой-то выигрыш но сам момент этой загрузки всё равно - последовательный и мы будем заниматься самообманом, рассказывая всем что сумели распараллелить задачу. P.S. Старый Джин помер 10 ноября 2015 года. И теперь смеётся над нами уже из могилы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2016, 21:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
ART-CODEавтоматическое распараллеливание Можно спросить - что под этим подразумевается ? Выполнение в несколько потоков? Выполнение на нескольких компьютерах ? В этом коде распараллеливание где-то происходит? В какой строке? На С++ та же задача вычисляется за то же время или быстрее/медленнее ? Понятно, что это тест, но на мой вкус, подсчет частоты слов - вообще для SQL сервера задача. в этом уже нет параллельного вычисления. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 00:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonНаверное речь идёт о Collections.parallelStream и ему подобном API. Но у меня есть сомнения что это будет полезно для 99% софта. Он практически весь - последовательный по своей природе. А оставшийся один процент надо еще суметь правильно распараллелить. Старик Амдал хохочет над нами. Практически сегодня когда говорят о параллелизме в Java-development - подразумевают способность задачи прогружаться в контейнеры Hadoop или Spark. Со всеми вытекающими. Тоесть и датасорс тоже должен параллелиться. Лежать на специальных БД или в специальных ФС. +- в том смысле, что "не совсем Java", как и С++ уже "не совсем C++" (А Хадуп, СПАРК и тп - это мимо кассы в данном моменте.) Амдал хохочет, это да, причем и громко и сочно. Но там где "зашитый" параллеллизм сейчас вьют, со всем уважением к Амдалу, думают об опечалившемся Муре - уперлась производительность транзисторов в 3 Мгц без водяного охлаждения и 5 Мгц с ним. Потому Мур теперь живет методом удвоения числа процессорных ядер. Это подстава, которую надо чем-то грузить, чтобы хоть как-то оправдать потраченные покупателем деньги на смартфона последней модели. Вот оно и прорастаем многоветочно, то в виде parallelStram, то в виде compleatableFuture. Это совсем другое программирование. Оно, конечно, чистосердечное большое спасибо за сокрытие всех кишков в обновленных рантаймах и вновь переписанных библиотеках. Приседец здесь в том, что даже метод сокрытия алгоритмов в целях обеспечения "безопасного" языка не гарантирует правильности результата, который будут формировать те три исключительно красивые строчки, от которых неделями будет тащиться сотворивший их автор. Даже если тебе на кухне запретили пользоваться ножами и топорами, выдав вместо них электрическую мясорубку, желательно все же понимать, что в ея нутре тоже есть ножи и совать в нея пальцы вместе с мясом не рекомендуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 11:37 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Уменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 12:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Коллективный разум зудит во мне... Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 12:46 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова. Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 13:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczMasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова. Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду. Форматирование не моё лубимое кое-где, но -- да, Java-style я лично не приемлю вообще никак. Так что если про это -- идите в пень. Про код -- пиши, пожалуйста. Это не rocket science, а эксперементальная программулька. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 13:37 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonКоллективный разум зудит во мне... Код: java 1.
Ну, и чё он зудит-то ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 13:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton // Mayton: I do not know what is it, but autoboxing is works! (Integer v1, Integer v2) -> (v1 + v2) Что-то типа Integer.valueOf(v1.intValue() + v2.intValue()), если я правильно понимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 13:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivФорматирование не моё лубимое кое-где, но -- да, Java-style я лично не приемлю вообще никак. Убрал переносы - ещё не значит сделал код короче. MasterZivТак что если про это -- идите в пень. Взаимно. MasterZivПро код -- пиши, пожалуйста. Это не rocket science, а эксперементальная программулька. Ок. Зачем такая заумная регулярка вместо \p{Punct}, \w, \s? Зачем собирать в мапу, чтобы потом снова конвертить её в стрим? Инлайнить огромные куски кода в аргумент это не красиво и не удобно для отладки. Зачем плодить новый Stream для каждой строки, если можно было бы сразу парсить текст на слова и стримить (Scanner, Splitterator, StreamSupport) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 13:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Collectors.toMap со слиянием имеет смысл для parallel stream. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 13:58 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей Арсеньев Что-то типа Integer.valueOf(v1.intValue() + v2.intValue()), если я правильно понимаю Скорее всего, mayton имел ввиду вопрос "Чо эта за merge такой и нафига он нужен для создания Map". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:03 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczCollectors.toMap со слиянием имеет смысл для parallel stream. Гоню. merge нужен для не уникальных значений в stream вообще. К Fork/Join это прямого отношения не имеет. Хотя метод и может быть использован как join. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
авторОк. Зачем такая заумная регулярка вместо \p{Punct}, \w, \s? А, это во-первых, подбирал под конкретный текст, во-вторых, сразу сделал с метасимволами, почему-то оно не сработало, но я не разбирался в деталях, почему. Да, может можно попроще, но там же смесь из как минимум двух языков -- русского и французского, так что есть специфика. авторЗачем собирать в мапу, чтобы потом снова конвертить её в стрим? Это странное замечание, собирать -- чтобы посчитать кол-во повторений слов. Затем заново конвертить в стрим -- чтобы отсортировать по частоте слова и распечатать в таком виде. авторИнлайнить огромные куски кода в аргумент это не красиво и не удобно для отладки. Да ладно, фигня всё это. авторЗачем плодить новый Stream для каждой строки, если можно было бы сразу парсить текст на слова и стримить (Scanner, Splitterator, StreamSupport) Это вообще не понял, где там для каждой строки стрим ? В смысле, не порождать стрим из стрима, а делать вложенные обработки в нескольких стримах ? Ну, а какая разница-то ? Мне было интересно именно разобрать операции, вычисляющие всё как бы "в одном потоке". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:07 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZiv, У тебя N+2 стрима. Один стрим строк файла, один стрим для печати Map и N стримов слов для каждого слова в каждой строке. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczMasterZiv, У тебя N+2 стрима. Один стрим строк файла, один стрим для печати Map и N стримов слов для каждого слова в каждой строке. Я это вполне понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivЯ это вполне понимаю. Ну и зачем их так много, если всё одним можно прогнать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczMasterZivЯ это вполне понимаю. Ну и зачем их так много, если всё одним можно прогнать? Ну, покажи, как. А вообще, там стримы от split-а возникают для каждой строки исходного файла и после влития в основной стрим удаляются. javadoc on flatMap * Returns a stream consisting of the results of replacing each element of * this stream with the contents of a mapped stream produced by applying * the provided mapping function to each element. Each mapped stream is * {@link java.util.stream.BaseStream#close() closed} after its contents * have been placed into this stream. (If a mapped stream is {@code null} * an empty stream is used, instead.) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 14:56 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivНу, покажи, как. В регулярное выражение добавляешь перенос строки и скармливаешь его сканеру. Из сканера делаешь стрим http://stackoverflow.com/a/29611792 Получаешь стрим слов и считаешь себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 15:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, Ок, попробую... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 15:13 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
boobyуперлась производительность транзисторов в 3 Мгц без водяного охлаждения и 5 Мгц с ним а чо так мало-то ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 15:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Арктур Менгск... а чо так мало-то ? дык оно не мало. Три порядка - да - сквозь пальцы просыпались, вот и приехало на печать, то, что осталось. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 16:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей Арсеньевmayton // Mayton: I do not know what is it, but autoboxing is works! (Integer v1, Integer v2) -> (v1 + v2) Что-то типа Integer.valueOf(v1.intValue() + v2.intValue()), если я правильно понимаю Я не про автобоксинг. Я про аккумулирование суммы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 16:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivmaytonКоллективный разум зудит во мне... Код: java 1.
Ну, и чё он зудит-то ? Один конструктор вроде-бы был лишний. И интерфейс List - более usable в будущем. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 16:48 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Я тему поднимал http://www.sql.ru/forum/1176249/hadoop-obshhie-voprosy (тему про тюториалы с Хадуп) Вобщем... я забил на нее большой болт т.к. был увлечён своими рабочими вопросами но щас пока пару недель я на bench - появилась возможность поразбираться с этим слоном. Как только у меня взлетит тестовая среда - я задачу Ильи попробую там закодить чтобы сравнить подходы. Правда возможно мне придётся Войну и Мир разбить на части если этот бородатый пейсатель не сделал это раньше за меня P.S. HDFS block = 128 Mb (OMG!) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 16:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczMasterZivУменьшил код, выбросил лишнее, но добавил новые проверки и вывод, ранжированный по частоте употребления слова. Ваше форматирование никуда не годится. Кортит меня и про код вообще написать. Но не буду. От-жеж бухтелка :). Тебя в Нетбинсе зобанили? Ну можно побыть толерантным к code-style ну йомайо... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 17:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonОт-жеж бухтелка :). Тебя в Нетбинсе зобанили? Ну можно побыть толерантным к code-style ну йомайо... Это не style, это лень. Выше ведь был более-менее нормальный код. И тут на те - сделал код короче - убрал переносы строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 17:25 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonMasterZivпропущено... Ну, и чё он зудит-то ? Один конструктор вроде-бы был лишний. И интерфейс List - более usable в будущем. Не понял нифига... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 18:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonЯ тему поднимал http://www.sql.ru/forum/1176249/hadoop-obshhie-voprosy (тему про тюториалы с Хадуп) Вобщем... я забил на нее большой болт т.к. был увлечён своими рабочими вопросами но щас пока пару недель я на bench - появилась возможность поразбираться с этим слоном. Как только у меня взлетит тестовая среда - я задачу Ильи попробую там закодить чтобы сравнить подходы. Правда возможно мне придётся Войну и Мир разбить на части если этот бородатый пейсатель не сделал это раньше за меня P.S. HDFS block = 128 Mb (OMG!) Война и Мир очень маленькая для таких экспериментов, надо что-то повесомее. Типа википерии. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2016, 18:17 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivВойна и Мир очень маленькая для таких экспериментов, надо что-то повесомее. Типа википерии. У меня где-то был Либрусек. Несколько гигов. Правда - формат fb2. Перед употреблением нужно чистить от шелухи в виде тегов. Хотя возможно в рамках подсчёта слов это почти не мешает. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 10:18 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivmaytonпропущено... Один конструктор вроде-бы был лишний. И интерфейс List - более usable в будущем. Не понял нифига... А забей. Я весь 2012 год провёл в code-review и рефакторингах. И привык машинально фиксить тонны Java-строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 10:22 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, типа так ? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 18:17 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Эх, ещё бы ненужный Код: java 1.
выпилить, вообще классно бы стало. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 18:19 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivЭх, ещё бы ненужный Код: java 1.
выпилить, вообще классно бы стало. Меня поначалу тоже удивляло что точка входа main() всегда обёрнута в class. Я думаю что это вежливый "реверанс" в сторону работы classloader-а. Но можно попробовать скрипы Groovy или Scala. Там требования к формализму будут помягче. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 18:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код выглядит не очень, мягко говоря. см. аналогичный пример из учебника на D https://dlang.org/wc.html Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 19:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
SiemarglКод выглядит не очень, мягко говоря. +1. Но в этом нет вины Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 19:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczSiemarglКод выглядит не очень, мягко говоря. +1. Но в этом нет вины Java. Тогда было бы неплохо посмотреть пример, где аккуратно используются >Closable, лямбды, потоки обработки, методы как объекты, отложенные вычисления, автоматическое распараллеливание и прочие вкусности =) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 20:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
SiemarglТогда было бы неплохо посмотреть пример, где аккуратно используются >Closable, лямбды, потоки обработки, методы как объекты, отложенные вычисления, автоматическое распараллеливание и прочие вкусности =) Ну, мне этот пример сейчас лениво переписывать Как вариант, могу предложить посмотреть сюда https://github.com/orengabay/importUsers2OpenLM/blob/master/src/main/java/com/openlm/userimport/Main.java ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 21:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, Это не формализм - это ООП. И Java - это не только язык, это технология, это jvm для которой существуем масса языков, можете выбрать на любой вкус. И в этом прелесть java, как технологии. Там где мне надо я использую Groovy. Другие любят Scala и .т. д. Я скажу больше. Если бы Groovy был под крылом Oracle, то многие (думаю, что очень многие) стали бы использовать именно его, а не java. Кто серьезно работал с Groovy, знают, что росказни об его неэффективости - это лишь росказни. Может быть кто-то гонится за наносекундами? А заказчика (умного) интересует качество и возможность поддержки того, что мы начудили и внезапно перешли на другую работу. Ни когда не приходилось разобраться с кодом JavaScript, написанным для Node.js с использованием всех этих xxJS (минимум штук 6: jQuery, Require, Backbone, Express и, о боже, еще пару десятков ), где каждая библиотека - это свой язык ( хотя и DSL) ? Конечно. все, что я выдал - это лишь мое личное мнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 22:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
booby, Я прибалдел. Это с каких пор Mгц (3 или 5) определяли производительность комп системы? Никто почему то не жаловался на Sun станции, процессоры, которых работали на частоте 500. Это не одно-шинная архитектура, вот и все. Одно-шинность - это изобретение Intel (да, великое), чтобы комп был дешевле и разработка ПО была бы дешевле. И вообще, погоня за тем что "мой код должен быть очень эффективным" - это глупость. Код должен просто работать и, желателно, надежно, а затем его надо оптимизировать. Я всегда смеялся над программерами, которые меня убеждали, что Node.JS велик тем, чно может одновременно держать 10,000 запросов (и всегда добавляли "в отличие от Java"). Я не встревал в теоретические споры (хотя мог бы ответить, что попробуй найти хотя бы одного банкира в здравом уме, который с этим согласится). Но отвечал, что, если бы Ваша система была загружена хотя бы 500 запросами в секунду, то Вы были бы богатыми и счастливыми, а мечтать о 10.000 - это удел серьезной компании (очень серьезной) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 23:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZiv, Извините, а при чем здесь C++, Java и .т.д ? Вопрос к ОС. Java просто пытается обернуть то, что умеет конкретная OC в portable API. Когда удачно, а когда нет Что значит фраза "на c++ вычисляется быстрее или медленнее" ? Когда-то был такой же спор, а какие программы быстрее, те, что на C или те, что на Assembler. Это вопрос типа Э а кто лучще борщ готовит, теща или жена". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 23:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, Складываем количества одинаковых слов, в случае если в Map уже есть такое слово. Можно и просто инкрементировать, но есть шанс потом как-нибудь нарваться на бомбу в изменении реализации. Как раз unboxing в виде Integer.valueOf(, а не new Integer( создает магию экономии памяти по сравнению с немодальным вариантом Integer. Есть конечно вариант с аналогичным поведением (до N модальный из прегенеренных, после изменяемый) Но это надо, чтоб ва встречались очень часто (гораздо больше 128 раз) и по многу. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivЭх, ещё бы ненужный Код: java 1.
выпилить, вообще классно бы стало. Лучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Alexey TominЛучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно. А вот он ответ Блажковичу, утверждавшему, что в Java нет duck typing. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевAlexey TominЛучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно. А вот он ответ Блажковичу, утверждавшему, что в Java нет duck typing. :) Лолшто? Вы о чем вообще? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:14 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, Хотя нет, был не прав. Запуск класса класслоадером, это тоже скорее реализация, чем Java, как язык ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:19 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Я про то, что стандартный способ описания в Java класса, как запускаемого, идет через наличие у него некоторого метода. И несколько месяцев назад прошедший спор на тему, что в Java duck typing нет, но можно организовать средствами jvm, например, через рефлексию. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, и да - это была шутка. Я там смайлик поставил. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Valery ShiskinЯ прибалдел. Это с каких пор Mгц (3 или 5) определяли производительность комп системы? Никто почему то не жаловался на Sun станции, процессоры, которых работали на частоте 500. Валерий. Я не уверен что квантор "никто" здесь можно применять. Давайте этит тезис помножим распространённость Spark и вообще спросим кто его видел и кто под него чего кодил. P.S. Вспомнился неуловимый Джо... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 10:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivClosableClosure ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 12:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
UsmanMasterZivClosableClosure ? Вырисовывается у нас тут топик на тему кому чего померещилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 12:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Usman Efficient Counter in Java Гонял на 8-ке. По моим впечатлениям, авторы заблуждаются на счет "Since Integer is immutable, each loop will create a new one for increment the old value" Поведение при unboxing такое же, как при Integer.valueOf(, т.е. до определенного момента это просто возврат ссылки на ранее сгенерированный instance. Посему MutableInteger проигрывают по памяти (и генерациям новых instance) при небольших числах. Пришел к выводу, что надо сделать класс, который immutable, до порога и mutable после при операции увеличения, присвоения. :) Ну или тупо выдрать код из hashmap и размещать в нем int. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 12:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
SiemarglКод выглядит не очень, мягко говоря. Какой код имеется в виду ? Siemarglсм. аналогичный пример из учебника на D https://dlang.org/wc.html Гы, вот как раз это -- пример почти совсем дебильного императивного кода. Радуют только FOREACH и что ими можно строки в файлах так просто перебирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:27 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Valery Shiskinmayton, Это не формализм - это ООП. Нет, это ни то, и ни другое. Это -- дебилизм. ООП головного мозга. (создателей Java, конечно). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:28 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Про остальные вопросы ко мне -- это не ко мне :-) Я такого не говорил, не делал, и вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевПоведение при unboxing такое же, как при Integer.valueOf(, т.е. до определенного момента это просто возврат ссылки на ранее сгенерированный instance. И что? Для сложения значений всё равно придется распаковывать в примитив. Сергей АрсеньевПосему MutableInteger проигрывают по памяти (и генерациям новых instance) при небольших числах. Это очень сильно зависит от задачи. Не всегда нужно много MutableInteger. Сергей АрсеньевПришел к выводу, что надо сделать класс, который immutable, до порога и mutable после при операции увеличения, присвоения. :) Эмпирически? Сергей АрсеньевНу или тупо выдрать код из hashmap и размещать в нем int. :) Или тупо найти в интернете 100500 реализаций для примитивов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:47 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczСергей АрсеньевПоведение при unboxing такое же, как при Integer.valueOf(, т.е. до определенного момента это просто возврат ссылки на ранее сгенерированный instance. И что? Для сложения значений всё равно придется распаковывать в примитив. В том смысле, что (1+1) не генерит новый instance Integer, берется ссылка на ранее сгенеренный. Другими словами все счетчики значения которых будут в диапазоне от 1 до 128 будут ссылаться на одни и те же instance Integer. Вот Код: java 1.
создаст новый Integer Что, в определенных пределах значений счетчика экономит память. Если же счетчик выйдет за диапазон, то на каждую итерацию инкремента, он будет создавать новый Integer и начнет проигрывать изменяемому варианту (по памяти). Магия чисел. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 15:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczЭто очень сильно зависит от задачи. Не всегда нужно много MutableInteger. Я про подсчет слов в Войне и мир. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 15:42 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Попробовал с unsafe (: Так он медленнее java.math.BigInteger'а ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 15:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
А вот так чем плохо: Код: java 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 16:14 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Valery Shiskin, автор... Это с каких пор Mгц (3 или 5) определяли производительность комп системы? Со времен арифмометра Феликс до, как минимум, времен изобретения конвейерных процессорных ядер. авторНикто почему то не жаловался на Sun станции, процессоры, которых работали на частоте 500. Это не одно-шинная архитектура, вот и все. Одно-шинность - это изобретение Intel (да, великое), чтобы комп был дешевле и разработка ПО была бы дешевле. Великое изобретение для процессоров с "архитектурой Intel" сделала не Intel, а AMD, причем тогда, когда Intel уже приняла решение бросить "свои технологии" и уже потратила деньги на выкуп процессорных технологий у HP (в те времена считалось приличном тоном тыкать в Линуса Торвальдса пальцем и приговаривать - смотрите, мол какой чудак, взялся писать новую операционную систему под, ясень пень, уже умершую даже в сознании создателя "технологию Intel"). авторИ вообще, погоня за тем что "мой код должен быть очень эффективным" - это глупость. Код должен просто работать и, желателно, надежно, а затем его надо оптимизировать. Зачем же его надо "оптимизировать", если "эффективным" - это глупость ? автор Я всегда смеялся над программерами, которые меня убеждали, что Node.JS велик тем, чно может одновременно держать 10,000 запросов (и всегда добавляли "в отличие от Java"). Я не встревал в теоретические споры (хотя мог бы ответить, что попробуй найти хотя бы одного банкира в здравом уме, который с этим согласится). Это профессия такая - смеяться над "программерами"? А про банкиров - таки да - вот днями буквально читал интервью с банкиром, измерявшем эффективность деятельности банковской организации числом реализованных за год заявок на исправление дефектов в программном обеспечении. Жизнь определенно наладится, когда каждый банкир станет экспертом по Node.JS авторНо отвечал, что, если бы Ваша система была загружена хотя бы 500 запросами в секунду, то Вы были бы богатыми и счастливыми, а мечтать о 10.000 - это удел серьезной компании (очень серьезной) про серьезность: У некоторых пород собак есть специфическая зависимость от хозяина. Собака физически может помереть, если потеряется сама или потеряет своего хозяина. У собак эту зависимость называют инфантильностью. А людей, не только не умеющих, а активно не желающих мечтать о 10.000 называют покорными судьбе. И людей, не имеющих своей судьбы, и собак, способных жить в изменившихся обстоятельствах, называют независимыми (от судьбы или хозяина). У меня нет сомнения, что та или иная степень независимости должна быть характерна для любой серьезной компании. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 17:30 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Кстати, хотел всем порекомендовать хорошую презентацию на тему потоков в Java8: http://www.coreservlets.com/java-8-tutorial/#streams-1 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 13:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZiv, Не стоит Stream потоком называть, наверное. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 20:22 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivКстати, хотел всем порекомендовать хорошую презентацию на тему потоков в Java8: http://www.coreservlets.com/java-8-tutorial/#streams-1 Хорошая презентуха. Как раз освещает то чего не хватает в обзорах восьмёрки. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 20:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 21:45 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего. Не забывай добавлять IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 22:13 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
no56892, Java 2 лучшая, нормально программируется и без всяких дженериков (c) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 22:34 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего. так и скажи что ни асилил ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 01:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverMasterZiv, Не стоит Stream потоком называть, наверное. а как называть? Ручейком? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 09:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего. ну, покажи... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 09:06 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverMasterZiv, Не стоит Stream потоком называть, наверное. Критикуя - предлагай. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 12:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
no56892Ничего особо полезного не заметил, джава 7 лучшая, а это все свистелки, практически ничего не дающие, но требующие лишнее время на изучение, просто так типо модно стало. В функциональном виде нормально программируется и без всяких лямбд и прочего. Программируется-то нормально. Но очень часто когда я хочу сделать определенную абстракцию, у меня это выливается в кучу анонимных классов и тонны фигурных скобок. И как результат, я всё откатываю и оставляю старый добрый копи-паст. В Java 8 код можно переиспользовать так же, но синтаксического шума на много меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 12:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Мне никогда не нравился синтаксис анонимных классов. Особенно эта игра со скобочками типа (...,new ImlClassname{...}); Это сильно ломает зрение и даже code-style с переносами и отступами не помогает избавиться от ощущения какой-то надуманности. По хорошему лямбды можно было ввести еще в Java 1.1 но очевидно что старые спеки language очень сильно били поклон в сторону архитектуры самой машины. Тоесть Classloader главенствовал и его выпячивали. Очевидно полагали что синтаксис языка и инстанциирования классов и интерфейсов должны быть явно показаны. Особенно анонимосы были уродливы в Swing-овых обработчиках событий. Не знаю как коллегам а я иногда выносил их в отдельный файл и (субъективно) читаемость становилась лучше. P.S> Это моё чортово IMHO и оно может быть опасно для вашего душевного спокойствия. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 13:25 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZiv, Мы стримами и зовём, никто не путается. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 14:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczDoSOfRedRiverMasterZiv, Не стоит Stream потоком называть, наверное. Критикуя - предлагай. дык, что-ж тут предлагать. Сами создатели не рискнули сделать это на внятном английском или путем присваивания не путающего бэкграунд читателя имени. автор потоками Stream - обыкновенная оговорка, идущая от желания дать сему явлению собственную вычислительную семантику, отличную от безликого class или interface. Что по созвучию автоматически приводит к потоку . Это не то, чтобы совсем неправильно, как раз, в некотором смысле, правильно - потому что речь идет о канализируемых алгоритмах обработки данных - но это никак не соотносится с уже закрепившимся пониманием потока как источника данных, используемым некоторым алгоритмом. Поэтому для аккуратного произношения ничего разумней, чем использовать в качестве определения слово интерфейс не остается. Потому - автор интерфейсами Stream И чем больше желания дать уточнение сему определению, тем быстрее наступит выход за границы возможного последующего развития идеи Stream. А совсем не строить такие цепочки определений - тоже не конструктивно. Возможное продолжение (распространение уточнения определения) может выглядеть так: автор канализирущими алгоритмы обработки (параллельные в том числе) данных (потоковых в том числе) интерфейсами Stream Уф. Развернули. Но ни говорить, ни писать так совершенно не возможно. Программирование не может так выглядеть, и, чтобы состоялось, развернутому определению должно быть дано собственное имя для практического ловкого использования. Предлагайте. Именование - не просто стартовая, она главная проблема программирования. Ты не можешь толком управлять тем, что не можешь назвать. Это я к тому, что пока имена не определены, но не названными объектами уже пользуются (а иначе их и назвать вряд ли получится), то вполне допустимо, что предложенное имя кем-то другим оценивается как неудачное, его глазами, а удачное еще не придумано. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 14:45 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverMasterZiv, Мы стримами и зовём, никто не путается. +1 мне видится это единственным разумным именем для русского языка на текущий момент. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2016, 14:47 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Alexey TominЛучше сделать щапускаемым любой класс, реализующий Runnable - будет естественно и понятно. Код: sql 1.
это процесс, который обязан иметь точку входа и который стартует, как минимум, один поток. Runnable - это поток. Это разные сущности, хотя они и используются совместно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2016, 08:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Basil A. SidorovRunnable - это поток. Это разные сущности, хотя они и используются совместно. Поток это поток, а Runnableб это запускаемый класс. Потоком или процессом. Почему запускаемый jvm класс решили описывать по методу duck typing - вот в чем вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2016, 20:34 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевBasil A. SidorovRunnable - это поток. Это разные сущности, хотя они и используются совместно. Поток это поток, а Runnableб это запускаемый класс. Потоком или процессом. Почему запускаемый jvm класс решили описывать по методу duck typing - вот в чем вопрос. Гослинг не думал об утиных нотациях IMHO. Просто наследовал идеому из С/C++. Мы сейчас можем облекать это в красивые словоформы но думаю всё было проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2016, 21:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
boobyDoSOfRedRiverMasterZiv, Мы стримами и зовём, никто не путается. +1 мне видится это единственным разумным именем для русского языка на текущий момент. На семинарах и конференциях в 99% случаях лектор так и будет делать. Не давать никакого перевода а просто вводить англоицизм в язык. И это правильно. В противном случае получим строки в Oracle которые могут быть как varchar2 так и datarows в зависимости от контекста высказывания. Или Thread (поток? нить?) против Stream который тоже может быть внезапно (!) потоком... Вобщем билиберда. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2016, 21:14 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonНе давать никакого перевода а просто вводить англоицизм в язык. Никогда не понимал, как англоязыкие программируют. Для них это же просто исковерканный язык какой-то. Наверное поэтому C и стал так популярен - там, в основном, скобочки. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 10:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевПоток это поток, а Runnableб это запускаемый класс."Верёвка это вервие простое". Runnable - абстрактный поток: скрытой в деталях "магией реализации" JVM может исполнять код метода run в отдельном потоке.Потоком или процессом.Вы устройство операционных систем почитайте, чтобы дошла разница между потоком и процессом. То, что изначальный юникс имитировал потоки на процессах - деталь реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2016, 18:34 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Basil A. SidorovRunnable - абстрактный поток: Это вообще не поток. И никакого отношения к потоку, кроме того, что из потока можно "из коробки" запустить определенный метод этого класса не имеет. Runnable это спецификация класса имеющего метод для выполнения в период активности не возвращающего значения. Вот Thread это класс реализующий поток и удовлетворяющий этой спецификации. Другое дело, что для запуска процесса больше подходит Callable, чем Runnable. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2016, 10:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Со ссылкой на Хабр. Подсчёт слов по шаблонам BigData и фреймворком Spark. https://habrahabr.ru/company/piter/blog/276675/ Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2016, 15:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Копаю stream() в данный момент. Стало интересно можно ли решить подобную задачу: Допустим есть некая сущность Entity, у нее есть свои поля, id, entityId, список версий и булен флаг active. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Допустим есть сервис, в котором мне возвращается список таких энтитис(ну допустим из базы). Поля версии в этом списке не заполнены. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Мне надо сгруппировать их таким образом - создать лист ентитис, в котором будут содержаться только активные, НО все неактивные для данного entitiesId должны попасть в список versions для активной сущности. Вот как это делается для java < 8 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Можно ли это переписать красивее или оптимальнее на java 8 использую stream()? Полный пример тут - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79.
Ваш вариант метода groupByVersionJava8? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 13:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:35 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник, Никакой особой магии тут не получится реализовать. Всё то же самое: Код: java 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:47 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Usman, Сначала отсортировать надо по e.active, иначе будет NPE ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczзабыл ник, Никакой особой магии тут не получится реализовать. Всё то же самое: Код: java 1. 2. 3. 4. 5. 6.
Ага, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) Думаю что можно сделать проще, но с полным перебором для поиска по id, вместо HashMap. Ещё можно развить идею Usman, отсортировать по active и entityId, чтобы затем схлопнуть в одну итерацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Посоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 16:51 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
slaymskПосоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS С английского языка. Если с ним всё в норме, то бери официальный Java Tutorial. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczslaymskПосоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS С английского языка. Если с ним всё в норме, то бери официальный Java Tutorial. слишком категорично, хотя, в целом, я поддерживаю ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
slaymsk, на ютубе полно видеороликов ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:27 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) Красиво не будет. Но вот однострочник, например: Код: java 1. 2. 3. 4. 5.
Единственное что пришлось добавить builder style setter Код: java 1. 2. 3. 4.
Ну, и код подразумевает обязательное наличие одной активной сущности для каждого id. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:31 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник, ну как-то так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
геттер для entityId сделаете и из мапы значения достанете сами ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 18:37 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
fixxerзабыл ник, ну как-то так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
геттер для entityId сделаете и из мапы значения достанете сами Класс обертка не подходит по ряду причин, к сожалению. В основном из-за кривого юая, именно за этим и такой изврат с версиями, потому что на юай только одно новое поле обработать) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 21:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczзабыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) Красиво не будет. Но вот однострочник, например: Код: java 1. 2. 3. 4. 5.
Единственное что пришлось добавить builder style setter Код: java 1. 2. 3. 4.
Ну, и код подразумевает обязательное наличие одной активной сущности для каждого id. Да, активная будет 100%. Интересно, а я вот и так и сяк групинг пробовал - но так ничего и не получилось. Вроде как и красиво все с этими стримами, но не интуитивно, надо обомозговать хорошо, в отличие от императивного стиля, взял да и заколбасил по ходу движения) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 21:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никfixxer Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
Класс обертка не подходит по ряду причин, к сожалению. В основном из-за кривого юая, именно за этим и такой изврат с версиями, потому что на юай только одно новое поле обработать) Вы не поняли. Мутабельная обертка используется только для свертки, на входе и выходе все та же Entity. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 22:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никВроде как и красиво все с этими стримами, но не интуитивно, надо обомозговать хорошо, в отличие от императивного стиля, взял да и заколбасил по ходу движения) А никто не обещает серебряной пули. Просто ещё один вариант. Нужно выбрать тот что проще и его реализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 09:13 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Дальше идёт моё сугубо личное ИМХО. Новое - хорошо забытое старое. Давайте почитаем как определяет Streams документация по Scala Цитирую http://www.scala-lang.org/docu/files/collections-api/collections_14.html A Stream is like a list except that its elements are computed lazily. Because of this, a stream can be infinitely long. Only those elements requested are computed. Otherwise, streams have the same performance characteristics as lists. Обратите внимание на lazy computing. Еще цитата из JDK 8 https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html Laziness-seeking. Many stream operations, such as filtering, mapping, or duplicate removal, can be implemented lazily, exposing opportunities for optimization. For example, "find the first String with three consecutive vowels" need not examine all the input strings. Stream operations are divided into intermediate (Stream-producing) operations and terminal (value- or side-effect-producing) operations. Intermediate operations are always lazy. Я не помню где и когда были анонсированы ленивые вычисления. С точки зрения ФП им уже 100 лет в обед. Историю создания Scala я не знаю но wiki пишет что с 2003 года. В 2003 году был переход с J2SE 1.4 на J2SE 5. Никаких java.util.Stream еще не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 11:28 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonЯ не помню где и когда были анонсированы ленивые вычисления. С точки зрения ФП им уже 100 лет в обед. Историю создания Scala я не знаю но wiki пишет что с 2003 года. В 2003 году был переход с J2SE 1.4 на J2SE 5. Никаких java.util.Stream еще не было. Не очень понял к чему этот экскурс в историю. Подавляющее большинство концепций в программировании были описаны ещё в 70-х. В том числе ленивые вычисления. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 11:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
К тому что стримы в Java нужно было вводить еще лет 10 назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonК тому что стримы в Java нужно было вводить еще лет 10 назад. Люди, которые думали так же и реализовали Scala. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вот так и старик Бьярне. Сидит в своих кедах, закинув ноги на стол и думает. Внести ли в новую спеку С++ то о чём долго говорят большевики.... ? Или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 14:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Не могу больше найти ссылку. На прошлой неделе видел её в Java дайджесте на dou.ua. Там был отличный вопрос "как реализовать такое на стримах", на который, кажется Getz ответил. Но позже твит, вроде удалили. Как раз там пример близкий к этому топику о том как не надо писать в функциональном стиле на Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 14:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz Код: java 1. 2. 3. 4. 5.
Написал тест, у этого кода есть один косяк. Он будет работать только если обьявить versions как Set. Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3. Понятнее говоря, после выполнения в версиях будет две версии с id=2 и одна с айди =3 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3. Тут фигню написал, поставил брейкпоинт в setVersions, почему то туда сразу 3 entites пришло, две из них с одинаковым айди. Дебажить stream тоже то еще удовольствие:) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:18 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никДебажить stream тоже то еще удовольствие:) Ну наконец-то... есть хоть одна ворчалка :) в адрес stream. Люто бешено ++ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никзабыл ник Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3. Тут фигню написал, поставил брейкпоинт в setVersions, почему то туда сразу 3 entites пришло, две из них с одинаковым айди. Дебажить stream тоже то еще удовольствие:) Все разобрался.. извиняюсь за переполох. Код работает корректно, просто в тесте список переиспользовал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:22 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonзабыл никДебажить stream тоже то еще удовольствие:) Ну наконец-то... есть хоть одна ворчалка :) в адрес stream. Люто бешено ++ Вот согласен, вроде все красиво по итогу, но во-первых 1) сядь продумай алгоритм 2) продебажь 3) если потом появится необходимость изменить немного логику и придет другой человек(да и я сам через месяц) - то будет врубаться полчаса. Хотя может это конечно дело привычки... но пока сильно задумался об использовании стримов на чем-то чуть большем чем stream.sort().map(::ByName).sum(); ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:25 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никДебажить stream тоже то еще удовольствие:) В идею, вроде, уже добавили отладку лямбд. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:30 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никХотя может это конечно дело привычки... но пока сильно задумался об использовании стримов на чем-то чуть большем чем stream.sort().map(::ByName).sum(); Здесь нет единого стрима. В этом вся сложность. Поэтому первый вариант, самый простой и понятный. Однострочник не может быть самоцелью. Это лишь пример того что можно, но никак не пример того как правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Мне процесс диагностики багов в стримах напоминает мои разборки с Oracle-SQL курсорами. В работу SQL-машины как правило нельзя воткнуть дебаггер. Можно трассировать работу курсора на очень низком уровне и получать в текстовом файле простыню операций но из личного опыта - этот подход не годится для поиска ошибок. Обычно его используют детектирования узких мест к примеру. Поэтому я делал так. Смотрел на текст курсора. Потом делал предположение что если в предложении WHERE или HAVING в запросе или его подзапросах или inline views что-то убрать (закомментарить) то я 100% должен получить тото или это. Если не получалось - то переходил к другой гипотезе (комментарил еще больше предикатов) и т.д до тех пор пока не локализовывалась ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczзабыл никХотя может это конечно дело привычки... но пока сильно задумался об использовании стримов на чем-то чуть большем чем stream.sort().map(::ByName).sum(); Здесь нет единого стрима. В этом вся сложность. Поэтому первый вариант, самый простой и понятный. Однострочник не может быть самоцелью. Это лишь пример того что можно, но никак не пример того как правильно. В моем варианте один стрим. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
fixxerВ моем варианте один стрим. И куча логики в методах. Такой код вообще за гранью. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:57 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczfixxerВ моем варианте один стрим. И куча логики в методах. Такой код вообще за гранью. Ты просто невнимательно его прочитал. Попробуй еще раз. Я, по-сути, лишь реализовал кастомный коллектор, просто собрал его из метод-референсов. Попробуй мысленно заменить их на лямбды и увидишь, что логики тут ровно столько же сколько и в твоем коде. Только тебе приходится пресортить коллекцию, я же разбираюсь по месту и за счет этого обхожусь одним стримом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 17:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
fixxerТы просто невнимательно его прочитал. Попробуй еще раз. Нормально прочитал. fixxerЯ, по-сути, лишь реализовал кастомный коллектор, просто собрал его из метод-референсов. Это я вижу. fixxerПопробуй мысленно заменить их на лямбды и увидишь, что логики тут ровно столько же сколько и в твоем коде. Я не о том вообще. fixxerТолько тебе приходится пресортить коллекцию, я же разбираюсь по месту и за счет этого обхожусь одним стримом. Сколько мне раз нужно в этой теме повторить что это плохой код? Просто это пример однострочника. Твой код на однострочник не претендует вообще никак, так как всё что ты сделал это запихнул логику внутри методов "кастомного коллектора". Это точно такое же безумие как однострочники и лямбды с жирным телом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 17:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczСколько мне раз нужно в этой теме повторить что это плохой код? Ну, до тех пор пока думаешь, что если повторить много раз, то аргументировать не нужно. No offence. Дело тут не в однострочниках, это не самоцель. Фишка в том, что многие воспринимают Stream API как сахар над коллекциями, забывая, что они несут не только fancy syntax, но и свою семантику, в том числе в рантайме. И переписать исходный код на стримы нужно не потому чтобы красиво код записать, но для того, чтобы убрать квадратичную сложность, явный стейт и прибитую гвоздями однопоточность. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 17:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
fixxerНу, до тех пор пока думаешь, что если повторить много раз, то аргументировать не нужно. No offence. Это про мой однострочник. А не про твой код. А что там аргументировать. Читаемость кода ниже плинтуса. fixxerДело тут не в однострочниках, это не самоцель. Фишка в том, что многие воспринимают Stream API как сахар над коллекциями, забывая, что они несут не только fancy syntax, но и свою семантику, в том числе в рантайме. И переписать исходный код на стримы нужно не потому чтобы красиво код записать, но для того, чтобы убрать квадратичную сложность, явный стейт и прибитую гвоздями однопоточность. Да пофигу и на многопоточность тоже. Чем проще код, тем лучше со всех сторон. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 18:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczДа пофигу и на многопоточность тоже. Чем проще код, тем лучше со всех сторон. Я думаю, что это до поры до времени. Потом из таких маленьких понятных императивных кусочков вырастает легаси монстр, который невозможно поддерживать и который не масштабируется и не держит нагрузку. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 18:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
А в какой среде лучше всего работать на ней? Просто я только начал учить джаву после си++ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 23:56 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
VestaBestaА в какой среде лучше всего работать на ней? Просто я только начал учить джаву после си++ Лучше не в среде. Лучше изучить maven и/или gradle (системы сборки приложения) По большому их можно использовать в любой IDE. Но удобнее в IntelijIDEA, но она платная. Поэтому выбирайте любую бесплатную IDE, которая вам приглянется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 08:34 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
дождались, только зачем было ждать если в .net все это давно есть и выглядит как родное, а тут - ну вроде вместили.. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 15:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
breathдождались, только зачем было ждать если в .net все это давно есть и выглядит как родное, а тут - ну вроде вместили.. )) Осталось дождаться когда .NET наконец-то заработает на линуксе и когда MS допилит свою виртуальную машину до уровня Hotspot. Кому нужен язык - берут Scala, а не C#. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 15:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
>когда MS допилит свою виртуальную машину до уровня Hotspot. вобще о чем >Кому нужен язык - берут Scala, а не C#. это скорее кому скучно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 15:28 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
breath>когда MS допилит свою виртуальную машину до уровня Hotspot. вобще о чем О забагованности на квадратный сантиметр. Хотя тут, конечно, и Windows тоже не малую роль играет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 16:06 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczbreathдождались, только зачем было ждать если в .net все это давно есть и выглядит как родное, а тут - ну вроде вместили.. )) Осталось дождаться когда .NET наконец-то заработает на линуксе и когда MS допилит свою виртуальную машину до уровня Hotspot. Кому нужен язык - берут Scala, а не C#. Я вот с удивлением узнал что некий программный продукт под названием Microsoft/dotnet выложен в гитхаб со ссылкой https://github.com/Microsoft/dotnet Initial коммит датируется October-2014. Пока не комментирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 16:57 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonЯ вот с удивлением узнал что некий программный продукт под названием Microsoft/dotnet выложен в гитхаб со ссылкой https://github.com/Microsoft/dotnet Initial коммит датируется October-2014. Пока не комментирую. Так это старая новость. Они одновременно заявили и про опенсорс и про официальную поддержку в ближайшей мажорной версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 17:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Странно. Сорцов не вижу пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 17:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
А вот на хабре небольшое пояснение нашёл. Не знаю будет-ли кому полезно. Если нет - то извините. https://habrahabr.ru/post/243065/ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 17:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonСтранно. Сорцов не вижу пока. Они в подпроектах: https://github.com/dotnet/corefx/tree/master/src ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 17:28 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал, сам не сталкивался. Хотелось бы почитать на эту тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 23:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiver, Execution Engine vs Virtual Machine ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2016, 05:07 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Регистровая машина VS Стековая ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2016, 09:13 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
авторBlazkowicz, Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал тоже интересно об этом узнать, и что именно слышали ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2016, 10:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Usman, Не совсем понял разницу. Execution Engine пытается весь код в нативный скомпилировать, и потом им пользоваться всегда? Материала не нашёл толкового по такому запросу. mayton, Обе машины стековые же. breath. Ничего конкретного, но на .NETовский рантайм часто нападки слышу, хотя мне казалось, что среда там покруче будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2016, 14:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverExecution Engine пытается весь код в нативный скомпилироватьЗадача Execution Engine - исполнение. А для преобразования в нативный код - есть АOT/JIT компиляторы.UsmanExecution Engine vs Virtual MachineОтвет: https://ru.wikipedia.org/wiki/Common_Language_Runtime В отличие от переносимых виртуальных машин Java, абстрагирующихся от нижележащих операционных систем, CLR позиционируется как не "виртуализированная" платформа , тесно связанная с операционной системой Microsoft Windows (в том числе для целей сохранения инвестиций Microsoft в операционную систему) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2016, 16:25 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRivermayton, Обе машины стековые же. Ну ОК. Пожалуй обе - стековые. Мне кажется, чтобы понять за что ругают и кто чем хуже - надо взять hi-load приложение. К примеру тот-же самый Card-Raytracer 18105781 и посмотреть следующие пункты. 1) Производительность работы (время отклика) 2) Размер бинарника, байткода или CIL-кода 3) Прочие параметры (размер native-бинарника (к слову как его посмотреть пока не знаю надо гуглить)) Выбор Card-Raytracer - это моё сугубое ИМХО. Если у вас есть лучше вариант - предлагайте свой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2016, 17:03 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverBlazkowicz, Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал, сам не сталкивался. Хотелось бы почитать на эту тему. А что, уже всё работает под linux, solaris, aix, macos, freebsd? Хорошо работает? Так-то интересно, к примеру в CLR вроде как генерики не "забываются". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2016, 07:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Usman, Ну вообще, раз оно использует windows фичи, работать должно лучше, гипотетически. mayton, Если честно, лениво тридцать страниц читать. Нашёл результаты одного из бенчмарков C#, а для Java уже не смог найти. Alexey Tomin, Вообще пофиг на кроссплатформенность, я хотел именно скорость и "юзабилити" платформ сравнить хотел. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2016, 14:28 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
генерики в .net повсюду, при трансляции и в рантайме. чтобы сравнить нужно писать, например после года на c#, когда бывает приходится возвращаться к java очень тягостно это. расширяющие методы, например именно ими реализован linq. это такая штука, которой добавляются новые конструкции в язык и потом работают как родные. то есть могу добавить метод MySuperSelect(..) к коллекциям(всем или только определенным) и вызывать var myList = list.Where(..).MySuperSelect().. индексаторы, делегаты, lazy, async await и тд.. часть из этого появилась в 8ке, но какой семантикой.. не мое скажу так. если бы не было .net и c# пришлось бы наверное 8ку юзать по полной, но так как выбор есть зачем жрать кактус имхо. на кроссплатформеность лично мне пофик, юзаю и люблю винду на десктопе ), да и моно сейчас интегрирует в себя открытые исходники от мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2016, 14:48 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRivermayton, Если честно, лениво тридцать страниц читать. Нашёл результаты одного из бенчмарков C#, а для Java уже не смог найти. Вы искали бенчмарк C# и Java? Вот вам бенчмарк. Тяпничный бенчмарк CPU (part-1) Он актуален только для моего ноутбука. У вас будут другие цифры. Хотя для однопоточного приложения пропорция между elapsed time для Java/.Net/.Net-x64 должна сохраняться (я надеюсь). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2016, 21:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, Всё же отставание небольшое. Видимо, на личном опыте пережить нужно, чтобы разницу между платформами осознать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2016, 23:07 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
breath, Лучше Джавы, но на фоне Скалы бледненько смотрится. Лично мне жаль, что MS побоялись выйти за рамки Java like language парадигмы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2016, 23:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
разные вещи сравниваются же, на платформе clr есть f# типа scala для jvm. c# для си стайл програмеров и хорошо что он есть имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2016, 23:30 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverЛучше Джавы, но на фоне Скалы бледненько смотрится. Вообще ни слова не понял. Поясни. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2016, 00:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
[quot DoSOfRedRiverAlexey Tomin, Вообще пофиг на кроссплатформенность, я хотел именно скорость и "юзабилити" платформ сравнить хотел.[/quot] Да мне тоже пофиг- важен только linux ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2016, 10:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Alexey Tomin, С какой это стати? Идеологически, чтоли? Дык Plan9 есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2016, 19:03 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, MS сделали свою Джаву, а потом добавили туда всяких фич модных. Как бе, на фоне Java сишарп будто бы продвинутый язык, но идеологически от неё ничем не отличается. И я сюда Скалу приплёл чтобы показать, что можно было бы сделать вместо этого самого C#. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2016, 19:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRivermayton, MS сделали свою Джаву, а потом добавили туда всяких фич модных. Как бе, на фоне Java сишарп будто бы продвинутый язык, но идеологически от неё ничем не отличается. И я сюда Скалу приплёл чтобы показать, что можно было бы сделать вместо этого самого C#. Нет нельзя было. Инструмент должен был иметь доступный порог вхождения. Scala - это надфиль. Сверх-тонкий инструмент. Он не просто позволяет решать обычные бизнес задачи но и позволяет их решать вовлекая сущности высокого порядка. И если эти сущности постулировать как основное (фронтальное) направление МС - то это сделает курсы обучения этому ЯП не просто сложными а недоступными. Разумеется МС не могло пойти на такой шаг. Сложный ЯП не нужен. Нужен как-раз другой подход. Взять обычного кодера и за 14 дней переквалифицировать в дотнетчика. А C# - это рашпиль. Его доступно понять девелоперу средней руки. Иногда без мат-образования. Коих щас много. Ну а если есть такие мьсе которые хотят чего-то эдакого - так MS предоставил им F#. Берите и пользуйтесь. Но основным .net языком (я еще помню по версии 1.1) позиционировался довольно легкий и приятный язык с С#. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2016, 19:17 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, Скала - просто пример. Необязательно было что-то эдакое городить, можно было переосмыслить старые вещи просто. А в MS дело до того дошло, что они с собой утащили ковариантные массивы и остальные "прелести" Джавы. Многие вещи переносили "как есть", хотя, казалось бы, почему бы не поразмыслить как всё это дело улучшить можно? И, кстати Сложность скалы весьма переоценена. Ничего сверхмудрёного там нет, достаточно одну книгу прочесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2016, 21:29 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никзабыл ник Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3. Тут фигню написал, поставил брейкпоинт в setVersions, почему то туда сразу 3 entites пришло, две из них с одинаковым айди. Дебажить stream тоже то еще удовольствие:) че там дебажить? как и в SQL, смотришь на тестовый вход и тестовый выход от него, и исправляешь, если что-то не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 00:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник Вот согласен, вроде все красиво по итогу, но во-первых 1) сядь продумай алгоритм 2) продебажь 3) если потом появится необходимость изменить немного логику и придет другой человек(да и я сам через месяц) - то будет врубаться полчаса. это убийственный аргумент для любой продвинутой технологии... ну пиши на Бейсике, на .bat файлах. что там еще тупее есть? я за свою жизнь столько непонятных и запутанный программ перевидал, но не помню, чтобы хоть одна была бы основана на продвинутых концепция. Все тупня и гнилые мозги. А люди, которые понимают что-то продвинутое и технологичное обычно пишут просто и ясно, там концепцию понять сложно бывает, но когда понял,сам код уже не вызывает затруднений. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 00:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverСложность скалы весьма переоценена. Ничего сверхмудрёного там нет, достаточно одну книгу прочесть. Ну это до первого собеседования. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 00:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverAlexey Tomin, С какой это стати? Идеологически, чтоли? На рабочем компе линукс, на дломашнем тоже. Нетбук вот пока ешё на винде. На всех, где запускается мой софт по работе- тоже линукс. У коллег- даже маков больше, чем винды. Никакой идиологии- просто не вижу причин использовать win. Так что пока .net нет на linux с техподдержкой- его для меня нет вообще. DoSOfRedRiverДык Plan9 есть. Есть множество извращений. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 08:25 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverBlazkowicz, Можно поподробней, чем CLR хуже JVM? Много претензий к CLR слышал, сам не сталкивался. Хотелось бы почитать на эту тему. JVM кроссплатформ, много реализаций, CLR - все нет, Моно в жопе, вокруг печаль... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 14:46 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonDoSOfRedRiverСложность скалы весьма переоценена. Ничего сверхмудрёного там нет, достаточно одну книгу прочесть. Ну это до первого собеседования. нужность собеседований весьма переоценена. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 14:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivmaytonпропущено... Ну это до первого собеседования. нужность собеседований весьма переоценена. Автор пишет - один раз книжку прочесть. Ну... для меня это выглядит так. Один раз прочесть. Поработать. Вернуться к книжке. Поработать. Вернуться к книжке e.t.c. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 17:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Alexey Tomin, Alexey Tomin На всех, где запускается мой софт по работе- тоже линукс. Здорово жить в своём, уютном мирке. Пользователям вместе с софтом убунту поставляете? Alexey TominЕсть множество извращений. Угу. Например, оконные менеджеры на ОС для терминалов. MasterZivэто убийственный аргумент для любой продвинутой технологии... Соглашусь. Меня на работе луддиты замучили. Дай волю - на Си писать будут. mayton Автор пишет - один раз книжку прочесть. Ну... для меня это выглядит так. Один раз прочесть. Поработать. Вернуться к книжке. Поработать. Вернуться к книжке e.t.c. Ну дык, там не зря практические примеры даны, можно попробовать сразу задачки какие-нибудь порешать. авторНу это до первого собеседования. А что там такого страшного? Код писали, на Джавах программировали. Речь же не идёт о lead позиции в Твиттер. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2016, 22:13 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverНу дык, там не зря практические примеры даны, можно попробовать сразу задачки какие-нибудь порешать. Чувак. На собеседовании перед тобой сидит теч-лид. Который делал проекты на Scala. А напротив сидишь ты. Которой читал книжку. С одной стороны чел. - делал проекты. А с другой стороны - ты читатель книжки. Улавливаешь разницу? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 00:48 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonDoSOfRedRiverНу дык, там не зря практические примеры даны, можно попробовать сразу задачки какие-нибудь порешать. Чувак. На собеседовании перед тобой сидит теч-лид. Который делал проекты на Scala. А напротив сидишь ты. Которой читал книжку. С одной стороны чел. - делал проекты. А с другой стороны - ты читатель книжки. Улавливаешь разницу? А кто тебе запрещает делать проекты тоже? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 01:48 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Исключительно моя лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 01:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, +1 есть у меня реальный пример - дизайнер выкладывает свои проекты (уже оплаченные) в качестве портфолио, и вот на собеседовании (почти на каждом) слышит: - у вас плохие работы, они нам не нравятся... - но они нравятся заказчику, хотя я ему были предложены и другие варианты , на мой взгляд намного лучше выбранного. - тогда вы нам , тем более , не подходите, не можете убедить заказчика выбрать лучшее. - но он, не согласен за другое платиь... - тогда не выкладывайте в портфолио это, а делайте для портфолио лучшие варианты..... - когда и нах...я? и попробуй убеди этого «гуру»...... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 08:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverAlexey Tomin, Alexey Tomin На всех, где запускается мой софт по работе- тоже линукс. Здорово жить в своём, уютном мирке. Пользователям вместе с софтом убунту поставляете? Пользователи ходят через браузер на наши сервера (SaaS, ага). Они даже не в курсе, что там. Никому даже в голову не приходит ставить на сервера win. Кстати, т.к. бьольшинство клиентов не у нас, то у них тоже macos может встречатся почаще, чем win :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 12:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадя, у вашего дизайнерских собеседующих вообще нечёткие критерии приёмки. Было-б там аргументация типа - нарушены правила колористики или не прослеживается там.... какое-нить золотое сечение в линиях. А так... захотят завалить - всё равно завалят. Или пускай комиссию собирают из 3х гур. Чтоб голосование там хотя-бы было и хер ево знает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 12:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonвадя, у вашего дизайнерских собеседующих вообще нечёткие критерии приёмки. Было-б там аргументация типа - нарушены правила колористики или не прослеживается там.... какое-нить золотое сечение в линиях. А так... захотят завалить - всё равно завалят. Или пускай комиссию собирают из 3х гур. Чтоб голосование там хотя-бы было и хер ево знает. я к тому, что если при собеседовании кому-то не понравился цвет твоих глаз.- то будь ты хоть семь пядей во лбу - собеседование не пройти ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 13:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяя к тому, что если при собеседовании кому-то не понравился цвет твоих глаз.- то будь ты хоть семь пядей во лбу - собеседование не пройти Примерно такая же глупость, как пихать резалтсет в вывод сервлета. Не моделей же набирают ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 13:45 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, И чем таким enterprise Scala от enterprise Java отличается? Стеком и только? И вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 17:08 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
авторПримерно такая же глупость, как пихать резалтсет в вывод сервлета. Не моделей же набирают в одних платформах это считается нормальным, в других глупостью? тот же хибер не пихает резве данные на вывод? а, он оборачивает их в фантик, и от этого они становятся не данными из результсета. если кто-то не секёт в sql так пусть и пользуется прокладками. вместо того что б освоить sql, будем осваивать прокладки.... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 17:31 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverПроще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$. Здесь я-бы добавил IMHO. Не нам с вами решать что проще. И за период "пол-года" можно обесценить старт како-то бизнеса. Поэтому IMHO и еще раз ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 18:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никвадяя к тому, что если при собеседовании кому-то не понравился цвет твоих глаз.- то будь ты хоть семь пядей во лбу - собеседование не пройти Примерно такая же глупость, как пихать резалтсет в вывод сервлета. Не моделей же набирают Ну.. если дизайнер очень нужен - то позвонят. Вычислят среди ночи.. в выходной день и сами предложат окно для встречи и даже чашечку чая заварят с сахаром. А если нужен голубоглазый мальчик - то может ну ее нафик такую контору. Видать и не сильно нужно было собеседовать. Так ... чисто прикольнулись над новичком со скуки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 18:27 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, А это от технологии зависит, и от человека. Разумеется, какой-нибудь студентишко-недоучка за полгода Спринг не освоит, но толковый парень с грамотным стеком сможет через месяц писать код. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 18:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
OFF авторА если нужен голубоглазый мальчик - то может ну ее нафик такую контору. Видать и не сильно нужно было собеседовать. Так ... чисто прикольнулись над новичком со скуки. по поводу такой конторы - это точно, так и сделали а вот насчёт новичка- так "новичёк" уже 25+ занимается этим , и в портфолио куча того, что сделано для известных в городе брендов... авторИ вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$. тут складывается мнение, что берут не по знаниям и опыту , а смотрят насколько человеком можно манипулировать, самостоятельны, мнестандартно мыслящий - не приветствуется.... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 18:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадянестандартно мыслящий - не приветствуется.... вопрос только в том, человек действительно нестандартной мыслящий или самоуверенный и неуправляемый глупец-нигилист с раздутым чсв и комплексом непогрешимости ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 19:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpashaвадянестандартно мыслящий - не приветствуется.... вопрос только в том, человек действительно нестандартной мыслящий или самоуверенный и неуправляемый глупец-нигилист с раздутым чсв и комплексом непогрешимости ворос очень и очень правильный. когда видишь кучу работ, приятых и оплаченных крупными конторами, известными в городе...и говоришь, что это плохо... кто и кого называет глупцом? точнее - А судьи кто? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 19:27 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRivermayton, И чем таким enterprise Scala от enterprise Java отличается? Стеком и только? И вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$. Представьте, что вам достается в наследство код, подобный этому: Код: scala 1.
На Java тоже паззлы всякие есть, но Scala позволяет намного более утонченно издеваться над саппортом ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 21:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяв одних платформах это считается нормальным, в других глупостью? тот же хибер не пихает резве данные на вывод? а, он оборачивает их в фантик, и от этого они становятся не данными из результсета. если кто-то не секёт в sql так пусть и пользуется прокладками. вместо того что б освоить sql, будем осваивать прокладки.... Нет ну если это троллинг, то я впечатлен и аплодирую стоя, тут левел не меньше 80.. А вот если не троллинг, то все печально.. В каких это платформах нормально? JSP 2000 года? Вы правда не понимаете преимуществ разделения кода на слои? И хибер тут вообще не при чем, есть множество паттернов для ОРМ, если хочется можно и ActiveRecord заюзать и тд. Скажите честно вы когда-нибудь вообще работали в команде? Вы пробовали ОРМ(или не читал но осуждаю?), вы вообще в курсе про транзакции(или они тоже в сервлете открываются\закрываются?:)) ОРМ это не замена sql, вас кто-то жестко обманул, это прежде всего CRUD, который избавляет от нудной монотонной работы, как пример Код: java 1. 2.
и Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Причем второй вариант без открытия коннекшена, создания PreparedStatement и транзакций :) При всем при этом я допускаю, что то что вы пишете может работать и даже хорошо, но суппортить вот такое го..но это же ужас. Как раз сейчас работаю над проектом, где волк-одиночка решил - а зачем нам база данных - это же в конце концов список файлов, ну и забабахал персистенс слой на файловой системе :) Потом пошли такие требования как версионность, транзакции - ну он часть сущностей перевел на JDBC, причем колонки он читал не rs.getString("name") а getString(12).... Ну хорошо хоть в вывод сервлета не пихал. Благо проект небольшой и я за 4 дня управился, кстати JDBC так и оставил, просто написал обертку на лямбдах(слава 8-ке!) и рефлекшн. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 23:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
ДиезНа Java тоже паззлы всякие есть, но Scala позволяет намного более утонченно издеваться над саппортом Я-бы по другому сказал. На Java всегда можно найти менторов или синьоров которые могут объяснить то или другое поведение. Если сложная ситуация с реверс инжинирингом или с анализом унаследованного кода возникнет в Scala - куда бежать-та? Сразу в Сан-Франциско? Синьоров толком нету. И даже не суть в реверсе. Реверс-то любой студент сделает с дебаггером. А суть - в понимании мотиваций. ПОЧЕМУ создатель именно так сделал а не иначе. Что им двигало? Каков был замысел? Вам не интересно ЭТО? Мне - всегда были интерсны именно эти пункты. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 01:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, ты меня пугаешь, уже второй топик, где ты излогаешь мои мысли.... зачем содавать биин ,когда все наглядно видно, читаемо, понятно в одном файле. среда ide форматирует код, и даже при быстрой прокрутке видно что и где ,выделено и цветом, к тому же а если э то строка бина - попробуй её найти. чтоб понять/исправить бин - надо искать файл с ним, залезать в него, время, и потом теряешь мысль , вернувшись в исходный файл ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 07:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник Код: java 1. 2.
и Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Причем второй вариант без открытия коннекшена, создания PreparedStatement и транзакций :) Вы немного лукавите... Т.к. за первым вариантом скрывается класс. где есть куча аннотация с параметрами. Это если не надо делать "JOIN". Тогда еще надо повозиться с @OneToMany, @ManyToOne и выбрать стратегию для fetch (n+1 запросов таки...). Т.е. по объему кода не меньше. А вот гибкости гораздо меньше. Это не говоря если не нужны рекурсивные запросы и прочие "плюшки" современного SQL. Если нужны, то ХП. Т.о. развитие проекта: ORM -> ХП для того, что нельзя сделать в ORM -> вся БЛ в ХП -> Как мы избавились от ХП и стали спать спокойно -> ORM. Так лучше сразу не использовать ORM, чем потом тратить силы на "выпиливание" ХП их проекта. <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 09:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
авторНу хорошо хоть в вывод сервлета не пихал. что в этом такого страшного? в чём не кошерность этого? в чем трудность суппорта этого? если в js строка html формируется в коде - это нормально, то почему сформироватть строку html в java из результсета плохо? забыл ник, твоя портянка более наглядна чем моя - формирование html в jsp. я сразу вижу откуда данные и как формируется результат . можно заменить out.print на формирование строки и вывести её и в out.print и systev.out.print, для просмотра результата. да и при дебаге по шагам найти ошибку не сложно. пугает использование хранимок? ну и что такого , что это ипользовали раньше? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
что сложного в суппорте этого? или этого Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 09:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код вполне себе имеет право на жизнь. Может этот код - одноразовый. Мы-же с вами не критикуем bash/python скрипты сисадминов. А они - куда более убогие и одноразовые. И пишуться чтобы решить сиюминутную задачу. И какой смысл нам сейчас тут обсуждать рефакторинг и разделение на layer этого сервлета если всё ТЗ мы нечитали и не знаем что с ним будет дальше. Это еще мой один брошеный камень в адрес "Фаулера головного мозга" и болезни под названием хроническое недо-пере-проектирование всего и вся. Кстати подход основанный на лямбда функциях предполагает что функция действительно одноразовая и больше нигде не нужна. Только в этом коде-блоке. Как говорил пингвин Командор: - Крякнем. Плюнем. И замотаем скотчем! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 09:30 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mad_nazgul Вы немного лукавите... Т.к. за первым вариантом скрывается класс. где есть куча аннотация с параметрами. А во втором варианте класса нету чтоли? Он есть и в первом и во втором варианте, ну да в случае ОРМ там есть еще аннотация @Entity... :) mad_nazgulЭто если не надо делать "JOIN". Тогда еще надо повозиться с @OneToMany, @ManyToOne и выбрать стратегию для fetch (n+1 запросов таки...). Опять же эта работа никуда не исчезает ни в первом ни во втором варианте. Я же говорил место ОРМ - это в основном довольно-таки прозрачный CRUD для сущностей которые ложатся один-в-один на таблицу. Для остальных случаев есть широкий спектр вариантов от хранимок до createNativeeSQL("select join join ") mad_nazgulТ.е. по объему кода не меньше. Гораздо меньше, декларативные транзакции, открытие коннешена, обработка исключений, маппинг в\из объекта уходят. mad_nazgulА вот гибкости гораздо меньше. С чего вдруг? mad_nazgulЭто не говоря если не нужны рекурсивные запросы и прочие "плюшки" современного SQL. Если нужны, то ХП. Ну нужна ХП точечно - в чем проблема? CallableStatement в руки и впперед. Если процедур много - ну так зачем изначально брался ОРМ? ССЗБ :) mad_nazgulТ.о. развитие проекта: ORM -> ХП для того, что нельзя сделать в ORM -> вся БЛ в ХП -> Как мы избавились от ХП и стали спать спокойно -> ORM. Так лучше сразу не использовать ORM, чем потом тратить силы на "выпиливание" ХП их проекта. <:o) Довольно спорно. Опять же надо просто хорошо понимать что дает ОРМ и когда его надо использовать, а когда - нет. тут все зависит от квалификации. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 09:55 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonКод вполне себе имеет право на жизнь. Может этот код - одноразовый. Мы-же с вами не критикуем bash/python скрипты сисадминов. А они - куда более убогие и одноразовые. И пишуться чтобы решить сиюминутную задачу. И какой смысл нам сейчас тут обсуждать рефакторинг и разделение на layer этого сервлета если всё ТЗ мы нечитали и не знаем что с ним будет дальше. Такой код не имеет права на жизнь ни в каком случае, и тут даже не надо смотреть ТЗ. Он ни дает ни ЕДИНОГО преимущества и создает огромную кучу потенциальных проблем. Это как заклеить дыру в стену жвачкой. Вы правы говоря об утилитах для админов, но это паблик сайт судя по всему, и подход у товарища не единоразовый а на постоянке. А в паблик сайтах вероятность изменений over 99%. Я просто по-человечески сочувствую человеку, который будет заниматься редизайном таких вот сайтов(ну там респонсив дизайн или адаптированный под мобилку, хотя в этом случае любой редизайн = переписыванию с нуля). Вот вы опытный человек и к вам прислушиваются, а вы говорите такие вещи, которые поощряют лень и успокаивают неокрепшие умы молодых программистов, а потом приходят джуны и говорят вашими словами, начитавшись форумов. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 10:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Молодым и неокрепшим я читал курс основ по всем правилам как положено на предприятии. Но в рамках нашего топика я просто немного пошатал основы чтобы вызвать дискурс. Вызвал? - Хорошо. Сомнения это всегда хорошо. Как говорил Лавр Федорович Вунюков - Плохо когда на все ответы у нас нет вопросов! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 10:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton Это еще мой один брошеный камень в адрес "Фаулера головного мозга" и болезни под названием хроническое недо-пере-проектирование всего и вся. Ну давайте делать однострочные названия у переменных, называть классы A.java и B.java так ведь быстрее, не закрывать Reader, не проверять на нулл, все это излишнее. Все-таки есть некоторые базовые принципы, которым надо следовать всегда и везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 10:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вы демонизируете меня Бох с вами. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 10:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonМолодым и неокрепшим я читал курс основ по всем правилам как положено на предприятии. Но в рамках нашего топика я просто немного пошатал основы чтобы вызвать дискурс. Вызвал? - Хорошо. Сомнения это всегда хорошо. Как говорил Лавр Федорович Вунюков - Плохо когда на все ответы у нас нет вопросов! Да к вам претензий нет, просто люди обычно жадно впитывают то что им понятно и созвучно с их мыслями и тупо игнорят все остальное, ваши оговорки хороши для умных, солидных людей, а большинство просто увидит что вы не видите ничего плохого в том чтобы пихать резалтсет в вывод сервлета. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 10:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никА во втором варианте класса нету чтоли? Он есть и в первом и во втором варианте, ну да в случае ОРМ там есть еще аннотация @Entity... :) Нету. Есть класс для БЛ, а не класс @Entity. Например сейчас у меня задача взять данные из БД и разложить в классы. которые будут отправляться по web-сервису. Не смотря на то, что там куча вложенных тегов, из БД все вытаскивается одним запросом. Но для отправки нужно создать несколько классов. А так читать в сущность, из сущности перекладывать в объекты. И так обычно со всеми остальные задачами, которые не укладываются в стандартный CRUD. забыл никОпять же эта работа никуда не исчезает ни в первом ни во втором варианте. Я же говорил место ОРМ - это в основном довольно-таки прозрачный CRUD для сущностей которые ложатся один-в-один на таблицу. Для остальных случаев есть широкий спектр вариантов от хранимок до createNativeeSQL("select join join ") ORM подходят для очень стандартных CRUD'ов. Но тогда удобно пользоваться Spring-data Описал сущности, объявил интерфейс. И все, работаешь с готовым слоем DAO. Смысла в NativeQuery, лично я не вижу. Мне проще работать с JdbcTemplate забыл никГораздо меньше, декларативные транзакции, открытие коннешена, обработка исключений, маппинг в\из объекта уходят. JdbcTempalte же! ;-) Дает все что вы говорите. Но оставляет всю силу SQL. забыл никНу нужна ХП точечно - в чем проблема? CallableStatement в руки и впперед. Если процедур много - ну так зачем изначально брался ОРМ? ССЗБ :) Сами по себе ХП не проблема... Проблема в том, что их начинают использовать не к месту. При использовании ORM это происходит всегда... забыл никДовольно спорно. Опять же надо просто хорошо понимать что дает ОРМ и когда его надо использовать, а когда - нет. тут все зависит от квалификации. Вот! В этом и проблема! ORM всегда преподносится как "простой" способ работы с БД. Но никто никогда не говорит, что ORM накладывает серьезные ограничения на работу с БД. Единственным естественным способом работы с БД, является SQL. Для себя я решил. Если что-то нельзя сделать ч/з Spring-Data, то не надо использовать ORM. ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 11:56 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
авторТакой код не имеет права на жизнь ни в каком случае, и тут даже не надо смотреть ТЗ. голая фраза без обяснения - лай собаки в пустыне.... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 11:56 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяавторТакой код не имеет права на жизнь ни в каком случае, и тут даже не надо смотреть ТЗ. голая фраза без обяснения - лай собаки в пустыне.... Вадя, признавайся, ты даже про String.format похоже не слышал? Тебе не очевидна разница в читаемости между конкатенацией html и генерацией конечного html с помощью шаблона и данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 13:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mad_nazgul, Совершенно верно, есть куча инстурментов, spring-data тоже очень даже ничего, а есть еще nosql и тд. Только spring-data это в некоторой степени и есть облегченный ОРМ, в таком случае непонятно о чем спорите:) Если вы против Хибернейта и hql - так я тоже не фанат, все зависит от проекта. HQL писал последний раз лет 5 назад. Тут товарищ в принципе не понимает что такое MVC и Layer Separation, вот в чем беда ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 13:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpashaвадяпропущено... голая фраза без обяснения - лай собаки в пустыне.... Вадя, признавайся, ты даже про String.format похоже не слышал? Тебе не очевидна разница в читаемости между конкатенацией html и генерацией конечного html с помощью шаблона и данных? ну понятно, что надо нагородить большестрок кода, что по-больше заплатили. если тебе не понято, что приведено в примере, то о чём речь? там к примеру в зависимости от данных есть добавляется класс или нет. в зависимости от данных строится весь html сможешь это организовать с помощью прокладок? давай повтори приведённые пример по своему, сравним число строк, читаемость кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяchpashaпропущено... Вадя, признавайся, ты даже про String.format похоже не слышал? Тебе не очевидна разница в читаемости между конкатенацией html и генерацией конечного html с помощью шаблона и данных? ну понятно, что надо нагородить большестрок кода, что по-больше заплатили. если тебе не понято, что приведено в примере, то о чём речь? там к примеру в зависимости от данных есть добавляется класс или нет. в зависимости от данных строится весь html сможешь это организовать с помощью прокладок? давай повтори приведённые пример по своему, сравним число строк, читаемость кода. Говоришь тебя на собеседованиях прокидывали за некрасивые глаза? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:08 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никвадяпропущено... ну понятно, что надо нагородить большестрок кода, что по-больше заплатили. если тебе не понято, что приведено в примере, то о чём речь? там к примеру в зависимости от данных есть добавляется класс или нет. в зависимости от данных строится весь html сможешь это организовать с помощью прокладок? давай повтори приведённые пример по своему, сравним число строк, читаемость кода. Говоришь тебя на собеседованиях прокидывали за некрасивые глаза? :) не прокидывали :) сранительный код слабо ? убеди меня, что у меня хуже... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадязабыл никпропущено... Говоришь тебя на собеседованиях прокидывали за некрасивые глаза? :) не прокидывали :) сранительный код слабо ? убеди меня, что у меня хуже... Эмм. ну подумай для начала что будет если вдруг понадобится менять табличный дизайн на верстку дивами... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никmad_nazgul, Совершенно верно, есть куча инстурментов, spring-data тоже очень даже ничего, а есть еще nosql и тд. Только spring-data это в некоторой степени и есть облегченный ОРМ, в таком случае непонятно о чем спорите:) Spring-data это не ORM. Т.к. он позволяет работать не только с СУРБД, но и noSql. Это скорее толстый слой "синтаксического сахара", для работы с БД. забыл никЕсли вы против Хибернейта и hql - так я тоже не фанат, все зависит от проекта. HQL писал последний раз лет 5 назад. Тут товарищ в принципе не понимает что такое MVC и Layer Separation, вот в чем беда А зачем понимать?! Главное уметь пользоваться гуглом и stackoverflow :-) Если что тим лид волшебным пенделем объяснит, что и почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никвадяпропущено... не прокидывали :) сранительный код слабо ? убеди меня, что у меня хуже... Эмм. ну подумай для начала что будет если вдруг понадобится менять табличный дизайн на верстку дивами... :) а если камень с неба? таких если я могу привести море, на все случаи не угадаешь поэтому под конкретное место - конкретное решение, если где потребуется (в возможных планах) что-то модифицировать - там будет отдельное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяну понятно, что надо нагородить большестрок кода, что по-больше заплатили. нету хуже случая, чем воинствующий дурачек. вадяесли тебе не понято, что приведено в примере, то о чём речь? о том, чтоб сделать понятно вадясможешь это организовать с помощью прокладок? нет конечно, но умру пытаясь Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
можно на каком-нибудь фримаркере или любом другом движке темплейтов генерить Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
можно какой-нить js-framework использовать. но никогда, слышь вадя, никогда не генери в серьезном проекте html с помощью print. тебя проклянут в веках. вадядавай повтори приведённые пример по своему, сравним число строк, читаемость кода. вперед, начинай сравнивать ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:51 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mad_nazgul Spring-data это не ORM. Т.к. он позволяет работать не только с СУРБД, но и noSql. Это скорее толстый слой "синтаксического сахара", для работы с БД. Замечание правильное, только в разрезе темы не существенное, ну да назовем это Object Persistence Storage Mapping, но это не отменяет того факта что это будет упрощающая обертка и выделенный слой. mad_nazgulА зачем понимать?! Главное уметь пользоваться гуглом и stackoverflow :-) Если что тим лид волшебным пенделем объяснит, что и почему. Ну там судя по уровню постов, волк-одиночка, сам себе архитектор дизайнер и проктолог. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никНу там судя по уровню постов, волк-одиночка, сам себе архитектор дизайнер и проктолог. с 30-летним опытом акцеса!!! так что нечего учить дядю, каким пальцем в попе колупаться, давайте уже считать строчки! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:56 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадязабыл никпропущено... Эмм. ну подумай для начала что будет если вдруг понадобится менять табличный дизайн на верстку дивами... :) а если камень с неба? таких если я могу привести море, на все случаи не угадаешь поэтому под конкретное место - конкретное решение, если где потребуется (в возможных планах) что-то модифицировать - там будет отдельное решение. Тебе сказали что код говно, потому что не maintainable. Ты спросил почему не maintainable - тебе привели пример. Очевидно, что ты не имеешь представления о командной работе, разделении ролей и общих паттернах проектирования, списывая свою лень разобраться в этом на то что все дураки. Ну да и фиг с ним, но когда ты лезешь с советами к другим, то не обессудь когда получишь очередной пинок. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:58 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpasha, утебя еще нет обращения к базе... да за это количество строк ты получишь больше... и ещё они в разных файлах посмотреть в одном, переключиться на другой... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяchpasha, и ещё они в разных файлах посмотреть в одном, переключиться на другой... День считай сделан ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяутебя еще нет обращения к базе... а вдруг там не база, а rest-client или вообще тестовая заглушка? oт того, что я допишу пару строк "псевдо"-кода, суть не поменяется. ну если мы не собираемся реально оценивать код кол-вом строк. вадяда за это количество строк ты получишь больше... из этой фразы я заключаю, что мой пример лучше, но тебе гордость не позволяет это признать так? честно говоря не знаю, в каких краях платят за кол-во кода. вадяи ещё они в разных файлах у тебя на кухне ингредиенты для борща отдельно хранятся или уже все сразу в кастрюле? вадяпосмотреть в одном, переключиться на другой... да, адские мучения, особенно если в блокноте пишешь. а ты вот когда html пишешь, у тебя кстати css отдельно или тоже все в одном мешке? ты не думал о том, что когда нужно поменять стиль таблицы, код доступа к данным не особо интересен, и наоборот - когда я хочу where модифицировать, html мне не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpasha, на вдруг бывает пук, пишется под конкретные условия, а не на "а вдруг" мне твой код не нравится, тебя устраивает- пиши так. твои высказывания напоминают высказывания Хрущёва по поводу выставки... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:30 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяна вдруг бывает пук, пишется под конкретные условия, а не на "а вдруг" если у тебя ума немного больше, чем у калькулятора, то пишешь всегда (когда речь о проекте, а не скрипте) так, чтобы максимально легко было код тестировать, модифицировать и расширять. невозможно предусмотреть все, но пытаться можно. хотя бы для начала разделяя код на слои? вадямне твой код не нравится, тебя устраивает- пиши так. а судьи кто? можно поинтересоваться твоим образованием и квалификацией? вадятвои высказывания напоминают высказывания Хрущёва по поводу выставки... слышал о том, что воинский устав написан кровью? примерно догадываешься почему так говорят? как думаешь, у нас все по-другому или аналогия уместна? з.ы. ты так и не ответил - как несомненный эксперт в области конкатенации строк, ты про String.format слыхал или в акцесе такого не было? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:42 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpasha, всё, я закончил спорить, надоело. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:54 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpashaесли у тебя ума немного больше, чем у калькулятора, то пишешь всегда (когда речь о проекте, а не скрипте) так, чтобы максимально легко было код тестировать, модифицировать и расширять. невозможно предусмотреть все, но пытаться можно. Откровенно говоря одно противоречит другому. Попытка предусмотреть все приводит к тому, что кто-бы не пришел со стороны ему потребуется очень много времени въехать в проект. Говнокод (по методу делаем самым простым способом) выигрывает у этого подхода в разы. Ибо понятно что делается и как можно поменять. Другое дело, что при изменении вводных его приходится переделывать полностью чуть реже чем всегда. Но понять почему данные пришедшие в сервлет не записались в БД. При том, что метод состоит из одного query которое тут же забито в виде строковой константы гораздо проще, чем искать на каком слое абстракции остался клон сущности, о котором известно Хиберу и значениями которого он перезатрет то, что сохранилось в базу по коммиту. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 17:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Я думаю что если мы возьмем 100 синьоров и дадим им одно ТЗ с одним сервлетом, одним запросом и одним датасорсом и попросим реализацию. При доп. условии что от него (разработчика) доработок больше не будут требовать - то ... получим 100 разных решений. И все они будут по своему правы потому-что каждый из них прочитает ТЗ и будет делать так как считает целесообразным с позиций своего опыта, знаний фреймвороков и каждый будет закладывать некую толику масштабирования (даже если в ТЗ про это не было ни слова) и малую толику ORM-а и гибкости и красивости а также немного наивного стремления следовать SOLID даже там где его не просили вообще. А println в сервлете тоже имеет право на существование. Я его использовал когда нужно было стянуть логи с себ-порта, а заказчик принципиально не давал нам никаких доступов к SSH. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 17:44 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
а за String.format спасибо что напомнили, просто забыл :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 18:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевОткровенно говоря одно противоречит другому. Ничуть. Сергей АрсеньевПопытка предусмотреть все приводит к тому, что кто-бы не пришел со стороны ему потребуется очень много времени въехать в проект. Кто говорит о предусмотреть все? Разделение UI и серверной логики это азы, которое должно быть в каждом проекте(если ты только не пишешь один и сам для себя). Излишняя либеральность тут ни к чему, вы только поощряете говнокодерство. Опытному программисту не надо спрашивать совет когда можно наговнокодить, он это знает потом и неспаными ночами. Сергей АрсеньевГовнокод (по методу делаем самым простым способом) выигрывает у этого подхода в разы. Ибо понятно что делается и как можно поменять. Неправда Сергей Арсеньев Другое дело, что при изменении вводных его приходится переделывать полностью чуть реже чем всегда. Да, объясните это заказчику захотевшему адаптивную верстку, ведь это круто. Приложение то работает, надо всего лишь нанять хорошего дизайнера, да? Сергей АрсеньевНо понять почему данные пришедшие в сервлет не записались в БД. При том, что метод состоит из одного query которое тут же забито в виде строковой константы гораздо проще, чем искать на каком слое абстракции остался клон сущности, о котором известно Хиберу и значениями которого он перезатрет то, что сохранилось в базу по коммиту. Фигасе какие нежные разработчики. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 18:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonЯ думаю что если мы возьмем 100 синьоров и дадим им одно ТЗ с одним сервлетом, одним запросом и одним датасорсом и попросим реализацию. При доп. условии что от него (разработчика) доработок больше не будут требовать - то ... получим 100 разных решений. И все они будут по своему правы Как жаль что такого не бывает в реальности :) maytonпотому-что каждый из них прочитает ТЗ и будет делать так как считает целесообразным с позиций своего опыта, знаний фреймвороков и каждый будет закладывать некую толику масштабирования (даже если в ТЗ про это не было ни слова) и малую толику ORM-а и гибкости и красивости а также немного наивного стремления следовать SOLID даже там где его не просили вообще. Есть программирование для себя и промышленное. Так вот, в промышленном есть такое понятие как культура программирования. Не надо предусматривать все, а надо просто сделать проект таким, какой бы ты хотел видеть любой легаси проект. Да, у каждого свой опыт и знания, и трудно предсказать каким этот код будет смотреться со стороны, именно для этого и существуют best practices, можно кое где и наговнокодить, но это должен быть концентрированный говно код в одном месте, которое можно взять и переписать. maytonА println в сервлете тоже имеет право на существование. Я его использовал когда нужно было стянуть логи с себ-порта, а заказчик принципиально не давал нам никаких доступов к SSH. а в скольких проектах вы не использовали println ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 18:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевОткровенно говоря одно противоречит другому. Попытка предусмотреть все приводит к тому, что кто-бы не пришел со стороны ему потребуется очень много времени въехать в проект. не нахожу в цитируемом абзаце ничего о том, что понимать такую структуру в целом становится легче, чем если бы все было в одном супер-классе :( . так что не вижу противоречия Сергей Арсеньев Другое дело, что при изменении вводных его приходится переделывать полностью чуть реже чем всегда. именно, см. "модифицировать и расширять". Сергей АрсеньевНо понять почему данные пришедшие в сервлет не записались в БД. При том, что метод состоит из одного query которое тут же забито в виде строковой константы гораздо проще, чем искать на каком слое абстракции остался клон сущности, о котором известно Хиберу и значениями которого он перезатрет то, что сохранилось в базу по коммиту.бывает. но в целом получается мы жертвуем качеством в угоду сиюминутной выгоды в простоте. [youtube= ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 18:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonА println в сервлете тоже имеет право на существование. Я его использовал когда нужно было стянуть логи с себ-порта, а заказчик принципиально не давал нам никаких доступов к SSH. тут как-бы никто не против карандашей. мы против ковыряния ими в ушах ;) . да и то из чисто человеколюбивых соображений. хотя в данном случае изначально видно - все усилия бесполезны, спор не имеет смысла. с другой стороны у меня сегодня мало работы ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 18:27 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ника в скольких проектах вы не использовали println ? Во всех остальных ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 18:35 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Диез, ДиезПредставьте, что вам достается в наследство код, подобный этому: А код ревью на что? Такие гадости либо задокументированы хорошо должны быть, либо выброшены на этапе ревью. Будто на этих ваших Ц++ такого не бывает. maytonЯ-бы по другому сказал. На Java всегда можно найти менторов или синьоров которые могут объяснить то или другое поведение. Если сложная ситуация с реверс инжинирингом или с анализом унаследованного кода возникнет в Scala - куда бежать-та? Сразу в Сан-Франциско? Синьоров толком нету. И даже не суть в реверсе. Реверс-то любой студент сделает с дебаггером. Ещё раз спрошу: Чем enterprise Java от enterprise Scala отличается? Какие проблемы с вопросами? На Stackoverflow очень хорошо по Скале отвечают. Читаем Scala in action, читаем Programming in Scala. У Раста сообщество меньше - программируют как-то. maytonИ какой смысл нам сейчас тут обсуждать рефакторинг и разделение на layer этого сервлета если всё ТЗ мы нечитали и не знаем что с ним будет дальше. Можно игнорировать best practices и говнокодить чего душе угодно. А когда проект выйдет за рамки генерации персональных веб-страничек - получаем ворох проблем. maytonак говорил пингвин Командор: - Крякнем. Плюнем. И замотаем скотчем! Отличный подход. На ПХП любили практиковать. вадяутебя еще нет обращения к базе... да за это количество строк ты получишь больше... и ещё они в разных файлах посмотреть в одном, переключиться на другой... Действительно. Гораздо удобней говнячить всё в одном файле строк на 5К, правда? mayton немного наивного стремления следовать SOLID даже там где его не просили вообще. Потому что человек работающий над большими, динамичными проектами привык делать всё так, чтобы потом не переписывать. Наверное потому сеньёры не занимаются "ТЗ с одним сервлетом". Сергей АрсеньевГовнокод (по методу делаем самым простым способом) выигрывает у этого подхода в разы. Ибо понятно что делается и как можно поменять. Legacy на С++ не случалось, значит? Ну-ну. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 18:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverЕщё раз спрошу: Чем enterprise Java от enterprise Scala отличается? Какие проблемы с вопросами? На Stackoverflow очень хорошо по Скале отвечают. Читаем Scala in action, читаем Programming in Scala. У Раста сообщество меньше - программируют как-то. По поводу отличий - сделаем по другому. Я просто буду периодически поднимать в Java топики, ответы на которые я не нашёл в Stackoverflow. Обычно мои вопросы заключаются не в том "как это сделать" а в том "почему сделано именно так" и "как еще можно было сделать". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 19:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRivermayton немного наивного стремления следовать SOLID даже там где его не просили вообще. Потому что человек работающий над большими, динамичными проектами привык делать всё так, чтобы потом не переписывать. Наверное потому сеньёры не занимаются "ТЗ с одним сервлетом". Нет ли здесь противоречия с KISS или YAGNI ? Автора, написавшего JSP-страничку с prinln ругали всем миром. Но никто не видел ТЗ. Как вы считаете коллега, нет ли в этом какой-то натяжки? Или лицемерия? Синьор не может себе позволить написать "прямой" код? Он обречён hello-world писать через фабрику + синглтон + строитель? Он не может себе позволить быть "простым и кротким" как говорил один бородатый философ пару тыщ лет назад? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 19:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverОтличный подход. На ПХП любили практиковать. Это была шутка! А на ПХП я никогда не писал вобщем-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 19:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Если что, есть транскрипт ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 19:54 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton Нафига вот это занудная игра в адвоката дьявола, если очевидно что "художник реально так видит"? Коллега чисто случайно забыл про существование String.format, ты сам-то веришь при таком раскладе в ТЗ на "прямой код"? У себя на заднем дворе можно хоть коннекты не закрывать, но на серьезных щах утверждать, что код отличный и вообще докажите что нет - это детский нигилизм. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 19:56 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpashamayton Нафига вот это занудная игра в адвоката дьявола, если очевидно что "художник реально так видит"? Коллега чисто случайно забыл про существование String.format, ты сам-то веришь при таком раскладе в ТЗ на "прямой код"? У себя на заднем дворе можно хоть коннекты не закрывать, но на серьезных щах утверждать, что код отличный и вообще докажите что нет - это детский нигилизм. Я уделил этому коду ровно 2 секунды. И вообще он мне не интересен. Мне было интересно другое. Предел комплексности при решении задачи вывода 1 резалтсета из 1 сервлета. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 19:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonМне было интересно другое. Предел комплексности при решении задачи вывода 1 резалтсета из 1 сервлета. а задача как звучит ;)? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 20:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonDoSOfRedRiverпропущено... Потому что человек работающий над большими, динамичными проектами привык делать всё так, чтобы потом не переписывать. Наверное потому сеньёры не занимаются "ТЗ с одним сервлетом". Нет ли здесь противоречия с KISS или YAGNI ? Автора, написавшего JSP-страничку с prinln ругали всем миром. 1) "S.O.L.I.D. сложные", - миф. Потому и противоречия нет. KISS и YAGNI - методологии, а не математика - сущности разного класса. Про их преимущества\недостатки достаточно хорошо известно, к тому же. 2) Синьор может позволить, вот только никто не нанимает программиста за 1.5К$ долларов писать Hello World'ы, смекаешь? На своих проектиках ведь можно что угодно делать. Речь идёт о больших и сложных вещах, в которых много людей участвует. chpashaНафига вот это занудная игра в адвоката дьявола, если очевидно что "художник реально так видит"? Неистово плюсую. Очевидно, что многое, чего тут написано - не имеет под собой объективной основы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 20:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
читал только первую страницу. у нас так: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 20:56 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
так почище Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 21:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код: c# 1.
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 23:17 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никРазделение UI и серверной логики это азы, которое должно быть в каждом проекте Но не должно быть самоцелью, а должно подчинятся общей логике решения задачи. Другими словами если вам надо соединить линией две точки на карте, это можно сделать на клиенте (js) и на сервере (java), но где зависит от возможностей того и другого и целесообразности, а не как от необходимости выполнять правильный паттерн программирования. IMHO конечно. С другой стороны волшебная кнопка, это конечно моветон. забыл ник вы только поощряете говнокодерство. Не совсем - я не люблю быдлокодерства - у которого шаблон важнее сути. Хуже в сопровождении только код гуру - ибо "почему это вообще работает" порой он даже сам вспомнить не может. С другой стороны Вы правы забыл никФигасе какие нежные разработчики. Чем сложнее тем дороже. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 09:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chpashaбывает. но в целом получается мы жертвуем качеством в угоду сиюминутной выгоды в простоте. Вы не поняли, не сиюминутной. А с точки зрения сопровождения на предмет нахождения багов и вхерачивания костыля. С точки зрения развития функционала большое количество костылей может начать мешать настолько что придется все переделывать. Другая крайность, когда из-за большого количества слоев универсальной абстракции теряется часть смысловой информации и, чтобы она появилась в нужном месте приходится все переделывать. Собственно опыт "сеньёра" и позволяет найти подход, который не позволяя уйти в крайности решает задачу с приемлемым уровнем гибкости и масштабируемости программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 09:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Прикольно. Никак не ожидал, что в теме по Java 8 будет обсуждаться слой VIEW где css+html+jsp+ResultSet в одном флаконе-файле. Как справедливо написали выше, те кто ел устриц, знает где можно так писать. А если кто не ел устриц - толку описывать различия вкуса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2016, 10:03 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никmaytonЭто еще мой один брошеный камень в адрес "Фаулера головного мозга" и болезни под названием хроническое недо-пере-проектирование всего и вся. Ну давайте делать однострочные названия у переменных, называть классы A.java и B.java так ведь быстрее, не закрывать Reader, не проверять на нулл, все это излишнее. Все-таки есть некоторые базовые принципы, которым надо следовать всегда и везде. Java - язык в этом смысле абсолютно дебильный, нельзя в нем не писать классы, и иногда классы можно и нужно называть A или B. Под однострочными переменным наверно имелось в виду однобуквенные, они тоже иногда допустимы. Формулы, или маленький компактный код, который не нуждается в осмысленности названия переменной. так что нет никаких базовых принципов, которым нужно сделаю всегда и везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2016, 23:03 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
засрали топик, блин... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2016, 23:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
MasterZivтак что нет никаких базовых принципов, которым нужно сделаю всегда и везде. базовые это не абсолютные). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2016, 23:17 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverИ чем таким enterprise Scala от enterprise Java отличается? Стеком и только? И вообще, собеседование собеседованию рознь, я об этом говорил. Проще взять на работу толкового парня, который за полгода освоить нужный стек, чем полгода искать сеньёра-помидора с зарплатой nK$. Некто Девид Поллак рассуждает о человеческом факторе в вопросе применения Scala на проектах. https://habrahabr.ru/post/134897/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 00:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, занятный мужик. здесь http://blog.goodstuff.im/golang он описывает свои впечатления от GO: Рассказывает про то, как он "на раз" въехал в GO. И комфортно ему было в GO, как в домашних тапочках. Но глупее, с его точки зрения, языка чем GO, не существует в природе. Так как, там нет ... только представь... в этом самом нелепом GO - трай-кетча-то и нет совсем - ну прям как в замшелом си. Не иначе, как тот GO конченные чудаки придумывали. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 01:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
boobyтрай-кетча-то и нет совсемэто тоже сахар (: ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 06:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, Поллак, конечно, жуткий сноб, и самомнения ему не занимать, но, в целом, верные вещи говорит. Достаточно посмотреть на мистификации вокруг Скалы или какого-нибудь ЛИСП о их сложности надуманной. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 12:42 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRivermayton, Поллак, конечно, жуткий сноб, и самомнения ему не занимать, но, в целом, верные вещи говорит. Достаточно посмотреть на мистификации вокруг Скалы или какого-нибудь ЛИСП о их сложности надуманной. Lisp-то как раз не сложен. Он просто интересен своей memory-model. И занимает мозг как brainfuck. На нём просто интересно что-то делать для разминки мышления. Впрочем к практике это имеет мало отношения. Я неоднократно пытался в одном проекте "присобачить" скалу или груви для некоторых прикладых и некритичных задач типа кодо-генераторов или генераторов стабов для самописных ORM но у меня к сожалению дело остановилось из за поддержки команды. Три из трех разработчиков весьма прохладно отнеслись к этому вопросу. А без кворума ничего не выходило. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 13:47 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Еще раз к несчастному Поллаку. https://habrahabr.ru/post/134897/ Ну, что касается меня, я могу решать интегралы во сне, и я не смогу правильно написать слово даже если от этого будет зависеть моя жизнь. У разных людей — разные навыки. Разные люди ценят разные вещи. Существует целый класс людей, которые любят компьютеры и любят писать код. Я среди них. И существует класс людей, которые не поставили бы программирование в топ-5 своих любимых занятий. Я его очень понимаю. Я чувствую что даже сейчас многие гуманитарные науки типа истории мне в принципе недоступны. Так-же как и некоторые религиозно-философские учения. И я очень плюсую его мысли о навыках. Это глубже чем просто школьная или университетская программа. Это как способность воспринимать музыку. У некоторых она есть. У некоторых нет. И я понимаю тех разработчиков которые не хотят воспринимать языки сложнее чем Java (что кстати им не мешает быть эффективными решателями бизнес задач). Такова селяви. Но мне всегда бизнес-задачи были скушны. Даже в самых сложных постановках задача сводилась к 4 арифметическим операциям над деньгами (кортежами записей об услугах телефонии или банкинга). Это как перекладывание вещей из одной кошёлки в другую. Словом - рутина с большой буквы. Здесь Scala или Lisp или Haskell - это как философская мысль. Как глоток свежего воздуха. Или как генерализация всех-всех знаний накопленных за 100 лет от смерти Тьюринга. По сути итог. Что мы вообще достигли за историю кибернетики... И когда мне показывают перекладывание одних объектов в другие с использованием модных фреймворков - мне становится скушно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 19:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Реальность: https://habrahabr.ru/post/134897/ Но большинство-то делает ORM, CRUD, утилиты, и прочие штуки в стиле заполни-форму-и-сохрани-в-базе. Вот где большинство разработчиков и где деньги. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 23:51 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, авторза 100 лет от смерти Тьюринга. Тьюринг отравился в 1954 году. Малек подождать до столетия надо. А пока 100-летие не наступило - ну, смотайся в Питер - вдруг там какой-нибудь Котлин-2 замышляют, а ты тут с места на место перекладываешь crud. А "селяви", имхо, не в том, что скучно, а в том, что единственное, что видит программист - это код. Но, чем дальше, тем меньше у программиста даже отдаленного представления о том - как же он работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 04:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
booby Тьюринг отравился в 1954 году. Малек подождать до столетия надо. Ну дай бог. Я наверное имел в виду дату его рождения (это примерно было в начале 20 века). А пока 100-летие не наступило - ну, смотайся в Питер - вдруг там какой-нибудь Котлин-2 замышляют, а ты тут с места на место перекладываешь crud. Я про Котлин узнал неделю назад если чесно. Лекции Андрея Бреслава качнул. Лежат на медиаплеере. Буду ехать куда-нить - послушаю. А "селяви", имхо, не в том, что скучно, а в том, что единственное, что видит программист - это код. Но, чем дальше, тем меньше у программиста даже отдаленного представления о том - как же он работает. Я вообще - ужасный идеалист и зануда. У меня есть хороший приятель мега синьорного левла который мне всегда говорит одну и ту-же фразу - "мы не пишем КОД. Мы пишем Бизнес-ФИЧИ". Я с ним до сих пор не согласен. Но не потому что он не прав а потому что в сегменте It мы находим своё. Он находит проекты и оплату. Я нахожу - fun и удовольствие от процесса решения головоломок. И каждая из них - challange. Вызов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 19:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonDoSOfRedRivermayton, Поллак, конечно, жуткий сноб, и самомнения ему не занимать, но, в целом, верные вещи говорит. Достаточно посмотреть на мистификации вокруг Скалы или какого-нибудь ЛИСП о их сложности надуманной. Lisp-то как раз не сложен. Он просто интересен своей memory-model. И занимает мозг как brainfuck. На нём просто интересно что-то делать для разминки мышления. Впрочем к практике это имеет мало отношения. Я неоднократно пытался в одном проекте "присобачить" скалу или груви для некоторых прикладых и некритичных задач типа кодо-генераторов или генераторов стабов для самописных ORM но у меня к сожалению дело остановилось из за поддержки команды. Три из трех разработчиков весьма прохладно отнеслись к этому вопросу. А без кворума ничего не выходило. А это нормальная ситуация. Я на сервере написал скрипт на ELisp небольшой, девять строк, дык мне ПМ говорит: "Перепиши на Питон, с твоей тарабарщиной потом никто не разберётся". И стоит ли ради девятистрочника тянуть дистрибутив питона на сервер? Проблема современного программиста в том, что он не желает свой кругозор расширять. С поразительным упорством эти луддиты выступают против любого апгрейда, нововведения. Лучше бы работали так. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 19:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiver, я бы также сказал ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 23:35 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiver, удивительно что у вас ПМ-ы так глубоко вникают в процесс. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 23:42 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverвыступают против любого апгрейда+256 Поэтому до сих пор старые JBoss'ы, где-то JDK 6-й и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 23:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
автор Я нахожу - fun и удовольствие от процесса решения головоломок. И каждая из них - challange. Вызов. в очередной раз высказываешь мои мысли ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 00:29 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
У клиентов нет задачи использовать последние версии JDK/JBoss/etc. Есть задача "шопвсёработало", а миграция на новую версию далеко не всегда - тривиальная задача. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 18:48 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverА это нормальная ситуация. Я на сервере написал скрипт на ELisp небольшой, девять строк, дык мне ПМ говорит: "Перепиши на Питон, с твоей тарабарщиной потом никто не разберётся". И стоит ли ради девятистрочника тянуть дистрибутив питона на сервер? Что-то у меня не сходится. Раз надо тянуть дистрибутив Питона, то на сервере не Линух, а Винда? Но если Винда, то ELisp-а там вроде по умолчанию тоже нет. То есть дистрибутив ELisp тянуть ради девятистрочника стоило. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 18:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Alexander A. Sak, А я не помню, может и был Питон. Емакс уже стоял как рабочий редактор. Здесь суть сам диалог. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 20:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Привет. Есть метод Код: java 1. 2. 3.
необходимо в массиве объектов все строки привести к нижнему регистру. Решил поиграться с Stream API. Получилось как-то так Код: java 1. 2. 3. 4. 5. 6.
Насколько это коряво? Можно ли лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2016, 10:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2016, 11:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
13-й Пилигримнеобходимо в массиве объектов все строки привести к нижнему регистру. Насколько это коряво? Можно ли лучше? Гетерогенные коллекции и массивы это уже коряво само по себе, как и использование типа Object. Корявые входные данные требуют от вас корявых решений. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2016, 11:18 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz13-й Пилигримнеобходимо в массиве объектов все строки привести к нижнему регистру. Насколько это коряво? Можно ли лучше? Гетерогенные коллекции и массивы это уже коряво само по себе, как и использование типа Object. Корявые входные данные требуют от вас корявых решений. На самом деле, не гетерогенные. Гетерогенность подразумевает разнородность данных, здесь же хранится массив указателей на Object. Свойство этого массива хранить ссылки на другие объекты называется ковариантностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2016, 21:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiver, Тот случай когда хотел сумничать а в результате пернул в лужу. Причём тут вообще свойства массива? Речь исключительно о данных внутри, гетерогенность которых приводит к необходимости делать проверку типа в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 07:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, Blazkowiczот случай когда хотел сумничать а в результате пернул в лужу. Я тоже вот что-то такое подумал, когда твоё сообщение прочитал. Где тут гетерогенность то? Чем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 17:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverЯ тоже вот что-то такое подумал, когда твоё сообщение прочитал. Что-то подумал, но не понял что? DoSOfRedRiverГде тут гетерогенность то? В данных. Сколько раз это нужно написать чтобы до тебя дошло? DoSOfRedRiverЧем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ? У тебя ещё и с логикой туго? То что коллекция может содержать гетерогенные данные ещё не значит что данные в ней действительно гетерогенные. И то что данные гетерогенные в данном конкретном случае, ещё не значит что все коллекции имеют гетерогенные данные. Урок логики окончен. Переваривай. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 17:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля? Или ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты? Может TC действие, в котором важно, что там строка или не строка важно только раз в год. А во всех остальных случаях нужен именно Object. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 17:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, DosOfRedRiver девочки не ссортьесь. Пустяк ведь. Топик нормальный. Нормально обсуждаем. К чему нам закрытие. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 17:29 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевВместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля? Да, прописные истины , вроде From Effective C++, by Scott MeyersAnytime you find yourself writing code of the form "if the object is of type T1, then do something, but if it's of type T2, then do something else," slap yourself Касательно проверки на тип. Гетерогенные данные приводят к тому что тебе нужно писать такую проверку в каждом месте, где ты собрался их использовать. Касательно проверки поля, это практически так же плохо, так как доступ к полю не виртуален. Мало того он ещё и инкапсуляцию, в большинстве случаев, нарушает, учитывая приведенный код. Сергей АрсеньевИли ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты? И эти люди предлагают мне не спорить о терминологии. "Тождественность" здесь каким боком вообще. Я предлагаю не хранить в коллекциях объекты разных типов. Если у тебя массив типа Object, то оперировать ты должен только методами типа Object с этим массивом. Если тебе приходится смотреть внутрь каждого объекта, чтобы понять можешь ли ты им оперировать, то значит где-то ты уже наговнокодил. Сергей Арсеньев Может TC действие, в котором важно, что там строка или не строка важно только раз в год. А во всех остальных случаях нужен именно Object. Может это уже обсуждение сферических коней в вакууме? Частота выполнения кода как относится к его качеству вообще? Или опять качество меряем производительностью? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 18:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczDoSOfRedRiverГде тут гетерогенность то? В данных. Сколько раз это нужно написать чтобы до тебя дошло? DoSOfRedRiverЧем ссылка на Object отличается от ссылки на Object, а? Чо теперь, любая ковариантная коллекция в Джаве стала гетерогенной ? У тебя ещё и с логикой туго? То что коллекция может содержать гетерогенные данные ещё не значит что данные в ней действительно гетерогенные. И то что данные гетерогенные в данном конкретном случае, ещё не значит что все коллекции имеют гетерогенные данные. Урок логики окончен. Переваривай. Ага. То есть, сначала у нас были: BlazkowiczГетерогенные коллекции и массивы а теперь появились "гетерогенные данные". Можно узнать, что это за отношение гетерогенности такое? Давай ещё раз, постарайся: Object [] - это массив указателей на Object. Он [массив] не является гетерогенным, не содержит "гетерогенных данных". Что такое гетерогенная коллекция я уже объяснил. Есть что по существу возразить? mayton, Обсуждение терминологии - важная часть индустрии. А по стилистике - всё ОК, никто на личности не переходит. Самому хочется знать. ВДРУГ я не прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 19:35 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевВместо того, чтобы спорить о том, какой термин глубже объясняет смысл природы вещей, объяснил бы чем проверка на instance of отличается от проверки значения поля? Или ты предлагаешь хранить в коллекциях только абсолютно тождественные объекты? Может TC действие, в котором важно, что там строка или не строка важно только раз в год. А во всех остальных случаях нужен именно Object. Тут соглашусь с Blazkowicz. Как правило, такие вот сигнатуры - зло во коде, и нафиг не нужны. Почти любую функцию можно переписать без Object. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 19:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiver, Натянул сову на глобус. Молодец. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 20:17 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverМожно узнать, что это за отношение гетерогенности такое? То самое, которое требует instanceof String DoSOfRedRiverОн [массив] не является гетерогенным, не содержит "гетерогенных данных". Весь интернет пользуется, а у тебя "не является". http://stackoverflow.com/questions/16363547/how-to-declare-an-array-of-different-data-types DoSOfRedRiverЧто такое гетерогенная коллекция я уже объяснил. Объяснил он. Теперь гуглу объясни: https://www.google.com/search?q=define: heterogenous collection https://wiki.haskell.org/Heterogenous_collections Does some kind of collection of objects with different types in Haskell exist? Вопросы? DoSOfRedRiverЕсть что по существу возразить? Ты тут не первый кто пытается таким способом самоутвердится. Но уж если обосрался, имей смелость в этом признаться хотя бы себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2016, 20:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz, Слушай, ты меня утомил. BlazkowiczТо самое, которое требует instanceof String instanceof требуется чтобы не словить ошибку приведения типов. А это твоё отношение как-то записывается, или оно только в твоей голове существует, и на математический язык не перекладывается? BlazkowiczDoes some kind of collection of objects with different types in Haskell exist? Классно, выдрал цитатку из статьи про ДРУГОЙ ЯЗЫК который НЕ ПОДДЕРЖИВАЕТ ООП. Я могу тебе эссе на "Идиота" Достоевского запостить сюда. btw, если дальше читал, там написано следующее: https://wiki.haskell.org/Heterogenous_collections Obviously, tuples are an example, but they have a fixed length. To compare tuples vs lists: Tuples - Heterogeneous Lists - Homogeneous Ты так и не ответил на вопрос: DoSOfRedRiverЧо теперь, любая ковариантная коллекция в Джаве стала гетерогенной? Если так, то можешь не отвечать дальше, нам не о чем поговорить будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2016, 21:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiverСлушай, ты меня утомил. Хорошая попытка вызвать жалость. Но нет. DoSOfRedRiverА это твоё отношение как-то записывается, или оно только в твоей голове существует, и на математический язык не перекладывается? Какой нахрен математический язык? Мы тут что дисер защищаем? DoSOfRedRiverКлассно, выдрал цитатку из статьи про ДРУГОЙ ЯЗЫК который НЕ ПОДДЕРЖИВАЕТ ООП. Я могу тебе эссе на "Идиота" Достоевского запостить сюда. Тебе удобно не замечать всех остальных ссылок из гугла. Ну, что же. Бывает. ООП тут вообще при чем??? Типизация есть? Так вот речь о ней. DoSOfRedRivertuples vs lists: Tuples - Heterogeneous Lists - Homogeneous А вот это уже конкретика хаскеля. Но тебя этот факт мало волнует. Ты готов за любую нелепость зацепиться? DoSOfRedRiverТы так и не ответил на вопрос: DoSOfRedRiverЧо теперь, любая ковариантная коллекция в Джаве стала гетерогенной? Ты так и не понял ответ. Речь не о коллекции как типе и её свойствах, речь о коллекции как наборе данных. DoSOfRedRiverЕсли так, то можешь не отвечать дальше, нам не о чем поговорить будет. Ну, так и не истери, если тебе не о чем говорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2016, 09:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вот никому не известный сайт пишет: Коллекция может хранить объекты только одного или различных типов. Во втором случае говорят о гетерогенной коллекции. А вот никому не известный автор http://www.k-press.ru/cs/2008/3/generic/generic.asp Теория и практика Java. Эксперименты с generic-методами Автор: Брайен Гетц ... С другой стороны, raw-тип List является гетерогенным; ... Оригинал, если вдруг кто-то решит что это отсебятина переводчика http://www.ibm.com/developerworks/library/j-jtp04298/ Ну, что? Тут уже не так просто ляпнуть, что Хаскель это не ООП язык, поэтому термины типизации там совсем не такие? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2016, 09:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
DoSOfRedRiver, Всё я понял, причину твоего заблуждения. Ты увидел, что тип параметра Object[], и ты знаешь что это не очень хорошо и решил что именно по этой причине я называю такой массив гетерогенным. А это не так. Object[] это, конечно, не очень хорошо, но это не корень проблемы, а её следствие. Проблема в том что автор в этом массиве хранит гетерогенную коллекцию, которая требует от него явных проверок на тип. Это ключевая проблема. То есть речь идёт не о коллекции-типе, как тебе показалось, а о коллекции-объекте, как состоянии. И это не только ключевая проблема, но и на много более критичная проблема, по сравнению с использованием типа Object[]. Что тоже не фонтан, но, не вызывает таких проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2016, 14:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczКасательно проверки на тип. Гетерогенные данные приводят к тому что тебе нужно писать такую проверку в каждом месте, где ты собрался их использовать. Этак мы дойдем до - нафиг нужно наследование? Или куча хреновый способ размещать объекты в памяти - все превращает в свалку. :) Не везде где собрался использвать, а там гда от этого что-то зависит. Если у людей вся логика построена на вызове метода hashCode() и equals() Или вообще это коллекция со списком мониторов. Зачем им разные списки? Да ТС может захотел на время засунуть туда логгер для строк - ему надо проверять строка не строка. Но основную логику перефигачивать ради такой задачи глупо, IMHO. Blazkowicz Я предлагаю не хранить в коллекциях объекты разных типов. Хорошее решение в 99% случаев. BlazkowiczМожет это уже обсуждение сферических коней в вакууме? Частота выполнения кода как относится к его качеству вообще? Или опять качество меряем производительностью? Он самый в вакууме. Хороший код это тот, который делает то что нужно и не делает того, что не нужно. Если этот код выполняет что-то нужное за приемлемое время, а с разнесеннием по 100500 коллекций простую операцию получения итератора превращает в танцы с бубном, то это плохо. Если же для каждого типа объекта нужен свой обработчик, то свалка это плохо. P.S. Да и свалка у ТС могла возникнуть по наследству. В этом случае совет - это плохо равнозначен совету игроку в тетрис - не туда надо было. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 15:07 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей Арсеньев Этак мы дойдем до - нафиг нужно наследование? Для наследования есть полиморфизм, который проблему решает. Сергей Арсеньев Если у людей вся логика построена на вызове метода hashCode() и equals() Когда вся логика построена на hashCode() и equals(), то список у нас условно гомогенный. Когда человеку нужно писать if(o instanceof String), то список резко становиться гетерогенным. Потому что для нас по критерию String/не String уже как минимум два разных типа. Сергей Арсеньев Или вообще это коллекция со списком мониторов. Зачем им разные списки? Зачем монитору toLowerCase()? Сергей Арсеньев Да ТС может захотел на время засунуть туда логгер для строк - ему надо проверять строка не строка. Но основную логику перефигачивать ради такой задачи глупо, IMHO. Глупо потом писать if ... instanceof в каждом методе где используется эта коллекция. Сергей АрсеньевP.S. Да и свалка у ТС могла возникнуть по наследству. В этом случае совет - это плохо равнозначен совету игроку в тетрис - не туда надо было. :) И автор вместо того чтобы разгрести свалку переводит код на стримы. Да? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 15:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczСергей Арсеньев Или вообще это коллекция со списком мониторов. Зачем им разные списки? Зачем монитору toLowerCase()? ... И автор вместо того чтобы разгрести свалку переводит код на стримы. Да? Автору могли дать вспомогательную задачу. Ну там отследить что за хрень стала появляться? А для основной (мониторы) toLowerCase нафиг не нужна. Это одна ситуация. Если же toLowerCase нужна постоянно в основной логике - совсем другая. Вот и все что я хотел сказать. То что гомогенно для одного, может быть гетерогенно для другого. P.S. Хотя использовать String как монитор, например, уже само по себе можно считать моветоном. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 15:37 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Коллеги, хотелось бы пояснить необходимость Object[] и toLowerCase() и, по возможности, выслушать советы по улучшению. Вся задача вертится вокруг Infinispan в целом и Querying via the Java Hot Rod client в частности. Для работы с кэшем, размещенным на удаленном сервере, Infinispan Предлагает использовать собственный протокол Hot Rod , а для поиска собственный же Query DSL Примерно вот так это выглядит Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Т.е. Код: java 1.
ну, или Код: java 1.
Имеется собственная обертка - что-то типа QueryBuilderWrapper, которая строит query. Враппер в качестве параметра принимает некий SearchBean Код: java 1. 2. 3. 4.
Т.к. враппер строит query для любых полей и, соответственно, любых типов хранимых значений, требуется Object. А т.к. значений для поиска м.б. несколько, требуется Object[] А toLowerCase нужен для регистронезависимого поиска. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 17:29 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
13-й ПилигримА toLowerCase нужен для регистронезависимого поиска. Спасибо за разъяснения, но они никак не объясняют надобности в гетерогенных значениях для поиска. field у вас один. Значит все values должны соответствовать его типу. Так ведь? Значит там либо все String, либо все Integer, либо все значения другого одинакового типа. Поэтому вполне можно, например, через method overload конструировать SearchBean для String не так как для других типов (с нормализацией регистра). Из каких данных вы этот SearchBean собираете? Почему там не String[], например? Как у вас в values может попасть одновременно String и другой тип? Ну, и безотносительно проблемы, нормализация параметров поиска требует ведь и нормализации данных. То есть к регистронезависимому поиску такое решение не особо относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 17:51 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczСпасибо за разъяснения, но они никак не объясняют надобности в гетерогенных значениях для поиска. field у вас один. Значит все values должны соответствовать его типу. Так ведь? Значит там либо все String, либо все Integer, либо все значения другого одинакового типа. Да, верно - для одного филда значения могут быть только одного типа. BlazkowiczПоэтому вполне можно, например, через method overload конструировать SearchBean для String не так как для других типов (с нормализацией регистра). Да, этот вариант выглядит предпочтительным. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
BlazkowiczКак у вас в values может попасть одновременно String и другой тип? Правильно, не может. BlazkowiczНу, и безотносительно проблемы, нормализация параметров поиска требует ведь и нормализации данных. То есть к регистронезависимому поиску такое решение не особо относится. Конечно, данные в кэше тоже нормализованы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 18:14 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
13-й ПилигримДа, этот вариант выглядит предпочтительным. Скажем решительное "нет" копипасте и "да" самодокументированому коду. Код: java 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 18:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz Код: java 1. 2. 3.
А может и так. Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2016, 18:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczСкажем решительное "нет" копипасте и "да" самодокументированому коду. Главное, чтоб это самодокументация дошла до разработчиков того сервиса, которые будут дергать бин. А то веди их будет ждать сюрприз, когда они пришлют Object[] содержащий строки и они не преобразуются к маленьким буквам. Но скорее всего это сам ТС и он в курсе. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 15:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей Арсеньев, Это не сервис же. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 15:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
По сабжу. Прошло уже немало (сколько?) лет с момента публикации пары статей некого Африканца под названием Околожабство. http://izm.izvm.net/zhaba/java-a.htm http://izm.izvm.net/zhaba/java-b.htm Я не предлагаю сейчас обсуждать его личность или сами статьи а просто хочу посмотреть и добавить что изменилось с тех пор и что уже не есть TRUE. Поскольку в чтениях статей и - медленный покемон - то можете писать свои каменты раньше меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 16:14 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, толи ещё будет https://habrahabr.ru/post/280188/ ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 16:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Usmanвадя, var (справочник по C#) но для написания в ide лучше четко определить - ide будет проще конторолировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 16:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Почитал. ПОЛНОСТЬЮ плюсуюсь. Человек верно пишет. Все так и есть ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 16:46 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
http://izm.izvm.net/zhaba/java-a.htm 17) Одно из замечательных изобретений Вирта - перечислимый тип. Жаль, что он от него отказался в Обероне. В каком-то виде этот тип пробрался даже в С. В Жабе его нет, и это очень неудобно. Вместо него - просто целые "константы", которые вовсе и не константы. Никакой проверки типов (которая была бы естественна для "надежного" языка). Иные удальцы применяют классы для этого - то есть передают указатели там, где нужно целое значение, и используют функции там, где нужно число, закодированное этим значением. В итоге программа становится совершенно нечитаемой, и к тому же на пустом месте теряется эффективность. Я не знаю (еще раз) какой датой датируется эта статья. Возможно автор апеллирует к спекам 1.4. Кроме того он часто упоминает Microsoft Visual J++. Проект который уже давно мёртв. Но ключевое слово enum работает начиная с Java 1.5 (5) и позволяет спокойно описывать перечислимые типы и даже набор методов над ними. Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
27) Сама библиотека оставляет желать лучшего. Почему, например, для узнавания текущей даты я должен выделять в памяти объект? А вот еще задачка, достойная пера. Напечатать текущую дату в формате дд.мм.гггг чч:мм:чч.МММ (МММ - миллисекунды). Ну все сделано, чтобы только сделать это невозможным! Вообще, опыт практического использования библиотеки заставляет подумать, что она была сделана левой ногой пьяного матроса. Необходимо пересмотреть с учотом Java8 (java.time.*) Код: java 1. 2.
Возможно аллоцирование форматтеров перенесено в пулы и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:48 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Только сейчас получил: java.lang.Error: Unresolved compilation problem: Б...! Этот язык компилирующий или что? Какая нафиг compilation problem в момент выполнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton Код: java 1. 2.
Возможно аллоцирование форматтеров перенесено в пулы и т.п. Если следовать логике автора, то immutable объекты это совсем за гранью. Там ведь не просто объект аллоцируется! Он на каждую операцию аллоцируется! А то что производительность GC от количества мусора почти не зависит, это ведь ещё знать надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:54 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
29) При написании на С много внимания уделяется всяким случаям вроде "А что если функция malloc вернула NULL?" Так вот, в Жабе считается, что память всегда есть. В общем-то никаких оснований для этого нет. А когда память кончится, будет брошена эксепция вроде OutOfMemoryException, которая есть объект и должна быть выделена в куче... В данном тезисе автор лихо играет софизмами и парадоксами (почеркнуто) тоесть не по сути. Аллокация new действительно всегда работает OK и память всегда есть. Ситуация когда ее нет - не перехватываемая ошибка и с точки зрения приложения - это авария и на ее решение вобщем-то нет рецепта нигде. Возможно behaviour систем версии 1.4 был действительно иной. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:54 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczmayton Код: java 1. 2.
Возможно аллоцирование форматтеров перенесено в пулы и т.п. Если следовать логике автора, то immutable объекты это совсем за гранью. Там ведь не просто объект аллоцируется! Он на каждую операцию аллоцируется! А то что производительность GC от количества мусора почти не зависит, это ведь ещё знать надо. Станно но введение immutable объектов повысило производительность Card-Raytracer. Можно найти даже конкретный коммит где я оптимизирую Vector добавляя в него final и переписываю логику таким образом что координаты x,y,z внутри вектора отдельно не мутируют. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 17:57 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczЕсли следовать логике автора, то immutable объекты это совсем за гранью. Там ведь не просто объект аллоцируется! Он на каждую операцию аллоцируется! А то что производительность GC от количества мусора почти не зависит, это ведь ещё знать надо. А оно не так? А производительность GC от количества мусора и размера кучи зависит очень сильно. По крайне мере в 1.6. Очень бы хотелось понять, что за GC алгоритм такой чудесный, что "почти не зависит". Да и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код: sql 1.
Я наблюдал эволюцию компиллятора. И сегодня мы можем больше использовать оператор + (к примеру при перегрузке toString()) и не париться о том что конкатенация будет собрана через StringBuffer StringBuilder. Опять-же тезисы автора касались весьма древних компилляторов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevА оно не так? А производительность GC от количества мусора и размера кучи зависит очень сильно. По крайне мере в 1.6. Очень бы хотелось понять, что за GC алгоритм такой чудесный, что "почти не зависит". Да и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная. GC сканирует и перемещает живые объекты. Мусор при этом целиком и полностью отмирает как единое целое. Хоть его мегабайт был, хоть сто. Не важно. А вот сканирование живых объектов занимает время. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:06 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevДа и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная. Тут надо ставить на обе чаши весов очень много аргументов. new в С++ может быть в заведомо неблагоприятных условиях. Работать по фрагментированной куче где free вроде-бы есть но целым экстентом выделить невозможно на данный момент без каких-то дополнительных действий по уплотнению. В Java - аллокация идет как на стеке без поисковых операций поэтому накладые могут быть меньше. Вобщем это уравнение со многими неизвестными. И сравнение стоимостей new/free надо делать в бенчмарках с возможностью многократного повторяемого воспроизведения условий. Я такие бенчмарки не смог создать. Хотя и обещал в части своих тяпничных блогов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Кто нибудь знает этого африканца? Киньте ему ссылочку сюда если можете. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczLeonid KudryavtsevА оно не так? А производительность GC от количества мусора и размера кучи зависит очень сильно. По крайне мере в 1.6. Очень бы хотелось понять, что за GC алгоритм такой чудесный, что "почти не зависит". Да и сама по себе инструкция new - конечно очень быстрая (если сравнивать с другими языками), но не мгновенная. GC сканирует и перемещает живые объекты. Мусор при этом целиком и полностью отмирает как единое целое. Хоть его мегабайт был, хоть сто. Не важно. А вот сканирование живых объектов занимает время. Дьявол кроется в мелочах: 1. Eden область: Copy GC 2. Old область: Mark Sweep GC Выделение объектов ---> больше потребление памяти --> чаще вызов GC. Т.к. copy gc крайне быстро работает, то пофиг Массивное выделение объектов + частый вызов minor GC + несколько потоков - есть риск, что temporary объекты из Eden области попадуть в old область heap. А вот это уже очень плохо ((( Т.к. мусор в old области в heap - распухание heap и значительно замедление и без того медленного Mark Sweep. AFAIK note: в терминах могу ошибаться, но смысл думаю ясен Blazkowicz...Мусор при этом целиком и полностью отмирает как единое целое. Хоть его мегабайт был, хоть сто... В реальной жизни ситуации когда из Eden мусор проникает в Old - как грязи, как Eden не выкручивай. Хотя, на прошлой работе добились того, что при многозадачной работе Oracle Customer Care & Billing mark sweep GC запускался всего 1-2 раза за целый рабочий день предприятия ))) До настройки памяти (default значения) было раз в 1.5 - 2 сек + периодические out of memory. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevВ реальной жизни ситуации когда из Eden мусор проникает в Old - как грязи, как Eden не выкручивай. Вот уж не знаю. Мы через ratio сводили это к минимуму. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczВот уж не знаю. Мы через ratio сводили это к минимуму. А просто Eden задирал до максимуму (1/2 памяти). Остальные параметры читал, но если памяти под Eden достаточно - то и бог с ними, если мало - как мертвому припарка. Тот же Oracle Customer Care & Billing. ОДИН И ТОТ ЖЕ код выставления счета, запускаемый из Web-морды (over 300-400 Mb всякого GUI барахла в Heap) и из Batch processing (отдельная VM, в Heap мусора нет) - во втором случае работал в разы (2-3 раза) быстрее. Но у них при каждом выставлении одного счета по 200-300 Mb temporary объектов (Copy Book) создается. В общем, память гадят знатно ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
p.s. При этом одним временем на GC не объяснимо. Т.к. на GC уходит пусть и больше времени, но не намного. Возможно какие-то скрытые эффекты, типа фрагментации кучи и лучшего использования кэша процессора. Загадочно, но факт. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 18:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Только мне кажется, что оптимальный код генерации счетов даст в разы бОльший эффект, чем возня с оптимизацией сборки мусора? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 19:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Basil A. SidorovТолько мне кажется, что оптимальный код генерации счетов даст в разы бОльший эффект, чем возня с оптимизацией сборки мусора? Всё зависит от трудоёмкости оптимизации этого кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 19:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Это понятно. Непонятно другое. Есть проблема. Есть известный путь решения с некими затратами. Гарантированное решение с, более-менее, гарантированными затратами. Но есть ещё "эффективный менеджмент", который сразу заявляет: "Это дорого". И начинает неопределённое время сношать мозг и заказчику и самому себе. Вот чего я не могу понять. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 19:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
И сама возможность оптимизации. Код покупной. Гей-архитектор где-то на западном побережье. Код пишут пара сотен манильцев. Кому оптимизировать ? ))) Там и так, все в лучших традициях ООП - патерн на патерне и патерном погоняет. Самая крутой патерн - Copy book. Дает работу огромному кол-ву манильцев. Без него, кол-во бедных в маниле было бы намного больше ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 19:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov...Есть проблема.... Да нет там проблемы. 1 .Решение масштабируемое - купите еще N серверов, считать будет в N раз быстрее. 2. Выставляется счет через интерфейс за 1 сек или за 3 сек - пользователю в целом пофиг. 3. При ситуациях "когда ночной batch процесс не успевает за ночь закончится" ( C ) см. п. 1 Или сервер можно перевезти в Варкуту. Там зимой ночи длиннее ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 19:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonКто нибудь знает этого африканца? Киньте ему ссылочку сюда если можете. зачем? Выбери, чего ты чего на самом деле хочешь: - узнать, как изменилось его мнение с тех пор - спросить - почему не оправдались его прогнозы о недолгой жизни обсуждаемого им сабжа - хочешь, поспорив с ним по каким-то конкретным деталям, опровергнуть его взгляд в целом ? Последнее, имхо, бессмысленно. Прими в расчет следующее: - тот сайт литературный , и предложенные тобой заметки, по сути, являются литературным произведением для программистов. - На том сайте последнее сообщение размещено в 2008 году, а обсуждаемые заметки я склонен отнести по косвенным признакам к 2000-му году, т.е. ко времени jdk 1.3 - (имхо) в целом, сам по себе текст Африканца в техническом плане весьма приличного качества. Но, писался в , как мне кажется, несколько второпях, преследуя больше литературные цели, чем цель последовательного "опровержения" языка. Его литературная задача мне понятна - заявить, что вместе с явой в мир программирования громко и напористо приходит агрессивный непрофессионализм, активно порождающий собственный мир не просто заявляющий право на существование, а претендующий на абсолютное заполнение всего пространства программирования. (Это умом объять невозможно - говорят, что в мире уже 19 миллионов java-программистов, а скоро станет 25. Т.е. уже больше 2.5 java-программистов на каждую 1000 душ населения Земли. Для сравнения: в 1904 году в городах Западной Европы в среднем было 4 извозчика на 1000 городских душ. В России, правда, заметно больше - от 3.38 в Лодзи с пригородами (это ровно как если бы уже сейчас было 25 миллионов java-программистов в расчете на 1000 ныне живущего на Земле населения) до 18.8 в Москве. ) По технике его замечания касаются синтаксиса, быстродействия, пригодности к созданию "больших проектов". По части синтаксиса - это больше "вопросы вкуса", даже там, где это касается простоты или сложности или "наивности" предполагаемого компилятора. По части всего остального - общий ответ примерно такой - java никогда (до сих пор) не позиционировалась как средство создания критичных по производительности систем или систем реального времени. Уж как минимум - не позиционировалась так создателями языка. Для задачи доставки компактных аплетов в браузер клиента в ней с самого начала всего достаточно. И вряд ли стоит упрекать создателей в том, что у языка фактическая жизнь оказалась и дольше, чем можно было бы ожидать, и, в конце концов, совсем другого назначения. Решения сорта жить или умирать принимаются не ими. Даже если это кому-нибудь обидно (например - Вирту). PS Все сказанное выше исключительно "по моему скромному мнению". Кто такой Африканец я не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2016, 23:44 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
32) С определяет int как "наиболее эффективное целое число, не короче, чем 16 бит". То есть если на машине длина слова 18 бит, то и целое будет 18 бит. Жаба же определяет int как ровно 32 бита, а long как ровно 64. И если на машине нет 32-битных чисел (например, есть только 64-битные), придется моделировать. Мне это не нравится. Отсутствие беззнаковых чисел мне тоже не нравится. По данному пункту. Скорее всего я просто констатирую что ничего не изменилось в Java. int - 32х битный и это правильно. Это упрощает жизнь. Добавлю что новые ЯП такие как Golang вводят встроенные типы: uint16, uint32 e.t.c. с жестко заданной разрядностью. Rust также вводит типы: u16, u32 e.t.c с фиксированной сеткой. Машинно-зависимые типы такие как usize/isize у него изначально зарезервированы под platform pointer's type. Это правильно. Не будет соблазна толкать их в общий поток целочисленых вычислений. Далее я нарушу своё правило и позволю обсудить то что уже давно обсуждалось. Не сосем понятен камент И если на машине нет 32-битных чисел (например, есть только 64-битные), придется моделировать Что моделировать? Что за инженерная задача? Построение компиллятора? JVM ? Особое железо? Сопряжение через network с гетерогенной Java-системой? Те кто поняли о каких-таких трудностях толкует автор - прошу прояснить. По поводу отсутствия беззнаковых чисел. Я здесь соглашусь. Мне-бы не помешала семантика UINT64 для точного толкования return значения из функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 00:42 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
booby, ого ты букв написал. Ну не знаю что тебе ответить. Подумаю и отпишу позже. А по поводу Африканца - ну и буй с ним. Пускай отдыхает старичок. Без него разберёмся. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 00:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
33) Жаба предоставляет некоторые особо высокоуровневые возможности, такие, как клонирование (глубокое копирование) объектов и сериализация. Обе опасны в неумелых руках. Чайник, не задумываясь, склонирует (или сериализует) громадный граф, лишь бы добиться какой-то сиюминутной цели. Сериализация уже привела к тому, что программмы хранят свои настройки не в приятных для глаза ini-файлах, и не в Registry, а в многочисленных файлах, полученных путем сериализации объектов. Положение сериализации на сегодняшний день. Совершенная мифология. Возможно автор экстраполировал прочитанное в книжках на некую реальность или представлял как-бы он делал. Но серилизацию делают через Orm-ы и специализированные библиотеки такие как Cryo. Вообще сама по себе проблематика искусственна и высосана из пальца. Всё давно завернуто в entity-beans и аннотировано и завёрнуто в фрейморки и формализовано для избежания ошибок. Жуткая ситуация с сериализацией графа - невозможна (я гарантирую это) т.к. для графов юзают JUNG, JGraphT и прочее где этот вопрос урегулирован. Конечно нубас может запилить глубокое копирование графа но если учесть что сама по себе уже работа с графами нетривиальна то обсуждать сериализацию безсмысленно. Это капля дерьма в огромную кучу того-же дерьма. Уже хуже не станет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 01:31 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, 31), 32) и 33) изложены предельно слабо. Но в целом они есть часть "претензий" из "мира C/C++" к "миру java", при этом внутри первого из миров по каждому из пунктов существуют идущие десятилетиями внутренние междусобойчики. 31) - сугубо от академического мира претензия. т.к. "+" в математике операция коммутативная, то не стоит ломать школьные привычки и рисовать + для некоммутативного случая: "foo" + "bar" != "bar" + "foo" 32) Изложена сугубо сишная проблема. Сказать-то он хотел примерно следующее - "про С известно, что ее целочисленная арифметика быстрая, т.к. она машинная, а про яву мы ничего не знаем - какая она окажется. Может, вдруг, и библиотечной оказаться". При ином чтении - это чистой воды переброс с больной головы на здоровую - Там где реализация норовит положить int в "наличное машинное слово", начиная с 32-разрядных систем int перестает отличаться от long, что в общем случае ведет к проблемам interoperability и binary compatibility, заставляя плодить нестандартные типы, в общем случае - ах да - конечно с "библиотречной поддержкой" , от операционной системы, например. 33) кролики - это не только ценный мех, но и 3-4 килограмма диетического, легкоусвояемого мяса. (@Кролики) "глубокое копирование" самая - самая базовая проблема в "типизированном императивном программировании" Что должен делать оператор присваивания a=b? И что должен делать оператор сравнения? Когда тебе рассказывают, что присваивание должно втыкать в a ссылку на тот же объект, ссылка на который сидит в b или сравнение должно сравнивать ссылки, сидящие в a и b и считать значения в переменной равными, только если ссылки равны, то тебе рассказывают, что "глубокое копирование" настолько дорого, что никакой возможности ни присваивать, ни передавать по значению, ни сравнивать по значению в нашем языке нет. У нас есть только mutable, причем несравнимо mutable. Но КАК? Как вообще программировать, если возможности сравнивать по значению ничего кроме ссылок нет. Так может не оказаться возможности выяснить, что 2 + 2 = 4, просто потому, что ссылка на 2 + 2 не совпадает со ссылкой на 4. А и как программировать mutable в многопоточном окружении без очередей и дедлоков? А когда тебе говорят - чтобы твоя программа работала быстро и потоки были независимы по данным - используй immutable - приходит Африканец и спрашивает: ну, и как ты будешь теперь "глубоко копировать" свой граф, или хотя бы часть его? Твой ответ Африканцу - а мои immutable будут махонькими, я их в честь этого даже обучу сравниваться по значению через equals. Сериализация - т.е. двоичная передача кода вместе с данными, стандартизированная в языке - вещь неведомая для мира С. это еж с ужом, которого и назвать-то с ходу не получается. В яве сериализация - это "наш ответ министерству обороны" - Аде, в которой DIANA изначально задумывалась для приблизительно аналогичных целей - машинно-независимого представления алгоритмов, структур данных и самих данных. То есть - создателям явы захотелось быть тоже в танке. Это казалось исключительно крутой идеей. Предъявлять со стороны С здесь претензию большого смысла не имеет. Но можно мелко покуражиться. Не обращай внимания. Хорошо это может получиться у тех, кто умеет целиком обновить через космическую связь программное обеспечение летящего самолета не прекращая работы автопилота. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 04:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадяUsmanвадя, var (справочник по C#) но для написания в ide лучше четко определить - ide будет проще конторолировать.Ок. Директива using (Справочник по C#) (см. директива псевдонима using) На фоне этого бриллиантовый оператор начинает тускнеть (: ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 06:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
booby31) - сугубо от академического мира претензия. т.к. "+" в математике операция коммутативная, то не стоит ломать школьные привычки и рисовать + для некоммутативного случая: "foo" + "bar" != "bar" + "foo" Я полностью согласен с некоммутативностью. Но ведь это вообще не по адесу. Это не околожабство а около-сиплюсовость. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 08:57 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
32) Изложена сугубо сишная проблема. Сказать-то он хотел примерно следующее - "про С известно, что ее целочисленная арифметика быстрая, т.к. она машинная, а про яву мы ничего не знаем - какая она окажется. Может, вдруг, и библиотечной оказаться". При ином чтении - это чистой воды переброс с больной головы на здоровую - Там где реализация норовит положить int в "наличное машинное слово", начиная с 32-разрядных систем int перестает отличаться от long, что в общем случае ведет к проблемам interoperability и binary compatibility, заставляя плодить нестандартные типы, в общем случае - ах да - конечно с "библиотречной поддержкой" , от операционной системы, например. Я себе пытаюсь воспроизвести рассуждения Гослинга. И возможно он думал так. "Проблема производительности целочисленных вычислений на регистрах не стоит так остро как проблема бинарной совместимости или интероперабельности. Нам важнее обеспечить второе т.к. это ключевой момент для платформера а скорость всегда можно подтянуть, просто дорабатывая саму JVM. Пускай скорость станет проблемой JVM а не разработчика". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 09:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonВ данном тезисе автор лихо играет софизмами и парадоксами (почеркнуто) тоесть не по сути. Аллокация new действительно всегда работает OK и память всегда есть. Ситуация когда ее нет - не перехватываемая ошибка и с точки зрения приложения - это авария и на ее решение вобщем-то нет рецепта нигде. Нет - автор просто склонен к системному программированию не прикладному, где подобные ситуации вполне нормальное поведение. Для этого java действительно неподходящий язык. И многие его ограничения действительно чисто идеологические - авторы посчитали, что так правильно. Это еще, что на одной конференции всплывал вопрос как решается на java задача с размещением нескольких полей объекта в одном cache-line. Только отдельная программа на каждый вид, с определенными знаниями как конкретный компилятор ее скомпилирует и конкретная jvm запустит. Почему-то макросы и условная компиляция воспринимались авторами java исключительно как Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 11:07 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonСовершенная мифология. Причем старая - сам же пишешь стандартной сериализацией никто не пользуется. Используют сторонние библиотеки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 11:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
boobyСериализация - т.е. двоичная передача кода вместе с данными, Сериализация, это не передача кода и даже не данных. Африканец рассуждал про вау фичу: Код: java 1.
Часто Вы этим пользуетесь? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 11:22 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton33) Жаба предоставляет некоторые особо высокоуровневые возможности, такие, как клонирование (глубокое копирование) объектов и сериализация. Обе опасны в неумелых руках. Чайник, не задумываясь, склонирует (или сериализует) громадный граф, лишь бы добиться какой-то сиюминутной цели. Сериализация уже привела к тому, что программмы хранят свои настройки не в приятных для глаза ini-файлах, и не в Registry, а в многочисленных файлах, полученных путем сериализации объектов. Положение сериализации на сегодняшний день. Совершенная мифология. Возможно автор экстраполировал прочитанное в книжках на некую реальность или представлял как-бы он делал. Но серилизацию делают через Orm-ы и специализированные библиотеки такие как Cryo. Вообще сама по себе проблематика искусственна и высосана из пальца. Всё давно завернуто в entity-beans и аннотировано и завёрнуто в фрейморки и формализовано для избежания ошибок. Жуткая ситуация с сериализацией графа - невозможна (я гарантирую это) т.к. для графов юзают JUNG, JGraphT и прочее где этот вопрос урегулирован. Конечно нубас может запилить глубокое копирование графа но если учесть что сама по себе уже работа с графами нетривиальна то обсуждать сериализацию безсмысленно. Это капля дерьма в огромную кучу того-же дерьма. Уже хуже не станет. Автор пишет о сериализации вполне корректно: 1) ...Обе опасны в неумелых руках ... 2) ..."что программмы хранят свои настройки не в приятных для глаза ini-файлах...а в многочисленных файлах, полученных путем сериализации объектов" Где автор такое видел, не знаю. Но с его негодованием полностью согласен. Понятно, что в большей мере вина программистов. 3) Сейчас плотно с RMI работаю, Serializable медленная до жути. Планирую перевести на Externalizable, но руки не доходят. Ну так об этом и негодование автора, что есть удобные и не правильные механизмы (Serializable) и более правильные, но менее удобные (Externalizable). Какой механизм для использования выберет программист.... такая программа и получится. Я выяснил, что Serializable для моей программы не очень подходит... но времени все равно не выкроил. Что окажется в продакшен, ктож его знает ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 11:29 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей Арсеньев...За это действительно приходится расплачиваться отсутствием HashTable<int,..> FastUtils Сергей АрсеньевДа GC потом съест кучу лишних оберток не поморщившись, но выделять то память под них будет нужно, хотя и действительно не обязательно. "не поморщившись" и GC ? Мне кажется Вы преувеличиваете. Если HelloWorld то да, а если WebServer и серьезное приложение, то в каком месте раскидали "кучу оберток" - пойди найди Копатся в дампе кучи, что бы понять, где leak, это еще то удовольствие. Когда в Top'е видишь 600 000 объектов byte[] и 585 000 объектов String.... IMHO Может я конечно просто не умею. Но радости смотреть на 2-3 Gb дамп кучи от нагруженного продакшена - нет никакого. Сергей АрсеньевТезис про deprecated - это показатель, что язык живой (вон см. LocalDate и пр. - теперь модно так). Но и показатель, что не устоявшийся. Просто куча ошибок, которые можно было СРАЗУ не делать. Calendar, DateTime LocalDate и etc ПОЧЕМУ в одних классах МЕСЯЦ нумеруется с 0, а в других с 1 ???? Я понимаю, когда в разных языках. Но Б...Ь в одном языке можно сделать единообразно? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 11:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevСергей Арсеньев...За это действительно приходится расплачиваться отсутствием HashTable<int,..> FastUtils Я не про реализацию, я про то как сделать код одинаковым и для long и для int. В java примитивы вынесены в отдельную группу. И с ними много чего делать нельзя - потому что работа с примитивами это моветон. Такое впечатление, что авторы языка от них бы с радостью отказались. Но... Leonid KudryavtsevЯ понимаю, когда в разных языках. Но Б...Ь в одном языке можно сделать единообразно? То один порулит, то другой. Нормальный жизненный процесс. Гы. По большому счету языку все равно, какой там тип даты. Это ж не примитив, а все остальное - хоть с марта считай, а февраль делай отрицательным. Как раз и отсутствие беззнакового числа тебе в помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 12:19 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевЯ не про реализацию, я про то как сделать код одинаковым и для long и для int. В java примитивы вынесены в отдельную группу. И с ними много чего делать нельзя - потому что работа с примитивами это моветон. Такое впечатление, что авторы языка от них бы с радостью отказались. Но... Меня это сейчас жутко раздражает. Программа - фактически калькулятор по бруд-форсе алгоритму. Нужно просматривать миллионы вариантов на графе. Почти все данные замечательно укладываются в int/long. Поэтому его и использую ))) Просто, быстро.... но неудобно. Фиг поймешь, что в конкретном месте этот int/long обозначает. В одном месте - код из БД, в другом - код но другого объекта, номер node в графе, номер node в "графе после обработки", время и так далее. В языке C хотя бы была инструкция typedef. Она вроде на корректность во время компиляции не проверяла, но хотя бы можно в описании ф-ции типы параметров нормально указывать. А так у ф-ции 10-ь параметров и все int. Что под этим подразумевается - только в комментария. Ни какой даже самой минимальной проверки и/или удобства на этапе написания кода. ((( IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 12:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевЭто еще, что на одной конференции всплывал вопрос как решается на java задача с размещением нескольких полей объекта в одном cache-line. Только отдельная программа на каждый вид, с определенными знаниями как конкретный компилятор ее скомпилирует и конкретная jvm запустит. Не оно? http://openjdk.java.net/jeps/142 А вообще из бреда по ссылке реально крутая фича, это вот это: 22) Каждый раз, когда мы описываем структуру (она же запись, она же класс), происходит выделение памяти в куче. Каждый раз, когда мы ее потом используем, происходит обращение по указателю. Зачем? Я понимаю, все это может быть полезно для "классов" - из-за возможного наследования их как раз полезно в куче размещать. Но что, если мы просто определили структуру Point с двумя полями, x и y - ну зачем тут куча? А представьте себе, что мы определили "линию" как две точки: Особенно для системного программирования, которой нет в Java это наличие Си'шных struct'ов, как следствие потом появляются доклады типо такого ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 12:53 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
22) Каждый раз, когда мы описываем структуру (она же запись, она же класс), происходит выделение памяти в куче. Каждый раз, когда мы ее потом используем, происходит обращение по указателю. Зачем? http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis Но тут есть одно "но". Когда я экспериментировал с шестеркой, то пришел к выводу, что в ней массивы всегда выделяются в куче. Возможно, сейчас это починено. А вот насчет доклада Елизарова - действительно все сложно. Классы можно писать либо удобно - либо быстро, но не и то и другое одновременно. Так чтобы наиболее удобное написание оказалось самым быстрым - еще нигде не придумали. Но все равно, по сумме это лучше с++, где удобства вообще не существует. помоему, одно из немногих где он правд это во второй части: 8) Еще одно техническое околожабство - так называемые методы доступа. Написав любую структуру. любой жабовский программист всегда первым делом начинает писать методы доступа. вот это я не могу понять. Сейчас оракловцы всерьез подумывают о var-val, устраивают холивары, но это var экономит что? экономится четверть одной строчки. Ага, наглядней. Лучше бы сделали нормально сеттеры с геттерами. И multiline-строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 14:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chabapok22) Каждый раз, когда мы описываем структуру (она же запись, она же класс), происходит выделение памяти в куче. Каждый раз, когда мы ее потом используем, происходит обращение по указателю. Зачем? http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis Но тут есть одно "но". Когда я экспериментировал с шестеркой, то пришел к выводу, что в ней массивы всегда выделяются в куче. Возможно, сейчас это починено. .... По Вашей ссылки: "..It does NOT replace a heap allocation with a stack allocation for non-globally escaping objects..." ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 14:45 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, а в чем профит от аллокации на стеке, вместо аллокации в хипе? На сколько я понимаю важно, чтобы нужные данные были непрерывным куском в памяти, тогда процессор при обработке такого массива сможет "угадывать", какие данные понадобятся и предзагружать их в кэш. Или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 15:19 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chabapokА вот насчет доклада Елизарова - действительно все сложно. Классы можно писать либо удобно - либо быстро, но не и то и другое одновременно. Так чтобы наиболее удобное написание оказалось самым быстрым - еще нигде не придумали. Но все равно, по сумме это лучше с++, где удобства вообще не существует. Я не понимаю, что мешает добавить некий признак (ключевое слово, аннотацию и т.д.), который будет подсказывать JVM, что в массиве сразу за ссылкой идет непосредственно сам объект? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 15:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
just_vladimirа в чем профит от аллокации на стеке, вместо аллокации в хипе скорость уменьшение нагрузки на подсистему памяти (new, GC) => уменьшение (экономия) требований приложения к объему памяти для нормальной(комфортной) работы just_vladimir...что в массиве сразу за ссылкой идет непосредственно сам объект? Это как? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 15:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevjust_vladimir...что в массиве сразу за ссылкой идет непосредственно сам объект? Это как? Да немного бред написал, в общем если я верно понимаю ради чего выполняются упражнения, о которых рассказывается в докладе, то возникают они из-за того, что массив объектов в Java это массив ссылок на объекты и из-за этого есть проблема, что нет гарантии того, что непосредственно сами объекты, на которые указывают эти ссылки будут располагаться где то в виде непрерывного куска памяти и как следствие процессору очень не удобно ходить постоянно в разные места памяти. Соответственно нужно как то уметь подсказывать JVM, чтобы сами объекты были точно так же за аллоцированы непрерывным куском памяти (хотя вообще странно, что JVM по умолчанию именно так и не поступает, а может и поступает и я не понял этой части доклада :-) ). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 16:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
just_vladimirДа немного бред написал, в общем если я верно понимаю ради чего выполняются упражнения, о которых рассказывается в докладе, то возникают они из-за того, что массив объектов в Java это массив ссылок на объекты и из-за этого есть проблема, что нет гарантии того, что непосредственно сами объекты, на которые указывают эти ссылки будут располагаться где то в виде непрерывного куска памяти и как следствие процессору очень не удобно ходить постоянно в разные места памяти. Соответственно нужно как то уметь подсказывать JVM, чтобы сами объекты были точно так же за аллоцированы непрерывным куском памяти (хотя вообще странно, что JVM по умолчанию именно так и не поступает, а может и поступает и я не понял этой части доклада :-) ). Доклад не смотрел. У меня наушников нет. AFAIK Java так память и выделяет. Есть 2-е Eden области, одна из которых заполняется __последовательно__ с начала в конец, когда она заполнится, запускается Copy GC и начинает заполняться вторая Eden область. Так попеременно и работают. Мало того, для ускорения работы, каждому Thread заранее выделяется свой кусок. Т.ч. by default, при двух последовательных вызовах new, очень велика вероятность, что объекты окажутся рядом в куче. Разумеется, это верно для Eden области, в Old, скорее всего, фрагментация сильнее. Хотя, нужно читать. Но смысла "развертывать" class/stucture по полям, что в C, что в Java может быть много. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 16:44 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevНо смысла "развертывать" class/stucture по полям, что в C, что в Java может быть много.Насколько я понимаю, именно этим занимается "анализ убегания". И если JIT сочтёт скаляризацию возможной итоговый код может быть сильно оптимальнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 18:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
just_vladimirа в чем профит от аллокации на стеке, вместо аллокации в хипе? меньше засирается хип, gc проще чистить память. GC работает неидеально. Leonid KudryavtsevДоклад не смотрел. У меня наушников нет. Доклад Елизарова смотрел давно, но кратко по нему и другим различным докладам: У каждого инстанса есть заголовок со служебной информацией, насколько помню в хотспоте то ли 12 байт, то ли 11. Каждый инстанс выравнивается по 8 байтам. В массиве же все лежит подряд. Это значит, что если в кэш подгружается больше данных, то реже происходят кэшмиссы. А кэшмисс - это очень плохо, потому, что если данных не оказалось в L1, и не оказалось в L2 - в L3(он общий для всех) никто лезть за ними не спешит. Эти данные могут быть в L2 других ядер. Но если уже пошла подгрузка данных в L3, то там могут быть остановлены другие ядра, потому что мэппинг L3 на память хранится в аппаратной хэшмапе, а она однопоточна. По этой причине, каждый кэш-промах - это сотни "утерянных" тактов. Плюс работа различных аппаратных предсказателей, параллелизаторов, префетчеров, ускорителей. И если мы нашу программу так оптимайзим, то получается нечто, что не блещет красотой, но зато быстро работает. Но критики java забывают, что на С такое тоже не блестало бы красотой. Обычно сишники таким вообще не заморачиваются. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 23:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
с выравниванием данных все становится еще интереснее если учитывать false-sharing, который приходится учитывать. В идеале конечно элемент массива должен попадать на один кэш лайн, именно поэтому в старом коде нередко можно увидеть классы, в которых одно "боевое" поле и оно добито long-ами до 64 или 128 байт(самое смешное что оптимизаторы jvm если видят что поле не юзается вроде как могут его выпилить:)). Но так как эти самые кэш лайны у разных процессоров могут быть разной длины, то приходится писать под определенное железо. Кто-то даже предлагал ввести аннтоацию для jvm именно для таких случаев, не знаю чем закончилось. Если честно я утерял нить спора уже, имхо прелесть javы в том что 99% процентов времени ты будешь писать как тебе удобно не думаю о низкоуровневых деталях, на то есть JVM, а в редких случаях есть возможность и подшаманить, и как правильно сказали оптимизации будут некрасивыми что на С что на java ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 23:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
К докладу Елизарова я-бы добавил годичной давности семинар по LMAX Disruptor. Там тоже рассматривались общие вопросы оптимизации очередей и отдельно кеши и выравнивание и работа GC. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2016, 23:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вроде где-то писали/говорили, что есть sun.misc.Contended для этого. Но использовать его стремно. Лучше б они сделали ее не в sun*. Вон пишут, что в девятке от unsafe хотят отказаться, и плюс Reflection.getCallerClass() тоже норовят грохнуть, помоему даже грохали. С этим Contended лучше не связываться, по возможности. армы и x86 процессоров имеют по 64 байта кэшлайна. Насчет остальных архитектур - не знаю. Данные выравнивают, хотя на x86 это необязательно, но это делают все равно - для унификации. Насчет выпиливания полей - помоему это байка-страшилка. jvm позволяет подгружать классы. Где гарантия, что когда-нибудь кто-нибудь не попросит подгрузить класс, а этот класс не полезет в выпиленное поле? никаких ведь FieldSawOutException в этом случае не бросится! Значит и поле должно быть. И даже классы необязательно подгружать, потому что нет гарантий, что в это поле никто не полезет через рефлекшен. ИМХО, максимум что можно - это если сработал escape analyze, то не хранить такие поля в стеке. Но там тоже могут быть приколы с рефлекшеном, так что ИМХО, никакого выпиливания полей вообще не существует. Но инфа не 100% забыл никЕсли честно я утерял нить спора нет никакого спора ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 01:31 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonгодичной давности семинар по LMAX Disruptor. а где его взять? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 01:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
just_vladimirа в чем профит от аллокации на стеке, вместо аллокации в хипе? Сборщиком мусора. Одна инструкция и память свободна. :) Естественно если это не примитив и нужен деструктор все не так просто. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 09:42 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
chabapokmaytonгодичной давности семинар по LMAX Disruptor. а где его взять? Вроде это ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 09:46 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевСборщиком мусора. Одна инструкция и память свободна. :)... ценой жёсткой связи порядка выделения и освобождения памяти. Вы правда готовы работать при таких ограничениях? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 16:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Наваял небольшой JMH бенчмарк, у меня вообще получается, что работа с массивом объектов идет даже быстрее, чем с массивом int'ов, при условии, что все объекты алоцированны подряд (почему пока не разобрался, нужно смотреть асемблерный код, а там на винде нужны лишние приседания для получения бинарника hsdis). Если же при наполнении массива параллельно создавать разные мусорные объекты, чтобы наши целевые объекты не занимали сплошной кусок памяти, то тогда уже начинается серьезная просадка по производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 16:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Некоторые тезисы Елизарова я зафиксил на бумаге. К сожалению перец очень быстро говорит и флудит посторонними мыслями поэтому привожу не цитаты а некоторые купированные фразы. ЕлизаровGC 1. Идеальная ситуация - все объекты короткоживущие. 2. Долгоживущие объекты лежат корректируют только примитивные поля или вообще не меняются. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 16:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonЕлизаровGC 1. Идеальная ситуация - все объекты короткоживущие. 2. Долгоживущие объекты лежат корректируют только примитивные поля или вообще не меняются. Смотри. GC это всегда trade off https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/tuning_tradeoffs.html Короткоживущие объекты и перманентный Tenured это как раз способ избавиться от пауз в CMS. Но при этом максимальной производительности такой GC не даст. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 16:47 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
just_vladimirНаваял небольшой JMH бенчмарк, у меня вообще получается, что работа с массивом объектов идет даже быстрее, чем с массивом int'ов, при условии, что все объекты алоцированны подряд (почему пока не разобрался, нужно смотреть асемблерный код, а там на винде нужны лишние приседания для получения бинарника hsdis). Если же при наполнении массива параллельно создавать разные мусорные объекты, чтобы наши целевые объекты не занимали сплошной кусок памяти, то тогда уже начинается серьезная просадка по производительности. ??? Не верю ( C ) Код и что это за "работа" можно посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 17:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevjust_vladimirНаваял небольшой JMH бенчмарк, у меня вообще получается, что работа с массивом объектов идет даже быстрее, чем с массивом int'ов, при условии, что все объекты алоцированны подряд (почему пока не разобрался, нужно смотреть асемблерный код, а там на винде нужны лишние приседания для получения бинарника hsdis). Если же при наполнении массива параллельно создавать разные мусорные объекты, чтобы наши целевые объекты не занимали сплошной кусок памяти, то тогда уже начинается серьезная просадка по производительности. ??? Не верю ( C ) Код и что это за "работа" можно посмотреть. Да, конечно можно, вполне возможно я где то ошибся в тесте или неверно его интерпретирую или не учитываю влияние GC или еще что нибудь. Работа это сложение int'ов, сравнивал два кейса класс Foo, в нем 3 int'овых филда (a,b,c) и int'овый массив. Код бенчмарка: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116.
Что получилось на выходе: jmh_outputBenchmark (size) (trashSize) Mode Samples Score Score error Units MyBenchmark.intArray 10000 0 avgt 15 38352.732 996.941 ns/op MyBenchmark.intArray 10000 1000 avgt 15 36765.030 2141.320 ns/op MyBenchmark.intArray 10000 10000 avgt 15 34888.401 4205.767 ns/op MyBenchmark.objArray 10000 0 avgt 15 26143.195 1200.436 ns/op MyBenchmark.objArray 10000 1000 avgt 15 215898.867 19812.714 ns/op MyBenchmark.objArray 10000 10000 avgt 15 106175.759 6576.237 ns/op И чисто для objArray с разным trashSize: jmh_outputBenchmark (size) (trashSize) Mode Samples Score Score error Units MyBenchmark.objArray 10000 0 avgt 15 26862.265 1014.527 ns/op MyBenchmark.objArray 10000 100 avgt 15 99337.478 5626.104 ns/op MyBenchmark.objArray 10000 500 avgt 15 188794.983 17663.827 ns/op MyBenchmark.objArray 10000 1000 avgt 15 217068.808 9772.326 ns/op MyBenchmark.objArray 10000 2000 avgt 15 248142.848 6822.500 ns/op MyBenchmark.objArray 10000 3000 avgt 15 251596.867 23983.232 ns/op MyBenchmark.objArray 10000 5000 avgt 15 108882.238 4594.514 ns/op MyBenchmark.objArray 10000 10000 avgt 15 104778.494 9427.842 ns/op Буду рад, если кто-нибудь объяснит наблюдаемые эффекты: 1. Почему int array оказывается медленнее obj array, при условии удачной аллокации объектов? 2. Почему начиная с trashSize = 5000 (может чуть раньше) скорость начинает расти? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 18:08 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Ах да: java - versionjava version "1.8.0_77" Java(TM) SE Runtime Environment (build 1.8.0_77-b03) Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode) verMicrosoft Windows [Version 6.3.9600] hardwareCore i5 - 2400 3,3 Ghz, L1 - 256 kb, L2 - 1Mb, L3 - 6Mb ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 18:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
IMHO Вы просто не умеете их готовить. p.s. сейчас с тестом поиграюсь, хотя параметры подсократил. У меня AMD, ждать > 5 мин. на тест - перебор ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 19:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165.
Код: plaintext 1. 2. 3. 4. 5.
Надеюсь в коде не ошибся. Вроде все 3-и методо intArrayN должны давать одинаковый результат. Не проверял. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 19:22 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, ну кажется понял свою ошибку, что терял лишнее время на умножениях, из Ваших вариантов с intArray2 не совсем соглашусь, т.к. все таки надо двигаться по массиву честно по одному объекту, а вот intArray3 то что нужно. А как на счет эффектов, когда при увеличении количества мусорных объектов скорость растет, вместо ожидаемого падения? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 19:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
just_vladimirLeonid Kudryavtsev, ну кажется понял свою ошибку, что терял лишнее время на умножениях, из Ваших вариантов с intArray2 не совсем соглашусь, т.к. все таки надо двигаться по массиву честно по одному объекту, а вот intArray3 то что нужно. IMHO Дело не в умножении. А в оптимизации JIT проверки на выход за пределы массива just_vladimirА как на счет эффектов, когда при увеличении количества мусорных объектов скорость растет, вместо ожидаемого падения? А где она растет? Мне вообще кажется, что там какие-то очень странные/случайные числа начинают генерироваться. Ну и мусору НУ ОЧЕНЬ много. Патерн > 5000 мусорных объектов на один рабочий - это какой-то трешь. Возможно сборщик мусора паралельно еще какую-то дефрагментацию проводит. До какого-то момента она не сказывается, потом начинает сказываться и ситуация немного улучшается (но все равно ЗНАЧИТЕЛЬНО ХУЖЕ /5 раз/, чем без мусора) IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 20:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, соглашусь, что такое количество мусора перебор. И еще чуток по игрался с мусорными объектами, сделал с шагом в 500 от 0 до 10 000, получил следующую картинку: ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 12:36 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
just_vladimirполучил следующую картинку График и цифры на нем наводят на воспоминания.... 4000, 8000... ничего не напоминает? 4000 (правда байт) - размер Memory Page. Фактически при таком кол-ве мусора, получается выравнивание объекта по Memory Page. Мусор оказывается в полностью неиспользуемых страницах, радостно "свопится" (не на диск, а в данном случае просто из кэша процессора или рабочего набора процесса) и больше не мешает ))) IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 12:46 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Факт интересный своей искусственностью. Но совершенно и 100% чистая синтетика. Никакого практического применения не имеет. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 12:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Хорошо-бы допилить некоторый хинт или ключевое слово языка. К примеру я инстанциирую синглтон и заведомо знаю что он будет лежать в OldGen/Metaspace. И я хочу заведомо подсказать аллокатору чтобы он не кидал этот объект в Eden а сразу ложил туда куда мне нужно. Код: java 1. 2. 3. 4. 5. 6. 7.
По сути на уровне разработки дать больше инструментов для управления аллокацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 13:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonК примеру я инстанциирую синглтон и заведомо знаю что он будет лежать в OldGen/Metaspace. И я хочу заведомо подсказать аллокатору чтобы он не кидал этот объект в Eden IMHO бессмысленный хинт. Экономия копеек. Eden и так крайне быстр. Скорее надо наоборот, подсказка, что объект временный. Но тогда такую подсказку нужно будет у 99% объектов указывать, а это - треш и угар. Ну и разумеется, при недостатке памяти, у RunTime будет не богатый выбор: или падать с out of memory или все равно, не смотря на подсказку, в old вытеснить. Т.ч. тоже механика работы такой подсказки не понятна Возможно, можно было бы на уровне VM сделать Thread кучи. Т.е. все объекты созданные в рамках Thread относятся к "своей" кучи. При смерти Thread или по каким-то событием (например, завершение обработки HTTP запроса в рамках Web/Application Сервера), выжившие объекты переносятся в Old, плюс чистится мусор относящийся к данному Thread в Old. Получаем: 1. Для разных HTTP запросов (с разным временем выполнения) - можно сделать свою метрику обработки Eden области. Меньше сессионного мусора будет уходить в Old 2. Процесс можно осмысленно побить по кусочкам. Получим своего рода incremental mark sweep. 3. Потенциально, можно сделать 2-х уровневый Eden. Если места в Eden Thread'а/HTTP-запроса мало, туда добавляются блоки из Old. Eden для конкретного Thread'а/HTTP-запроса расширяется. По окончанию Thread'а/HTTP-запроса, вся область грохается, а выжившие объекты перемешаются в Old. Нужно читать более подробно Читать: 1. о G1 garbage коллектор, вроде там похожая идея была. 2. как работает процесс пометки живой/мертвый объектов в Eden области. Х.з. Но minor GC крайне быстрый. Если пометка живой/мертвый в рамках привязки к Thread/HTTP-запросу можно сделать очень быстро, то осмысленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 13:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Развивая идею. Матричный Eden. Или сегментированный. Поскольку чистка это в общем случае решение задачи из области теории графов (проверка достижимости узлов из некого корня) то ее надо оптимизировать исходя из сходных по своей природе узлов (объектов). Например мы деаем какую-то активность. И много всего аллоцируем. А после этого чистим всё. Чтобы не флудить в общем eden мы аллоцируем сегмент и работаем в нем. Во время фазы уборки GC учитывает наличие связей только внутри сегмента и быстро убирает мусор не отвлекаясь на анализ всего графа. По сути чистит подграф. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 13:57 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton...Во время фазы уборки GC учитывает наличие связей только внутри сегмента и быстро убирает мусор не отвлекаясь на анализ всего графа. По сути чистит подграф. Не отвлекаться не может. Т.к. ссылки могли быть переданы в какой-то "глобальный" объект, и "только внутри" не получится. Но в случае с eden, он как-то такие ситуации разгуливает. Вместо одного глобального eden, хочется много мелких "локальных". На уровне thread, http-запроса и т.д. В принципе, даже некоторые методы можно было бы помечать локально-эденистыми. Где известно, что будет идти большое выделение памяти внутри. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 14:15 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
При этом minor (eden) GC вроде работает в параллельном режиме. Т.ч. даже VM на такую уборку можно не останавливать. А делать в параллель, в фоне. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 14:18 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Возможно, можно было бы на уровне VM сделать Thread кучи. Т.е. все объекты созданные в рамках Thread относятся к "своей" кучи. Так оно так и работает насколько я себя помню, у каждого Thread есть свой TLAB(thread local allocation buffer) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 14:19 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никLeonid KudryavtsevВозможно, можно было бы на уровне VM сделать Thread кучи. Т.е. все объекты созданные в рамках Thread относятся к "своей" кучи. Так оно так и работает насколько я себя помню, у каждого Thread есть свой TLAB(thread local allocation buffer) thread local allocation buffer - для алоцирования А Eden область и сборка мусора - общая. AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 14:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
но нужно читать. Сейчас есть G1 коллектор, когда я разбирался - его еще не было. Т.ч. мои знания могут быть устаревшими. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 14:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsevthread local allocation buffer - для алоцирования А Eden область и сборка мусора - общая. AFAIK Не совсем понял, TLAB же выделяется в Eden, или ваша идея в том чтобы у каждого потока была та же куча только в миниатюре? Со своим eden и Old? И в чем профит? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 14:30 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никСо своим eden и Old? ну я только о Eden говорил. Т.к. поделить Old будет значительно сложнее. забыл никИ в чем профит? много букв получится Разные задачи/приложения/запросы - разные требования к памяти. А в JVM приходится грести все под одну гребенку. Или часть задач принудительно выносить в другую JVM, что бы свои настройки кучи дать. HTTP сервер - хочется по максимому Eden и по минимому Old Задачи вроде MemCache - наоборот А когда и те и другие задачи начинают работает в рамках одной JVM, одного application server'а - помойка получается IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2016, 14:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonПо сути на уровне разработки дать больше инструментов для управления аллокацией. Ну ты б еще выравнивание адресов и вообще структуры нормальные попросил. Это ж java - здесь такое просить странно. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 10:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевmaytonПо сути на уровне разработки дать больше инструментов для управления аллокацией. Ну ты б еще выравнивание адресов и вообще структуры нормальные попросил. Это ж java - здесь такое просить странно. :) Страницу или две назад именно это и просили :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 11:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевmaytonПо сути на уровне разработки дать больше инструментов для управления аллокацией. Ну ты б еще выравнивание адресов и вообще структуры нормальные попросил. Это ж java - здесь такое просить странно. :) На некоторых собеседованиях на Java-dev спрашивают про размер Object. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 12:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonНа некоторых собеседованиях на Java-dev спрашивают про размер Object. И какой у него размер? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 12:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Елизаров бухтит что-то про intern(). А я вот щас такой код пишу. Страна - регион - город -- справочники из гео глассификатора IP-blocks (где-то я выше тему поднимал). Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 15:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
У меня примерно такие же справочники, при этом везде коды 2-3 латинские заглавные буквы Я вместо строк банально коды в int перегнал, т.ч. по программе везде int'ы гуляют. А в первый байт закодировал еще и тип справочника. Т.к. иногда коды из разных справочников совпадают, т.ч. я еще всегда знаю, не перепутал ли я справочники. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 15:07 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevmaytonНа некоторых собеседованиях на Java-dev спрашивают про размер Object. И какой у него размер? Это очень хороший вопрос бро. Спека пишет следующее JVM 8 spec 2.7 Representation of Objects The Java Virtual Machine does not mandate any particular internal structure for objects. In some of Oracle’s implementations of the Java Virtual Machine, a reference to a class instance is a pointer to a handle that is itself a pair of pointers: one to a table containing the methods of the object and a pointer to the Class object that represents the type of the object, and the other to the memory allocated from the heap for the object data. Я часто ошибался в ответах на подобные вопросы и прошу коллег сначала высказать свои ответы. А я подом че нить добавлю или поддакну. С уважением. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 15:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Можно было бы конечно и интернировать... Но я еще дальше пошел. У меня обрабатываются маршруты "из-в", если я все такие пары буду интернировать - боюсь память сразу же закончится. А так long - два int. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 15:12 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevmaytonНа некоторых собеседованиях на Java-dev спрашивают про размер Object. И какой у него размер? http://openjdk.java.net/projects/code-tools/jol/ Зависит от архитектуры. Или 8 байт на x32, или 12(16 с учетом выравнивания) байт на х64. На арм проверить нечем, но скорей всего то же самое. Там еще по идее можно глянуть спеку jvm. Там может что-то быть по теме, т.к. для jni это может быть нужно и оно может быть стандартизовано. Но спеку я не смотрел. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 17:46 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Тоже сейчас на стримах задачку делал. Жесть какая-то. Пока непривычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2016, 19:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Мне интересны стримы в части упрощения работы с БД. Например в jOOQ есть расширение jOO(Lamdba) для поддержки функций высокого порядка при работе с БД. Тюториалы и примеры завлекают но как щас прикрутить это к своему проекту - ХЗ. Сложно пока. Особенно в части выброса исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2016, 19:38 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
dmitriycheMasterZiv, Если уж использовать Java 8, то только на полную катушку Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Какой ужасный, нечитаемый, неотлаживаемый код! Я в шоке! Ниже я написал аналог с итерациями, а ещё ниже более менее читаемый код с оперциями над коллекциями. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Как мы видем итерации соотносятся с операциями над коллекциями один-к-одному. Отсюда вопрос: а нахрена народ то кипятком писает от нового Stream api. Никакой экономии места он не даёт. Он мог бы улучшить читаемость если бы Оракл не реализовала этот API так по-дебильному: надо коллекцию превращать в стрим, а потом собирать коллектором. При этом итерции по стриму не работают. Для пользователей нормальных языков это выглядит полным безумием. Кроме того: модифицировать в лямбдах ничего нельзя, даже простейший счётчик не вставишь. Ну и нафига нужен этот маразм?? Уж лучше его не было бы! Переходите уже на груви/котлин и не мучайте уже этот труп. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 13:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Я тешу себя надеждой что будет преимущество в части Parallelism. https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html Чуть позже если найду - приведу пример где это явно имело преимущество (Apache Spark). Но там была инфраструктура вычислительного кластера. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 13:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, ужас смотрю на ява8 - такое ощущение что это вообще не ява. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 14:58 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Ява - это мотоцикл. Смотри... завалят на собесе на 1-м вопросе ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 15:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonЯва - это мотоцикл. Смотри... завалят на собесе на 1-м вопросе не понял ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 15:44 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Первый вопрос - что такое Ява? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 16:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonПервый вопрос - что такое Ява? :) язык программирования. только давай вот без американизмов. :) ты же кафе говоришь а не кэффэй )) ну или аэропорт а не эйрпоат. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 16:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
andreykaTmaytonПервый вопрос - что такое Ява? :) язык программирования. только давай вот без американизмов. :) ты же кафе говоришь а не кэффэй )) ну или аэропорт а не эйрпоат. Щас еще минус 1 балл будет! Не спорь с интервьюером. Хочешь работать в команде - будь добр перенимай терминологию. Но это так... шутка. Но за каждой шуткой есть.... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 16:28 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton, ой, я забыл что я на собесе. да, коненчо же вы правы - джава это джава а ява - это остров такой. и сорт кофе кажется. а еще мот о котором мой дедушка мечтал. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 16:31 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
А еще чай такой был, зеленый. И вполне себе неплохой ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 16:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7.
можно и более выразительно : Код: java 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 12:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
что спорит о восьмерке - уже девятка на подходе https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 12:29 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадячто спорит о восьмерке - уже девятка на подходе https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach Странно от тебя такое читать. Ты должен был написать, на кой она нужна та Java 8, если и на Java 7 можно всё написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 12:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
вадячто спорит о восьмерке - уже девятка на подходе https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach 9 достаточно скучна .... ничего прорывного , если смотреть на 8 .... возможно будет стринг в виде ansi строки а не utf , в тех случаях когда все символы ascii . одна оптимизация и перфоманс ... по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего ... :) ну и так еще по мелочам накидали классов ... хелперов .... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 13:39 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Atum1по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 13:42 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczвадячто спорит о восьмерке - уже девятка на подходе https://wiki.openjdk.java.net/display/Adoption/JDK 9 Outreach Странно от тебя такое читать. Ты должен был написать, на кой она нужна та Java 8, если и на Java 7 можно всё написать. это была шутка юмора. я против такой скорости обновления, только потому, что не успели опубликовать использования всех тонкостей, одной версии, как уже другая, и всё по новой. пока инфу найдешь, пока исследуешь... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 14:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczAtum1по поводу 8 - это больше синтаксический сахар - ламды - это анонимные классы больше ничего Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная. Поподробнее можно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 14:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Atum1Поподробнее можно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 14:58 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Говнопарсер убил ссылки. В общем, на 1:09:07 Куксенко рассказывает про детали реализации. На 23:38 Шипилев рассказывает о том что в поведении отличий от анонимных классов нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 15:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Atum1Blazkowiczпропущено... Это заблуждение. Лямды имеют поведение полностью аналогичное анонимным классам. Но реализация у них совсем иная. Поподробнее можно ? Она собирается как static метод в том классе где используется ЕМНИП. Но я это тестил на самых ранних первых версиях Jdk8 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 15:46 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczГовнопарсер убил ссылки. В общем, на 1:09:07 Куксенко рассказывает про детали реализации. На 23:38 Шипилев рассказывает о том что в поведении отличий от анонимных классов нет. ну вроде да - либо вдолженный класс на лету либо метод-хендлер вообще как сейчас и в каждом конкретном случае нужно смотреть что там будет - самый простой тест : Взять самую простую ламбду - в виде анонимного класса и ламбы -и декомпельнуть javap - и посмотреть что будет .... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 09:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
Код: java 1. 2. 3. 4. 5.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 10:44 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 11:04 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
unregestered Код: java 1.
-> Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2017, 17:08 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Прошу прощения за резкий UP. Искал где были стримы, доклады и конференции по теме Java. Не нашел. Пускай будет здесь. Основные инженеры, которые заняты перформансом, компилляторами и GC собрались дать краткий обзор по текущему состоянию релизов Java8/11/15/16/17. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2021, 00:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Зачем тебе геттеры? Опять - поддержкать еще один никому не нужный тяжелый фреймворк? Если фреймворк не осилит рекорды - то значит они ему и не нужны. А мир двигается дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 19:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Сеттеры в рекордах? Рекорды же иммутабельные были по определению. В начале по крайней мере. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 20:05 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Zzz79 я думаю осилит- вопрос в том сколько все тогда поломается- код то старый нужно поддерживать поэтому проще все name() написать getName() и все будут счастливы и фреймворки и рекорды взлетят пока это не юзабельно ибо сериализиторы без гетов не могут объект собрать . Я не пойму почему рекорд сделали по ломбоковски- типо getter это name() а setter ->name(String name) это ломает всю систему тебе нужно попытаться какой-нить кодогенератор или интроспектор написать и ощутить всю боль на себе: у полей префиксы типа is/has несут вполне ощутимую смысловую нагрузку, а когда мы начинаем пользоваться "конвенциями", где для булевских полей у нас геттеры должны называться (is|get)FieldName то сразу сталкиваемся с кучей трудностей. Называть геттеры точно также как и поля - это великая веха в истории жавы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 20:11 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Zzz79 Андрей Панфилов тебе нужно попытаться какой-нить кодогенератор или интроспектор написать и ощутить всю боль на себе: у полей префиксы типа is/has несут вполне ощутимую смысловую нагрузку, а когда мы начинаем пользоваться "конвенциями", где для булевских полей у нас геттеры должны называться (is|get)FieldName то сразу сталкиваемся с кучей трудностей. Называть геттеры точно также как и поля - это великая веха в истории жавы. попаболь с генерацией булевых полей я уже ощутил на себе когда какой то му_дак аналитик называет поле isImIdiot - и сразу ломается ломбок тут по итогу ты судорожно ищешь такие поля и делаешь им ручные гет/сет getIsImIdion /setIsImIdiot на счет вехи не уверен- веха эта уже имеется в виде ломбока @Accecor(true) Не ну твое software кунфу конечно сильное. Попробую в следующий раз бизнесу отписать - фича не может быть реализована, потому что ломбок б...ь ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 20:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Zzz79 я думаю осилит- вопрос в том сколько все тогда поломается- код то старый нужно поддерживать поэтому проще все name() написать getName() и все будут счастливы и фреймворки и рекорды взлетят пока это не юзабельно ибо сериализиторы без гетов не могут объект собрать . Я не пойму почему рекорд сделали по ломбоковски- типо getter это name() а setter ->name(String name) это ломает всю систему Ломбок здесь вообще непричем. По моему скромному мнению records это некие предтечи функционального программирования в Java. Я не зря поднимал топик о смерти ООП. Но это было просто гипертрофированная фантастика. Реальность примерно такова. Середина 20-го века прошла под флагом логического и функционального программирования. Это было время сильной математики. И точных наук. В конце 20 века пришел бизнес. И программирование стало на службе у обычной бухгалтерской арифметики. Там не нужен был вывод остаточных процедур и доказательтво свойства у какой-то функции. Нужно было просто еб*шить код. Много кода. И требования к самим кодерам должны быть снижены. ООП подходил идеально. Сегодня имеет место процесс переосмысления. Когда программисты ищут нового. Ищут коротких языков. DSL-подобных. И безопасных. И открылись некоторые предметные области (bigdata/Spark) где свойства ФП (такие как неизменяемость переменных) дают преимущества. В самом деле. Если переменная с момента объявления никогда не меняется (это похоже на final в Java но посложнее) то синхронизация с ней черезе synchronized или другие API становится ненужной. В самом деле. Потоки всегда видят одно value. Уходит целый пласт проблем гонок и голоданий в мультипоточке. Уходят ошибки (code-smells) повторного использования переменной в методе в другой роли. Об этом часто пишут Фаулер и дядко Боб. И это только вершина айсберга. Настоящее ФП постулирует также неизменяемость коллекций. Отсюда кстати вытекает одна важная рекомендация в использовании Java Streams которую джависты обычно нечитают и не понимают зачем она. В ФП (Scala) декларирован генерик Stream[A]/LazyList[A] который програмным образом позволяет создать бесконечные коллекции. Коллекции с отложенной инициализацией. Генераторы. В спарке работа с RDD очень напоминает чистое ФП хотя сами по себе RDD происходят как исторический срез какой-то базы данныз. Конечно взамен мы получаем новые вопросы. Как - использовать в цикле Java-Records? Как декларировать что Stream - ленивый и бесконечный. Но это будет некое итеративное развитие спецификации языка. Насколько я вижу - главные идеологи JLS - очень осторожны в этом смысле. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 20:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вобщем идут такие тектонические изменения, что обсуждать Spring и Lombok неинтересно. Они - просто бюрократический обвес. Будет менятся мышление разработчиков. P.S. Да конечно ООП останется. Никто его не уберет. Мультипарадигменность - будет важнее чем культ Спринга или Ломбока. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 20:58 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Атомики решают часть задач мультипоточки. Могу придумать задачу, которую ты не решишь только на них. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2021, 23:48 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
только мало понятно, что же за задачка такая. дабы и блокировки и все остальное - реализуются чисто через память. Т.ч. даже атомики вроде избыточны, вполне volatile должно хватать. IMHO AFAIK не специалист по многопоточке. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2021, 16:07 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev ... дабы и блокировки и все остальное.. ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 19:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
2. избыточность != нунжы и востребованы Ваш К. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 19:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Это один из вопросов который может прилететь на собесах. Сначала спросят про обеспечение уникальности счетчика (или PK) в рамках одного JavaProcess. Если у нас есть распределённая система (10 cluster nodes) и для всех них нужен некий генератор уникальности (в рамках Integer или Long или String) то атомик становится не особо полезен. Тоесть он конешно полезен но накладные расходы будут не в самом атомике а вообще в архитектуре сети. Тут можно делать генерацию на базе UUID или просто побив диапазон целых например по известной формуле. На прошлом проекте я придумывал динамическое разбиение диапазона Long при условии что изначально число узлов - неизвестною. Но каждый из потребителей не должен испытвать проблем с номерной ёмкостью ключей. Это к сожалению не зашло в прод. Но идея у меня осталась. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 19:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
atomic и сделаны через volatile. Можно исходный код погуглить. То, что "классы разные нужны, классы многие важны" - никто и не спорит возьмут волатайл по вашему совету у меня где-то был такой совет? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 19:25 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
ну уникальные ID-шники это такое... Например в CC&B ID-шники генерировались как случайные числа. Долго изумлялся, потом прочитал, что это чуть ли не стандарт в написании высоконагруженных приложений для СУБД ))). А сиквенсы - вообще отстой и торзмоз ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 19:30 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
[censored] Смысл моего поста был, что через volatile МОЖНО написать ЛЮБОЕ многопоточное приложение. Т.к. даже блокировки (synchronize, lock) тоже через них делаются. Т.е. избыточны, в моем понимании данного слова. Но избыточны и можно НЕ РАВНО [censored] "удобно", "отлично подходит", "предлагал". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 19:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Ну и да... ждем обещанной задачи от знатоков многопоточки ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 19:35 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Ну и да... ждем обещанной задачи от знатоков многопоточки Ну вообще-то volatile никак не может заменить atomic. Volatile переменная в сорцах отвечает только за корректность метода get, т.е чтение. Модификация же заимплеменчена через Unsafe, который в свою очередь использует нативные инструкции процессора - CAS(compare and swap). Ну и собственно любая задача, где нужно обновить переменную, учитывая ее значение не может быть реализована на одном volatile. Стас конечно редко дело говорит, но в данном случае он ближе к правде ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 20:57 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Ни JVM не JLS не регламентируют как должен быть реализован Atomic. Это всё - особенности железа и native библиотек Java. На JVM/Intel - это может быть Atomic -> Unsafe -> CAS, на каком-нибудь JVM/Эльбрус-Байкал это может быть что-то другое Atomic -> .... e.t.c. И непонятно чего мы спорим. Стек атомика реализован опытными людьми, которые прошли много редактуры кода JVM. Там - каждая строка - выстрадана и вылизана до предела. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 22:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Zzz79 пс. Леня ты собсвенно прежде ответа - изучи матчасть Проблема в том, что организация многопоточности только через volatile - очень неэффективна. Тратить процессорное время, в основном, на ожидание захвата очередного семафора - так себе вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2021, 22:55 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Zzz79, >вот сейчас я пилю сервис = этот топик курилка что ли? Кончай подымать топики по надцать страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 07:23 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton И непонятно чего мы спорим. Стек атомика реализован опытными людьми, которые прошли много редактуры кода JVM. Там - каждая строка - выстрадана и вылизана до предела. Одно время читал livejournal человека который учился и серьезно разбирался в многопоточке. Там все сильно плохо ))) сказать что "каждая строка выстрадана и вылизана до предела" это сильно большое приувеличение. На стандартные библиотеки от Java __очень__ много критики и достаточно много альтернативных реализаций. Те же самые Atomic'и появились не так уж и давно (по меркам Java). До этого их просто не было. Фактически единственный "многопоток" который был в Java более-менее изначально ConcurrentLinkedQueue. Да и тот ругали, что используемый там алгоритм приводить к memory leak'у. Но когда я пытался повторить test case, у меня повторить не получилось, возможно на тот момент уже подправили или я чего-то недопонял (возможно проблема затрагивает только minor сборщик мусора). AFAIK Например Sun/Oracle авторы Java библиотек на коллизии при доступе к данным в одной строке кеша - клали и, как я подозреваю, продолжают класть с высокой колокольни. Возможно в Open JDK что-то изменилось. Но не факт. Не знаю. Набор конкарент коллекций так же достаточно убогий. Или просто blocking обертка поверх стандартных коллекций или раз-два и все. Например отсутвуют нормальные многопотоковые bounded коллекции. Хотя для любого более-менее нормального сервиса/сервира, проверка на переполнение очереди сообщение как-то ну крайне желательна. Т.е. ConcurrentLinkedQueue для очереди сообщений - ну сильно не оптимальный выбор, а другого в стандартных библиотеках вроде то и нет. В результате нарываешься на костыли и велосипеды, где классы используются совершенно НЕ по их назначению. Например берут ConcurrentLinkedQueue и поверх навешивают 100500 счетчиков на AtomicInteger, что бы банальный size коллекции считать и проверять (видел такое в реальных проектах). А то что получается в итоге, еще и эффективным многопотоком обзывают ))) хотя это не многопоток, а помойка из отбросов ))). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 15:50 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev [censored] Смысл моего поста был, что через volatile МОЖНО написать ЛЮБОЕ многопоточное приложение. ИМХО довольно спорное утверждение. Как к примеру чисто на волатайлах сделать простой лок? Можно пример кода? - пусть даже не эффективного ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 15:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
SpringMan Leonid Kudryavtsev [censored] Смысл моего поста был, что через volatile МОЖНО написать ЛЮБОЕ многопоточное приложение. ИМХО довольно спорное утверждение. Как к примеру чисто на волатайлах сделать простой лок? Можно пример кода? - пусть даже не эффективного Циклы крутить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 16:32 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Те же самые Atomic'и появились не так уж и давно (по меркам Java) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 16:37 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
mayton SpringMan пропущено... ИМХО довольно спорное утверждение. Как к примеру чисто на волатайлах сделать простой лок? Можно пример кода? - пусть даже не эффективного Циклы крутить. Ну у меня есть предположение, в каком виде вы хотите его написать) Но я сомневаюсь, что в таком виде он будет правильно работать. Поэтому и прошу пример кода - мало ли я что-то не так понимаю ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 16:37 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
ну как минимум: 1. никто не мешает сделать поток-диспетчер, который всегда выполняется и отслеживает блокировок/атомарных операций поскольку к этим структурам доступ есть только у него, продлемы с многопотоком нет 2. в пользовательских потоках: посылаем в него сообщение, встаем в цикл, ждем ответа Для передачи сообщений для каждого пользовательского/управляемого-потока, заводим банально по переменной. Если она пустая - пред. сообщение потоком-диспетчером обработалось, пишем сообщение в данную переменную. Если не пустая - стоим/ждем переменная используется в качестве вырожденного Single Producer - Single Consumer Queue на одно сообщение. В потоке-диспетчере пробегаем в цикле все очереди. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 16:54 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Набор конкарент коллекций так же достаточно убогий. Или просто blocking обертка поверх стандартных коллекций или раз-два и все. Например отсутвуют нормальные многопотоковые bounded коллекции. Хотя для любого более-менее нормального сервиса/сервира, проверка на переполнение очереди сообщение как-то ну крайне желательна. Т.е. ConcurrentLinkedQueue для очереди сообщений - ну сильно не оптимальный выбор, а другого в стандартных библиотеках вроде то и нет. Ограничен в размерах? Да. Можно проверить размер конкретной очереди? Да. Можно проверить количество доступных слотов? Да. Можно "на авось" подождать (заданное время) при помещении элемента в переполненную очередь? Да, хотя это - сомнительное решение. Требуются сложные дисциплины обслуживания? Да, придётся ручками. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 16:59 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov ...типа, вчера??? был не прав. Атомики и ConcurrentLinkedQueue одновременно появились. Мне почему-то казалось, что это более позднее дополнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 17:02 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Оно изначально было в пакете Doug Lea EDU.oswedu.чего-то.там.util.concurent. Я запомнил, поскольку у нас был сервис на 1.4.2, где использовался именно этот пакет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 17:14 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Doug Lea У меня такое чувство, что это чуть ли не единственный человек, который занимался этими пакетами. Он точно читает лекции и ведет курсы, где учит многопоточке. В том числе, lock free алгоритмам начиная с Circle Ring Buffer. Почему он пропихнул именно и исключительно ConcurrentLinkedQueue в стандартные библиотеки, то ведомо только ему ))) возможно просто в тот момент ему именно данный lock free алгоритм был интересен. В общем, планомерной работы по конкаррент ( lock free, wait free ) коллекциям - не заметно. Одни случайные классы/алгоритмы (как уже выяснилось по данной дискуссии "полезные" ))) ) добавили, другие, не менее, а возможно и более полезные и классические алгоритмы - нет. ConcurrentLinkedQueue есть, а более простой и производительный Circle Ring Buffer нет. AFAIK "Нормальные библиотеки" ( TM ) сразу же включают в себя целую кучу алгоритмов: SingleProducerSingleConsumer MultiProducerSingleConsumer SingleProducerMultiConsumer MultiProducerMultiConsumer.... Bounded / unbounded и так далее..... А Doug Lea из всей кучи выдернул одинокий ConcurrentLinkedQueue и включил его в стандартные либы. И по факту везде в проектах ConcurrentLinkedQueue и к месту и не к месту. Дабы других lock free и не дали. В целом стандартная Java Lib в очень многих местах выглядит как дикая помойка. Например 100500 разных классов для работы с датами. Не говоря уже о том, что в одних стандартных классах месяц нумеруется с 0, в других месяцы нумеруются с 1. Историческая помойка. Когда понадобилась более-менее нормальная работа с датами, пришлось взять JodaTime Когда понадобились более-менее нормальные коллекции (производительность, потребление памяти) - опять таки пришлось брать сторонние либы. Т.ч. многопоточка не исключение ))) IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 18:09 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вот этот блог мне очень понравился. Очень интересные посты. Он учился у Doug Lea и писал/оптимизировал свой lock free коллекцию. В общем, как человек степ бай степ успешно учился многопоточки и оптимизации. Поскольку степ бай степ - то даже мне местами было понятно ))) http://psy-lob-saw.blogspot.com Я так понимаю, он сейчас один из авторов org.jctools https://github.com/JCTools/JCTools Применительно собственно к теме топика (новые версии Java). Интересный факт, что изменение garbage collection на новый lock free алгоритмы запортило ))) http://psy-lob-saw.blogspot.com/2018/01/what-difference-jvm-makes.html Oracle8u144: pollsMade | 361.161 ± 4.126 ops/us Oracle9.0.1: pollsMade | 26.182 ± 2.273 ops/us изучаешь изучаешь lock free алгоритмы, а тут приходит новый garbage collector и сам всюду блокировки раставляет ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2021, 19:19 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev ну как минимум: 1. никто не мешает сделать поток-диспетчер, который всегда выполняется и отслеживает блокировок/атомарных операций поскольку к этим структурам доступ есть только у него, продлемы с многопотоком нет 2. в пользовательских потоках: посылаем в него сообщение, встаем в цикл, ждем ответа Для передачи сообщений для каждого пользовательского/управляемого-потока, заводим банально по переменной. Если она пустая - пред. сообщение потоком-диспетчером обработалось, пишем сообщение в данную переменную. Если не пустая - стоим/ждем переменная используется в качестве вырожденного Single Producer - Single Consumer Queue на одно сообщение. В потоке-диспетчере пробегаем в цикле все очереди. IMHO Ну я ожидал без диспетчера, но это походу мои проблемы) А так да, как решение похоже подходит ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:05 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120495]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
307ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 398ms |
0 / 0 |