Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Волк-Призрак,
>> ПК> В том, что нельзя писать свободные функции.
>> Свободные от кого? От чего? Меня эта реплика даже рассмешила...
ПК>Это термин такой.
ПК>http://whiteunicorn.dax.ru/docs/prog/cpp/GradiBuch/ch02.html ПК>
Свободная функция — функция, не входящая ни в какой класс.
А чем это отличается от глобальной функции?
Кстати, вроде функция, являющая членом класса, называется методом. Надо приучаться к короткому слову, по-военному
Здравствуйте, AndrewVK, Вы писали:
A>>Причем, utf-8 это не какая-либо особенная кодировка, для которой есть специальная поддержка. Таким же образом я бы мог прикрутить поддержку для любой другой кодировки. Покажи мне другую библиотеку, где данная операция обходилась бы так же легко. AVK>.NET Framework
Здравствуйте, Mika Soukhov, Вы писали:
MS>Здравствуйте, Павел Кузнецов, Вы писали: ПК>>
Свободная функция — функция, не входящая ни в какой класс.
MS>А чем это отличается от глобальной функции?
MS>Кстати, вроде функция, являющая членом класса, называется методом. Надо приучаться к короткому слову, по-военному
Нуу... Я вообще считаю что это атавизм — всеравно их суют в классы (статические методы) или в пространства имён. Потому и удивился "свободной" ф-ии.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, AndrewVK, Вы писали:
A>>>Причем, utf-8 это не какая-либо особенная кодировка, для которой есть специальная поддержка. Таким же образом я бы мог прикрутить поддержку для любой другой кодировки. Покажи мне другую библиотеку, где данная операция обходилась бы так же легко. AVK>>.NET Framework
A>А UTF-32, UTF-7, KOI-8r?
Да, в самом деле, как насчёт koi8r? Мало тогочто например я изредка ещё и линух врубаю так ведь почта почти вся на бывшемм ссср бродит в этой кодироффке! Если это не поддерживается "базовым" .Net, то всеравно широкое распространение получит сборка, реализуюшая эту кодировку.
А всякие там coder-decoder — это извращение. Надо было делать имхо иначе, но это не имеет значиния, всеравно придётся пользовать то что есть.
Если кратко то я бы ввёл понятие "encodings mapping" — файл записей вида (100 лет не писал структур сори за потенцальный туфтур)
ессесно не обязательно unicode32 пугать людей, можно было темже unicode16 "обойтись". Главное — принцип. Смысл в том, что в папке лежат файлы мапинга, и достаточно 1-2 класса унивесальных (носледовательных разумеется), которые использубт файлаы мапинга в своей работе.
ЗЫ: разумеется мапинг должен отображать только те символы, которые содержит кодировка меньшей разрядности, остальные мапятся в то, на что замапен 0. Таким образом для тойже win1251 получаем 256 записей — всего 2048 байт — не так уж и много, если в памяти она будет в 1м жкземпяре
7 интерпретируется как 8 "с 0-м 8м битом".
Здравствуйте, Волк-Призрак, Вы писали:
ВП>Нуу... Я вообще считаю что это атавизм — всеравно их суют в классы (статические методы) или в пространства имён.
НаймСпейс — это логическое объединение, а вот классы — физическое.
Свободная функция — функция, не входящая ни в какой класс.
> А чем это отличается от глобальной функции?
Тем, что она может не быть глобальной. Например, входить в какой-нибудь namespace. "Глобальная" говорит об области видимости. "Свободная" говорит, что функция не является членом класса. Суть ортогональные вещи.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Волк-Призрак,
> Нуу... Я вообще считаю что это атавизм — всеравно их суют в классы (статические методы) или в пространства имён. Потому и удивился "свободной" ф-ии.
Функция, входящая в namespace, но не являющаяся членом какого-нибудь класса, является свободной. Именно таких функций нет в C#/Java.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
"AndrewVK" <5161@users.rsdn.ru> wrote in message news:969525@news.rsdn.ru > Неправильно видишь. Минимально достаточно 1 класс и реализовать в нем > 6 методов, по 3 на каждое направление преобразования:
Меня интересует логика, которой ты руководствуешься в данном случае. Как ты знаешь, какие методы нужно реализовывать в своем, унаследованном от Encoding классе, а какие нет?
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>... и излишние упрощения тоже.
Тем не менее, факт остается фактом. Подавляющее большинство ошибок — это ошибки кодирования.
ГВ>Потому что даже "прокатку" по памяти обычно можно вычислить быстро. Главное — засечь её существование.
Всего то навсего. Разве же это сложно — выявить то самое сочетание факторов, которое проявляется раз в месяц на одном компьютере из десяти?
Вероятно, именно поэтому в инструкциях по кодированию появляется запрет под страхом смертной казни примененять арифметику указателей
ГВ>Блин, ну сколько можно повторять. Никто не защитит программиста (и программу) от ошибок лучше, чем он сам.
Бывают опасные бритвы, а бывают безопасные. Если очень хорошо постараться, то можно порезаться и безопасной. Но перерезать ей себе горло точно не получится. Ну если не считать особо талантливых индивидуумов
Дарней,
> ГВ> Блин, ну сколько можно повторять. Никто не защитит программиста (и программу) от ошибок лучше, чем он сам.
> Бывают опасные бритвы, а бывают безопасные. <...>
Да-да! А еще ножи бывают настоящие, "опасные", а бывают пластиковые, "безопасные"
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Да-да! А еще ножи бывают настоящие, "опасные", а бывают пластиковые, "безопасные"
Пластиковые ножи, искусственные елки, безалкогольное пиво и технология .NET — вот что ведет человечество к надувным резиновым женщинам и биологическому краху!
Все, что здесь сказано, может и будет использоваться против меня...
ВП>Да, в самом деле, как насчёт koi8r? Мало тогочто например я изредка ещё и линух врубаю так ведь почта почти вся на бывшемм ссср бродит в этой кодироффке! Если это не поддерживается "базовым" .Net, то всеравно широкое распространение получит сборка, реализуюшая эту кодировку.
Вообще-то .Net поддерживает все кодировки, присутствующие в хост-системе. Т.е все эти koi-8r, koi-8u есть, вместе с еще более экзотическими. ВП>А всякие там coder-decoder — это извращение. Надо было делать имхо иначе, но это не имеет значиния, всеравно придётся пользовать то что есть.
Я бы на твоем месте почитал что-нибудь хотя бы типа MSDN по mlang.dll. Чтобы понять, какие еще сервисы бывают связаны с кодовыми страницами. Глядишь, и отпадет желание изобретать очередной способ байт-маппинга.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, alexeiz, Вы писали:
A>Меня интересует логика, которой ты руководствуешься в данном случае. Как ты знаешь, какие методы нужно реализовывать в своем, унаследованном от Encoding классе, а какие нет?
Документацию читаю и обращаю внимание на модификатор abstract. Плюс знание общих принципов построения библиотеки фреймворка.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Функция, входящая в namespace, но не являющаяся членом какого-нибудь класса, является свободной. Именно таких функций нет в C#/Java.
Там нет глобальные функций (вернее, они есть, но не уровне C#), а вот создать класс, не входящий ни в один неймспейс, можно.
Хотя, честно говоря, я так и не понял, в чем смысл свободной функции. Неймспейс — это всего лишь префиск перед именем типов и функций. Равен ли он "" или какому-то "Warlock" — никакой разницы. Или я что то упустил?
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Тем, что она может не быть глобальной. Например, входить в какой-нибудь namespace. "Глобальная" говорит об области видимости. "Свободная" говорит, что функция не является членом класса. Суть ортогональные вещи.
Я бы сказал даже "атавиальные"
Спорить не надо, всеравно меня не убедите, что отсутствие свободных функций — страшное преступление. за которое авторов языка/платформы надо в гаагский трибунал.
Здравствуйте, Sinclair, Вы писали:
S>Я бы на твоем месте почитал что-нибудь хотя бы типа MSDN по mlang.dll. Чтобы понять, какие еще сервисы бывают связаны с кодовыми страницами. Глядишь, и отпадет желание изобретать очередной способ байт-маппинга.
А я и не собираюсь его изобретать — я говорю что "64 кубических сфероидальных вакуумных коня на спиралях инвертированных спинов виртуальных функций" по поводу преобразования кодироваок городить не обязательно.
А впрочем, какая разница, всеравно в биллютене один пункт, и тот проставлен...
Mika Soukhov,
> ПК> Функция, входящая в namespace, но не являющаяся членом какого-нибудь класса, является свободной. Именно таких функций нет в C#/Java.
> Там нет глобальные функций (вернее, они есть, но не уровне C#), а вот создать класс, не входящий ни в один неймспейс, можно.
Речь о свободных функциях, которых, как мы уже выяснили, нет.
> Хотя, честно говоря, я так и не понял, в чем смысл свободной функции. Неймспейс — это всего лишь префиск перед именем типов и функций. Равен ли он "" или какому-то "Warlock" — никакой разницы. Или я что то упустил?
Главным является то, что класс, в отличие от namespace, нельзя расширять в других модулях. Да и вообще, с точки зрения процедурного программирования, о котором шла речь, классы просто болтаются под руками: никакой нужды в них там нет, но несмотря на неудобства приходится использовать, только из-за того, что их навязывает язык.
Если же посмотреть чуть шире, включая в область рассмотрения шаблоны/generics, то будет видно, что, например, некоторые техники, связанные с перегрузкой, из-за отсутствия свободных функций работать не будут.
Например, как без свободных функций вызвать в шаблоне/generic функции скалярное умножение двух векторов, если вектор может быть как встроенным массивом, так и структурой, определенной пользователем? Со свободными функиями легко:
Задача пользователя данной функции — определить scalar_multiplication для типов, которые передаются в данную функцию. Это можно сделать для любых типов, даже если тип определен в какой-то библиотеке, модифицировать которую мы не можем.
Еще один, классический пример — функция swap(). Та же история: ее можно использовать из любых шаблонов для любых типов именно потому, что она является свободной функцией: пользователь может использовать готовую, либо, при желании, определить свою, более оптимальную, для своих или библиотечных типов.
В результате, без нормальной поддержки свободных функций, многие возможности языка недоступны пользователю, не желающему писать в ОО-стиле.
Posted via RSDN NNTP Server 1.9
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>VladD2,
>> ПК>Данный код будет иметь смысл, например, если у CWindow есть хоть одна виртуальная функция. Это совсем не тот случай, что рассматривался ранее.
>> < ... ad hominem arguments skipped ... >
>> Это дизайн. Никто не знает когда появится виртуальная функция.
ПК>Влад, извини, но сейчас ты сказал совершеннейшую глупость. Полиморфным класс может стать "вдруг" только при абсолютно неграмотном проектировании.
Извини и ты меня, но глупость говришь ты. Полиморфным класс будет и без виртуальной функции. Полиморфизм — это возможность работать с объектами производных классов, используя интерфейс их базового класса. А безграмотным дизайн становится из-за желания сэкономить на витруальных функциях. К тому же, любой мало-мальски долго живующий проект постоянно изменяется. И внесение изменений в дизайн — это совершенно нармальный процесс (рефакториг). И если твой дизайн плохо поддается изменению, то плох такой дизайн.
ПК>Зависит от контекста. Пример iterator traits уже приводили.
Все равно странно. Это именно экономия в рассчете, на то что изменений не будет. В общем, очередное закладывание на частности ради скорости.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.