Re[27]: Хозяйке на заметку: compile-time CRC32
От: Erop Россия  
Дата: 05.12.13 08:08
Оценка:
Здравствуйте, niXman, Вы писали:

X>а почему не просто сериализовать эту структуру с контейнером, и потом получившееся дописывать в представление?


Медленнее, если при сериализации не жать...

X>Lazin это просил.

Ну и в чём проблема?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[28]: Хозяйке на заметку: compile-time CRC32
От: niXman Ниоткуда https://github.com/niXman
Дата: 05.12.13 10:16
Оценка:
Здравствуйте, Erop, Вы писали:

E>Медленнее, если при сериализации не жать...

в смысле, сжимать? что сжимать? результат сериализации?

E>Ну и в чём проблема?

не знаю, не задумывался, ибо так и не понял, почему не сделать по-человечески...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[29]: Хозяйке на заметку: compile-time CRC32
От: Erop Россия  
Дата: 05.12.13 16:08
Оценка:
Здравствуйте, niXman, Вы писали:

E>>Медленнее, если при сериализации не жать...

X>в смысле, сжимать? что сжимать? результат сериализации?
Результат или сами данные. Короче уменьшить обмен с диском что бы.

E>>Ну и в чём проблема?

X>не знаю, не задумывался, ибо так и не понял, почему не сделать по-человечески...
А как это "по-человечески"?

Если туда какой-нибудь std::vector вклячить, то будет сильно менее эффективно жеж, чем мэпинг файла данных непосредственно на юзабельные данные...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Хозяйке на заметку: compile-time CRC32
От: Vzhyk  
Дата: 05.12.13 17:13
Оценка: -1
12/5/2013 7:08 PM, Erop пишет:

> Если туда какой-нибудь std::vector вклячить, то будет сильно менее

> эффективно жеж, чем мэпинг файла данных непосредственно на юзабельные
> данные...
Не будет, если не отстреливать себе разные органы.
Posted via RSDN NNTP Server 2.1 beta
Re[25]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.12.13 22:07
Оценка:
Здравствуйте, niXman, Вы писали:

L>>Ждем http сервер в 1.65

X>еще в 1.35 добавили. не навороченные, правда — но очень даже рабочие.
X>http://www.boost.org/doc/libs/1_35_0/doc/html/boost_asio/examples.html
Это пример. Он реализует поддержку очень ограниченного подмножества протокола. К тому же, хотелось бы не только сервер иметь, но и клиент. (да и вообще, как можно не иметь в век интернета поддержку http в стандартной библиотеке?)

L>>драйвер БД в 1.87.

X>это, вроде как, лишнее. иначе после этого можно будет ожидать GUI библиотечку...
Что в этом плохого?
Re[23]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.12.13 22:09
Оценка:
Здравствуйте, niXman, Вы писали:

X>не уверен что правильно понял, но разве offsets не может быть каким-нить контейнером?

А каким контейнером, std::vector?
Эта память мапится в файл, все что в ней оказывается — записывается в файл. Поэтому нужно контролировать layout каждого отдельного байта.
Re[31]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.12.13 22:11
Оценка:
Здравствуйте, Vzhyk, Вы писали:

V>Не будет, если не отстреливать себе разные органы.


а разработчики boost interprocess такие дураки, не знали этого и реализовали свои контейнеры, вот ведь незадача
Re[26]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.12.13 22:12
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, niXman, Вы писали:


X>>... предположу что для харда ...

X>в смысле, данные либо считываются с харда, либо записываются на него. либо — и то и другое.
почитай про memory mapped I/O
Re[29]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.12.13 22:14
Оценка:
Здравствуйте, niXman, Вы писали:

E>>Ну и в чём проблема?

X>не знаю, не задумывался, ибо так и не понял, почему не сделать по-человечески...
По "человечески" это как? Мне для memory mapped I/O или shared memory, неважно. Как будет "по человечески"?
Re[27]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.12.13 22:19
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, Erop, Вы писали:


E>>Такой, что для харда возможность отмапировать тупо файл на память и юзать как хранилище -- ценна, как нигде.

X>нее..наверное со мной действительно что-то не так...
Именно, тебе не хватает опыта для того, чтобы просто понять о чем мы тут толкуем

X>а почему не просто сериализовать эту структуру с контейнером, и потом получившееся дописывать в представление?

Сериализация это жутко медленно, к тому же, я хочу изменять массив offsets при необходимости. Если сериализовать, то нужно будет сначала десериализовать, потом изменить, потом опять сериализовать, просто жуть

E>>Кроме того, его же можно безопасно завернуть в С++ шаблон...

X>Lazin это просил.
Это должно было послужить иллюстрацией того, что метапрограммирование на шаблонах в современном с++ иногда все же просасывает примитивному коду на Си
Re[27]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 05.12.13 22:21
Оценка:
Здравствуйте, Lazin, Вы писали:

X>>>... предположу что для харда ...

X>>в смысле, данные либо считываются с харда, либо записываются на него. либо — и то и другое.
L>почитай про memory mapped I/O

Для полоного понимания того, что есть memory mapped I/O и почему это так хорошо, следует разобраться сначала с paging-ом в современных ОС и с тем как работает маппинг виртуальных адресов на физические, TLB, page-файл, вот это вот все.
Re[28]: Хозяйке на заметку: compile-time CRC32
От: B0FEE664  
Дата: 06.12.13 10:18
Оценка:
Здравствуйте, Lazin, Вы писали:

E>>>Кроме того, его же можно безопасно завернуть в С++ шаблон...

X>>Lazin это просил.
L>Это должно было послужить иллюстрацией того, что метапрограммирование на шаблонах в современном с++ иногда все же просасывает примитивному коду на Си

Ой, да ладно! Всё можно написать и на С++ и работать будет ничуть не хуже. Полный пример долго писать, а для затравки могу подкинуть вот такой код, написанный за 10 минут. Тут, конечно, есть проблемы с обработкой ошибок и преобразованием указателей, но всё это можно развить и углубить без потери производительности:

class FlexibleArrayMember
{
  public:
    FlexibleArrayMember(size_t sz, double*& data)
      :  m_sz(sz),
         m_rData(data)
    {}
  public:
    double& operator[] (size_t nIndex)
    {
       assert(0 <= nIndex && nIndex < m_sz);
       return m_rData[nIndex];
    }
  private:  
    size_t   m_sz;
    double*& m_rData;
};

int main(int argc, char * argv[])
{
  char buffer[sizeof(FlexibleArrayMember) + 100*sizeof(double)];
  double* p = (double*)(buffer + sizeof(FlexibleArrayMember)); //aligment problem
  FlexibleArrayMember oData = *(new(buffer) FlexibleArrayMember(100, p));

  for(int i = 0; i < 100; i++)
    oData[i] = i * 0.2;
    
  std::cout << oData[0] << ", ";
  for(int i = 1; i < 100; i++)
    std::cout << ", " << oData[i];
    
  oData.~FlexibleArrayMember();
  std::cout << std::endl;
  
  std::cout << "the end" << std::endl;
  return 0;
}
И каждый день — без права на ошибку...
Re[28]: Хозяйке на заметку: compile-time CRC32
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.12.13 10:59
Оценка:
Здравствуйте, Lazin, Вы писали:

L>Именно, тебе не хватает опыта для того, чтобы просто понять о чем мы тут толкуем

ну да, ну да — о великий.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[28]: Хозяйке на заметку: compile-time CRC32
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.12.13 11:00
Оценка:
Здравствуйте, Lazin, Вы писали:

L>Для полоного понимания того, что есть memory mapped I/O и почему это так хорошо, следует разобраться сначала с paging-ом в современных ОС и с тем как работает маппинг виртуальных адресов на физические, TLB, page-файл, вот это вот все.

фантик вовсе не обязан описывать то, что в нем содержится.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[29]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 06.12.13 11:11
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, Lazin, Вы писали:


E>>>>Кроме того, его же можно безопасно завернуть в С++ шаблон...

X>>>Lazin это просил.
L>>Это должно было послужить иллюстрацией того, что метапрограммирование на шаблонах в современном с++ иногда все же просасывает примитивному коду на Си

BFE>Ой, да ладно! Всё можно написать и на С++ и работать будет ничуть не хуже. Полный пример долго писать, а для затравки могу подкинуть вот такой код, написанный за 10 минут. Тут, конечно, есть проблемы с обработкой ошибок и преобразованием указателей, но всё это можно развить и углубить без потери производительности:


BFE>
BFE>class FlexibleArrayMember
BFE>{
BFE>  public:
BFE>    FlexibleArrayMember(size_t sz, double*& data)
BFE>      :  m_sz(sz),
BFE>         m_rData(data)
BFE>    {}
BFE>  public:
BFE>    double& operator[] (size_t nIndex)
BFE>    {
BFE>       assert(0 <= nIndex && nIndex < m_sz);
BFE>       return m_rData[nIndex];
BFE>    }
BFE>  private:  
BFE>    size_t   m_sz;
BFE>    double*& m_rData;
BFE>};

BFE>int main(int argc, char * argv[])
BFE>{
BFE>  char buffer[sizeof(FlexibleArrayMember) + 100*sizeof(double)];
BFE>  double* p = (double*)(buffer + sizeof(FlexibleArrayMember)); //aligment problem
BFE>  FlexibleArrayMember oData = *(new(buffer) FlexibleArrayMember(100, p));

BFE>  for(int i = 0; i < 100; i++)
BFE>    oData[i] = i * 0.2;
    
BFE>  std::cout << oData[0] << ", ";
BFE>  for(int i = 1; i < 100; i++)
BFE>    std::cout << ", " << oData[i];
    
BFE>  oData.~FlexibleArrayMember();
BFE>  std::cout << std::endl;
  
BFE>  std::cout << "the end" << std::endl;
BFE>  return 0;
BFE>}

BFE>


Это куда более многословно, не решает проблему выравнивания (выносит ее из класса в код, создающий объект), не делает код более безопасным. Увы
Re[30]: Хозяйке на заметку: compile-time CRC32
От: B0FEE664  
Дата: 06.12.13 11:40
Оценка:
Здравствуйте, Lazin, Вы писали:

E>>>>>Кроме того, его же можно безопасно завернуть в С++ шаблон...

X>>>>Lazin это просил.
L>>>Это должно было послужить иллюстрацией того, что метапрограммирование на шаблонах в современном с++ иногда все же просасывает примитивному коду на Си

BFE>>Ой, да ладно! Всё можно написать и на С++ и работать будет ничуть не хуже. Полный пример долго писать, а для затравки могу подкинуть вот такой код, написанный за 10 минут. Тут, конечно, есть проблемы с обработкой ошибок и преобразованием указателей, но всё это можно развить и углубить без потери производительности:


L>Это куда более многословно,

Зато можно много чего написать.

L>не решает проблему выравнивания (выносит ее из класса в код, создающий объект),

Можно решить и в класс занести. Дело не хитрое.

L> не делает код более безопасным. Увы

Ну, ассёрт на индекс я поставил. А нужно-то что?
И каждый день — без права на ошибку...
Re[30]: Хозяйке на заметку: compile-time CRC32
От: Erop Россия  
Дата: 06.12.13 19:53
Оценка:
Здравствуйте, Lazin, Вы писали:

L>Это куда более многословно, не решает проблему выравнивания (выносит ее из класса в код, создающий объект), не делает код более безопасным. Увы


Ну, так если хочется просто сделать безопасно, то можно просто структуру, в конец которой "приписан" массив сделать с закрытым operator new и остальной ерундой и вперёд, создавай/разрушай безопасно, а остальное как в С мона...

А если ещё хочется от массива сревисов как в С++, то чуть больше похимичить прийдётся, конечно...
Но тоже ничего нереального.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[31]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 06.12.13 20:44
Оценка:
Здравствуйте, B0FEE664, Вы писали:

L>>Это куда более многословно,

BFE>Зато можно много чего написать.

L>>не решает проблему выравнивания (выносит ее из класса в код, создающий объект),

BFE>Можно решить и в класс занести. Дело не хитрое.

Дело в том, что можно много чего там написать, но надо ли? Неужели это поможет решить какие-нибудь проблемы с этим кодом (кроме формального UB, на который лично мне фиолетово)?

L>> не делает код более безопасным. Увы

BFE>Ну, ассёрт на индекс я поставил. А нужно-то что?
assert — дело нехитрое, я тоже assert использовал
Re[31]: Хозяйке на заметку: compile-time CRC32
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 06.12.13 20:48
Оценка:
Здравствуйте, Erop, Вы писали:

L>>Это куда более многословно, не решает проблему выравнивания (выносит ее из класса в код, создающий объект), не делает код более безопасным. Увы

E>Ну, так если хочется просто сделать безопасно, то можно просто структуру, в конец которой "приписан" массив сделать с закрытым operator new и остальной ерундой и вперёд, создавай/разрушай безопасно, а остальное как в С мона...
А можно просто проверять размер массива, прежде чем делать reinterpret_cast

E>А если ещё хочется от массива сревисов как в С++, то чуть больше похимичить прийдётся, конечно...

E>Но тоже ничего нереального.

Вот в том то и дело, что человеку, применяющему struct hack в коде ничего такого не хочется, скорее наоборот, "сервисы как в С++" для него выглядят как переусложнение кода
Re[32]: Хозяйке на заметку: compile-time CRC32
От: Erop Россия  
Дата: 07.12.13 02:40
Оценка:
Здравствуйте, Lazin, Вы писали:

L>А можно просто проверять размер массива, прежде чем делать reinterpret_cast

А зачем его вообще делать?..

Если элементы массива POD, то можно прямо как в С сделать же, тока для безопасности лучше таки new с delete переделать.
А если не POD, то всё равно их создавать/разрушать надо, то есть опять же new и delete надо прятать, а создавать/разрушать фабричными методами какими-то...


L>Вот в том то и дело, что человеку, применяющему struct hack в коде ничего такого не хочется, скорее наоборот, "сервисы как в С++" для него выглядят как переусложнение кода


В смысле "не хочется"? Ну, например, получить доступ к массиву как к паре интераторов может же захотеться? А обратный итератор, например?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.