Re[46]: Чем становится C++?
От: Mika Soukhov Stock#
Дата: 29.12.04 19:46
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Волк-Призрак,


>> ПК> В том, что нельзя писать свободные функции.


>> Свободные от кого? От чего? Меня эта реплика даже рассмешила...


ПК>Это термин такой.


ПК>http://whiteunicorn.dax.ru/docs/prog/cpp/GradiBuch/ch02.html

ПК>

Свободная функция — функция, не входящая ни в какой класс.


А чем это отличается от глобальной функции?

Кстати, вроде функция, являющая членом класса, называется методом. Надо приучаться к короткому слову, по-военному
Re[37]: Чем становится C++?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 29.12.04 19:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

A>>Причем, utf-8 это не какая-либо особенная кодировка, для которой есть специальная поддержка. Таким же образом я бы мог прикрутить поддержку для любой другой кодировки. Покажи мне другую библиотеку, где данная операция обходилась бы так же легко.

AVK>.NET Framework

А UTF-32, UTF-7, KOI-8r?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[47]: Чем становится C++?
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 29.12.04 20:29
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Здравствуйте, Павел Кузнецов, Вы писали:

ПК>>

Свободная функция — функция, не входящая ни в какой класс.


MS>А чем это отличается от глобальной функции?


MS>Кстати, вроде функция, являющая членом класса, называется методом. Надо приучаться к короткому слову, по-военному


Нуу... Я вообще считаю что это атавизм — всеравно их суют в классы (статические методы) или в пространства имён. Потому и удивился "свободной" ф-ии.
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[38]: Чем становится C++?
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 29.12.04 20:29
Оценка:
Здравствуйте, adontz, Вы писали:

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


A>>>Причем, utf-8 это не какая-либо особенная кодировка, для которой есть специальная поддержка. Таким же образом я бы мог прикрутить поддержку для любой другой кодировки. Покажи мне другую библиотеку, где данная операция обходилась бы так же легко.

AVK>>.NET Framework

A>А UTF-32, UTF-7, KOI-8r?


Да, в самом деле, как насчёт koi8r? Мало тогочто например я изредка ещё и линух врубаю так ведь почта почти вся на бывшемм ссср бродит в этой кодироффке! Если это не поддерживается "базовым" .Net, то всеравно широкое распространение получит сборка, реализуюшая эту кодировку.
А всякие там coder-decoder — это извращение. Надо было делать имхо иначе, но это не имеет значиния, всеравно придётся пользовать то что есть.
Если кратко то я бы ввёл понятие "encodings mapping" — файл записей вида (100 лет не писал структур сори за потенцальный туфтур)
struct charencodingmapingpoint {
unicode32char unicode32symbol;
__int32 encodingsymbol;
}
//а файл начинается с загоовка вида
struct charencodingmapingpoint {
__int32 symbolsize;//7, 8, 16, 32
unicode32char[8] encodingisoname;
unicode32char[64] encodingdisplayname;
}

ессесно не обязательно unicode32 пугать людей, можно было темже unicode16 "обойтись". Главное — принцип. Смысл в том, что в папке лежат файлы мапинга, и достаточно 1-2 класса унивесальных (носледовательных разумеется), которые использубт файлаы мапинга в своей работе.
ЗЫ: разумеется мапинг должен отображать только те символы, которые содержит кодировка меньшей разрядности, остальные мапятся в то, на что замапен 0. Таким образом для тойже win1251 получаем 256 записей — всего 2048 байт — не так уж и много, если в памяти она будет в 1м жкземпяре
7 интерпретируется как 8 "с 0-м 8м битом".
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[48]: Чем становится C++?
От: Mika Soukhov Stock#
Дата: 29.12.04 20:37
Оценка: -1
Здравствуйте, Волк-Призрак, Вы писали:

ВП>Нуу... Я вообще считаю что это атавизм — всеравно их суют в классы (статические методы) или в пространства имён.


НаймСпейс — это логическое объединение, а вот классы — физическое.
Re[47]: Чем становится C++?
От: Павел Кузнецов  
Дата: 29.12.04 20:43
Оценка:
Mika Soukhov,

> ПК>http://whiteunicorn.dax.ru/docs/prog/cpp/GradiBuch/ch02.html

> ПК>

Свободная функция — функция, не входящая ни в какой класс.


> А чем это отличается от глобальной функции?


Тем, что она может не быть глобальной. Например, входить в какой-нибудь namespace. "Глобальная" говорит об области видимости. "Свободная" говорит, что функция не является членом класса. Суть ортогональные вещи.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[48]: Чем становится C++?
От: Павел Кузнецов  
Дата: 29.12.04 20:49
Оценка:
Волк-Призрак,

> Нуу... Я вообще считаю что это атавизм — всеравно их суют в классы (статические методы) или в пространства имён. Потому и удивился "свободной" ф-ии.


Функция, входящая в namespace, но не являющаяся членом какого-нибудь класса, является свободной. Именно таких функций нет в C#/Java.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[41]: Чем становится C++?
От: alexeiz  
Дата: 29.12.04 21:47
Оценка:
"AndrewVK" <5161@users.rsdn.ru> wrote in message
news:969525@news.rsdn.ru
> Неправильно видишь. Минимально достаточно 1 класс и реализовать в нем
> 6 методов, по 3 на каждое направление преобразования:
> GetByteCount
> GetMaxByteCount
> GetBytes
> GetCharCount
> GetMaxCharCount
> GetChars
>


Меня интересует логика, которой ты руководствуешься в данном случае. Как ты знаешь, какие методы нужно реализовывать в своем, унаследованном от Encoding классе, а какие нет?
Posted via RSDN NNTP Server 1.9
Re[3]: Блин!
От: Дарней Россия  
Дата: 30.12.04 04:45
Оценка: 21 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>... и излишние упрощения тоже.


Тем не менее, факт остается фактом. Подавляющее большинство ошибок — это ошибки кодирования.

ГВ>Потому что даже "прокатку" по памяти обычно можно вычислить быстро. Главное — засечь её существование.


Всего то навсего. Разве же это сложно — выявить то самое сочетание факторов, которое проявляется раз в месяц на одном компьютере из десяти?
Вероятно, именно поэтому в инструкциях по кодированию появляется запрет под страхом смертной казни примененять арифметику указателей

ГВ>Блин, ну сколько можно повторять. Никто не защитит программиста (и программу) от ошибок лучше, чем он сам.


Бывают опасные бритвы, а бывают безопасные. Если очень хорошо постараться, то можно порезаться и безопасной. Но перерезать ей себе горло точно не получится. Ну если не считать особо талантливых индивидуумов
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: Блин!
От: Павел Кузнецов  
Дата: 30.12.04 05:48
Оценка: +1
Дарней,

> ГВ> Блин, ну сколько можно повторять. Никто не защитит программиста (и программу) от ошибок лучше, чем он сам.


> Бывают опасные бритвы, а бывают безопасные. <...>


Да-да! А еще ножи бывают настоящие, "опасные", а бывают пластиковые, "безопасные"
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: Блин!
От: Alex Reyst Россия  
Дата: 30.12.04 05:55
Оценка: :))) :))) :))) :)))
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Да-да! А еще ножи бывают настоящие, "опасные", а бывают пластиковые, "безопасные"


Пластиковые ножи, искусственные елки, безалкогольное пиво и технология .NET — вот что ведет человечество к надувным резиновым женщинам и биологическому краху!
Все, что здесь сказано, может и будет использоваться против меня...
Re[5]: Блин!
От: Дарней Россия  
Дата: 30.12.04 06:41
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Да-да! А еще ножи бывают настоящие, "опасные", а бывают пластиковые, "безопасные"


Пластиковые ножи — они не "безопасные", они "дешевые". Хотя навредить с их помощью и правда тяжело. Как и сделать с их помощью вообще хоть что-нибудь
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[39]: Чем становится C++?
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.12.04 08:55
Оценка: +2
Здравствуйте, Волк-Призрак, Вы писали:


ВП>Да, в самом деле, как насчёт koi8r? Мало тогочто например я изредка ещё и линух врубаю так ведь почта почти вся на бывшемм ссср бродит в этой кодироффке! Если это не поддерживается "базовым" .Net, то всеравно широкое распространение получит сборка, реализуюшая эту кодировку.

Вообще-то .Net поддерживает все кодировки, присутствующие в хост-системе. Т.е все эти koi-8r, koi-8u есть, вместе с еще более экзотическими.
ВП>А всякие там coder-decoder — это извращение. Надо было делать имхо иначе, но это не имеет значиния, всеравно придётся пользовать то что есть.
Я бы на твоем месте почитал что-нибудь хотя бы типа MSDN по mlang.dll. Чтобы понять, какие еще сервисы бывают связаны с кодовыми страницами. Глядишь, и отпадет желание изобретать очередной способ байт-маппинга.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[42]: Чем становится C++?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.12.04 09:29
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

A>Меня интересует логика, которой ты руководствуешься в данном случае. Как ты знаешь, какие методы нужно реализовывать в своем, унаследованном от Encoding классе, а какие нет?


Документацию читаю и обращаю внимание на модификатор abstract. Плюс знание общих принципов построения библиотеки фреймворка.
... << RSDN@Home 1.1.4 beta 3 rev. 268>>
AVK Blog
Re[49]: Чем становится C++?
От: Mika Soukhov Stock#
Дата: 30.12.04 09:32
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Функция, входящая в namespace, но не являющаяся членом какого-нибудь класса, является свободной. Именно таких функций нет в C#/Java.


Там нет глобальные функций (вернее, они есть, но не уровне C#), а вот создать класс, не входящий ни в один неймспейс, можно.

Хотя, честно говоря, я так и не понял, в чем смысл свободной функции. Неймспейс — это всего лишь префиск перед именем типов и функций. Равен ли он "" или какому-то "Warlock" — никакой разницы. Или я что то упустил?
Re[38]: Чем становится C++?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.12.04 09:40
Оценка:
Здравствуйте, adontz, Вы писали:

AVK>>.NET Framework


A>А UTF-32,


Можно дописать поддержку.

A> UTF-7, KOI-8r?


Поддерживается стандартно.
... << RSDN@Home 1.1.4 beta 3 rev. 268>>
AVK Blog
Re[48]: Чем становится C++?
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 30.12.04 10:28
Оценка: 1 (1) -2 :)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Тем, что она может не быть глобальной. Например, входить в какой-нибудь namespace. "Глобальная" говорит об области видимости. "Свободная" говорит, что функция не является членом класса. Суть ортогональные вещи.


Я бы сказал даже "атавиальные"
Спорить не надо, всеравно меня не убедите, что отсутствие свободных функций — страшное преступление. за которое авторов языка/платформы надо в гаагский трибунал.
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[40]: Чем становится C++?
От: Волк-Призрак Россия http://ghostwolf.newmail.ru
Дата: 30.12.04 10:28
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Я бы на твоем месте почитал что-нибудь хотя бы типа MSDN по mlang.dll. Чтобы понять, какие еще сервисы бывают связаны с кодовыми страницами. Глядишь, и отпадет желание изобретать очередной способ байт-маппинга.

А я и не собираюсь его изобретать — я говорю что "64 кубических сфероидальных вакуумных коня на спиралях инвертированных спинов виртуальных функций" по поводу преобразования кодироваок городить не обязательно.
А впрочем, какая разница, всеравно в биллютене один пункт, и тот проставлен...
... << RSDN@Home 1.1.4 beta 3 rev. 185>> @@J[getWorld.ApplyCheats(unfair.Cheats.IDDQD_AND_IDKFA]
while(Life.getClass().getClassLoader()==Religion.GOD){Life.be();};
Скажи .net корпорации Microsoft! (c) ghostwolf 2004
7 раз поищи в стандартной библиотеке, 1 раз накодь своё.
Re[50]: Чем становится C++?
От: Павел Кузнецов  
Дата: 30.12.04 15:38
Оценка: 2 (2) +1
Mika Soukhov,

> ПК> Функция, входящая в namespace, но не являющаяся членом какого-нибудь класса, является свободной. Именно таких функций нет в C#/Java.


> Там нет глобальные функций (вернее, они есть, но не уровне C#), а вот создать класс, не входящий ни в один неймспейс, можно.


Речь о свободных функциях, которых, как мы уже выяснили, нет.

> Хотя, честно говоря, я так и не понял, в чем смысл свободной функции. Неймспейс — это всего лишь префиск перед именем типов и функций. Равен ли он "" или какому-то "Warlock" — никакой разницы. Или я что то упустил?


Главным является то, что класс, в отличие от namespace, нельзя расширять в других модулях. Да и вообще, с точки зрения процедурного программирования, о котором шла речь, классы просто болтаются под руками: никакой нужды в них там нет, но несмотря на неудобства приходится использовать, только из-за того, что их навязывает язык.

Если же посмотреть чуть шире, включая в область рассмотрения шаблоны/generics, то будет видно, что, например, некоторые техники, связанные с перегрузкой, из-за отсутствия свободных функций работать не будут.

Например, как без свободных функций вызвать в шаблоне/generic функции скалярное умножение двух векторов, если вектор может быть как встроенным массивом, так и структурой, определенной пользователем? Со свободными функиями легко:
template< class T>
void my_function( const T& t1, const T& t2 )
{
   . . .

   . . . = scalar_multiplication( t1, t2 );

   . . .
}

Задача пользователя данной функции — определить scalar_multiplication для типов, которые передаются в данную функцию. Это можно сделать для любых типов, даже если тип определен в какой-то библиотеке, модифицировать которую мы не можем.

Еще один, классический пример — функция swap(). Та же история: ее можно использовать из любых шаблонов для любых типов именно потому, что она является свободной функцией: пользователь может использовать готовую, либо, при желании, определить свою, более оптимальную, для своих или библиотечных типов.

В результате, без нормальной поддержки свободных функций, многие возможности языка недоступны пользователю, не желающему писать в ОО-стиле.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[29]: Чем становится C++?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.04 17:38
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>VladD2,


>> ПК>Данный код будет иметь смысл, например, если у CWindow есть хоть одна виртуальная функция. Это совсем не тот случай, что рассматривался ранее.


>> < ... ad hominem arguments skipped ... >


>> Это дизайн. Никто не знает когда появится виртуальная функция.


ПК>Влад, извини, но сейчас ты сказал совершеннейшую глупость. Полиморфным класс может стать "вдруг" только при абсолютно неграмотном проектировании.


Извини и ты меня, но глупость говришь ты. Полиморфным класс будет и без виртуальной функции. Полиморфизм — это возможность работать с объектами производных классов, используя интерфейс их базового класса. А безграмотным дизайн становится из-за желания сэкономить на витруальных функциях. К тому же, любой мало-мальски долго живующий проект постоянно изменяется. И внесение изменений в дизайн — это совершенно нармальный процесс (рефакториг). И если твой дизайн плохо поддается изменению, то плох такой дизайн.

ПК>Зависит от контекста. Пример iterator traits уже приводили.


Все равно странно. Это именно экономия в рассчете, на то что изменений не будет. В общем, очередное закладывание на частности ради скорости.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.