Обновить
0
@MacInread⁠-⁠only

Пользователь

5
Подписчики
Отправить сообщение
Так мы о in-memory или о НЕ реляционных дисковых? Если говорить о дисковых, то надо сравнивать дисковые key-value с дисковыми СУБД. Если вы делаете простой запрос, такой же, как для ke-value, т.е. "дай мне значение из колонки Х где колонка У = N", это такой примитив, про «парсинг» которого смешно говорить. Самые большие затраты — на ввод-вывод, а не парсинг чего-либо в памяти.
Индексы перестроить? В вашем key-value нет индекса? Ваш key-value не пишет на диск?
Эмулировать с помощью СУБД все это обычно можно, но обычно весьма дорогой ценой.

Отчего же? Key-value — очень запросто реализуется, файлы — тоже.
Для многих задач NoSQL решения подходят лучше реляционных БД.

Например?
Это костыли а не подход.

Это разный подход, а не костыль. Разные конструкции — разные подходы. Объявление процедуры — одно, тип данных — совсем другое. Вас же не удивляет, что класс объявляется при помощи class {, а процедура — при помощи void abc () {?

если бы в switch не было возможности перехода из одного case в следующий, то чтобы съемулировать такую возможность пришлось бы использовать goto или разделение на функции

Это лишь один пример «искусственного ограничения».

Шаблоны в pascal ещё 25 лет назад эмулировались с помощью include.

Эмулировать через задницу можно что угодно, я про встроенную поддержку.

Ничто не мешает писать структурировано и читабельно на языке в котором много плюшек.

Не мешает. Я просто говорю, что блоки var — не стоящая внимания «проблема».

Не хотите — ну не пользуйтесь всеми плюшками. Но не говорите за всех.

Так я не говорю за всех, чего это вы взъелись? Это вы начали беседу про «оно того стоит?». Я лишь ответил, что в этом языке, по моему мнению, выбран разумный баланс — пожертовали редко используемыми мелочами. Код структурирован и легче читается — значит, его легче поддерживать.

Только читая такие статьи, начинаешь по-настоящему ценить те инструменты, которые имеешь. У нас используется Eurekalog (для borlandовских builder'а и delphi), который генерирует полные репорты для всех потоков + дампы + стеки вызовов для всех потоков с полной информацией — адрес, модуль, класс, номер строки примерно так:

Call Stack Information:

|Address |Module |Unit |Class |Procedure/Method |Line |

|*Exception Thread: ID=8820; Priority=0; Class=; [Main] |
|----------------------------------------------------------------------|
|004D316F|Project8.exe|Unit9.pas |TForm9|Button1Click |33[3]|
|76BCF6A5|user32.dll | | |GetWindowLongW | |


|76BD005B|user32.dll | | |DispatchMessageW | |
|76BD0051|user32.dll | | |DispatchMessageW | |
|004D499D|Project8.exe|Project8.dpr| | |17[4]|
|7691490F|kernel32.dll| | |BaseThreadInitThunk | |
— Сразу предупреждаю — никаких языкосрачей не предполагается.
Шампанское этому столику.
Это называется — отсутствие общего подхода. Если бы язык был как-то стандартизирован, такой фигни бы не было. А так — язык одного актёра разработчика.

Почему же? В случае класса нам нужна подсказка компилятору о типе данных, а в случае функции — нет. Это разные области: в одном случае — тип данных, в другом — объявление процедуры. Поэтому и синтаксический подход различен. Это только человеку кажется «мы же и там и там на что-то далее по тексту ссылаемся». Вот если бы подсказка для процедурного типа была бы реализована иначе, чем для типа «класс», тогда вы были бы правы. Но такой подсказки нет вовсе, поэтому про неоднородность говорить не приходится.

Вам ничто не мешает писать так и в C++ и игнорировать удобство RAII. Но это же не значит что надо превозносить такое искусственное ограничение языка.

Не мешает. Я просто говорю, что это не проблема. Вообще. Искусственное ограничение? Тогда любое синтаксическое правило — искусственное ограничение. Можно точно так же сказать, например, что перечисление включаемых модулей (или include'ы заголовков в C/C++) — тоже искусственное ограничение. Можно сказать, что, например, необходимость применения break'а в switch'е — искусственное ограничение, вызванное реализацией таблицы переходов. Или необходимость в цикле с условием всегда использовать while.

ограничения отладчика конечно важны, но тоже не являются непреодолимым барьером.

Не в ограничении отладчика дело, просто сама конструкция нечитаема. Мне, например, не нравится фактически самомодифицирующийся код.

В случае же delphi не получится сменить ide или компилятор, поскольку, увы, альтернатив нет.

Во-первых, тот же lazarus.
Во-вторых… а и не надо. За 6 лет, что я пишу на delphi по работе, единственное ограничение, которое изредка досаждает — отсутствие полноценных шаблонов. И то, частично это реализовано.
Никто не спорит — те же плюсы намного мощнее, универсальнее и пр. Я лишь говорю, что готов поступиться 1% функционала за ту же быструю компиляцию и гарантированную структурированность (=лучшую читаемость) программы.
А, да, насчет академичности: в оригинальном Паскале не было ссылок и процедурных типов.
Это ужасающе в плане придумывания костылей.

То же, что и с Си — мол, много способов «выстрелить в ногу». Хочешь — стреляешь, не хочешь — делаешь нормально.

Почему forward-определения указателя недостаточно для класса?
Потому что класс и так передаётся только как ссылка.

Этот обрубок — это и есть forward, просто по-другому описан, в отличие от процедур.

Но функция тоже ссылочный тип. А что с функциями?

Ну вот и ответ, в принципе: с классами это было людям нужно — добавили способ forward описания. С функциями — не было нужно.

Да уже не осталось языков которые требуют такого отделения. Это всё анахронизмы, как и секция var.

И? Мне лично так нравится больше: читаемость лучше. С секцией var проблем не вижу: мне нравится, когда код структурирован. Тут — объявления, тут — код. Учитывая, что хорошим тоном является разбиение процедур, секция var так и так в поле видимости, плюс/минус. Если функция — простыня на 3 экрана, тогда, да, объявлять по месту лучше. Но это уже не особо хорошее оформление кода.

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

Да это не простая конструкция, это надуманная проблема, а не реальный код. Не представляю, чтобы кто-то вызывал цепочку таким образом — попробуй отладь потом такой код.
Согласен с одним из мнений тут, что эти 100+ (на данный момент) комментов исключительно из желания предстать «правильным». Легкая кармочка для тех, кому это важно.

Глупая пародия на «не мы такие, жизнь такая». Остальные просто «пытаются», мол, «предстать».
Самому не смешно?

Меня абсолютно не интересует «Любовь» среди местных обитателей, у мешая нет проблем с самооценкой.

У меня нет моральных предубеждений, я — мудак и скотина, но я это сделал. Deal with it.

Верим, верим. Тогда к чему эти сопли:
Обвинить и плюнуть в карму? Мда, значит сообщество хабры не далеко ушло от стада из соц.сетей, типа втентакликов и мейлрушечек.


И помоями я тут никого не обливал.

Ну да, ну да. «стадо» это нынче положительная характеристика.

Статья с простым, бесплатным и легким решением, которая может сэкономить кому-то время и нервы, когда перед ним поставят такую задачу.

И это замечательно, к этому никаких претензий. «За изобретение — 5, а по предмету — неуд». Люди возмущаются скрытой слежкой и тем, что это вас не возмущает. А не самим фактом решения задачи.
Если есть задача предотвратить воровство, а не поймать на горячем с непонятно какими целями (а-ля твоя рожа мне сегодня не нравится, а вот и повод уволить), то надо эту систему ввести явно.

Всем хорошо: работники — работают и при этом знают, что за ними смотрят. Хозяина предприятия не обворовывают. Совесть инженеров тоже чиста.
допустимость обработки указателей на тип до определения самого типа

Это нормально. Указатель приводится к чему угодно.

отделение интерфейсов от реализации

Это тоже замечательно — мне нравится такое разделение. Напротив, мешанина — нечитабельна.

Ну и стоит ли овчинка однопроходности выделки такой ценой?

Конечно. 99% случаев покрывается, а 1%м вроде синтетического примера выше можно поступиться.
втентакликов и мейлрушечек.

Характерный маркер: обычно люди относятся к соцсетям только как к дополнительному средству связи. И только особо одаренные намеренно искажают название и Несут Свет Правды в массы, обличая эти исчадия ада. Дельфин среди анчоусов?

В общем, среди таких «белых» как вы, я очень рад оказаться «черным» на этой вашей хабре.

Тоже интересно: сначала облить всех помоями, потом удивляться тому, что вас «не любят». Поразительная незамутненность сознания.
Страшного нет, просто проблема надуманная. В конце концов, можно typecast ами обойтись. Но (1)(2)(3) — «веселый» код, особенно в отладке.

Кстати, интересно, как эта проблема решена для классов:
type
  TAbc = class;
...
...
  TDef = class
  public
    function Xyz(): TAbc;
  end;
..
..
  TAbc = class
  ...
  ...
 end;
Сразу оговорюсь-могу ошибаться.

Простите, я не понимаю как может это может быть выгодно компании.

Потому что трафик растет. Если бы трафик оставался неизменным, головная компания потеряла бы 5% накрутки, но трафик растет и эти 5% отбиваются. Цена ниже — люди пользуются услугами больше. Субдилер может возиться с кучей сложных пакетов, покуда головная контора не тратится на штат и сосредоточена на техническом аспекте.

Условно представьте, что вы — оптовик, каждый день у вас затаривается чем-то 1000 клиентов, крупными партиями. Маржа 5%. К вам приходит человек и говорит — я обеспечу такой же оборот на мелких клиентах, но ты отдашь мне товар дешевле на 3%. Вам выгодно — количество проданного товара выросло ценой уступки. Посредник с этих 3% и живет.

Комания дилер же может поставить тарифы дешевле чем суб-дилер.

Тогда все будут пользоваться более дешевым тарифом. А так — есть сегментация, «доятся» все ценовые ниши.
Не понимаете.

Простой пример: в нашем городе вся городская телефонная сеть — кабели с системой колодцев, все АТС и пр. — принадлежит наследнику еще советской городской ТС. Однако, есть «провайдеры», услугой которых вы можете воспользоваться, просто набрав префикс. Связь идет по тем же каналам ГТС, но платите вы этому второму поставщику услуг связи, который расчитывается с АТС.

Аналогичная ситуация и с электросетями — у нас есть отдельно «генерирующие компании», а есть «РАО», сети то-есть.

Телефонная компания состоит из двух отделов — один занимается собственно эксплуатацией кабелей, другой — выбиванием денег. У ТС есть некоторая маржа, скажем, условно, 5%. В случае ТС она сама у себя покупает услуги связи за N тугриков, накручивает на них 5% и продает вам. А вторая компания покупает тот же трафик и накручивает на него 4%.
ТС это выгодно потому что происходит сегментирование рынка: она сама не может установить абонентам сильно разную цену, иначе все захотят получать связь подешевле. А тут все чисто — есть вторая компания, будто бы конкурент, который «сейчас накажет монополиста, смотрите, люди!!!!111!!». А по сути первый отдел ТС, который занимается техобеспечением, получает больший доход и 4% остаются альтернативному поставщику.
а в delphi если и соберется то может свалится при выполнении

Для интереса прогнал — нет, не упадет.

functionChain('1')('2')('3') — очень вырвиглазный код. Я понимаю, что пример синтетический, но если бы увидел в реальной жизни что-то подобное, с последовательным вызовом через указатели, то сказал бы, что код дурно пахнет.
Конечно. Но сам случай — не самый распространенный, мягко говоря.
что для анализа такого объема данных у него не хватит времени

И не надо. Эта ерунда делается не для того, чтобы за всеми 24/7 следить, а для того, чтобы смотреть за одним, подозрительно непродуктивным, например.

На деле часто случается так, что сотрудник сидит на avito — потому, что плагинует переехать поближе к работе; на youtube — потому, что занимается самообразованием;

И что, за это платят?

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность