Перейти к содержанию
Посмотреть в приложении

A better way to browse. Learn more.

Форум Академгородка, Новосибирск

A full-screen app on your home screen with push notifications, badges and more.

Чтобы установить это приложение на iOS и iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
Чтобы установить это приложение на Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Holywar

Опубликовано
Всю мою недолгою жизнь прогроммировал на Delphi, и вот в силу того что C++ Builder очень на дельфю смахивает , хотел спросить : как по вашему. что лучше?
  • Ответов 280
  • Просмотры 29,6 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Изображения в теме

За что вы воюете? 132 пользователя проголосовало

  1. 1. ?? ??? ?? ???????

    • Microsoft(C/C++. .NET,Visual Studio)
      16%
      22
    • Unix(C/C++, Perl, Bash)
      43%
      58
    • assembler, PMD
      8%
      11
    • Java/C#, OOP/OOD
      10%
      14
    • Web (PHP,HTML,JS)
      8%
      11
    • Rapid easy development (VB, Ruby, Python)
      2%
      3
    • ????????
      9%
      13

Пожалуйста, войдите или зарегистрируйтесь для возможности голосования в этом опросе.

Рекомендуемые сообщения

Опубликовано

QUOTE (Nox Metus @ May 4 2006, 04:55)
Файловый поток нельзя открыть с именем файла, заданным в UNICODE, например <...>

Так это конкретная реализация кривая (и уродский, но обожаемый микрософтом UTF16).

 

(Кстати, может, устроим холивар UTF-8 vs. UTF-16 - вроде, такого еще не было? https://academ.club/html/emoticons/smile.gif А GCC vs. компилятор MSC - уже было? https://academ.club/html/emoticons/smile.gif)

Опубликовано

QUOTE (Nox Metus @ May 4 2006, 04:49)
QUOTE (busa @ May 3 2006, 09:36)
2. Вместо finally в C++ используется RAII.

Неправильный ответ. Во-первых, finally может использоваться не только для освобождения ресурсов. <skipped> Правильный ответ: вместо finally в С++ используется раскрутка стека с вызовом деструкторов во время этой раскрутки.

(Мы сами тут не местные, я вообще почти не программист) А в чем разница? RAII использует раскрутку стека...

 

BTW: в char* вполне укладывается UTF-8. Так что это личные проблемы платформы. Хотя могли бы и с wchar* сделать вариант.

Опубликовано

QUOTE (Max Payne @ May 4 2006, 05:15)
Так это конкретная реализация кривая (и уродский, но обожаемый микрософтом UTF16).

(Кстати, может, устроим холивар UTF-8 vs. UTF-16 - вроде, такого еще не было? https://academ.club/html/emoticons/smile.gif А GCC vs. компилятор MSC - уже было? https://academ.club/html/emoticons/smile.gif)

UTF-16 не трогаем - он хороший туда много чего влезает и он быстрый https://academ.club/html/emoticons/cbs_madlaugh.gif. Тока для китайцев начинают его извращать и получается как обычно. В той же java String это utf16. Да и в C# оно, наверно, так же. в

 

>GCC vs. компилятор MSC

 

Ну тут не интересно - MSVC находится в позе вечного загибона https://academ.club/html/emoticons/cbs_madlaugh.gif.

 

>Правильный ответ: вместо finally в С++ используется раскрутка стека с вызовом >деструкторов во время этой раскрутки.

 

RAII это просто красивое название врапера над объектом и засовывание блока finally в деструктор. Наподобе,


class FinallyFile {
 FILE *file;
public:
 FinallyFile(FILE *_file):file(_file){}

 ~FinallyFile(){
    if (file != NULL) fclose(file);
 }
}

Опубликовано

QUOTE (Nox Metus @ May 4 2006, 13:17)
Неправильно. RAII - это враппер нед над объектом, а над ресурсом.

Да боже мой, как вам угодно. Имно, как попу не назови, оно попой и останется.

Опубликовано

QUOTE (Nox Metus @ May 4 2006, 12:53)

Разница приблизительна такая же как в "если я дышу кагда сплю, не означает, что я сплю, когда дышу." (© Льюис Кэролл)
Если RAII использует раскрутку стека, то это не означает, что возможности, предоставляемые вызовом деструкторов при раскрутке стека, сводятся только к освобождению ресурсов, выделенных при инициализации. Равно как и возможности блока finally не ограничиваются освобождением ресурсов.


BTW. Слова про платформу вообще не к месту. Платформа поддерживает успешно UNICODE в именах файлов уже много, много лет.

...интересно, где в моем тексте были слова "только"? ну да ладно.

 

Я не спорю с тем, что винды поддерживают UNICODE (не надо считать меня дураком). Они поддерживают его в основном через UTF-16 и это иногда создает проблемы.

 

Вот код:

#include <fstream>

int main(int argc, char *argv[])
{
std::basic_ofstream<char> test_file("йцукен.txt");
test_file << "превед" << std::endl;
return 0;
}

так он выглядит в локали ru_RU.UTF-8

а вот так в ru_RU.KOI8-R:

#include <fstream>

int main(int argc, char *argv[])
{
std::basic_ofstream<char> test_file("п╧я├я┐п╨п╣п╫.txt");
test_file << "п©я─п╣п╡п╣п╢" << std::endl;
return 0;
}

И работает и там и там. Т.е. у C++ есть проблемы с UTF-16 а не с UNICODE.

Опубликовано

QUOTE
Сейчас архитектором MSVC является Герб Саттер - председатель комитета стандартизации C++, один из апалагетов и зубров языка. Также в компиляторной команде работают неглупые люди из академгородка, занимавшиеся компиляторами здесь.

Методологическое замечание: количество ксив создателей не конвертируется прямо в качество продукта. Есть примеры.

Опубликовано

QUOTE (gaus @ May 4 2006, 14:02)

Методологическое замечание: количество ксив создателей не конвертируется прямо в качество продукта. Есть примеры.

Примеры по теме то хоть?

Опубликовано

QUOTE (gaus @ May 3 2006, 02:47)
А зачем оно нужно? Срыв стека организовать?

Нет, для того, чтобы удобно передавать в функцию произвольное число параметров тем самым облегчая чтение и модификацию кода.

 

А вот пример срыва стека, возможного исключительно благодаря ключевому слову params в студию!

Опубликовано

QUOTE (Nox Metus @ May 4 2006, 13:35)
QUOTE ([vt)
vitus,May 3 2006, 23:05] Ну тут не интересно - MSVC находится в позе вечного загибона

Ложь. Сейчас архитектором MSVC является Герб Саттер - председатель комитета стандартизации C++, один из апалагетов и зубров языка. Также в компиляторной команде работают неглупые люди из академгородка, занимавшиеся компиляторами здесь. На сегодняшний день C++ компилятор микрософта является одним из лучших, как по качеству кода, так и по поддержке стандарта.

Один вопрос Nox Metus, ты когда на молоко смотришь оно не киснет ? А то есть подозрение https://academ.club/html/emoticons/laugh.gifили надо всегда писать ШУТКА большими буквами (а в скобках для тормозов ещё раз ? ) ? https://academ.club/html/emoticons/biggrin.gif https://academ.club/html/emoticons/biggrin.gif ?

Опубликовано

QUOTE (Nox Metus @ May 4 2006, 23:22)
QUOTE ([vt)
vitus,May 4 2006, 09:19] или надо всегда писать ШУТКА большими буквами (а в скобках для тормозов ещё раз ? ) ?

Ну тупой я, что ж поделаешь.

Ну самокритика это хорошо - это значит ещё не всё потерянно https://academ.club/html/emoticons/smile.gif https://academ.club/html/emoticons/biggrin.gif.

Опубликовано

QUOTE (Nox Metus @ May 4 2006, 11:01)
Вы про имя файла в UNICODE? Где вы увидели в моем сообщении ссылку на чью то реализацию, когда я говорил об имени файла? При чем тут вообще микрософт и UTF16??? "Логика где?" ©

А Вы знаете, что такое UTF-8? Прочитайте описание этой кодировки и зачем она вообще придумана именно такая. Что до претензии к M$ - обратите внимание, что кроме Microsoft UTF-16 никто (или практически никто) не использует. Например, все *NIX-образное живет с UTF-8. И поэтому многих проблем с Юникодом там изначально нету.

 

Если лень читать доки, то такой хинт: UTF-8 совместим с char* и всеми строковыми функциями C и не содержит управляющик кодов (0-31) в символах, т.е. в подавляющем большинстве программ вообще не требует абсолютно никаких затрат на свою поддержку. И вообще все символы ASCII в UTF-8 все лежат "as is" (т.е. парсинг имен файлов, регекспов и прочие функции, смотрящие только на ASCII символы, тоже никакой модификации для поддержки UTF-8 не требуют).

 

Кстати, единственное, чем UTF-8 "медленнее" UTF-16 - там чуть сложнее посчитать количество букв в строке (код для подсчета числа букв ажно на пару строчек длинее - офигеть) или разбить на буквы при выводе (по сравнению с прочими затратами GUI на отображение текста - это 0.0000...% ), или преобразовать регистр всех символов, включая "народные" (ну вот единственная заморочка, которая требует использования непосредственно в приложении каких-то юникодовых библиотек, впрочем, это так с любым представлением Юникода... и это тоже довольно редко нужно).

 

Насчет претензий к реализации стандартных библиотек - коль скоро M$ фанатично заточилось на UTF-16, то им следовало в своем замечательном MSC, например, перегрузить конструкторы стандартных классов, чтобы они могли вместо char* получать ссылку на мультибайтовые строки, чтобы привычная идеология работала и портинг с 8-бит на UNICODE делался с минимальными затратами.

Опубликовано
Да. Т.к. MS, выбрав для Windows 95 именно UTF-16, по сути, отправила на свалку повсеместно принятый в течение многих лет стандарт работы со строками, она должна была в своей реализации стандартных классов C++ это учесть. Если уж ломать - так переделывать основательно и качественно. А UTF-8 с C/С++ изначально дружит.
Опубликовано

QUOTE (Max Payne @ May 5 2006, 03:11)
Например, все *NIX-образное живет с UTF-8. И поэтому многих проблем с Юникодом там изначально нету.

Это заблуждение. *NIX всегда имел и имеет кучу проблем с кодировками, в частности из-за того, что в POSIX нет понятия кодировки имен в файловой системе, т.е. имя это просто строка заканчивающаяся нулем. точка.

MS решила эту проблему с выходом NTFS жестко задав кодировку хранения имен. Можно спорить о выборе кодировки, но решение в целом правильное. В *NIX'е же эта проблема видимо так и не будет решена, пока не отпадет за ненадобностью, т.е. когда UTF8 станет стандартом имен файлов де-факто (лет через 10-20).

Опубликовано

QUOTE (Nox Metus @ May 5 2006 @ 03:52)

В Windows 95 я даже не уверен поддерживала ли FAT-16 UNICODE или нет.

Прошу прощения, что вмешиваюсь в ученый спор. А разве FAT-32 поддерживает UNICODE?

Насколько знаю, нет, поэтому в политике HAL пишу монтировать VFAT по умолчанию с codepage=866. Works for me.

 

В ext2fs кодировка не фиксирована. Какие хочешь, такие и пишешь имена файлов. По-моему, линуксовые дистрибуции перешли на Unicode сравнительно недавно. В RedHat, первой была, наверное RH8 (поправьте, если ошибаюсь).

 

QUOTE (Nox Metus @ May 5 2006 @ 03:52)

стандарт С++ не позволяет в качестве имени файла использовать UNICODE в потоковых классах ввода/вывода

Стандарт C++ позволяет складывать в имя файла любую последовательность байт, UTF-8, например.

Опубликовано

1. Насчет "чего да" - перечитайте отредактированный пост выше.

2. Я не говорил ни слова от FAT16. Windows 95 начала использовать UTF-16 в GUI. Насчет NT и 1993г. я, честно говоря, не в курсе, т.к. история меня никогда не интересовала, и вообще NT я увидел примерно в 1997 году. Факт то, что MS выбрала UTF-16. И для NTFS, и для GUI, и для прочего. Почему так получилось (не было вовремя более разумного стандарта и т.п.) - это другой вопрос.

3. "Отправился на свалку" принцип работы со строками, как с последовательностями байт, заканчивающимися на 0.

 

QUOTE
Если это что-то третье, то поясните еще раз какое отношение это третье имеет к моему начальному тезису: "стандарт С++ не позволяет в качестве имени файла использовать UNICODE в потоковых классах ввода/вывода"?

ДА НЕ UNICODE!!!!! А конкретно UTF-16!!! https://academ.club/html/emoticons/angry.gif

Все, четвертый раз объяснять не буду https://academ.club/html/emoticons/angry.gif

 

Все, короче, дальше спорить не буду и вообще это все оффтопик, оставляйте за собой последнее слово сказать, какую лажу я написал (пытаться понять написанное выше не обязательно), а я пошел заниматься более интересными делами https://academ.club/html/emoticons/smile.gif

 

QUOTE
В *NIX'е же эта проблема видимо так и не будет решена, пока не отпадет за ненадобностью, т.е. когда UTF8 станет стандартом имен файлов де-факто

UTF8 в Юниксе уже стандарт де-факто (хотя возможность воткнуть другую кодировку в руках пользователя).

Изменено пользователем Гость

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

Аккаунт

Навигация

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.