Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.49.182] |
|
Страницы: (37) « Первая ... 3 4 [5] 6 7 ... 36 37 ( Перейти к последнему сообщению ) |
Сообщ.
#61
,
|
|
|
Цитата Qraizer @ Я не представляю, почему классным специалистам, разбирающимся в ОС, соответствующих алгоритмах и пр., может захотеться в драйвере файловой системы, имея там одно-, двух-, и трёхмерные массивы указателей на файловые ноды, все их объявлять одного типа, и постоянно кастить. Я тоже не представляю. Возможно, так сложилось и никто просто не парится над этим. Возможно, это им зачем-то понадобилось, возможно эта часть кода была вообще сгенерирована и так было проще. Я же не знаю, о каком коде речь. Ты так говоришь, как будто на С++ говнокода меньше создают. Цитата Знаешь, я не знаю даже Cшников, которые хотя бы не поморщились, если б это увидели. Тем более не ясно, зачем ты это приводишь. Если сишникам не нравится твой пример, то непонятно, зачем ты его приводишь в качестве аргумента против языка? Цитата Если бы этот Cшный код писал плюсник... А может быть плюсник бы еще к этому говнокоду накрутил многоэтажных шаблонов, с кучей специализаций, чтоб не только отладчик сломать, но и сделать невменяемыми сообщения об ошибках? Скажешь, не видел такого ? Если рассматриваешь говнокод одного языка, то рассматривай говнокод и другого. А вот еще посмотри, как гугл рекомендует использовать С++, посмотри на код хромиума и пр. Не думаю, что тебе понравится. Но это такое же следствие неоправданной чрезмерной сложности С++, как и полный отказ от С++. Добавлено Цитата UncleBob @ Ну просто когда предлагают сишную конструкцию switch заменить на что-то не сишное, это странно, нет? Я не знаю, о чем ты. Но хэш-таблица - это структура данных такая. |
Сообщ.
#62
,
|
|
|
Сообщ.
#63
,
|
|
|
Что же такого плохого в динамическом субтипировании? Опять вспомнишь про переопределение методов? И вообще, что предлагается взамен? switch чаще всего заменяется на иерархию с виртуальными функциями. Аналогичная поделка на сишечке будет ужасна. Цитата D_KEY @ На С++ он не пишет. Как он пишет на сях, ты можешь посмотреть, например, в сырцах git'а. А ты уверен, что там его код ещё остался? |
Сообщ.
#64
,
|
|
|
Цитата D_KEY @ Но хэш-таблица - это структура данных такая. Я про ее имплементацию. Она ложится на плечи С программиста? |
Сообщ.
#65
,
|
|
|
Цитата D_KEY @ А вот еще посмотри, как гугл рекомендует использовать С++ Да дебилы они. |
Сообщ.
#66
,
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ А вот еще посмотри, как гугл рекомендует использовать С++ Да дебилы они. Они просто хотят иметь возможность развивать проекты без длительного поиска/обучения людей, знающих кучу нюансов С++, которые для решения задачи, в общем-то, не нужны(если несколько подрезать язык). Это практично. А есть, например, Facebook с Александреску, где С++ юзается во всей красе, насколько я понимаю. Это мне нравится больше, но и гугл я не осуждаю... Тем более, что не только гугл вводит подобные ограничения. Добавлено Цитата UncleBob @ Я про ее имплементацию. Она ложится на плечи С программиста? Да. Ты не поверишь, но и связный список нужно делать руками(как и поступают большинство сишных открытых проектов). Библиотеки есть(glib, например) или просто набор макросов из sys/queue.h, но многие проекты используют свои велосипеды. Но это вполне может быт оправдано, поскольку знание специфики проекта позволяет сделать более оптимальную реализацию, без изучения сложных правил специализации поведения в обобщенных библиотеках. Тут немного другая философия. И да, в С++ до нового стандарта тоже не было хэш-таблиц в стандартной библиотеке. |
Сообщ.
#67
,
|
|
|
Цитата D_KEY @ Да. Ты не поверишь, но и связный список нужно делать руками(как и поступают большинство сишных открытых проектов). Библиотеки есть(glib, например) или просто набор макросов из sys/queue.h, но многие проекты используют свои велосипеды. Но это вполне может быт оправдано, поскольку знание специфики проекта позволяет сделать более оптимальную реализацию, без изучения сложных правил специализации поведения в обобщенных библиотеках. Тут немного другая философия. И да, в С++ до нового стандарта тоже не было хэш-таблиц в стандартной библиотеке. То есть мы садимся и торжественно пишем, пишем, пишем... И на выходе получаем приложение и... какое-то подобие STL? зато все на С. |
Сообщ.
#68
,
|
|
|
Цитата UncleBob @ То есть мы садимся и торжественно пишем, пишем, пишем... И на выходе получаем приложение и... какое-то подобие STL? зато все на С. Если тебе нужно какое-то подобие STL, ты берешь готовую библиотеку(в том числе просто gnu libc, там много что есть, хэши тоже вроде были). А так у тебя будут зависимые от задачи структуры данных. Такие, например. Добавлено А вот там и хэши |
Сообщ.
#69
,
|
|
|
А вот в nginx
Скрытый текст /* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_HASH_H_INCLUDED_ #define _NGX_HASH_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef struct { void *value; u_short len; u_char name[1]; } ngx_hash_elt_t; typedef struct { ngx_hash_elt_t **buckets; ngx_uint_t size; } ngx_hash_t; typedef struct { ngx_hash_t hash; void *value; } ngx_hash_wildcard_t; typedef struct { ngx_str_t key; ngx_uint_t key_hash; void *value; } ngx_hash_key_t; typedef ngx_uint_t (*ngx_hash_key_pt) (u_char *data, size_t len); typedef struct { ngx_hash_t hash; ngx_hash_wildcard_t *wc_head; ngx_hash_wildcard_t *wc_tail; } ngx_hash_combined_t; typedef struct { ngx_hash_t *hash; ngx_hash_key_pt key; ngx_uint_t max_size; ngx_uint_t bucket_size; char *name; ngx_pool_t *pool; ngx_pool_t *temp_pool; } ngx_hash_init_t; #define NGX_HASH_SMALL 1 #define NGX_HASH_LARGE 2 #define NGX_HASH_LARGE_ASIZE 16384 #define NGX_HASH_LARGE_HSIZE 10007 #define NGX_HASH_WILDCARD_KEY 1 #define NGX_HASH_READONLY_KEY 2 typedef struct { ngx_uint_t hsize; ngx_pool_t *pool; ngx_pool_t *temp_pool; ngx_array_t keys; ngx_array_t *keys_hash; ngx_array_t dns_wc_head; ngx_array_t *dns_wc_head_hash; ngx_array_t dns_wc_tail; ngx_array_t *dns_wc_tail_hash; } ngx_hash_keys_arrays_t; typedef struct { ngx_uint_t hash; ngx_str_t key; ngx_str_t value; u_char *lowcase_key; } ngx_table_elt_t; void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len); void *ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len); void *ngx_hash_find_wc_tail(ngx_hash_wildcard_t *hwc, u_char *name, size_t len); void *ngx_hash_find_combined(ngx_hash_combined_t *hash, ngx_uint_t key, u_char *name, size_t len); ngx_int_t ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names, ngx_uint_t nelts); ngx_int_t ngx_hash_wildcard_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names, ngx_uint_t nelts); #define ngx_hash(key, c) ((ngx_uint_t) key * 31 + c) ngx_uint_t ngx_hash_key(u_char *data, size_t len); ngx_uint_t ngx_hash_key_lc(u_char *data, size_t len); ngx_uint_t ngx_hash_strlow(u_char *dst, u_char *src, size_t n); ngx_int_t ngx_hash_keys_array_init(ngx_hash_keys_arrays_t *ha, ngx_uint_t type); ngx_int_t ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key, void *value, ngx_uint_t flags); #endif /* _NGX_HASH_H_INCLUDED_ */ |
Сообщ.
#70
,
|
|
|
Теперь я спокоен за С разработчиков
|
Сообщ.
#71
,
|
|
|
Ну у меня тоже своя есть thread-safe хэш таблица. Велосипед короче.
|
Сообщ.
#72
,
|
|
|
Цитата UncleBob @ Теперь я спокоен за С разработчиков Ну вот смотри, в nginx-реализации есть пул для выделения памяти(что для nginx достаточно важно, ибо благодаря разумной системы пулов памяти он кушает очень мало), еще какие-то wildcard'ы и пр. Начнешь это делать с использованием std::unordered_map, сильно меньше ли кода получишь? А насколько код будет менее запутанным? И самое главное - много ли тебе unordered_map даст? |
Сообщ.
#73
,
|
|
|
D_KEY, да я чо, спорю?
|
Сообщ.
#74
,
|
|
|
Цитата D_KEY @ Они просто хотят иметь возможность развивать проекты без длительного поиска/обучения людей, знающих кучу нюансов С++, которые для решения задачи, в общем-то, не нужны Ты это придумал и пруфа не покажешь. |
Сообщ.
#75
,
|
|
|
Цитата MyNameIsIgor @ Ты это придумал и пруфа не покажешь. Хм. Ну да, "дебилы" - лучшее объяснение |