Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Чи є якісь наслідки для використання відповідності над необробленими значеннями


Чи є якісь наслідки для використання відповідності над необробленими значеннями


Порівнюючи наслідки для використання відповідності та сировинних значень, кілька факторів вступають у гру, залежно від контексту, в якому вони використовуються. Ось детальний розбивка:

в загальному програмуванні

У програмуванні збігачі часто використовуються в тестувальних рамках, таких як Mockito або Googletest, щоб зробити твердження або методи заглушки. Використовуючи відповідники, всі аргументи повинні бути надані матчами, щоб уникнути помилок, таких як `invaliduseofmatchersexception` в Mockito [5] [8]. Ця вимога може призвести до дещо більшої кількості витрат через додаткові дзвінки функцій порівняно з використанням необроблених значень безпосередньо.

Однак різниця в ефективності, як правило, незначна, якщо ви не маєте справу з дуже великою кількістю дзвінків або в критичних для ефективності розділів коду. У більшості випадків читабельність та гнучкість, що надаються відповідальниками, переважають будь -які незначні витрати на ефективність.

У пошуках та відповідних операціях

У сценаріях, що стосуються операцій пошуку, наприклад, в таблицях "Матч" Руста проти таблиць пошуку, продуктивність може змінюватися залежно від декількох факторів:

- Прогнозування гілки: `match` вирази можуть бути швидшими, якщо прогнозування діє добре, тобто процесор може точно передбачити, яка гілка буде взята далі. Однак, якщо схема є випадковою, таблиця пошуку може бути швидшою, оскільки вона дозволяє уникнути збоїв прогнозування [3] [6].

- Індикатор та кеш: Таблиці пошуку можуть бути швидшими, коли це правильно закріпили та кешуються, особливо для великих наборів даних. Однак `match` вирази, як правило, генерують менші інструкції і можуть бути швидшими, якщо вкладання не спричиняє мікроархітектурну небезпеку [3] [6].

у регулярних виразах та відповідності шаблону

При використанні регулярних виразів (Regex) для відповідності шаблону на продуктивність може бути суттєво впливати на складність регексу та розмір даних, що обробляються. Хоча Regex є потужним і гнучким, надмірно складні візерунки можуть призвести до повільнішої продуктивності завдяки зворотному відстеженню та інших накладних витрат [9].

На відміну від цього, використання необроблених значень або більш простих механізмів відповідності може бути швидшим для прямих порівнянь, але не вистачає гнучкості та виразності регексу.

в системах спостереження та даних

У системах, що стосуються даних високої кардинальності (наприклад, журнали, показники, сліди), використовуючи відповідники або складні запити, можуть призвести до проблем з продуктивністю. Висока кардинальність відноситься до великої кількості унікальних значень, які можуть переповнити системи, розроблені для ефективного зберігання та пошуку даних [1]. У таких випадках оптимізація запитів або використання більш ефективних структур даних може пом'якшити вплив продуктивності.

Підсумовуючи це, хоча відповідники та складні механізми відповідності пропонують гнучкість та читабельність, вони можуть ввести незначні накладні витрати порівняно з використанням необроблених значень безпосередньо. Однак ці накладні витрати, як правило, незначні, якщо в розділах коду критично, або при роботі з дуже великими наборами даних. Вибір між відповідями та необробленими значеннями повинен базуватися на конкретних вимогах програми, включаючи читабельність, ремонтопридатність та потреби в ефективності.

Цитати:
[1] https://last9.io/blog/high-vs-low-cardinality/
[2.
[3] https://users.rust-lang.org/t/why-is-a-lookup-table-faster-than-a-match-expression/24233
[4] https://docs.splunk.com/documentation/scs/current/searchreference/conditionalfunctions
[5] https://zsoltfabok.com/blog/2010/08/jmock-versus-mockito/
[6] https://kevinlynagh.com/notes/match-vs-lookup/
[7] https://docs.vespa.ai/en/reference/schema-reference.html
[8] https://www.digitalocean.com/community/tutorials/mockitoargument-matchers-any-eq
[9] https://newrelic.com/blog/how-to-relic/extracting-log-data-with-regex
[10] http://google.github.io/googletest/reference/matchers.html