- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
Object o1 = true ? Integer.valueOf(1) : Double.valueOf(2.0);
Object o2;
if (true) {
o2 = Integer.valueOf(1);
} else {
o2 = Double.valueOf(2.0);
}
System.out.println(o1);
System.out.println(o2);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+79
Object o1 = true ? Integer.valueOf(1) : Double.valueOf(2.0);
Object o2;
if (true) {
o2 = Integer.valueOf(1);
} else {
o2 = Double.valueOf(2.0);
}
System.out.println(o1);
System.out.println(o2);
Такие вот в Java интересные типы-обёртки.
Проверить себя: http://ideone.com/BrhREq
Источник: http://java.dzone.com/articles/10-things-you-didnt-know-about
wvxvw 05.11.2014 16:50 # +1
bormand 05.11.2014 17:12 # −15
bormand 05.11.2014 17:19 # −13
3.14159265 05.11.2014 17:25 # 0
На самом деле понятнее будет, если рассмотреть похожесть данного кода.
>Object o1 = true ? 1 : 2.0;
>Object o1 = (1+2.0);
http://ideone.com/G8o52J
В обоих случаях неявная питушня в double и неявный опять-таки автобоксинг в Double.
bormand 05.11.2014 17:27 # −14
3.14159265 05.11.2014 17:29 # +1
Не. Это больше к тому что говорит wvxvw
> что выражение (if _ then _ else):T должно быть типа T
В смысле как надо было сделать. Вывести общий надтип.
bormand 05.11.2014 17:30 # −13
3.14159265 05.11.2014 17:33 # 0
Я вроде уже приводил пример, какой будет размер у множества
http://ideone.com/OwM9az
bormand 05.11.2014 17:36 # −14
Да number то не виноватый... Корень всех зол - богомерзский неявный каст, сиречь молвить автобоксинг.
bormand 05.11.2014 17:37 # −15
WTF?! Видимо equals упал?
3.14159265 05.11.2014 17:39 # +1
Подленькая задачка
>Видимо equals упал?
Не compareTo(T other), где T - наш тип.
equals(Object), потому первое что в equals пишут после сравнения ссылок, это instanceof.
bormand 05.11.2014 17:41 # −15
== вообще не компилится. equals возвращает false (тип разный), а compareTo вообще падает.
P.S. А еще автобоксинг не пашет для чего-то кроме оберток над примитивами, а перегрузку операторов не завезли. Поэтому юзеры BigDecimal и каких-нибудь Point'ов плачут горькими слезами.
3.14159265 05.11.2014 17:43 # 0
То же касается массивов.
Правильный способ такой:
bormand 05.11.2014 17:45 # −13
3.14159265 05.11.2014 17:48 # 0
Стопудово! Что-то через ==, что-то через equals, что-то через Arrays.equals, что-то через еще какую-то жопу:
Короче я сам не знаю. Где-то тут уже это обсуждали.
ε по желанию.
wvxvw 05.11.2014 18:03 # 0
bormand 05.11.2014 18:19 # −14
someone 05.11.2014 19:04 # +1
И в JavaScript зачем-то притащили эти жабовские костыли. Видимо, в то время не представляли, что можно ещё как-то по-другому.
3.14159265 05.11.2014 20:11 # −1
Чего вы такое говорите? "Отказались", "правильно сделали", "есть боксинг, но он прозрачный".
Да боксинг везде прозрачный, его суть в том чтоб сделать конверсию прозрачной, то бишь неявной.
По мне в шарпе еще хуже сделали. int - примитив, Int32 - тип, int? - nullable. Больше сахара, и больше граблей...
И точно такие же неявные конверсии, как и в жабе:
http://ideone.com/8wb3TE
Насчёт женериков - это был единственный способ сохранить обратную совместимость.
someone 05.11.2014 20:25 # +2
С какого перепоя? В .NET нет примитивных типов. Там есть value types, но это не то же самое. И System.Int32 - абсолютно то же самое, что и int. В отличие от Java, где int и Integer - это две большие разницы.
Кстати, мне в Жабе не хватает nullable-типов. Например, если поле в базе INTEGER и может быть NULL, то в JPA приходится его объявлять как Integer. Со всеми вытекающими. А вот в .NET NHibernate для такого понимает int?.
Анонимус 05.11.2014 21:16 # 0
разница только в том что они храняца на стеке.
3.14159265 05.11.2014 23:08 # 0
Integer - это nullable int.
>Например, если поле в базе INTEGER и может быть NULL, то в JPA приходится его объявлять как Integer.
И что тут плохого? В чем разница с int? ?
someone 06.11.2014 08:48 # 0
Хорошо хоть в Guava и JDK 7 есть Objects.equal[s]().
3.14159265 06.11.2014 12:22 # 0
Анонимус 05.11.2014 21:15 # +3
Там есть ТОЛЬКО System.Int32.
"int" это синтаксический сахер C#, который все равно превращается в Int32.
"int?" (нулабл) это сахар для Nullable<System.Int32>. Такая хрень в которой указатель хранится.
Конечно есть определенная магия с тем что Int32 может хранится на стеке, а в случае Nullable<Int32> он уже хранится в куче (а сам Nullable может и на стеке) но это и так понятно.
Еще раз: в .NET НЕТ int, НЕТ int?, а есть только Int32 и Nullable<T>.
Почитайте Рихтера CLR via C#.
3.14159265 05.11.2014 23:07 # 0
А я о чем говорю?!
>Еще раз: в .NET НЕТ int, НЕТ int?
Только сахара напилили, а так всё тоже. Ну разве что обратная совместимость (вернее её отсутствие) позволило сделать женерики на Int32 и прочих стековых "примитивах".
> а есть только Int32 и Nullable<T>.
В жабе есть примитивный int - C# аналог Int32(int) и Integer - C# аналог Nullable<T> (int?)
Только сахара добавили, а так всё абсолютно тоже.
И баги те же. И неявные конверсии те же.
wvxvw 06.11.2014 09:30 # +2
Но ведь как все было? Написали говноязык за неделю, и еще столько же на интерпретатор. И потом двадцать лет плачут кровавыми слезами о том, как херово получилось.
ЗЫ. Дуглас Крокфорд где-то рассказывал о разных предложениях поменять числа в ж.скрипте на что-то более вменяемое. Например, Intel вроде, или IBM предлагали внедрить вещественные с десятичной экспонентой, но такой заумный формат, что его отказались реализовывать. Рассказывал он об этом в контексте того, что предлагал упрощенный формат с десятичной экспонентой. Но судя по всему, числа в ж.скрипте так и останутся недоделаными, пока язык не помрет, а все "улучшения" сведутся к тому, как круто можно будет let вместо var писать, или что-то похожее.
guest 12.11.2014 23:51 # −15
Анонимус 05.11.2014 21:10 # +1
3.14159265 05.11.2014 17:36 # 0
https://bugs.openjdk.java.net/browse/JDK-8044053
http://stackoverflow.com/questions/22509488/generics-compilation-error-with-ternary-operator-in-java-8-but-not-in-java-7
TarasB 05.11.2014 17:28 # +1
kegdan 08.11.2014 14:22 # 0
http://ideone.com/UWOJQu
roman-kashitsyn 12.11.2014 22:40 # +1
bormand 12.11.2014 22:42 # −14
Моно наконец-то можно закапывать?
Анонимус 12.11.2014 22:49 # 0
И МС меня услышал.
Впрочем, они говорят
"We intend to build a public working group between us and the Mono community once we have enough code out there."
===========
Впрочем, основные няши вроде WPF, WF, XAML и WCF все равно никуда от MS не уйдут, равно как и веб разработка (никто IIS-то портировать не собирается). Так что моно может и вкопают, а вот GtkSharpы всякие -- не.
И будет в .NET как в жабе: восемь веб-фреймворков на выбор, парочка гуи, шесть разных Dependency Injection итд
bormand 12.11.2014 22:54 # −15
> IIS-то портировать не собирается
А зачем? Можно подумать, что у ASP.NET настолько тесная интеграция с кишками IIS, что его никак нельзя привернуть к какому-нибудь апачу или нгинксу... Емнип, у апача даже был модуль для ISAPI dll'ок.
Анонимус 12.11.2014 23:00 # 0
Наверное можно будет его прикрутить, но писать много кода придется. Потому что сам веб-сервер он не на .NET же. Я вообще не очень понимаю как это будет работать, надо почитать.
Скорее всего будет какая-то спека (как спека сервлет-контейнера в джаве) которую надо будет реализвать и тогда на тебе заработает asp.net
bormand 12.11.2014 23:01 # −15
Анонимус 12.11.2014 23:10 # +1
Кроме того часть обработки http унесли в драйвер (http.sys), но это видимо такая странная оптимизация перформанса.
Aspnet_isapi.dll, энивей, исходников не имеет, и на линухах не подымица ибо является Win32DLL и наверняка еще юзает какую-нить часть Win32API.
Вики говорит:
" ASP.NET can be run with Mono using one of three options: Apache hosting using the mod_mono module, FastCGI hosting, and XSP."
Но я всё равно почему-то не верю что там всё хорошо работает.
guest 12.11.2014 23:54 # −15
Он винду уронить сможет?
bormand 12.11.2014 23:58 # −15
Рискованная херня, на самом деле.
Анонимус 12.11.2014 23:59 # 0
Вообще когда часть GUI унесли в kernel space (было это во времена WinNT4) все стали смеяться и говорить что теперь всё будет падать.
А Руссинович после говорил "но ведь без гуи вы все равно ничего не сможете делать на виндусе, так что ничего страшного что унесли, зато стало быстрее работать, нет дурацких прыжков user/kernel".
Но вообще архитектура винды это винигрет со спагетти. Один csrss чего стоит!
bormand 13.11.2014 00:10 # −15
Можно подумать, что в линухе с ее иксами лучше... Там тоже треш угар и содомия, если покопаться.
Анонимус 13.11.2014 00:21 # 0
Иксы все же не часть линухов, и архитектура у них забавная конечно ("на моей слабой писи выполняется сервер иксов, а на мощном сервере работает их клиент"), но все же она более внятная и хорошо документирована.
Ну тоесть таких вот кромешных фейлов как с WinSta0 или тем же CSRSS там все же почти нет.
guest 13.11.2014 01:38 # −15
>"на моей слабой писи выполняется сервер иксов, а на мощном сервере работает их клиент"
VNC, вид сбоку?
Анонимус 13.11.2014 09:06 # 0
Ну во-первых он всё же работает не только поверх IP, но и через unix domain sockets например, так что накладные расходы не велики. Это обычный IPC, довольно быстрый тащемто. А во-вторых на винде часть Win32API тоже реализована в уже упомянутом тут CRSS (угадайте, как расшифровывается!) с которым клиент общается по недокументированному протоколу LPC. Да и вообще много чего реализовано в винде через RPC, например добрая половина оснасток (mmc). Сделано это чтоб можно было одинаково управлять сервисами или девайсами как локально так и удаленно.
>>VNC
Не совсем. VNC сервер захватывает экран, и шлет его картинкой клиенту. От клиента получает нажатия клавиш и движения мыши.
А в иксах сервер работает с видео-картой чтоб отображать картинку и с клавой мышью чтоб получать их нажатия. А клиент присоединяется к серверу и дает команду "нарисуй то-то". Сервер создает для клиента окно, хромирует его настроенным оконным менеджером, и рисует там круг и передает клиенту нажатия клавы.
Тоесть есть вот икс сервер у меня на экране, и каждая программа (калькулятор, IDE итд) это его клиенты.
Это выглядит странно: я у себя запускаю сервер, а на удаленной машине (например по SSH) запускаю тяжелую программу, он использует ресурсы той машины, а аутпут шлет мне по сети прямо на экран)
guest 13.11.2014 12:01 # −15
Но не гуй же.
>Это выглядит странно: я у себя запускаю сервер, а на удаленной машине (например по SSH) запускаю тяжелую программу, он использует ресурсы той машины, а аутпут шлет мне по сети прямо на экран)
А теперь в джвух словах разница с VNC/Teamviewer/etc
Анонимус 13.11.2014 14:16 # +1
Пожалуйста:
VNC (RFB)/Radmin/etc:
КЛИЕНТ ШЛЕТ: нажатие клавиш
КЛИЕНТ ОЖИДАЕТ: картинку экрана
X11 (X Windows Core System Protocol):
КЛИЕНТ ШЛЕТ: комманды на отрисовку чего-либо в окне, эвентны окнам
КЛИЕНТ ОЖИДАЕТ: нажатия клавиш
И примитивы более высокоуровневые (не просто картинка а понятие окна и евента) и архитектура наоборот)
Есть еще RDP (ака терминал ака ремоут десктоп) у MS, там все и вовсе по-третьему (кстати, довольно элегантно, на понятиях станций и сессий, и потому он обычно быстрее VNC)
1024-- 13.11.2014 16:39 # 0
Что означает термин "хромирует"? Это какой-то перевод, или окно по умолчанию заливают блестящей текстурой?
> Это выглядит странно: я у себя запускаю сервер, а на удаленной машине
После X-макросов и коллбеков - не странно :)
Анонимус 13.11.2014 16:52 # +3
inkanus-gray 13.11.2014 18:06 # 0
Из-за этого, когда впервые заговорили о браузере «Хром», я не мог понять, о чём речь. Как можно рамочку вокруг страницы назвать браузером?
bormand 13.11.2014 18:13 # −15
Но ведь первые хромы выглядели и работали именно как рамочка для страницы! В них даже кеша не было.
1024-- 13.11.2014 21:13 # 0
bormand 13.11.2014 07:02 # −15
Пока к ней не начали прикручивать OpenGL, методы ввода для русского, японского и арабского и прочие никому не нужные вещи... После этого архитектура превратилась в лапшу.
Анонимус 13.11.2014 09:10 # 0
bormand 13.11.2014 10:40 # −15
P.S. Когда в убунте пытались причесать методы ввода - запороли переключение раскладки по одним модификаторам (ктрл-шифт, альт-шифт и т.п., короче самые нужные).
guest 13.11.2014 01:37 # −15
А нафига лишнее барахло тащить в дрова? И, кстати, в винде еще не появились драйвера, которые не утягивают с собой винду?
Анонимус 13.11.2014 09:14 # 0
Появились конечно. На третьем кольце защиты работают UMDF драйвера начиная с висты. В ядре сидит класс-драйвер, а пользовательские драйверы работают с ним через (кажется) COM.
Их падение не приводит к BSODу, но скорость их конечно оставляет желать лучшего.
laMer007 04.06.2015 22:08 # 0
guest 05.06.2015 12:48 # −15
так дело тут не в них.
Просто часть работы GUi реализована в режиме едра: win32k, или как там его.
guest 12.11.2014 23:54 # −15
someone 13.11.2014 08:44 # 0
Анонимус 12.11.2014 22:52 # 0
Иначе будет переписывать)
Он даже сану не доверял, поднял бучу и стал хотеть OpenJDK.
bormand 12.11.2014 22:52 # −15
Анонимус 12.11.2014 22:55 # −1
В бзд ты можешь показать исходный код, а можешь и нет. А в GPL ты обязан. Причем как только ты слинковался с либой GPL, так сразу надо всему GPL становиться. Потому враги Столлмана часто сравнивают GPL с раком
bormand 12.11.2014 22:58 # −15
P.S.
- форкаем проект M$ на гитхабе
- меняем лицензию на GPL
- ???
- профит
Анонимус 12.11.2014 23:02 # 0
Хотя чего загадывать, надо просто подождать как это работать будет
bormand 12.11.2014 23:07 # −15
LGPL - теоретически возможно, т.к. кабальных ограничений не накладывает, и сосуществование с бинарниками не запрещает, но скорее всего тоже не будут.
Анонимус 12.11.2014 23:25 # 0
Потому что если толкьо фреймворки и стандарту либу (код на C#) то mono не сдох, потому что CLR-то кто-то должен гонять под линух.
Если же они делают реализацию CLR под линух (код на сях) (ну как jvm есть под разные ос) то надо говорить не только об опенсурсе, а о очень серьезной переделке, потому что код под POSIX и Win32API он очень разный всё таки:)
roman-kashitsyn 13.11.2014 08:13 # 0
guest 13.11.2014 12:02 # −15
roman-kashitsyn 13.11.2014 12:11 # +1
Анонимус 13.11.2014 16:28 # 0
ха, они теперь и студию хотят сделать бесплатной (не ультимейт конечно), раз студия на .net писана
Здравствуй, новый "IDE для всего" на linux
kipar 13.11.2014 15:02 # 0
Одной из этих двух, наверное?
http://www.microsoft.com/en-us/openness/licenses.aspx
3.14159265 13.11.2014 13:35 # 0
Ссылки не читал.
3.14159265 03.12.2014 13:14 # 0
>Проверить себя: http://ideone.com/BrhREq
У меня всё нормально работает:
http://ideone.com/EzBv2Y
Что я делаю не так?
GameLoper 04.06.2015 01:29 # 0
bormand 04.06.2015 06:20 # −15
guest 01.04.2017 07:45 # −15