- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
private boolean isAuthorized( ExecutionResult result )
{
Iterator<Long> accessCountIterator = result.columnAs( "accessCount" );
while ( accessCountIterator.hasNext() )
{
if (accessCountIterator.next() > 0L)
{
return true;
}
}
return false;
}
KonardinoHuyardino 24.03.2014 23:52 # −28
Lokich 25.03.2014 09:55 # +3
KonardinoHuyardino 25.03.2014 11:47 # −25
guest 25.03.2014 02:43 # −15
bormand 25.03.2014 05:30 # −15
Судя по гуглу - в 2013.
KonardinoHuyardino 25.03.2014 11:47 # −21
KonardinoHuyardino 25.03.2014 11:47 # −24
roman-kashitsyn 25.03.2014 08:11 # +5
В условиях же неиспользования библиотек и лишнего кода не вижу в прямом использовании итератора абсолютно ничего криминального.
Если речь о самом алгоритме проверки авторизации, то это, видимо, проявление уникальных преимуществ графовых баз данных.
someone 25.03.2014 08:37 # +2
Нет там такой. По идеологическим соображениям. Можно использовать ImmutableList.copyOf(), но это просто свинство по отношению к GC.
Скорее надо отрывать руки авторам API, возвращающих Iterator напрямую вместо Iterable.
roman-kashitsyn 25.03.2014 09:14 # +1
Да, точно, их вроде просили, но они не сделали по идеологическим соображениям > отрывать руки авторам API
Тут на самом деле сложный вопрос. Если итератор тяжёлый и лениво подгружает записи из базы, то использование Iterator вместо Iterable создаст дополнительное препятствие пользователю, желающему обойти поток дважды (ResultSet же примерно так и работает).
С другой стороны, Iterator излишне усложняет код в типичных юзкейсах. Я бы сделал Iterable, но и дизайн с Iterator понять могу.
guest 25.03.2014 17:23 # −16
Жава головного мозга?
roman-kashitsyn 25.03.2014 17:26 # +1
Если есть только итератор, любому индусу будет понятно, что дважды обойти коллекцию по этому итератору нельзя, хоть убейся.
Если есть iterable, то многократный обход коллекции не возбраняется.
guest 25.03.2014 17:36 # −16
>жаба ведет себя как девственница - "это хорошо, но это неправильно - потому откажу себе в удовольствии!"
У вас как тот самый случай со смесителем в канаде, где на каждом кране стоит одно и то же. Вроде и сделали из лучший побуждений, но на выходе такая хуйня получилась. Поцхему вы так не любите форич? Почему в питоне такой хуйни нет? Как же он обходится с возвратом результата из базы?
>A method to view an iterator as an iterable
>The biggest concern is that Iterable is generally assumed to be able to produce multiple independent iterators. The doc doesn't say this, but the Collection doc doesn't say this, either, and yet we assume it of its iterators. We have had breakages in Google when this assumption was violated.
Звучит правильно, но блядь, почему нужно все так усложнять? Почему нельзя, например, кидать исключение при попытке получить итератор второй раз?
roman-kashitsyn 25.03.2014 17:45 # +4
> Почему в питоне такой хуйни нет? Как же он обходится с возвратом результата из базы?
А ты спеку-то открывал? Курсор-то не итератор, прикинь. Фетч надо явно дёргать.
guest 25.03.2014 17:55 # −15
А что с курсором не так? Он форыч поддерживает.
roman-kashitsyn 25.03.2014 18:07 # 0
Да, ты прав. Посмотрел типичные драйвера, они в execute возвращают итератор.
Однако спека говорит:
> неужели посимпатичней никак нельзя?
Ну если очень хочется, никто таки не запрещает написать этот once самому
guest 25.03.2014 18:11 # −15
>никто таки не запрещает написать этот once самому
Риально удобно, риально падсибя? Почему все более-менее удобные обертки на яве - самопальные костыли?
roman-kashitsyn 25.03.2014 18:18 # 0
пожалуй да
> Почему все более-менее удобные обертки на яве - самопальные костыли?
Потому что разработчики стандартной библиотеки на 95% наверняка необразованные индусы. Что поделать... Видимо, все умные люди пилят низкоуровневый хардкор.
guest 25.03.2014 18:56 # −15
guest 26.03.2014 15:21 # −15
Lure Of Chaos 26.03.2014 20:16 # 0
Iterable - это такой результсет, указывает, что по нему можно итерировать, но сам итератор еще не готов
Iterator - собственно однонаправленный курсор, уже установленный в некоторой позиции.
таким образом, в первом случае мы можем лишь получить новый курсор (не считая других операций), а во втором - мы можем итерировать, но мы защищены от модификации.
как гибрид этих двух, еще ранее в жаве был реализован Enumeration, который был еще менее удобный в использовании.
guest 26.03.2014 21:09 # −15
> Почему все более-менее удобные обертки на яве - самопальные костыли?
Lure Of Chaos 26.03.2014 22:48 # 0
взять, например, ту же спецификацию DOMv2
roman-kashitsyn 26.03.2014 23:04 # 0
сарказм я обычно выделяю зелёным
Lure Of Chaos 26.03.2014 23:17 # +2
wvxvw 25.03.2014 09:48 # +3
Сорри, нужно было объяснить, что result сам по себе типа Iterable<Map<String,Object>> и итератор тут вообще не нужен.
А еще печально, что на дворе 2014, а в Яве нету стандартных any / find-if и т.д. А студентов продолжают обучать на этом говне под видом гениально спроектированых коллекций / контейнеров.
wvxvw 25.03.2014 09:59 # 0
roman-kashitsyn 25.03.2014 10:00 # +4
Вот как раз в 2014 появились
wvxvw 25.03.2014 10:44 # 0
roman-kashitsyn 25.03.2014 10:52 # +1
wvxvw 25.03.2014 11:18 # +2
Над компиляторами разных лиспов работают полторы калеки в свободное от работы время, и тем не менее из динамических языков они самые быстрый код генерируют. Это в отличие от многотысячной армии на зарплате, которая пилит Ява виртуальную машину и компиляторы.
Кроме того, SBCL отнюдь не самый шустрый, зависит от архитектуры процессора, конкретной задачи и т.д. Арлекин писали самые лучшие лисповые компиляторы всегда, ну Аллегро тоже вроде хорошие. Rainer Joswig когда-то публиковал грид тест большинства известных реализаций. CCL гораздо быстрее обычно на АРМах, например. Но кроме того, есть куча вещей, которые эти тесты не учитывают, таких как что произойдет с програмой при наличии отсутствии определенных фич процессора, типа векторизации, СИМД, графических процессоров и низкоуровнего ПО которое с этим работает.
Более того, такие тесты учитывает только текущее состояние вещей. Например, в Яве только в последней версии попытались сделать распараллеленый сортинг. Все остальные стандартные алгоритмы - буй. Предположим, завтра Василий опубликует собственную явамашину в которой реализует все стандартные алгоритмы заточеными под Ксю - и специально напишет тест для хорошо параллелящихся алгоритмов, ну и получит соответствующую статистику.
roman-kashitsyn 25.03.2014 11:33 # +3
Только вот CL говно не меньшее.
> в Яве только в последней версии попытались сделать распараллеленый сортинг
Параллельную сортировку можно было написать ещё на жабе 1.0. Продвинутые изкоробочные инструменты для fork-join алгоритмов появились ещё в 7 версии.
Как там, кстати, с тредами в анси стандарте девяносто лохматого года? Уютненько?
wvxvw 25.03.2014 16:59 # 0
Но стоит упомянуть о говне в Яве, как начинаются предьявы к Лиспу и всякие обвинения, типа медлено работает слабо распространен и прочая херня не относящаяся к делу.
Да, в CL нету стандарного параллелизма, и это очень плохо. А в Яве параллелизм уебищный и не пригодна к повседневному использованию - и что лучше еще не известно. Однозначно понятно что и то и другое - плохо.
Хорошо было сделано в Оккаме, еще до появления говна типа Явы и С++, и все, что из этого следует, так это то, что Ява была написана бездараями, которые даже современные им технологии не осилили.
laMer007 26.03.2014 21:21 # +1
Да вам как не напиши - всё равно помяните нехорошим словом.
wvxvw 26.03.2014 21:33 # +1
laMer007 26.03.2014 21:50 # 0
wvxvw 26.03.2014 21:55 # +2
Года через четыре будет язык для работы с данными представленными графами, это при условии, что мое предложение рассмотрят на кафедре, найдется проф. которому оно понравится, и я таки смогу его написать, ну и заоодно может степень получить.
roman-kashitsyn 26.03.2014 23:24 # 0
wvxvw 26.03.2014 23:38 # 0
Предполагается найти хорошую систему записи правил двойного пушаута, по типу как в регулярных выражениях / пег. (это в том, что касается "запросов").
Lure Of Chaos 26.03.2014 23:57 # +1
вот я, например, признаю, что я настолько идиот, что не осилил чистое ФП.
и да, объясните, пожалуйста, чем лисп так хорош?
офф: честно, лучше языка, чем JS (с некоторыми нюансами, я бы поправил) я не встречал. именно благодаря простоте и гениальной JSON нотации.
wvxvw 27.03.2014 00:31 # 0
С другой стороны, когда мы уже знаем о существовании закономерности, и сталкиваемся с противоречием, дроблением, то переживаем прямо противоположные чувства.
JSON описывает очень мало структур данных, и еще меньше информации о них. Практически, все, что он дает это числа, обычный и экзотический (с символами) массивы и множество с операцией к другому множеству.
Даже об этих структурах можно было бы узнать больше непосредственно из записи. Например, какие-нибудь сведения о содержании массива, ограничивающие возможности интерпретации.
Можно было бы пожелать рекурсивные структуры, бесконечные структуры, структуры где, например, гарантировано, что граф ими представленый является планарным графом, или, с точки зрения инфорации о содержании, то можно было бы исследовать то, на сколько полно представлены допустимые элементы в коллекции, на сколько регулярно.
С практической точки зрения у JSONа есть несколько недостатков:
- нет комментариев.
- формат не поточный (чтобы распарсить, нужно прочитать все содержание).
- избыточная псевдографика в виде : и , (можно было ограничится пробелами).
- длинные строки без обрыва строки.
guest 27.03.2014 14:38 # −14
Разве?
>- избыточная псевдографика в виде : и , (можно было ограничится пробелами).
И забыть о форматировании.
roman-kashitsyn 27.03.2014 14:55 # 0
я, кстати, тоже не вижу никаких проблем. Пулл парсеры готовые есть, читай потоком: вычитал два поля - выкини остальные.
Тут скорее проблема в том, что требуемые ресурсы заранее неизвестны - если бы длина и размер строк были известны заранее, парсинг шёл бы проще и быстрее, такую штуку засунули в BSON.
С другой стороны, писать BSON руками - мало приятного, а с JSON-ом всё ок.
wvxvw 27.03.2014 15:07 # 0
Как бы не извращались в написании пулл-парсеров, они все равно будут говном, т.как нужно прочитать и распрарсить все без исключения данные для того, чтобы добраться до нужных данных.
> выкиньте остальные
камень же остынет! Потом разогревать снова!!!
BSON - только чуть-чуть лучше, но, опять же написан писателями, а не читателями, которые не удосужились даже прочитать, что остальные сделали. Но удача сопутствует смелым. А смелости, как правило, больше у людей без опыта :)
С JSON все ОК пока нужно решать задачи уровня крестиков-ноликов, как только задачи становятся сложнее, он вообще не пригоден. В качестве универсального формата данных - даже рассматривать бессмысленно.
roman-kashitsyn 27.03.2014 15:11 # +2
универсальных форматов данных никогда не было и не будет. Как и универсальных языков программирования. Как и универсальных баз данных. Как и универсальных моделей.
wvxvw 27.03.2014 15:39 # 0
Нам то всего-то нужна универсальность на столько, на сколько структур мы можем представить. А если мы можем их представить, то почему мы их не можем... представить?
roman-kashitsyn 27.03.2014 15:54 # +2
Возможности представить структуру недостаточно. Мне сложно придумать структуру, которую невозможно так или иначе представить в json или xml.
Важны качества самого представления - насколько оно компактное, насколько его легко понимать без специальных инструментов, насколько просто написать парсер и вспомогательные инструменты, десятки противоречивых критериев. В зависимости от конкретной технической потребности оптимальными будут совершенно разные решения.
wvxvw 27.03.2014 16:46 # 0
Даже из теплолампового архаичного программирования: нельзя представить связные списки, множества.
Из чего-то более нового, но не такого сложного: н-мерные латтисы. А как на счет геометрических фигур, а в 3+мерном пространстве?
Ситуация с современными форматами данных похожа не ситуацию, когда все люди - деревья выстроенные вдоль экватора, и таким образом не различающие лево / право и север / юг. Просто большинство довольствуется тем, что есть, даже не задумываясь о том, что то, что есть абсолютно не соответствует тому, что может быть.
roman-kashitsyn 27.03.2014 16:57 # 0
> множества
> как на счет геометрических фигур
Семантика данных не прикремлена к самим данным, но это и не нужно. Если вам этого хочется, то напишите убер-схему и передавайте её вместе с данными.
> Просто большинство довольствуется тем, что есть
Большинство не выдумывает себе проблем до их появления и не ищут несуществующий Святой Грааль Форматов Данных И Всего На Свете (тм), который в результате 42.
wvxvw 27.03.2014 17:03 # 0
Не представляет множество - как узнать нужно ли учитывать повторные элементы или нет?
А каким стандартом зарезервировано тег sphere, и где посмотреть все остальные зарезервированые, а как быть с S# (3+мерными сферами? тагов тоже бесконечное количество зарегистрировали? Как прочитать такой стандарт дальше буквы S?)
roman-kashitsyn 27.03.2014 17:15 # 0
какое направление, акститесь, все односвязные списки одинаковой длины изоморфны. Бывают двусвязные, но не суть
> как узнать нужно ли учитывать повторные элементы или нет?
Очевидно, при чтении создавать множество и складывать туда элементы. А вот как узнать, что байты стрима не побились?
> А каким стандартом зарезервировано тег sphere, и где посмотреть все остальные
в урле xml-схемы в начале документа
> как быть с S# (3+мерными сферами?
добавить атрибут размерности, вложить координаты, в которых сфера существует.
Кстати, на досуге подумайте, насколько хорош ваш уберформат для передачи потокового видео на другой конец планеты.
wvxvw 27.03.2014 17:39 # 0
А как узнать, что это то, что нужно делать? Я из формата этого не вижу. И ни однин человек без телепатических способностей этого не увидит.
> какое направление, акститесь,
Список - частный случай направленного графа (лоза), но направление у него никуда не пропало. Из вышеприведенной записи не понятно что с этой херней делать, опять же, если компьютер не телепат.
> добавить атрибут размерности, вложить координаты...
Где, в каком документе это описано? Кто об этом узнает не будучи телепатом?
И да, когда-то, много лет назад я работал в конторе которая вещала видео из бразильского казино в Европу :) Флешевый формат тогда создателям организации показался ненадежным, и они переписали обертку ФЛВ, мегаудобно подсибя. Я потом это реализовывал в клиенте этого... игрового сайта. И скажу вам откровенно, написав реализацию ФЛВ и Ф4В - там нет абсолютно ничего сложно, более того, эти форматы еще проще даже JSONа.
Придумать что-то такое - не то что выдающихся инжинерных способностей не нужно, вообще никаких способностей не нужно.
roman-kashitsyn 27.03.2014 19:50 # 0
так они и должны быть проще жсона, я на это и намекал - нахрена семантика и валидация там, где важна скорость, простота и компактность?
wvxvw 27.03.2014 19:59 # 0
Например, есть жизненная необходимость научиться нормально представлять изменения в СКВ, коммерческую информацию предприятия, музыкальные предпочтения брачующихся и желающихся забрачиться, влияние взаимного расположения аминокислот на эффективность лекарственных препаратов и т.д. И простота форматов типа JSON / XML тут выходит боком, потому что приводит к самопальным несовместимым, противоречивым, требующим специфического знания реализациям.
Одна из причин, по которым провалилась идея Веб3.0 - то что они выбрали в качестве универсальног формата ХМЛ, который просто не в состоянии справится с возложеной на него миссией.
wvxvw 27.03.2014 17:13 # 0
Это то, что делает "бывших", куда бы они не иммигрировали, крайне правыми реакционерами-фундаменталистами.
roman-kashitsyn 27.03.2014 20:01 # +1
> очень типично для граждан бывшего совка
>> А мне эти транзакции вообще не нужны. (c) http://govnokod.ru/15505#comment221945
.
wvxvw 27.03.2014 20:05 # 0
guest 27.03.2014 15:25 # −15
Не, ну понятно, что для гигабайтов данных лучше юзать базу данных. На размерах до пары мегабайтов (пока все помещается в память) он работает - а это распространенный юз кейс.
wvxvw 27.03.2014 15:41 # 0
guest 27.03.2014 20:08 # −15
wvxvw 27.03.2014 20:39 # 0
guest 27.03.2014 23:07 # −14
wvxvw 28.03.2014 01:37 # 0
Книжку написаную естесственным языком можно читать потоком не зависимо от того одна в ней страница, или стотысяч. ХМЛ нельзя читать потоком не важно, один таг из четырех символов или стотерабайтный файл.
guest 28.03.2014 15:40 # −14
А почему xml нельзя читать потоком? Ты с random seek случайно не путаешь?
Dummy00001 25.03.2014 17:19 # 0
учитывая что SBCL это даже не JIT, это что-то о моще Lisp'а все таки говорит.
ЗЫ колонка расхода памяти как всегда "радует".
roman-kashitsyn 25.03.2014 19:20 # 0
разумеется, SBCL это даже НАТИВ (не всё так просто, но, во всяком случае, не исполнение байткода)
Dummy00001 25.03.2014 19:58 # +1
Подобная же фигня и с Erlang'ом. Он как бы официально интертрепатор, но многие случаи настолько соптимизированы, что интертрепативности и не видно.
wvxvw 25.03.2014 10:07 # +1
roman-kashitsyn 25.03.2014 10:30 # 0
Типизированная вьюшка колонки - вполне приемлимое решение. Только раз уж сам результат - Iterable, можно и вьюшку было сделать Iterable.
wvxvw 25.03.2014 10:39 # 0
roman-kashitsyn 25.03.2014 10:43 # +3
wvxvw 25.03.2014 10:55 # +1
Stertor 25.03.2014 11:11 # +1
guest 25.03.2014 17:26 # −15
Yuuri 25.03.2014 20:24 # +1
someone 25.03.2014 12:06 # −1
absolut 25.03.2014 12:17 # +6
например, к boolean
wvxvw 25.03.2014 17:07 # −1
Интуитивно, нужно приводить к общему самому широкому типу, но типы Лонг и Инт не ковариантны по-настоящему и не контраварианты. Поэтому "точного правильного" ответа в этой ситуации нет, если следовать хаскелеподобному выведению типов (в Яве оно такое же, но инструменты отличаются). Нужна другая парадигма, которая лучше описывает поведение програм.
roman-kashitsyn 25.03.2014 17:23 # +3
На самом деле весь этот типобаттхёрт мне совершенно непонятен: в реальности проблемы с "ужасной" системой типов и "выразительностью" соотносятся со сложностями предметных областей, инфраструктуры, производительности и документации примерно как блоха на соседском коте и наблюдаемый участок вселенной.
wvxvw 25.03.2014 17:30 # −1
roman-kashitsyn 25.03.2014 17:55 # +3
Система типов в хаскеле почти никак не связана с жабьей, отличия колоссальные.
Ну из собственной практики проектирования библиотечного кода хочется собрать вместе и сжечь напалмом всех, кто считает, что сравнение значений разных типов и автоматическое приведение (даже типов с одинаковыми границами!) является чем-то хорошим.
Если кто-то считает, что неявно проверять в рантайме границы конвертируемости и кидать рантаймовые ошибки в случае косяков в системном коде - это хорошая идея, то не пойти ли бы ему в жопу с такими идеями.
wvxvw 25.03.2014 18:04 # −1
Где система типов построена на тех же основаниях, но с принципиальными различиями: например в Эйфеле. Там методы могут быть коварианты в типах аргументов.
Где система в корне другая:
- нетипизированые языки, Форт, ПЛ и т.п.
- языки, где под "типом" подразумевается что-то совсем другое: J, Пролог, Эрланг, Лисп.
Yuuri 25.03.2014 18:22 # +4
Статическая, да. А у лиспа, по такой логике, типизация такая же, как у питона, синтаксис такой же, как у XML, а мощность такая же, как у брейнфака.
wvxvw 25.03.2014 18:37 # −2
Мощность такая же, как и у брейнфака, тут не поспоришь.
roman-kashitsyn 25.03.2014 19:00 # 0
А можно поподробнее?
wvxvw 25.03.2014 19:04 # 0
roman-kashitsyn 25.03.2014 19:11 # +1
в хмле тоже можно в каком-нибудь сериализаторе объекты семантически зациклить, xml-то от этого бесконечно большим не станет.
wvxvw 25.03.2014 19:12 # +1
Yuuri 25.03.2014 19:23 # +3
guest 25.03.2014 19:33 # −16
wvxvw 25.03.2014 19:39 # 0
guest 25.03.2014 19:41 # −16
wvxvw 25.03.2014 19:59 # +1
Yuuri 25.03.2014 19:16 # +1
Ну если брать только свойства, общие для хачкеля и жабы, а остальное игнорировать (а ведь при нормальных условиях в первом можно тоже много чего наопределять, чего нельзя во второй), то и лисповая становится питоновской!
wvxvw 25.03.2014 19:31 # −1
В Питоне типизация такая же как в Яве / Хаскеле, с поблажками (когда система не в состоянии выразить тип, она его заменяет специальным типом "любой"). В Лиспе есть аналогичный механизм, но аналогичный механизм есть и в Яве и в Хаскеле. В Лиспе система качественно другая. В ней можно выразить типы которые нельзя выразить в Яве / Хаскеле / Питоне, и возможно, нельзя выразить что-то из Явы / Хаскеля / Питона.
Yuuri 25.03.2014 19:41 # 0
Ну так покажите. Это вы заявили, что он там есть, а бремя доказательства лежит на утверждающем. В противном случае придётся с сожалением констатировать, что ваши разглагольствования про типы – бред.
wvxvw 25.03.2014 20:04 # 0
Тут описана принципиальная разница между реализациями. Если у вас есть вопросы по реализации эквивалентного механизма в одном из языков - попробуйте сами его придумать, а лучше сначала в Гугл, там уже, как правило, есть.
Yuuri 25.03.2014 20:21 # +2
guest 25.03.2014 17:27 # −15
wvxvw 25.03.2014 17:30 # 0
guest 25.03.2014 17:40 # −15
А это что?
>А попытки упростить, типа как это сделано в Яве в итоге приводят к когнитивному диссонансу.
А в чем упрощение? Жава и другие языки проверяют на идентичность обьектов, если больше ничего не знают.
Yuuri 25.03.2014 19:20 # 0
Ковариантность имеет смысл только для полиморфных типов. Long и Int к ним не относятся, так что они действительно ни те, ни другие, но я не понимаю, при чём тут вообще -вариантность.
guest 25.03.2014 21:02 # −15
bormand 25.03.2014 21:08 # −14
Lure Of Chaos 25.03.2014 22:01 # +1
всего несколько простых правил объясняют все:
1. расширение (примитивных) типов делается автоматически неявно
2. сужение типов требует явного каста, здесь легко отстрелить себе обе ноги с хуем заодно
3. арифметические операции неявно расширяют типы до "дефолтных" int и double, поэтому перемножить байты и присвоить байтовой переменной без явного каста не выйдет
4. объекты, в частности, обертки Int и Long, по equals сравниваются сначала по типу,
поэтому
> И даже Integer.valueOf(42).equals(Long.valueOf( 42)) вернет false.
5. и самое отвратительное: автоупаковка и распаковка типов, там вообще много интересных нюансов, которые любят спрашивать на экзах и собеседованиях
bormand 25.03.2014 22:09 # −15
Вот если бы не она - все остальное было бы хоть и неудобным, но по крайней мере мало-мальски логичным.
А в плюсике вообще таятся стрингбилдер и неявный toString() ;)
absolut 25.03.2014 22:47 # 0
bormand 25.03.2014 23:09 # −15
Он самый. Декомпильни , если интересно ;)
absolut 26.03.2014 05:30 # +2
bormand 26.03.2014 07:02 # −15
Там тоже есть стрингбилдер, только он называется не так ;)
Lure Of Chaos 25.03.2014 23:13 # 0
например, как реализован свитч по строкам :)
bormand 25.03.2014 23:14 # −15
О да, это эпично...
guest 26.03.2014 02:05 # −15
bormand 26.03.2014 05:18 # −15
Как отдельный анонимный класс с захардкоженным хешмапом, емнип.
guest 26.03.2014 15:22 # −15
bormand 26.03.2014 17:28 # −15
Какая в жопу разница, какая там используется хеш-функция? Это же никак не влияет на работу хешмапа, кроме производительности.
P.S. Или ты подумал, что захардкожено = сохранено прям low-level представление этой мапы? Не, там че-то совсем банальное типа Map<String, Integer> заполняемого put'ами в статическом конструкторе.
bormand 26.03.2014 17:39 # −15
Вот блин, то ли я лох и обосрался, то ли поменялся генератор кода в жабе... Может мне показалось, что там лишний класс генерился...
Сейчас скомпилил свич по строкам - действительно получился switch (str.hashCode()) и добивание коллизий ифами. hashCode() для String'а, емнип, в стандарте жабы прописан, и не может быть рандомизированным... http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode%28%29
3.14159265 24.06.2014 15:03 # 0
Свитч по строкам не нужен. Для больших размеров есть мапа.
Для маленьких - if.
guest 26.03.2014 21:14 # −14
Хешмеп-то захардкоженый.
http://www.benf.org/other/cfr/java7switchonstring.html
>hashCode() для String'а, емнип, в стандарте жабы прописан, и не может быть рандомизированным...
Как тогда атаку на хеш-коллизии лечили?
bormand 26.03.2014 21:31 # −15
А ее лечили?
guest 26.03.2014 22:39 # −15
guest 26.03.2014 21:33 # −14
bormand 26.03.2014 22:08 # −15
Ну могу предположить (не гуглил), что ее можно вылечить на уровне самого хешмапа, не трогая hashCode в 100500 классах. Для этого, походу, достаточно ксорить результат hashCode со случайным числом, сгенеренным при создании мапа.
На switch по строкам этот фикс не повлияет, т.к. там один хрен отдельная реализация. И ключи фиксированные и доверенные (т.к. вбиты в исходнике).
guest 26.03.2014 22:39 # −14
Это не убирает проблему подбора строк с равными хешкодами.
guest 25.03.2014 22:13 # −15
Yuuri 25.03.2014 20:28 # +1
Если значения и типы только те, которые можно хранить на компьютере, то есть ;-) Но это ничего не даёт.
P.S. Но на самом деле я подозреваю, что термин «биекция» всего лишь был употреблён не в тему – примерно как «ковариантность» рядом.
wvxvw 25.03.2014 20:40 # 0
Оооо, раскажите пож. как не в тему? А то с таким апломбом херню всякую пишут, ну ка, знающий человек, просветите.
Откуда возмется биекция, когда у одного значения есть 1 и больше типов?
Как обычно херня в защиту любимого языка, ничего нового.
Yuuri 25.03.2014 20:50 # +1
Да, но я-то говорил про конкретные комповые, такие как вышеприведённые Int и Long, а в абстрактной теории типов свои тонкости, конечно.
> Откуда возмется биекция
Ну, тут всё просто – программ на компьютере счётное множество → представимых на компьютере значений и типов счётное множество → все счётные множества биективны по определению.
> когда у одного значения есть 1 и больше типов?
Для каждого натурального числа есть ваще дофига дробей, где она числитель, однако ж множества натуральных и рациональных чисел биективны ;-)
> А то с таким апломбом херню всякую пишут
Вот да, только в зеркало глянуть не забудьте.
Yuuri 25.03.2014 20:57 # +1
Скорее – в защиту любимой науки, потому что нехрен выдумывать свои и подменять чужие понятия, это контрпродуктивно.
Ну и почему -вариантность не в тему, я уже в другом посте сказал. Так и в ситуации «для каждого значения может быть более одного типа, которому он принадлежит» (хоть это и совсем другая песня, и опять-таки зависит от аксиоматики, и к ЯП это имеет крааайне посредственное отношение) можно было так и сказать, а не приплетать математически некорректное (см. выше) здесь понятие, чтобы выглядело умнее.
bormand 25.03.2014 20:58 # −14
> представимых на компьютере значений
Да ну? Какие же они счетные? Они же конечные.
Yuuri 25.03.2014 21:03 # 0
bormand 25.03.2014 21:05 # −15
Ну у каждого компа своя. А на самом деле комп даже не является машиной тьюринга, т.к. у него лента не бесконечна ;(
P.S. Ну ок, если считать компом машину тьюринга - то счетное.
Lure Of Chaos 25.03.2014 22:05 # 0
любой комп способен не более, чем машина тюринга, сколько бы там лент или регистров не было (внешние устройства не учитываем)
все дискретные пространства счетны
wvxvw 25.03.2014 21:41 # 0
Lure Of Chaos 25.03.2014 22:09 # 0
wvxvw 26.03.2014 01:13 # 0
Lure Of Chaos 26.03.2014 06:21 # 0
если соотношение 1:1 - то это биекция
N:1 - сюръекция
1:N - инъекция, как раз
> отношение в Z2 {(0, 1), (0, 0), (1, 1)}
Lure Of Chaos 25.03.2014 22:13 # 0
точнее, расширяй. либо пиши свои правила равенства, но ассоциативность необходимо сохранять
guest 25.03.2014 17:21 # −15
KonardinoHuyardino 25.03.2014 11:47 # −16
guest 25.03.2014 17:22 # −15
Lure Of Chaos 25.03.2014 18:36 # +1
bormand 25.03.2014 19:05 # −15
wvxvw 25.03.2014 19:13 # 0
guest 01.04.2017 00:27 # −15
Пептиды — это добавки, состоящие из частиц аминокислот, они связаны путем амидных связей. проще — это «умные» белки, играющие самую важную роль в организме.