- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
class socket_exception
{
public:
char *buf;
int ret;
socket_exception()
{
buf=new char[10000];
ret=RET_OK;
}
socket_exception(char *b, int r)
{
buf=new char[10000];
snprintf(buf,9999,"%s",b);
ret=r;
}
socket_exception(vsocket_exception &ex)
{
buf=new char[10000];
snprintf(buf, 9999, "%s", ex.buf);
ret=ex.ret;
}
const char * what (){return buf;}
int get_ret(){return ret;}
~socket_exception(){delete[] buf;}
};
roman-kashitsyn 20.06.2013 15:19 # +6
bormand 20.06.2013 15:23 # +1
roman-kashitsyn 20.06.2013 15:24 # 0
bormand 20.06.2013 15:26 # 0
Yuuri 20.06.2013 15:43 # +3
P.S. Что-то хачкель вспомнился... foreign import unsafe pizdec my_external_function, unsafePerformPizdec, {-# LANGUAGE NoImplicitPizdec #-}...
Xom94ok 20.06.2013 19:07 # +10
bormand 20.06.2013 15:22 # 0
Плохого дизайна?
P.S. socket_exception() создаст объект, у которого what() вернет 10кб мусора... Хорошо, если среди него попадется нолик.
roman-kashitsyn 20.06.2013 15:23 # 0
именно
А ещё упаси вас бог присвоить один эксепшен другому
bormand 20.06.2013 15:27 # +1
Да подумаешь - одна утечка и одно двойное удаление. Минус на минус дают плюс ;)
superhackkiller1997 20.06.2013 16:05 # −2
someone 20.06.2013 18:40 # −4
Нет, new зануляет. Это вам не malloc. :)
bormand 20.06.2013 18:43 # +2
А если еще немного потестить или почитать стандарт? :) Вон ниже есть тест, который показывает, что не зануляет.
someone 21.06.2013 07:44 # 0
Но тогда это вообще абзац. Везде в дизайне крестов чётко и последовательно прослеживается мысль, что аналог "конструктора" для примитивных типов - это инициализация по умолчанию, то есть зануление. Так делает std::vector. Да, я знаю, что примитивные объекты на стеке не зануляются. Но new-то, по логике, как раз должен выполнять инициализацию!
Это не подводные камни, это какие-то подводные скалы уже.
bormand 21.06.2013 09:05 # +3
guest 21.06.2013 14:10 # +2
Error E2243 1.cpp 6: Array allocated using 'new' may not have an initializer in function main()
bormand 21.06.2013 16:29 # +1
kostoprav 20.06.2013 19:49 # 0
Yuuri 21.06.2013 13:17 # 0
kostoprav 21.06.2013 23:31 # 0
LispGovno 20.06.2013 15:45 # +2
LispGovno 20.06.2013 15:49 # 0
А можно выделять по new таким образозом память, чтобы тривиальные типы, например char, инициализировались значением по умолчанию?
bormand 20.06.2013 15:57 # 0
superhackkiller1997 20.06.2013 16:01 # −6
bormand 20.06.2013 16:10 # +2
Никто ее не чистит, а вижуалка в дебажных сборках вообще мусором забивает.
P.S. Хотя можно перегрузить операторы new и delete, чтобы они работали через calloc или чистили выделенный кусок сами.
superhackkiller1997 20.06.2013 16:24 # −5
bormand 20.06.2013 16:33 # 0
superhackkiller1997 20.06.2013 16:35 # −2
Большие куски всегда зануленны, а питухкеш наверное можно вырубить, ибо на норм ОС он не упал.
LispGovno 20.06.2013 16:41 # 0
bormand 20.06.2013 16:50 # +1
superhackkiller1997 20.06.2013 17:07 # 0
someone 21.06.2013 11:40 # 0
Исправлено.
superhackkiller1997 21.06.2013 11:56 # −5
someone 21.06.2013 07:47 # +5
...дай мне силу!
LispGovno 21.06.2013 10:36 # 0
ps: ты не подумай. я загуглил
Lure Of Chaos 21.06.2013 10:45 # 0
?
superhackkiller1997 21.06.2013 10:56 # −1
Lure Of Chaos 21.06.2013 11:01 # 0
roman-kashitsyn 21.06.2013 11:02 # 0
Lure Of Chaos 21.06.2013 11:06 # +3
сильно.
superhackkiller1997 21.06.2013 11:44 # −1
_113 21.06.2013 13:41 # 0
Lure Of Chaos 21.06.2013 14:42 # +1
eth0 21.06.2013 19:52 # 0
Явно пора устроить клуб по интересам при говнокоде.
Но я бы предпочёл Wish You Were Here и A Momentary Lapse of Reason.
Lure Of Chaos 21.06.2013 20:03 # 0
LispGovno 21.06.2013 11:29 # 0
someone 21.06.2013 11:35 # +1
LispGovno 21.06.2013 11:48 # 0
> 51 говнокод
Ты тут так давно, но говнокод тебя до сих пор не заметил?
Lure Of Chaos 21.06.2013 14:47 # +2
LispGovno 20.06.2013 16:33 # +2
Ну обычно не мусором, а например на x86 однобайтовым кодом вызова прерывания отладчика
bormand 20.06.2013 16:34 # +1
Ну с точки зрения кода это будет именно мусор.
Setry 21.06.2013 00:16 # +2
bormand 21.06.2013 06:31 # +2
defecate-plusplus 21.06.2013 07:31 # 0
bormand 21.06.2013 09:06 # 0
superhackkiller1997 21.06.2013 10:53 # −2
В конечном итоге доблестные конпелятора-запильщики создали вам ещё одну проблему, хотя мистическая вера людей в том, что сисколы медленны создавала столько лулзов - вон один мне доказывал, что fopen() с конкатом быстрее 2-х сисколов open() и openat().
Вопрос знатокам насколько конкатенация fopen("/etc"+"passwd", "r"); медленее openat(open("/etc", O_RDONLY), "passwd", O_RDONLY); даже не в долгострочной перспективе, а просто 1 вызов?
LispGovno 21.06.2013 10:59 # +5
Зачем указатели складываешь?
superhackkiller1997 21.06.2013 11:41 # −4
LispGovno 20.06.2013 16:28 # 0
В линуксе:
http://ideone.com/3VdfU2
ps: я всегда буду обновлять страницу
я всегда буду обновлять страницу
я всегда буду обновлять страницу
superhackkiller1997 20.06.2013 16:33 # −4
Когда аллоктор "выделяет" память честно, а не из питухкеша( а выделяет он её честно почти всегда, кроме питухслучая в твоей синтетики malloc(100500); free(); malloc(100500);) она занулена.
LispGovno 20.06.2013 16:34 # 0
someone 21.06.2013 07:49 # 0
new - это слишком низкоуровневая и неынтырпрайзная операция, поэтому для всего прикладного нужно использовать std::vector.
govnomonad 20.06.2013 15:51 # +2
roman-kashitsyn 20.06.2013 15:52 # +8
LispGovno 20.06.2013 16:00 # 0
superhackkiller1997 20.06.2013 16:02 # −7
bormand 20.06.2013 16:05 # +5
Безусловно. Но в контексте экцепшенов на это всем насрать, т.к. в нормальной программе исключение это все-таки исключительная ситуация, а не то, что вызывается в цикле миллионы раз (привет, питон).
superhackkiller1997 20.06.2013 16:16 # −6
Нормальных программ, особенно на плюсах нет, а те, что есть - это систайл плюсы. И обычно быдлокод даже на ситайл плюсах(привет кути) лучше и удобней, чем новомодные птиухи(привет буст и производные). Ладно буст это тупо api к либам, но ведь есть код который реально написан на новомодных плюсах и фейспалмом себе расшибаешь, когда его читаешь.
Это как мне тут доказывали, что в коде могут быть нулы и мусор, который вводит пользователь - они не слышали о том, что надо разделять внутреннее ядро программы и обвес, с которым контактирует биомасса, если они пишут гуйню за еду.
Возьми - процессор, ваша ОС всё работает так - ОС и процессор не проверяет данные внутри себя, ибо они бы тормазили как питушня, но вы же умнее всех.
Поэтому пусть лучше не юзают вертметоды, ибо пихать они их будут везде, как new.
TarasB 20.06.2013 18:18 # 0
superhackkiller1997 20.06.2013 18:26 # −2
TarasB 20.06.2013 18:59 # +4
superhackkiller1997 21.06.2013 10:26 # −3
TarasB 21.06.2013 10:53 # +1
Рыть в проектах лень.
superhackkiller1997 21.06.2013 10:55 # −4
defecate-plusplus 21.06.2013 11:30 # +2
тему полиморфизм vs ручная эмуляция TVM поднимал сам тарас около года назад
на что я ему кидал скриншот этого пиздеца в сишке в реальном проекте
superhackkiller1997 21.06.2013 11:36 # −4
Поэтому ваши рассказы как всё плохо в сишкапроектах, где сишник есть годовалый студент, который боится указаталей - фигня.
defecate-plusplus 21.06.2013 11:58 # +4
ты поучаствуй хоть в одном реальном проекте для начала, потом суди, кто чего осилил, ок?
например, сделай патч в ядро - начни с лёгкого
хорошо хоть перестал питушиться на каждом шагу
если тебе интересно, я могу наглядно показать разницу между реальным полиморфизмом и сишной эмуляцией
superhackkiller1997 21.06.2013 12:14 # −3
Давай запили пример - не абстрактный, как все эти неосиляторы, а реальный. Который что-то делает.
Причем должен быть таким, что твой полиморфизм для него будет лучше моей "эмуляции", причем на уровне задачи. Дерзай.
defecate-plusplus 21.06.2013 12:16 # +2
например, сложное устройство, в котором реализована куча интерактивных логических процессов
один процесс - это последовательность состояний, в каждом состоянии есть как минимум вывод информации на дисплей и n коллбеков-реакций на внешние события (например, нажатие на кнопку - это одно событие, приход информации от датчика1 - второе, событие от таймера и т.д. - таких коллбеков легко наберется десяток)
состояние в какой-то момент знает, что автомат следует перевести в другое состояние
обычным графом такое не шибко закодируешь, потому что условно в событии кнопки при нажатии на одну кнопку надо перейти в одно состояние, при нажатии на другую - сделать доп. анализ и перейти в какие-то еще (или не перейти)
один процесс - несколько десятоков таких состояний
устройство богато на функционал, и реализует десяток различных процессов
defecate-plusplus 21.06.2013 12:18 # +1
а в сишке это потребует дополнительной работы:
1) тебе надо взять структуру типа struct { on_entry_func_type entry_func; on_timer_func_type on_timer; on_sensor_func_type on_sensor; ... } - это вместо объявления virtual из-коробки
2) и так и так описать тела всех этих функций - только в c++ это будет в пределах неймспейса класса + возможности по наследованию/инкапсуляции, а в С придется делать
state_hello_world_on_entry() { ... }
state_hello_world_on_timer() { ... }
3) отдельно проинициализировать каждое такое состояние - причем, создав экземпляр состояния заранее:
/* global */ state_t hello_world_state = { state_hello_world_on_entry, state_hello_world_on_timer, state_hello_world_on_sensor, state_common_state_on_key_ignore_beep, ... };
// other 100+ states
при этом, т.к. возможностей по наследованию нет - следить вручную, чтобы в нужных коллбеках стояли нужные "базовые" указатели
вот и вся простая разница между полиморфизмом, предоставляющим то же самое из коробки сахарными удобными средствами языка, и ручной эмуляцией оного
ну а компилятор, при должной локальности объявлений этих объектов состояний и глобальной оптимизации, вполне заинлайнит и то, и другое - тут нет особых преимуществ ни в с++, ни в с
LispGovno 21.06.2013 12:21 # +3
> конечный автомат
Не жизнено и не злободневно.
> и т.д.
Не конкретно. Ему нужен конкретизированный реальный, а не абстракный пример.
> обычным графом такое не шибко закодируешь
На ифах намахает. Царю это расплюнуть.
defecate-plusplus 21.06.2013 12:39 # +1
> на ифах
т.е. предполагается что-то вроде 100+ states * 10+ callbacks
удачи ему с ифами, а также с дальнейшим сопровождением проекта по внесению новых состояний и модификации логики в текущих
superhackkiller1997 21.06.2013 12:50 # −3
Давай, ваяй пример, а реализую такую же байду, только на сишке.
defecate-plusplus 21.06.2013 12:55 # +2
ты как всегда даже текст понять не можешь
superhackkiller1997 21.06.2013 13:07 # −3
Потом я реализую тоже самое на сишке, как я хочу и как я считаю нужным, потом мы сравним.
defecate-plusplus 21.06.2013 13:18 # +2
у тебя много свободного времени, у меня же сейчас оно рабочее
если хочешь - жди до вечера, но не факт, что я сам захочу возвращаться к этому примеру
если ты еще не понял - перформанса тут и не нужно, тут нужно удобство кодирования -> сопровождения -> предсказуемой реальной оценки трудозатрат
ты же ссылался на то, что на сишке это займет меньше строк - вот тебе и пример
superhackkiller1997 21.06.2013 13:27 # −3
Это не пример, это описание абстрактной модели. Как ты понимаешь абстрактная модель без конкретики мне ничего не даёт.
А я и не говорю про перфоманс - табличный конечный автомат на калбеках работает медленно на x86. Хотя на amd64 достаточно приемлемо, даже сливает ифы питушков.
Хочешь удобство - я запилю тебе такое удобство, что ты удивишься. Я люблю удобство ещё больше, чем перфоманс, а красоту больше их обоих и это уже давно пора понять.
defecate-plusplus 21.06.2013 13:39 # +2
попробуй просто так же словами описать порядок действий или укажи на ошибку в рассуждениях
это не так сложно, как ты думаешь
superhackkiller1997 21.06.2013 13:52 # −3
Как это делается - делается это таблицой и калбеком на кнопку в простом случае. Датчик - это тоже самое, что кнопка - датчик ид - это индекс в массиве калбеков, а в калбек ты передаёшь значение снятое с датчкика.
Калбек на действие - самая удобная из всех для запила красивого кода. Если у тебя кнопки делают примерно одно и тоже - объекдиняй калбеки, хотя гцц это умеет делать сам и тебе просто надо сделать обёртку.
Таймер - это самосортирующийся массив(пулл), из которого берутся события по ид и юзается калбек. Самая простая и наглядная реализация.
Машина состояний - у тебя банальная структура, на которую неявно действуют все калбеки, если тебе это надо.
defecate-plusplus 21.06.2013 14:00 # +2
вопрос о том, что одно состояние кнопку обрабатывает вот так (например, кнопка 1 означает "выстрел ракеты"), второе состояние - вот так (кнопка 1 означает "собрать картошку, если уже сентябрь, иначе - сказать 'привет, баклан'"), третье состояние на кнопку 1 переходит в первое состояние
если бы любое состояние при нажатии на конкретную кнопку тупо переходило бы в другое состояние, не сделав ничего - то было бы достаточно графа состояний - таблицы, где в ячейке [id состояния, id события] стояло бы -> id таргет события
но такая таблица тут не прокатывает
значит нужна таблица [id состояния, id события] -> коллбек, что суть именно то, что описал выше - state_foo = { all callbacks for this state };
states[] = { &state_foo, &state_boo, ... };
superhackkiller1997 21.06.2013 14:11 # −3
Выстрел рактеты - первый калбек, собрать кортошку - второй, привет баклан - третий.
У тебя несколько путей - несколько таблиц калбеков для каждого состояния. Одна таблица, аля { [kei_id = 0] = {[state_id = 0] = callback, [state_id = 1] = callback1, [state_id = 2] = callback2, }, тут дальше для всех кнопок };
Да - это гццизм, но я клал.
На енумах это выглядит понятно и красиво. А ты будешь создвать по классу на кнопку, потом каждый метод наследовать по 4раза и прочая питушня.
Это будет портянка на 100500 строк, нечитая человеком и абсалютно непригодная для редактирования, а мою заполнит любой человек за 2минуты.
defecate-plusplus 21.06.2013 14:27 # +2
коллбек логически относится к состоянию - состояние знает, что ему делать с пришедшим событием "кнопка", "датчик", "картошка" и т.д.
я не зря говорил про 10 коллбеков, а с учетом, что кнопок, например, 10 - в твоем случае получается уже 100 колонок
в итоге ты получаешь таблицу на енумах - это значит при обращении к этой таблице надо заниматься поиском нужного стейта - возникает проблема обеспечения совместимости таблицы с енумом - чтобы в таблице случайно не оказалось меньше значений, чем в енуме, чтобы в таблице строки шли ровно в порядке, соответствующем енуму (ты же не хочешь линейным поиском искать state_X?)
и что же в итоге?
тебе надо заполнить таблицу коллбеков, не наебавшись, например, назначив callback_for_state_123 состоянию callback_for_state_132
ты знаешь как дорого будет искать подобную ошибку в коде? не факт, что хер заметишь
а ракета пойдет копать картошку
всё то же самое в ООП выглядит просто элементарно: ты тут не наебешься с назначением коллбека - он лежит внутри структуры, ты тут сможешь вообще не переопределять поведение предка, если его поведение на коллбек тебя устраивает
и таки да, строчек получается меньше
superhackkiller1997 21.06.2013 14:56 # −2
Никак не ошибёшься, проще чем твои питухклассы - быстрее и надёжней, а так же понятней.
defecate-plusplus 21.06.2013 15:29 # +2
ой что же это такое?
получилось на гораздо меньше строк и гораздо ниже шанс на ошибку
какой тут кодеген - что я должен описывать? в файле tarasb.pre функции, где кодеген допилит к ним приставки? так я их лучше в структуре tarasb опишу
а в общем и целом - ты описал ровно то, с чего я сделал первый вброс
именно так это уже работает в куче наших сишных проектов, и на ООП это делается гораздо удобнее
superhackkiller1997 21.06.2013 15:52 # −3
Питушара анскильная - ты зачитерил и выпилил вообще половину калбеков. А теперь запили, чтобы каждый говорил свою фразу - получишь облом.
И да, а теперь тебе пришли состояние 2 и 2 - анука заюзай своё фуфло - получи облом.
>а в общем и целом - ты описал ровно то, с чего я сделал первый вброс
>именно так это уже работает в куче наших сишных проектов, и на ООП это делается гораздо удобнее
Ты только что тотально слился и не запилил аналог моего кода.
defecate-plusplus 21.06.2013 15:59 # +1
чтобы ответить на твой вопрос, мне сначала надо понять что такое "мне пришли состояние 2 и 2?"
пока ты думаешь, как это объяснить, на всякий случай уточню - конечный автомат имеет "текущее состояние", это текущее состояние и только оно принимает события, и только текущее состояние принимает решение, что неплохо бы перейти в другое состояние - для этого оно делает return set_new_state(new state), после чего новые события должно будет исполнять это новое состояние
superhackkiller1997 21.06.2013 16:09 # −3
В лучшем. Питух пробалаболил. Ты понимаешь, что я аналог твоей байды запилю 10-ю строчками?
Давай ваяй свою байду - я поржу и солью тебя, питушка. Потом ты правда будешь вонять, что моё не безопасно, но я клал.
defecate-plusplus 21.06.2013 16:11 # +1
свою байду - аналог твоей байды - я уже тебе показал
жду от тебя ответа - что такое 2 и 2?
superhackkiller1997 21.06.2013 16:26 # −3
С такого, что тебе прийдётся описывать их в классах, питух.
>свою байду - аналог твоей байды - я уже тебе показал
Ты привёл не аналог, питух, у тебя 3 калбека уникальных, а не 6 как у меня. Ты просто считерил на том, что фразы одинаковые. Ты сделал m_call[TarasB](key_0);
Я могу так же считерить и тупо сделать в 4строчки say(TarasB, key_2);
>жду от тебя ответа - что такое 2 и 2?
Я откуда знаю, что в твоей питушарской логике 2 и 2. Ты начал питушить, что у тебя активно одно состояние - так питух я так тоже умею. Я жду вменяемого примера, не ссы, ты можешь назвать мой код небезопасным и меня заминусуют и никто даже не заметит как ты слился.
defecate-plusplus 21.06.2013 16:43 # +1
нет, я наглядно показал, что делать состоянию, когда ему достаточно реализованного "общего" поведения
например, проигнорировать сенсор1 или пикнуть два раза при нажатии на ненужную кнопку
> И да, а теперь тебе пришли состояние 2 и 2 - анука заюзай своё фуфло - получи облом.
у тебя же абсолютная память
ты это сказал
я так и не понял что это значит
обознался?
superhackkiller1997 21.06.2013 17:07 # −3
например, проигнорировать сенсор1 или пикнуть два раза при нажатии на ненужную кнопку
Нет, питух, ты считерил и оправдываешься. ВЫПОЛНИ 9 УНИКАЛЬНЫХ КОМБИНАЦИЙ КОДА. Т.е. каждая функция для каждого состояния должна исполнять УНИКАЛЬНУЮ комбинацию кода.
У тебя, питуха, всего 3 уникальных комбинации кода, а не 9. У меня 9. Ты понимаешь разницу?
>у тебя же абсолютная память
>ты это сказал
>я так и не понял что это значит
>обознался?
Жалкая сливалка, ты чего копипастишь месаги из моего предпредышего коммента, питух? Попец заболел? Слейся уже и запомни свою место, анскилябра и не спорь, коли сливаешься на 3-м комменте.
defecate-plusplus 21.06.2013 17:26 # +1
на тебе 9 уникальных
что-то ты совсем уже начинаешь сливаться, я тебя, долбоеб, трижды спросил что ты имел в виду, и ты теперь еще меня укоряешь за это?
притом, что ты до сих пор так и не ответил ЧТО ТЫ БЛЯТЬ ИМЕЛ В ВИДУ
это еще у кого жжение то?
нет, ты!
бгг
superhackkiller1997 21.06.2013 20:50 # −3
Получил больше строк даже на такой примитивщине.
>что-то ты совсем уже начинаешь сливаться, я тебя, долбоеб, трижды спросил что ты имел в виду, и ты теперь еще меня укоряешь за это?
ЧТо я имел ввиду? Тебе приходит key_id(у тебя приходит число - это нажатая кнопка) - для твой питушни тебе надо будет создавать о5 массив калбеков в который загонять свои методы, либо делать свич - мне же не надо.
Для перехода в состояние - тебе надо свичить указатель, а когда у тебя будет 10обработчиков - ты будешь свичить 10указателей, либо фигачать 100500 абстракций на классах.
В конечном итоге у тебя будет всё запутанней и ущербней, чем у меня и ты это знаешь, поэтому ты и ссышся запилить реальный пример.
defecate-plusplus 21.06.2013 22:39 # +3
пришел сигнал - current_state->on_signal(), и т.д.
или по твоему основной цикл не отличает кнопку от реле
вот ведь анскильный питух, ну нихуя же не знает
superhackkiller1997 22.06.2013 08:20 # −2
Lure Of Chaos 22.06.2013 10:55 # +2
чья бы корова мычала - твоего кода вообще никто здесь так и не увидел. зато у тебя шикарная коллекция эпичненьких сливов.
чтобы ты не брызгался ничем в мою сторону, то я напомню, что где-то тут я давал ссылку на целый готовый рабочий проект, в котором много хорошего
guest 21.06.2013 14:02 # +5
Иван Фёдорович Крузенштерн - структура данных и алгоритм
guest 21.06.2013 14:03 # 0
Красиво и никаких ООП не нужно.
3Doomer 24.06.2013 07:20 # 0
TarasB 21.06.2013 12:26 # 0
И чем более сложные проекты ты будешь делать, тем более анскильным питухом ты будешь становиться.
superhackkiller1997 21.06.2013 12:47 # −3
Понимаешь в чём штука - я не буду делать сложны по вашим меркам проекты - я буду делать сложные по объективным меркам, ибо меня не интересует писанье питушни за еду ни в коей мере.
defecate-plusplus 21.06.2013 12:52 # +3
это тебе уже на лоре объяснили
чтобы делать производительные шняги на терабайты данных, необходимо разбираться в структурах данных (а у тебя даже массивы - для питухов)
сейчас ты сидишь на шее у родителей - назови область, где ты сможешь заработать себе на доширак с икрой
superhackkiller1997 21.06.2013 13:05 # −6
это тебе уже на лоре объяснили
Ну вообще-то я слил их в хламину. Мой складыватель 2дмассива работает примерно за 2такта, дальше уже уперается в память. Поидее мой банан должен закончится через пару дней - следи за лором и моим 3-м прешествием.
>чтобы делать производительные шняги на терабайты данных, необходимо разбираться в структурах данных (а у тебя даже массивы - для питухов)
Не в структурах данных, а в устройстве железа. Знание матчасти даёт буст не соизмеримый с твоей питушнёй для студентов.
>сейчас ты сидишь на шее у родителей - назови область, где ты сможешь заработать себе на доширак с икрой
Я не живу с родителями, и не сижу на их шее, лалка. Да любая, вопрос в том нужно ли это мне. 98% лалок в этом мире я солью с закрытыми глазами, а остальные могут что-то только в конкретной области, в которой я их тоже солью покапавшись в ней с месяцок.
Разница в том, что вы работаете за еду в какой-то области, которую я даже не щупал, но мой общий скилл запила, понимания и т.п. на сотни порядков превышает ваши. Поэтому если мы возмём любую рандомную область - то вы сольёте просто в хламину, в этом и суть. Вы любые разговоры и примеры пытаетесь сводить к своему узкому мирку. Тарас свой к гейдеву, ты к своим МКашкам и т.п. - это жалко.
И да, сейчас лор не имеет смысла читать - ибо все мои коменты и темы выпилили оставили только шлак.
defecate-plusplus 21.06.2013 13:12 # +1
именно в структурах данных
на пальцах - надо хранить ~миллиард записей, каждая из которых уникальна по некоему полю Х, которые регулярно и независимо пополняются и удаляются, а пользователю надо сравнительно быстро найти уникальную запись [Х] и десять следующих записей в порядке возрастания X
миллиард тут выбрано как отсечка, показывающая что в оперативную память не влезает, а на диск - без проблем
superhackkiller1997 21.06.2013 13:23 # −3
Хранить - юзай lseek() и read()/write(). Приводи пример своих записей, а не сливайся - я уделаю в хламину любую твою бд.
defecate-plusplus 21.06.2013 13:30 # 0
линейный поиск или бинарный?
superhackkiller1997 21.06.2013 13:37 # −3
Если тебе надо сопоставлять разные индексы - юзай индексацию, но это уже к хранению данных не имеет отношения. Если у тебя разные данные, то ты питух - это уже ФС и попец, но тебя спасут пуллы и индексация.
Работа с файлами ничем не отличается от работы с оперативой, те же блоки, аля кешлайны, те же гиганские задержки на новый блок(кешлайн) и т.п. Файловый кеш, аля л2 - твой кеш в программе, аля л1. Ты можешь юзать свои кеша, что делает работу даже удобней, чем с оперативой на х86.
Никакой сложности нет. Сложность есть, когда ты делаешь индексацию для питухов, а мне не надо делать индексацию для пнскильных питухов, ибо я сам юзаю свои творения, а не питухи.
defecate-plusplus 21.06.2013 13:42 # +1
на пальцах - у меня уже есть 100 записей, я удаляю ИД = 20
что произойдет с файлом?
и опа, уже не катит ИД*sizeof, либо твой файл только растет и растет
но постоянно растущий файл нужен в 0.001% случаев - для хранения он не подходит, только для временной обработки и немедленного удаления, после окончания обработки
предлагай ещё, сложности то нет никакой
superhackkiller1997 21.06.2013 13:46 # −3
>на пальцах - у меня уже есть 100 записей, я удаляю ИД = 20
>что произойдет с файлом?
Ничего, на низком уровне нет никакого удаление. Максимум удаление из индекса, либо зануление.
>и опа, уже не катит ИД*sizeof, либо твой файл только растет и растет
И опа - занули и сожми хвост, опа обреж хвост.
>но постоянно растущий файл нужен в 0.001% случаев - для хранения он не подходит, только для временной обработки и немедленного удаления, после окончания обработки
Нет, все твой БД работают на постоянно растущих файлах, данные не удаляют, а максимум зануляют.
>предлагай ещё, сложности то нет никакой
Что предлогать? Я тебе описал систему хранения, которая уделывает в хламину любую, ибо это массив. Всё остальное в твоей БД строится на индексации этого массива.
defecate-plusplus 21.06.2013 13:49 # +1
я тебе предложил хранить миллиард записей
я удаляю 20ю запись из миллиарда - кто будет переносить этот охулиард из хвоста назад сдвигом на одну запись?
и да, в это время другой пользователь как бы нашёл нужное себе и работает с 100500й записью и знает её расположение в файле
вот он решает её изменить - он может ожидать, что она находится примерно там же, или её надо заново попытаться найти?
как хранит данные БД я в курсе, я как раз тебя подвожу к этому
что будет с файлом, который только растет, если он хранит, например, данные сессий - т.е. ежедневно у тебя ~100000 записей создаются и удаляются, хаотично
superhackkiller1997 21.06.2013 14:01 # −3
Удаление - это есть data[id] = 0; Никаких здвигов нет. Следующая запись - записыватся в свободное ИД, а свободные ИД хранятся в пуллах.
На каждую твою запись - тебе выдаётся ИД, если ты удаляешь запись с ид 100500 - она помещается в пулл свободных ид, а когда ты записываешь новые данные - им присваивается ид=100500, ибо она последние было добавлени в пулл. Если ты записываешь ещё данные - они берутся либо дальше из пула свободных, либо из оставшихся ид, а если ид больше нет - файл растёт.
Ты модешь свободные идешки сортировать, а хваст обрезать во время простоя.
Моё описание структуры данных для твоих сессий идеальна и уделает в хламину любую, сортировкой можно подкоректировать локальность, чтобы кеш работал лучше, но это уже детали.
Это сливает в хламину любую твою бд, ибо это идеал.
defecate-plusplus 21.06.2013 14:07 # +2
я сказал миллиард - значит только под массив id тебе нужно минимум 4GB места
а для 10 миллиардов - 40GB
где оно хранится?
твой массив хранит только свободные id - окей, возьмем файл на 40 миллиардов, в котором живая только последняя запись, что дальше?
и еще - почему это при добавлении записи в файл она должна получить чужое id?
представь ты создаешь ссылку на понравившуюся тебе порнокартинку - она получает имя lolpic/15134523
ты её посылаешь другу, но картинку в это время удаляют, а другой пользователь через мгновение заливает свою
друг, вместо того, чтобы сказать тебе - "кретин, этой картинки уже нет" - видит пидарастическое порно, где армяне жарят друг друга в очко
superhackkiller1997 21.06.2013 14:23 # −4
Обыкновенно.
>я сказал миллиард - значит только под массив id тебе нужно минимум 4GB места
Не нужно - они все будут нулевыми, а их не нужно хранить в пуле, ибо их вообще нет.
>твой массив хранит только свободные id - окей, возьмем файл на 40 миллиардов, в котором живая только последняя запись, что дальше?
А с чего будет жива только последня запись? Даже если будет жива - до неё один фиг будет пустота.
>и еще - почему это при добавлении записи в файл она должна получить чужое id?
Патамучто так должно быть. Почему когда ты удалишь файл, а потом запишешь другой - он будет хранится на том же самом месте.
>ко-ко-ко
Это делается уже в верхнем индексе, а не в нижнем, если тебе это надо.
А представь, что у тебя удалено 100миллиардов картинок через одну, что ты будешь делать? А ты зафейлишься и не поднимаешься и твой индекс умрёт.
defecate-plusplus 21.06.2013 14:33 # +1
какая разница где он будет храниться - у него должен быть свой, уникальный id
например, ты хранил картинку lolpic/15134523, ты её удалил
ты пишешь на диск lolpic/999134523, очень вероятно, что оно заняло место старой - только имя то у нее уже другое
id должны идти хронологически строго по возрастанию
тебе нужно хранить массив ID свободных узлов, доступных под запись
из твоих слов я понял, что это будет именно массив, в который в хвост будут дописывать постоянно очередной освободившийся узел, и затирать из хвоста, если освободившийся узел опять займут
т.о. для таблицы, в которой жило 40G записей, и из которой сейчас удалили 40G-1 запись тебе надо хранить все эти ID свободных узлов
ты ссылаешься на (любую) файловую систему, но даже не знаешь, что она также оперирует "структурами данных сложнее массива"
roman-kashitsyn 21.06.2013 14:45 # +1
superhackkiller1997 21.06.2013 15:05 # −4
>тебе нужно хранить массив ID свободных узлов, доступных под запись
из твоих слов я понял, что это будет именно массив, в который в хвост будут дописывать постоянно очередной освободившийся узел, и затирать из хвоста, если освободившийся узел опять займут
Не в хвост, а в свободные места.
>т.о. для таблицы, в которой жило 40G записей, и из которой сейчас удалили 40G-1 запись тебе надо хранить все эти ID свободных узлов
Нет анскилл, если есть следующий индекс, то она может менять индкс твоей 40G-1 на 0, а хваст удалить.
Так же, хранить 40G нулей мне не трудно.
>ты ссылаешься на (любую) файловую систему, но даже не знаешь, что она также оперирует "структурами данных сложнее массива"
Глупый, анскильный питух, оделел съезжать. Хранение данных у неё запиленно именно на массивах, где елемент - это блок.
У тебя есть хард длинной в N - он бьётся на блоки, которым привается уникальный ид - это индекс блока. Это блоки уже пишутся в инноды, аля файл начинаетясн а таком-то id и длинна его столько-то блоков, если же твоя ФС умирает, то пишется что-то аля: block_id, size; next_block_id;size и так весь файл.
В зависимости от структуры ФС и её индексов и фичей это может быть усложененно, но на самом нижем уровне это работет именно так.
defecate-plusplus 21.06.2013 15:22 # +1
где же тут массив, анскильный питушок?
superhackkiller1997 21.06.2013 15:26 # −3
Для хранению файла никакой список не упал, ибо файл - это диапазоны из массива блоков. Список тут - лишний оверхед безпрофитный.
defecate-plusplus 21.06.2013 15:33 # +2
залей на диск N маленьких фоток, удали через одну - получишь физическое хранение модели "решето"
теперь залей порнофильм в хд качестве - который аккуратно размажется по этому решету
как ты думаешь одна часть решета c адресом конца 1000 знает, что за ней следует новая часть решета с адресом начала 5000?
superhackkiller1997 21.06.2013 15:56 # −3
>ибо файл - это диапазоны из массива блоков.
Как думаешь, почему тут написанно диапазоны?
>если же твоя ФС умирает, то пишется что-то аля: block_id, size; next_block_id;size и так весь файл.
Тебе создать файл из 5к блоков, а у тебя есть максимум по 50 блоков в ряд - ты пишешь:
id начальной блока и его длинну, потом ещё так же 10раз - вот у тебя файл. Как думаешь, что будет быстрее питушиный связный список, либо мой вариант? И как думаешь какой вариаент юзает ФС? Правильно - мой вариант, а не питуха.
defecate-plusplus 21.06.2013 16:09 # +2
догадайся, почему она так называется
ну да ладно, простейшие файловые системы для анскильных изимодных питухов
итак, где и в каком виде твоей файловой системой хранится список массив из (id блока, длина) (id блока, длина) (id блока, длина) для файла?
defecate-plusplus 21.06.2013 14:36 # +3
с чего ты решил, что что-то зафейлится?
будет всё достаточно компактно храниться - потому что БД знает про структуры данных, а ты - нет
superhackkiller1997 21.06.2013 15:07 # −2
А всё почему? Патамучто ты даже не знаешь, как работает твоя бд, а знаешь работу БД на уровне индексов и то по желтым книжкам и статейкам.
defecate-plusplus 21.06.2013 15:24 # +2
но B* деревья слишком анскильны для анскильного питуха
superhackkiller1997 21.06.2013 15:32 # −3
Мой же пример для нормально запиленного юзает работает напорядке быстрее твоих деревьев, ибо если ты захочешь в бревне локальности - прошай балансировка - здравствуй массив. Поэтому локальности на бревне ты не получишь, а не получишь локальности - не получишь кеширование, а не получишь кеширование - получишь ИОПСЫ.
defecate-plusplus 21.06.2013 15:41 # 0
у тебя в массив данные добавляются то в хронологическом порядке, то в хаотическом - если заполняют дыры
о какой локальности идёт речь?
твое хранилище не обеспечивает хронологии - оно вообще ничего не обеспечивает
ну да ладно, вернемся к самому главному
итак, у тебя есть твой сплошной массив записей (с дырками) - тебе надо обеспечить быстрый поиск записи по нужному критерию, и как найдешь - линейно пройтись по соседним по тому же критерию записям
твои действия?
TarasB 21.06.2013 15:58 # +1
defecate-plusplus 21.06.2013 16:03 # +1
но списки для питухов
superhackkiller1997 21.06.2013 17:02 # −2
В некоторых случаях да - будет профит.
superhackkiller1997 21.06.2013 16:00 # −2
>о какой локальности идёт речь?
Неможет ничего так добавляется, ибо это питушиный абстрактный пример. В реальном мире такого не бывает.
Даже если они добавляются как угодно - мой пример уделывает в хлам твоё бревно.
>итак, у тебя есть твой сплошной массив записей (с дырками) - тебе надо обеспечить быстрый поиск записи по нужному критерию, и как найдешь - линейно пройтись по соседним по тому же критерию записям
По какому-такому кретирию? По самим данным? Мой последовательный поиск будет быстрее обхода твоего деерва.
И в чём смысл искать по критерию, о5 питух пытаешься съекхать? У тебя хранится милиард фоточек - какт ы будешь среди них искать ту, на которой больше красного?
defecate-plusplus 21.06.2013 16:06 # 0
TarasB 21.06.2013 16:18 # 0
defecate-plusplus 21.06.2013 16:21 # 0
если нет индекса - то только перебор, ясен хуй
я хочу продолжить разговор про индексы
он заявит что индекс это такой же ололо просто массив
и тогда я вернусь к теме, сколько будет при первом же удалении записи ребилдиться его ололо индекс и сколько индекс на b*
superhackkiller1997 21.06.2013 16:29 # −5
superhackkiller1997 21.06.2013 16:30 # −4
defecate-plusplus 21.06.2013 16:38 # 0
как это не нужен твоему индексу ребилд - если я удалю запись из исходного массива, то из твоего индекса её тоже надо удалить
кстати, вот в твоему пулле по годам для 1969 года находится 1000 записей
тебе надо удалить из нее запись, ссылка на которую в пулле находится на 2 строчке - ты её зануляешь или сдвигаешь копированием хвост пулла?
а так же - ссылки в пулле каким то образом отсортированы?
superhackkiller1997 21.06.2013 16:58 # −2
О5 очередной питух с ущербной О-нотацией. Цена единицы для дерева и массива стоит порязному, ой как поразному - в райне 2-х порядков.
>как это не нужен твоему индексу ребилд - если я удалю запись из исходного >массива, то из твоего индекса её тоже надо удалить
Не надо. Это тебе не дерево питух, я могу удалять как угодно, а могу вообще не удалять.
>кстати, вот в твоему пулле по годам для 1969 года находится 1000 записей
>тебе надо удалить из нее запись, ссылка на которую в пулле находится на 2 >строчке - ты её зануляешь или сдвигаешь копированием хвост пулла?
>а так же - ссылки в пулле каким то образом отсортированы?
Запись не удаляется, а зануляется. Её ид равен пустоте, на её место потом запишется новая запись.
Никаких ссылок в пуле нет, в пули есть аляуказатели, питух. Это ид твоих структур, по которым ты можешь найти все остальные поля.
defecate-plusplus 21.06.2013 17:11 # +1
причем тут ущербная О нотация?
на пальцах
возьмем миллиард записей
сколько операций диска тебе потребуется, чтобы сделать перепозиционирование на нужное смещение в огромном файле?
возьмем b* дерево, в каждом листе которого хранится, ну например 100 записей - значит, за ~23 чтения ты попадёшь в нужный лист
не забывай это число
далее - теперь про добавление/удаление
итак, мы выяснили, что в твоем пуле "указатели" никак не отсортированы - там лежат просто напросто id, с периодическими дырками в виде нулей
значит, при удалении записи из основного массива, тебе надо линейно перебрать весь пул, чтобы найти нужную тебе строку, и её занулить
линейный поиск - это уже считается оптимально для питушиного оптимизатора?
далее
один пул тебе как бы даёт одну попугайскую точность
что делать, когда нужна точность поменьше? (см вопрос про атомные станции)
superhackkiller1997 21.06.2013 20:55 # −2
>итак, мы выяснили, что в твоем пуле "указатели" никак не отсортированы - там лежат просто напросто id, с периодическими дырками в виде нулей
Питушара - анскильная.
>значит, при удалении записи из основного массива, тебе надо линейно перебрать >весь пул, чтобы найти нужную тебе строку, и её занулить
>линейный поиск - это уже считается оптимально для питушиного оптимизатора?
Упоролся питухчтоли? sizeof(data)*id - O(1) по твоей птиух натации.
>один пул тебе как бы даёт одну попугайскую точность
Моей попугайской точности тебе не даст твоя питухБД.
defecate-plusplus 21.06.2013 22:36 # +2
вот так вот приходят сраные анскильные лохи, и пиздят и пиздят
нихуя у тебя не получится терабайты данных обработать, сосунок, спокойной ночи
govnomonad 21.06.2013 18:15 # +3
Не умеешь оценивать трудоемкость своих поделок - в биореактор, быдло!
guest 21.06.2013 16:33 # 0
superhackkiller1997 21.06.2013 16:20 # −3
Создаёшь по своему пуллу на каждый год и туда записываешь идешки своих структур - потом тупо читаешь весь пул.
Питух тотально слит и уничтожен, а теперь он будет будет балаболить, что типа с таким-то днём - берёшь дни из юникстайма и юзаешь их как ид для пулла.
defecate-plusplus 21.06.2013 16:23 # 0
partitioning
хорошо
теперь всех людей, которые родились конкретно с 10 по 15 мая 1969 года
superhackkiller1997 21.06.2013 16:28 # −3
Читать разучился?
Теперь пулов будет столькоже, сколько дней.
Питух, это самая идеальная выборочная индексация, можешь не продолжать кукарекать.
defecate-plusplus 21.06.2013 16:41 # 0
я централизованно собираю статистику с атомных электростанций
события приходят с точностью миллисекунд
события собираются с 1950 года
сколько пуллов мне надо, чтобы выяснить, какие события происходили 21 июня 1997 года с 15:00 до 18:15?
superhackkiller1997 21.06.2013 17:00 # −2
В твоей бд не будет вставки даже на десятки милисекунд, питух.
Ты пытаешься ещё раз в лужу рожей? Кол-во часов - в лужу рожей. Пулы бесплатны, если ты об этом будешь кукарекать.
defecate-plusplus 21.06.2013 17:13 # +1
с чего ты решил, что не будет вставки? данные уже зарегистрированы, высокоточными датчиками, мне не надо вставлять в бд когда конкретно они вставились в бд, лол, мне надо вставить уже готовые данные, в этих данных есть информация
какое по твоему скилльному мнению число ежесуточных вставок способна выдержать изимодная ненужно БД типа оракла?
superhackkiller1997 21.06.2013 20:59 # −2
>с чего ты решил, что не будет вставки? данные уже зарегистрированы, >высокоточными датчиками, мне не надо вставлять в бд когда конкретно они >вставились в бд, лол, мне надо вставить уже готовые данные, в этих данных есть >информация
Ты что сливаешься животное? Милисекунда - это тысяча вставок в секунду - твоя питух БД не даст тебе тысячу вставок в секунду.
>какое по твоему скилльному мнению число ежесуточных вставок способна выдержать изимодная ненужно БД типа оракла?
Моя миллиадрды вставок в секунду. Оракловское фуфлу тысячи в лучше случае.
defecate-plusplus 21.06.2013 22:33 # +1
миллиарды в секунду? мой проц работает на частоте 4.7GHz, а оперативная память - "1.8GHz"
у тебя с арифметикой проблемы?
superhackkiller1997 22.06.2013 08:19 # −2
Мой вставка стоит единицы тактов - остальное уже задержки и оверхед твоей памяти. Понимаешь разницу?
defecate-plusplus 22.06.2013 10:58 # +2
почитай что такое ACID
TPS - это именно транзакция
транзакции можно сделать commit или rollback, тысяча параллельно исполняющихся транзакций обязаны оставить БД в целостном состоянии, поэтому требуются различные проверки на каждую вставку, удаление, бд может лежать распределенно по нодам кластера, потому что тебе надо в тч обеспечить бесперебойность при выходе из строя железа
ты просто бд крупнее одного однородного файла не видел, поэтому такой школьный вывод, что бд не нужны
или думаешь, что бд нужны только сраным веб-магазинам
defecate-plusplus 21.06.2013 15:48 # +1
откуда уверенность, что очередной прирост его на диске будет именно физически рядом?
guest 29.06.2013 18:29 # +6
superhackkiller1997 21.06.2013 13:23 # −2
superhackkiller1997 21.06.2013 13:39 # −6
TarasB 21.06.2013 13:02 # 0
Твоя оценка своего уровня знаний конкретно упадёт.
> Понимаешь в чём штука - я не буду делать сложны по вашим меркам проекты - я буду делать сложные по объективным меркам
Этого достаточно, чтобы стать анскильным питухом.
superhackkiller1997 21.06.2013 13:17 # −3
Моя оценка своего уровня крайне объективна. Мои оценки все крайне объективны, ибо меня не интересует что-то, кроме тотального вина. Все мои оценки чего-то строятся относительно абсалюта, а не анскильных сущностей.
>Этого достаточно, чтобы стать анскильным питухом.
Ну я же не становлюсь. С каждым днём моя моё понимание всё лучше и лучше, и с каждым днём мир подо мной всё ниже и ниже. Я не вижу в коде сложности - я вижу лишь сложность в его написании, но меня это не интересует.
guest 21.06.2013 13:59 # +5
Только Ситхи все возводят в абсолют.
А в абсалют только анскильные по русскому питухи.
superhackkiller1997 21.06.2013 15:14 # −5
guest 21.06.2013 16:00 # 0
только в абсАлют?
TarasB 21.06.2013 15:57 # +1
Это потому что ты не начал заниматься сложными проектами.
А как втянешься, то вдруг... ну тут два пути у тебя, либо ты уйдёшь в микроконтроллеры, там ты должен пригодиться, либо твои нынешние низкоуровневые знания тебе в будущем будут нахрен не нужны, как-то так я вижу.
TarasB 21.06.2013 12:27 # 0
3Doomer 21.06.2013 13:53 # 0
bormand 20.06.2013 15:58 # 0
someone 20.06.2013 16:14 # +1
roman-kashitsyn 20.06.2013 16:17 # +2
bormand 20.06.2013 16:18 # +5
anonimb84a2f6fd141 21.06.2013 03:40 # −5