Re[36]: плохой язык C++ :)
От: vdimas Россия  
Дата: 15.03.06 17:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>3. Делаем так:

C>
C>struct B
C>{
C>    int a;
C>    std::basic_string<char,shmem_allocator<char> > b,c;
C>};
C>

C>Теперь внутренний буффер std::string будет распологаться в shared
C>memory/file mapping'е.

Да фиг там. Если длина строки не больше 32-х/16-ти байт (в зависимости от реализации), то большинство из них дежат эти значения в локальном буфере.

Тогда уж надо сделать что-то типа NullTerminatedAdapter на основе std::vector.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[37]: плохой язык C++ :)
От: alexeiz  
Дата: 15.03.06 22:35
Оценка:
Здравствуйте, vdimas, Вы писали:

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


C>>3. Делаем так:

C>>
C>>struct B
C>>{
C>>    int a;
C>>    std::basic_string<char,shmem_allocator<char> > b,c;
C>>};
C>>

C>>Теперь внутренний буффер std::string будет распологаться в shared
C>>memory/file mapping'е.

V>Да фиг там. Если длина строки не больше 32-х/16-ти байт (в зависимости от реализации), то большинство из них дежат эти значения в локальном буфере.


Саму строку (в данном случае всю структуру) нужно аллоцировать этим же аллокатором. Тогда всё нормально будет.
Re[37]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 16.03.06 09:25
Оценка:
vdimas wrote:
> C>Теперь внутренний буффер std::string будет распологаться в shared
> C>memory/file mapping'е.
> Да фиг там. Если длина строки не больше 32-х/16-ти байт (в зависимости
> от реализации), то большинство из них дежат эти значения в локальном буфере.
Сама структура тоже создается этим же аллокатором.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[38]: плохой язык C++ :)
От: vdimas Россия  
Дата: 16.03.06 16:57
Оценка:
Здравствуйте, alexeiz, Вы писали:


V>>Да фиг там. Если длина строки не больше 32-х/16-ти байт (в зависимости от реализации), то большинство из них дежат эти значения в локальном буфере.


A>Саму строку (в данном случае всю структуру) нужно аллоцировать этим же аллокатором. Тогда всё нормально будет.


Это значит надо наследовать от std::basic_string и переопределять операторы new/delete? А заодно еще около 20-ти конструкторов???
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[39]: плохой язык C++ :)
От: alexeiz  
Дата: 16.03.06 22:00
Оценка:
Здравствуйте, vdimas, Вы писали:

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



V>>>Да фиг там. Если длина строки не больше 32-х/16-ти байт (в зависимости от реализации), то большинство из них дежат эти значения в локальном буфере.


A>>Саму строку (в данном случае всю структуру) нужно аллоцировать этим же аллокатором. Тогда всё нормально будет.


V>Это значит надо наследовать от std::basic_string и переопределять операторы new/delete? А заодно еще около 20-ти конструкторов???


Зачем же так сразу. Просто используешь аллокатор напрямую:
typedef std::basic_string<char,shmem_allocator<char>> sh_string;
typedef sh_string::allocator::rebind<B>::other b_allocator;

//  TODO: add exception handling
B * construct_from(B const & val) {
    b_allocator alloc;
    B * obj = alloc.allocate(1);
    alloc.construct(obj, val);
    return obj;
}

void destroy(B * obj) {
    b_allocator alloc;
    alloc.destroy(obj);
    alloc.deallocate(obj, 1);
}
Re[40]: плохой язык C++ :)
От: vdimas Россия  
Дата: 16.03.06 23:17
Оценка:
Здравствуйте, alexeiz, Вы писали:


A>Зачем же так сразу. Просто используешь аллокатор напрямую:

[skip]

Напрямую можно еще проще через inplace new, стиль мне не нравится. Если бы уж прижало, то я бы скорее переопределил пару десятков конструкторов std::basic_string но сохранил читабельность.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[41]: плохой язык C++ :)
От: alexeiz  
Дата: 17.03.06 00:13
Оценка:
Здравствуйте, vdimas, Вы писали:

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



A>>Зачем же так сразу. Просто используешь аллокатор напрямую:

V>[skip]

V>Напрямую можно еще проще через inplace new,


Да, так даже лучше.

> стиль мне не нравится. Если бы уж прижало, то я бы скорее переопределил пару десятков конструкторов std::basic_string но сохранил читабельность.


Зачем переопределять конструкторы? Ты же только память в другом месте аллоцируешь, а функциональность конструкторов у тебя остаётся такой же. Ну, допустим, ты унаследовал от basic_string, где в конструкторах наследуемого класса ты собрался использовать аллокатор?
Re[42]: плохой язык C++ :)
От: vdimas Россия  
Дата: 17.03.06 01:14
Оценка:
Здравствуйте, alexeiz, Вы писали:


A>>>Зачем же так сразу. Просто используешь аллокатор напрямую:

V>>[skip]

V>>Напрямую можно еще проще через inplace new,


A>Да, так даже лучше.


не совсем, ниже поясню

>> стиль мне не нравится. Если бы уж прижало, то я бы скорее переопределил пару десятков конструкторов std::basic_string но сохранил читабельность.


A>Зачем переопределять конструкторы? Ты же только память в другом месте аллоцируешь, а функциональность конструкторов у тебя остаётся такой же. Ну, допустим, ты унаследовал от basic_string, где в конструкторах наследуемого класса ты собрался использовать аллокатор?


Я же сказал в позапрошлом посте, что надо переопределить для типа оператор new. Для std::basic_string его переопределить неудасться, значит, надо переопределить его для своего наследника.

Inplace new мне не нравится по причине банальной: "двухтактная инициализация", невозможность использования в функциональном стиле.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: плохой язык C++ :)
От: Leonid V. Volnin Россия  
Дата: 17.03.06 05:28
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали.

коллега, по-моему это примерно тоже самое что говорить мол, русский язык плохой, потому что он допускает конструкции вида "я вашу маму [sensored]" и "да ты козел необразованный". язык только предоставляет возможности, а как вы ими воспользуетесь — это уже ваши проблемы.
best regards, Leonid
Re[2]: плохой язык C++ :)
От: dshe  
Дата: 17.03.06 07:56
Оценка: +2 :))
Здравствуйте, Leonid V. Volnin, Вы писали:

LVV>Здравствуйте, Зверёк Харьковский, Вы писали.


LVV>коллега, по-моему это примерно тоже самое что говорить мол, русский язык плохой, потому что он допускает конструкции вида "я вашу маму [sensored]" и "да ты козел необразованный". язык только предоставляет возможности, а как вы ими воспользуетесь — это уже ваши проблемы.


Ну, если бы пользуясь русским языком, нужно было бы постоянно заботиться о том, чтобы случайно кого-нибудь не послать, полагаю, что совершенно справедливо можно было бы сказать, что русский язык -- плохой.
--
Дмитро
Re[3]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.03.06 08:02
Оценка: :)
Здравствуйте, dshe, Вы писали:

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


А как же тогда известная песня в исполнении В.Леонтьева:

...Каждый хочет иметь и невесту, и друга...

А ведь казалось бы, совершенно безобидный текст.



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: плохой язык C++ :)
От: Leonid V. Volnin Россия  
Дата: 17.03.06 08:08
Оценка:
Здравствуйте, dshe, Вы писали:

D>Здравствуйте, Leonid V. Volnin, Вы писали:


LVV>>Здравствуйте, Зверёк Харьковский, Вы писали.


LVV>>коллега, по-моему это примерно тоже самое что говорить мол, русский язык плохой, потому что он допускает конструкции вида "я вашу маму [sensored]" и "да ты козел необразованный". язык только предоставляет возможности, а как вы ими воспользуетесь — это уже ваши проблемы.


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


ну дык разве это не так?
не все же люди могут следить за своей речью, многие сначала говорят, а потом думают.
в результате именно так и получается. так что сомнений нет — русский язык плохой
best regards, Leonid
Re[39]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 17.03.06 08:22
Оценка: +1
vdimas wrote:
> A>Саму строку (в данном случае всю структуру) нужно аллоцировать этим же
> аллокатором. Тогда всё нормально будет.
> Это значит надо наследовать от std::basic_string и переопределять
> операторы new/delete? А заодно еще около 20-ти конструкторов???
Зачем же так грубо, выглядит примерно так:
const ShmemAllocator alloc_inst(segment.get_segment_manager());

typedef std::string<char,std::char_traits<char>,
    ShmemAllocator> MyString;

MyString *str=segment.construct<MyString>("OptionalObjectName")
    (alloc_inst);
//Конструктор std::string с одним параметром-аллокатором

MyString *str2=segment.construct<MyString>("OptionalObjectName")
    ('a',11,alloc_inst);
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[4]: плохой язык C++ :)
От: dshe  
Дата: 17.03.06 08:23
Оценка:
Здравствуйте, Leonid V. Volnin, Вы писали:

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


LVV>ну дык разве это не так?

LVV>не все же люди могут следить за своей речью, многие сначала говорят, а потом думают.
LVV>в результате именно так и получается. так что сомнений нет — русский язык плохой

Что ж, даже в естественных языках нет совершенства.
--
Дмитро
Re[2]: плохой язык C++ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.06 10:39
Оценка:
Здравствуйте, Leonid V. Volnin, Вы писали:

LVV>коллега, по-моему это примерно тоже самое что говорить мол, русский язык плохой, потому что он допускает конструкции вида "я вашу маму [sensored]" и "да ты козел необразованный". язык только предоставляет возможности, а как вы ими воспользуетесь — это уже ваши проблемы.


Некорректная анлогия. ЯП и разговорные языки сильно отличаются.
ЯП скорее корректнее сравнивать с инструментами. Если есть безопасный инструмент позволяющие выполнить работу приметно так же эффективно как и опасным, то разумный человек скорее выберет безопасный.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: плохой язык C++ :)
От: Leonid V. Volnin Россия  
Дата: 17.03.06 11:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Leonid V. Volnin, Вы писали:


LVV>>коллега, по-моему это примерно тоже самое что говорить мол, русский язык плохой, потому что он допускает конструкции вида "я вашу маму [sensored]" и "да ты козел необразованный". язык только предоставляет возможности, а как вы ими воспользуетесь — это уже ваши проблемы.


VD>Некорректная анлогия. ЯП и разговорные языки сильно отличаются.

VD>ЯП скорее корректнее сравнивать с инструментами. Если есть безопасный инструмент позволяющие выполнить работу приметно так же эффективно как и опасным, то разумный человек скорее выберет безопасный.

черт его знает. с инструментами сравнивать скучно :) не ассоциируются у меня языки программирования с инструментами.
с инструментами можно сравнить вспомогательные библиотеки наверное. SDK какое-нибудь. IDE пожалуй можно. но язык программирования?.. язык программирования это тогда уж скорее способ работы с инструментами.
но здесь я аналогию еще не придумал :)
best regards, Leonid
Re[4]: плохой язык C++ :)
От: eaglus Россия  
Дата: 17.03.06 13:53
Оценка:
Здравствуйте, igna, Вы писали:

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


C>>last_hardcoder wrote:

>>> приемника C++
C>>Это как "приемник Путина"?

I>

Он его ночами крутит, ловит, контра, ФРГ. (C)

Ага!

Приёмник — это девайс такой.
Преемник — это тот, кто "преемлет" мою должность после меня. Преемственность у нас.
Re[53]: плохой язык C++ :)
От: Denis2005 Россия  
Дата: 19.03.06 11:40
Оценка:
Здравствуйте, Left2, Вы писали:

L>Не ссорьтесь, горячие парни Решается всё просто — ставите себе debug symbols и смотрите на имена функций. Статистику не мерял, но "на глаз" в XP процентов 80-90 кода на С++.


MS переписал код с "кустарного C" на C, который можно без проблем прогнать через рядовой С++ компилятор.
В частности объявления в стиле K&R были заменены на ANSI-шные.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[54]: плохой язык C++ :)
От: Left2 Украина  
Дата: 20.03.06 09:33
Оценка:
D>MS переписал код с "кустарного C" на C, который можно без проблем прогнать через рядовой С++ компилятор.
D>В частности объявления в стиле K&R были заменены на ANSI-шные.

Не совсем понял что значит "C, который можно без проблем прогнать через рядовой С++ компилятор". Насколько я видел — в call-stack большинство вызываемых функций являются членами классов. Я конечно в pure C не силён, но насколько я знаю он member-функций не поддерживает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[55]: плохой язык C++ :)
От: Denis2005 Россия  
Дата: 21.03.06 07:09
Оценка: +1
Здравствуйте, Left2, Вы писали:

D>>MS переписал код с "кустарного C" на C, который можно без проблем прогнать через рядовой С++ компилятор.

D>>В частности объявления в стиле K&R были заменены на ANSI-шные.

L>... Насколько я видел — в call-stack большинство вызываемых функций являются членами классов...


Во первых стоит уточнить о каких “80-90% кода XP“ шла речь.
Ядро, API, базовые библиотеки и сервисы сделаны на C, просто были переработаны и адаптированы на подмножество, которое нормально поддерживается стандартом C++.

Далее немалая часть кода переведена с C на C++ почти машинным способом (наглядный пример фрагменты MFC).

Имели (C):
struct HDC;
void Proc(HDC hdc, …);



Получили (C++):
class CDC
{
    …
    void Proc(…)
}


В принципе разница только в том, что (для MS-компиляторов) указатель на объект/структуру будет передан через регистр (как правило ECX). Назвать это C++ можно с большой натяжкой.

Поэтому заявление: “… процентов 80-90 кода на С++”, стоило бы заменить на “процентов 80-90 пародии на C++”.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.