Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Знание OS Internals


Автор: S.A.G. 28.2.2007, 16:00
Странно, но новичкам которые хотели бы изучать программирование как правило рекомендуют прочитать книгу по одному из популярных языков программирования (в зависимости от того с чем хочет работать начинающий в будущем). Однако на мой взгляд в первую очередь стоило бы почитать про OS в которой придеться работать. Не даром говорят что, к примеру, Windows не самая подходящая среда для обучения программированию. Каково ваше мнение, уважаемые разработчики, умудренные опытом работы с C/C++?

Автор: Fazil6 28.2.2007, 16:21
язык программирования никак с ОС не связан.

Автор: S.A.G. 28.2.2007, 16:23
Это я знаю. Это и не имелось ввиду smile Можно научиться кодить логику т.е. переводить алгоритм в код на конкретном языке. Но особенности платформы придеться учитывать а значит ее необходимо знать.

Автор: vitlic 28.2.2007, 16:26
Таненбаум Э. "Современные операционные системы" 3-е издание

Наверно лучшая книга в этой области там всё есть, и процессы, и трейды, и файловая система, да и все остальное. С примерами из проглого и настаящего. 

имхо. Ни одна книга по программированию не заменит столь всеобъемлющее руководство. И не даром этот курс, "Операционные системы", уже стандарт во всех высших учебных заведениях.

А вот после этой книжки, можно и про окна у Петзольда прочитать, и даже написать что-нибудь.

Автор: Fazil6 28.2.2007, 16:33
Цитата

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

и что? 
сначала нужно научиться языку, а уж потом особенностям его применения в различных ситуациях. 
Или Вы предлагаете начинать изучение программирования с синхронизирования потоков или WinAPI? 

Автор: S.A.G. 28.2.2007, 16:44
Я предлагаю сначала узнать самое основное об архитектуре системы чтобы поменьше возникало вопросов в процессе изучения языка программирования и тех его аспектов которые зависимы от ОС в которой он будет применяться. Например в стандарте про язык C четко выписано что размер типа данных char зависит от кодировки применяемой в каждой конкретной ОС. Есть и другие вещи.

Бегло осмотрев Руссиновича, узнал что в Windows применяеться Unicode, а значит размер типа char должен быть равен 2 байтам для этой ОС.

vitlic,
У тебя есть эта книга? smile Можешь выложить/указать место где она лежит? Буду очень признателен.

Автор: Fazil6 28.2.2007, 16:51
Цитата

начит размер типа char должен быть равен 2 байтам

галиматья какая-то.
кто тебе сказал, что это зависит от виндовс? С чего ты взял, что в Windows нельзя пользоваться однобайтным char?

Автор: S.A.G. 28.2.2007, 17:02
Цитата(Fazil6 @ 28.2.2007,  16:51)
Цитата

начит размер типа char должен быть равен 2 байтам

галиматья какая-то.
кто тебе сказал, что это зависит от виндовс? С чего ты взял, что в Windows нельзя пользоваться однобайтным char?

Приведу цитату из книги С.Праты "Язык программирования C":

"Если говорить в общем, то в языке С гарантируеться, что данные типа char имеют достаточно большие размеры для того, чтобы вместить основной набор символов той вычислительной системы, в которой реализован язык C.... В языке C байт определяеться как число битов, используемых для представления данных типа char, поэтому в такой системе байт должен иметь длину не 8 битов, а 16 (по крайней мере, так следует из документации по языку C)"

Как известно, байт не может быть большим чем 8 битов, поэтому в C тип char должен иметь размер 16 битов чтобы уместить основной набор символов Windows(Unicode). Так записано в стандарте.

Мне кажеться термина "Однобайтный char" в языке С для Windows нет. Скорее всего имееться ввиду часть таблицы Unicode, вмещающая стандартные коды ASCII. 

Автор: vinter 28.2.2007, 17:09
все это галиматья, все то что ты привел, это особенности архитектуры x86, а не ОС, в никсах так же есть юникод, изучать надо язык, а уж потом особенности ОС если это вообще понадобится(СП), а если нет то нафиг это не нужн, программирование есть алгоритмическая база.

Добавлено @ 17:10 
Цитата

Мне кажеться термина "Однобайтный char" в языке С для Windows нет. Скорее всего имееться ввиду часть таблицы Unicode, вмещающая стандартные коды ASCII. 

канешно нет, char всегда однобайтный и никаких уточнений здесь не надо smile

Добавлено @ 17:11 
Цитата

Как известно, байт не может быть большим чем 8 битов, поэтому в C тип char должен иметь размер 16 битов чтобы уместить основной набор символов Windows(Unicode). Так записано в стандарте.

стандарт не читал, но вообще этот тип называется wchar_t

Автор: S.A.G. 28.2.2007, 17:19
vinter,
Цитата
все это галиматья, все то что ты привел

Ничего не придумал. Информация почерпана только из книги С.Праты а он в написании своей книги опирался на стандарт.
Цитата
это особенности архитектуры x86, а не ОС

Архитектура определяет какую кодировку удобнее применить для ОС?
Цитата
изучать надо язык, а уж потом особенности ОС если это вообще понадобится(СП), а если нет то нафиг это не нужн, программирование есть алгоритмическая база.

Думаю с этим согласяться не все. Мне кажеться что перед тем как начать изучать язык (чтобы его потом применить для написания приложений в конкретной ОС), желательно ознакомиться хотябы с самыми общими принцыпами ее работы.

Автор: vitlic 28.2.2007, 17:23
размер char равен 1. Это неписанная истина) 

книжка лежит http://rapidshare.com/files/18706550/kniga.zip.html 
Так как она в формате djvu, там и прога для просмотра.

Автор: vinter 28.2.2007, 17:27
Цитата
Архитектура определяет какую кодировку удобнее применить для ОС?


нет, байтовую структуру
Цитата

Думаю с этим согласяться не все. Мне кажеться что перед тем как начать изучать язык (чтобы его потом применить для написания приложений в конкретной ОС), желательно ознакомиться хотябы с самыми общими принцыпами ее работы.

зачем?? я вот столкнулся с такой проблемой, только когда надо было писать дефрагментатор и все, сначала язык надо знать!
как ты думаешь зачем стандарт нужен?? если будешь писать по стандарту(исп. ф-ии описанные в стандарте), то получишь кроссплатформенное приложения, и тебе будет плевать на особенности ОС.

Автор: S.A.G. 28.2.2007, 17:28
vitlic,
Цитата
размер char равен 1. Это неписанная истина)

В таком случае возникали бы проблемы при вводе/выводе символов из таблицы Unicode. А их ведь нет smile

Спасибо за книгу!

Автор: Fazil6 28.2.2007, 17:33
Цитата

В таком случае возникали бы проблемы при вводе/выводе символов из таблицы Unicode. А их ведь нет

ты прямо открыл мне глаза....
Я то все эти годы думал, что под Windows пишу и однобайтный char использую.

char предназначен для символов ASCII , а для символов Unicode нужно применять другой тип. 

Автор: S.A.G. 28.2.2007, 17:37
Fazil6,
Цитата
char предназначен для символов ASCII , а для символов Unicode нужно применять другой тип.

В стандарте такого нет. Вероятно так была разрешена проблема разработчиками компиляторов C для Windows - для обработки ASCII использовать однобайтный char, а для виндового юникода ввести специальный двухбайтовый тип. Но ведь можно было ввести и двухбайтный char.. наверное от такого решения отказались чтобы обеспечить поддержку старого кода/программ.

vitlic,
но ты говорил о 3-ем издании книги, а там 2-е. Может ошибся?

vinter,
Цитата
нет, байтовую структуру

Что имееться ввиду?

В случае кроссплатформенных приложений ты прав.
Цитата
если будешь писать по стандарту(исп. ф-ии описанные в стандарте), то получишь кроссплатформенное приложения, и тебе будет плевать на особенности ОС.

Согласно стандарту, размер типа char в Windows должен быть равен 2 байтам а не 1. Однако тут разработчики компиляторов поступили по-другому. Если бы я захотел обработать символы Unicode, используя при этом тип char(стандарт), то ничего хорошего бы у меня не вышло. О никакой кроссплатформенности тут уже речь не идет, нетак-ли?

Думаю ознакомиться с OS Internals необходимо перед чтением книги про конкретный язык, чтобы знать и понимать о чем идет речь. Ведь часто описываються операции с файлами, ввод/вывод. А это уже зависимые от конкретной системы вещи..

Автор: vitlic 28.2.2007, 17:55
Код

cout << sizeof(char) << endl;   // 1
cout << sizeof(__wchar_t);      // [color=red]2[/color]



пи.си. У меня только второе издание, третье только недавно вышло. Изменений не много, так как рукописи не горят классика не стареет.

Автор: nerezus 28.2.2007, 17:58
Цитата

Но особенности платформы придеться учитывать а значит ее необходимо знать. 
 А если ты пишешь не под платформу? А просто используешь классы, которые делают всю низкоуровневую работу за тебя? Вывод: начать учить только тогда, когда понадобится.

Цитата

если будешь писать по стандарту(исп. ф-ии описанные в стандарте), то получишь кроссплатформенное приложения
 Только вот стандарт этот слишком "лысый", т.е. дальше консоли на нем не уедешь.
Не стандартизирована работа с гуями, сетью, XML и т.д.

Автор: S.A.G. 28.2.2007, 18:07
nerezus,
Цитата
А если ты пишешь не под платформу? А просто используешь классы, которые делают всю низкоуровневую работу за тебя? Вывод: начать учить только тогда, когда понадобится.

Т.е. создаешь кросс-платформенный код? Приведи примеры кроссплатформенных классов..
Цитата
Только вот стандарт этот слишком "лысый", т.е. дальше консоли на нем не уедешь.
Не стандартизирована работа с гуями, сетью, XML и т.д.

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

vitlic,
Стандарт не определяет тип __wchar_t, т.е. насколько я знаю существует стандартный хидер в котором допускаються вариации для размеров различных типов но основной char должен быть двухбайтовым для Windows.

Автор: Fazil6 28.2.2007, 18:13
Цитата

Т.е. создаешь кросс-платформенный код? Приведи примеры кроссплатформенных классов..


STL целиком. Классов в ней немеряно. 

Автор: S.A.G. 28.2.2007, 18:18
Цитата(Fazil6 @ 28.2.2007,  18:13)
Цитата

Т.е. создаешь кросс-платформенный код? Приведи примеры кроссплатформенных классов..


STL целиком. Классов в ней немеряно.

До STL еще не добрался.. незнаю что в ней smile

Автор: Fazil6 28.2.2007, 18:18
Цитата

Стандарт не определяет тип __wchar_t, т.е. насколько я знаю существует стандартный хидер в котором допускаються вариации для размеров различных типов но основной char должен быть двухбайтовым для Windows.

есть таблица ASCII. В ней 1 символ - 1 байт. Какого художника вдруг char должен быть 2 байта?
wchar_t - это ключевое слово в С++. В С есть такой макрос. Этот тип предназначен для Unicoda

Твои рассуждения и есть пример того, как неразобравшись с языком начинаются рассуждения как его применять. 

Автор: S.A.G. 28.2.2007, 18:22
Fazil6,
Читай выше про то какого размера должен быть тип char для каждой конкретной системы.. в Windows Unicode основной набор а не ASCII. Это и ответ по поводу того каким должен быть char для Windows.
Цитата
Твои рассуждения и есть пример того, как неразобравшись с языком начинаются рассуждения как его применять.

Мои рассуждения всегда есть предмет того как нужно разобраться прежде чем применять что угодно smile

Автор: Earnest 28.2.2007, 18:31
main, ну чего ты уперся? Windows вовсе не основана на UNICODE. Она прекрасно работает с "обычными строками", т.е. char. wchar - дополнительный тип данных, только и всего, облегчающий мульти-язычную поддержку и избавляющий от геморроя с кодовыми страницами.
Фраза, которую ты приводил для Windows означает только то, что основные системные вызовы с аргументами строками используют UNICODE-строки. А под символами в стандарте вовсе не буквы подразумеваются...

Автор: S.A.G. 28.2.2007, 18:41
Earnest,
Цитата
main, ну чего ты уперся?

Упираються это когда знают что не правы и всеравно спорят. Вы в этом уверены? - Не уверены не говорите. Я же хочу для себя уяснить некоторые вещи. Не делайте, пожалуйста, преждевременных выводов. Уточните какую фразу я приводил..
Цитата
основные системные вызовы с аргументами строками используют UNICODE-строки

А это разве не означает что она основана на Unicode? Разве на основе того что в системных вызовах используеться Unicode нельзя сделать вывод о том что это для Windows основная кодировка? Если нет то на основе чего можно сделать вывод о том на каком наборе символов основана ОС и на каком наборе основана Windows??????????????????????????

Спасибо, за внимание..

Автор: nerezus 28.2.2007, 18:44
Цитата

Приведи примеры кроссплатформенных классов..
 Ну во первых это библиотеки boost, stl. Во-вторых, это тот же Qt. В них дохрена классов, замечательных и разных.

Цитата

До STL еще не добрался.. незнаю что в ней
 Давай, сначала доберешься, а только потом будешь создавать подобные темы?

Автор: Vyacheslav 28.2.2007, 18:48

Цитата(main @  28.2.2007,  17:37 Найти цитируемый пост)
Думаю ознакомиться с OS Internals необходимо перед чтением книги про конкретный язык, чтобы знать и понимать о чем идет речь. Ведь часто описываються операции с файлами, ввод/вывод. А это уже зависимые от конкретной системы вещи..


Любопытно.  Операция с файлами, говорите ? И под какую конкретно платформу написан следующий код: чтение содержиого файла в строку?
Код

ifstream inpFile("test.dat");
string fileData( istreambuf_iterator< char >(inpFile), istreambuf_iterator< char >()); 


Автор: S.A.G. 28.2.2007, 18:55
Цитата(nerezus @ 28.2.2007,  18:44)
Цитата

Приведи примеры кроссплатформенных классов..
 Ну во первых это библиотеки boost, stl. Во-вторых, это тот же Qt. В них дохрена классов, замечательных и разных.

Цитата

До STL еще не добрался.. незнаю что в ней
 Давай, сначала доберешься, а только потом будешь создавать подобные темы?

Я не создавал тему про STL.

Добавлено @ 18:57 
Цитата(Vyacheslav @ 28.2.2007,  18:48)
Цитата(main @  28.2.2007,  17:37 Найти цитируемый пост)
Думаю ознакомиться с OS Internals необходимо перед чтением книги про конкретный язык, чтобы знать и понимать о чем идет речь. Ведь часто описываються операции с файлами, ввод/вывод. А это уже зависимые от конкретной системы вещи..


Любопытно.  Операция с файлами, говорите ? И под какую конкретно платформу написан следующий код: чтение содержиого файла в строку?
Код

ifstream inpFile("test.dat");
string fileData( istreambuf_iterator< char >(inpFile), istreambuf_iterator< char >()); 

Причем тут C++?? Я писал про- и имел ввиду язык C и опирался на его стандарт..

Автор: Earnest 28.2.2007, 19:29
Цитата(main @  28.2.2007,  19:41 Найти цитируемый пост)
Уточните какую фразу я приводил..

Вот эту:

Цитата

"Если говорить в общем, то в языке С гарантируеться, что данные типа char имеют достаточно большие размеры для того, чтобы вместить основной набор символов той вычислительной системы, в которой реализован язык C.... 


Цитата(main @  28.2.2007,  19:41 Найти цитируемый пост)
А это разве не означает что она основана на Unicode?

НЕТ!

Добавлено @ 19:30 
Основной набор в Windows - по прежнему ASCII.

Автор: S.A.G. 28.2.2007, 19:35
Аминь..

Earnest, а вы какого мнения стоит ли читать основы ОС перед изучением языка?

Автор: MAKCim 28.2.2007, 20:56
Цитата(main @  28.2.2007,  19:35 Найти цитируемый пост)
а вы какого мнения стоит ли читать основы ОС перед изучением языка?

перед изучением языка, имхо, нет
кстати, все зависит еще от того, в каком направлении дальше работать: для системного программирования - обязательно, для прикладного - это, опять имхо, не столь важно (однако не помешает)
Весь Танненбаум - классика, не привязанная к конкретной ОС
Для Linux - "Разработка ядра Linux. Р. Лав" + сырцы
Для Window$ - Руссинович/Соломон

Автор: dumb 28.2.2007, 21:07
Цитата(Earnest @  28.2.2007,  19:29 Найти цитируемый пост)
Основной набор в Windows - по прежнему ASCII.

ой. а это исходя из чего такой вывод сделан?

Автор: Daevaorn 28.2.2007, 21:39
Цитата(dumb @  28.2.2007,  22:07 Найти цитируемый пост)
ой. а это исходя из чего такой вывод сделан? 

да. Для XP как раз UNICODE. И всё API, что не UNICODE, то оно переводится в него независимо то клиентского кода.

Автор: S.A.G. 28.2.2007, 22:14
Так какой же набор всетаки основной? smile

Автор: Daevaorn 28.2.2007, 22:22
Цитата(main @  28.2.2007,  23:14 Найти цитируемый пост)
Так какой же набор всетаки основной?

ну это не сложно узнать, на http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_9i79.asp есть всё

Автор: vitlic 28.2.2007, 22:44
Полез за тяжелой артилерией)

Рихтер об этом (книжка не новая, про XP/NT/Vista ничего нет):
Цитата

Windows 2000 и Unicode
Windows 2000 — операционная система, целиком и полностью построенная на Unicode. Все базовые функции для создания окон, вывода текста, операций со строками и т. д. ожидают передачи Unicode-строк. Если какой-то функции Windows передается ANSI-строка, она сначала преобразуется в Unicode и лишь потом передается операционной системе. Если Вы ждете результата функции в виде ANSI-строки, операционная система преобразует строку — перед возвратом в приложение - из Unicode в ANSI. Все эти преобразования протекают скрытно от Вас, но, конечно, на них тратятся и лишнее время, и лишняя намять.

Например, функция CreateWindowEx, вызываемая с ANSI-строками для имени класса и заголовка окна, должна, выделив дополнительные блоки памяти (в стандартной куче Вашего процесса), преобразовать эти строки в Unicode и, сохранив результат в выделенных блоках памяти, вызвать Unicode-версию CreateWindowEx.

Для функций, заполняющих строками выделенные буферы, системе — прежде чем программа сможет их обрабатывать — нужно преобразовать строки из Unicode в ANSI. Из-за этого Ваше приложение потребует больше памяти и будет работать медленнее. Поэтому гораздо эффективнее разрабатывать программу, с самого начала ориентируясь на Unicode.

Windows 98 и Unicode
Windows 98 — не совсем новая операционная система. У нее «16-разрядное наследство, которое не было рассчитано на Unicode. Введение поддержки Unicode в Windows 98 было бы слишком трудоемкой задачей, и при разработке этой операционной системы от нее отказались. По этой причине вся внутренняя обработка строк в Windows 98, как и у ее предшественниц, построена на применении ANSI.
И все же Windows 98 допускает работу с приложениями, обрабатывающими символы и строки в Unicode, хотя вызов функций Windows при этом заметно усложняется. Например, если Бы, обращаясь к CreateWindowEx, передаете ей ANSI-строки, вызов проходит очень быстро — не требуется ни выделения буферов, ни преобразования строк. Но для вызова CreateWindowEx с Unicode-строками Вам придется самому выделять буферы, явно вызывать функции, преобразующие строки из Unicode в ANSI, обращаться к CreateWindowEx, снова вызывать функции, преобразующие строки — на этот раз ил ANSI в Unicode, и освобождать временные буферы. Так что в Windows 98 работать с Unicode не столь удобно, как в Windows 2000. Подробнее о преобразованиях строк в Windows 98 я расскажу в конце главы.

Хотя большинство Unicode-функций в Windows 98 ничего не делает, некоторые
все же реализованы

Windows CE и Unicode
Операционняя система Windows CE создана для небольших вычислительных устройств — бездисковых и с малым объемом памяти. Вы вполне могли бы подумать, что Microsoft, раз уж эту систему нужно было сделать предельно компактной, в качестве «родного» набора символов выберет ANSI. Но Microsoft поступила дальновиднее. Зная, что вычислительные устройства с Windows CE будут продаваться по всему миру, там решили сократить затраты на разработку программ, упростив их локализацию. Поэтому Windows CE полностью поддерживает Unicode.

Чтобы не увеличивать ядро Windows CE, Microsoft вообще отказалась от поддержки ANSI-функций Windows. Так что, ссли Вы пишете для Windows CE, то просто обязаны разбираться в Unicode и использовать его во всех частях своей программы.


Ну и самое важное:

Цитата

В чью пользу счет?
Для тех, кто ведет счет в борьбе Unicode против ANSI, я решил сделать краткий обзор История Unicode в Microsoft:

Windows 2000 поддерживает Unicode и ANSI — Вы можете использовать любой стандарт; 
Windows 98 поддерживает только ANSI — Вы обязаны программировать в расчете на ANSI; 

Windows CE поддерживает только Unicode — Вы обязаны программировать в расчете на Unicode. 
Несмотря на то что Microsoft пытается облегчить написание программ, способных работать на всех трех платформах, различия между Unicode и ANSI все равно создают проблемы, и я сам не раз с ними сталкивался. Не поймите меня неправильно, но Microsoft твердо поддерживает Unicode, поэтому я настоятельно рекомендую переходить именно на этот стандарт. Только имейте в виду, что Вас ждут трудности, на преодоление которых потребуется время. Я бы посоветовал применять Unicode и, если Вы работаете в Windows 98, преобразовывать строки в ANSI лишь там, где без этого нс обойтись.


Автор: Daevaorn 28.2.2007, 22:46
Цитата(vitlic @  28.2.2007,  23:44 Найти цитируемый пост)
Полез за тяжелой артилерией)

да. тоже что и в msdn

Автор: vitlic 28.2.2007, 22:51
Цитата(Daevaorn @ 28.2.2007,  22:46)
Цитата(vitlic @  28.2.2007,  23:44 Найти цитируемый пост)
Полез за тяжелой артилерией)

да. тоже что и в msdn

Так ведь MSDN и Рихтер едины  smile 

А вообще я по вашей ссылке не ходил, подумал, что вы просто ссылку на msdn.com дали.. Оказалось зря)

Автор: Vyacheslav 28.2.2007, 23:31
Цитата(main @  28.2.2007,  18:55 Найти цитируемый пост)
Причем тут C++?? Я писал про- и имел ввиду язык C и опирался на его стандарт.. 


Как причем?

Цитата(main @  28.2.2007,  18:07 Найти цитируемый пост)
Т.е. создаешь кросс-платформенный код? Приведи примеры кроссплатформенных классов..

А что, на языке С уже можно писать классы?

А в цитате ниже Вы тоже не уточняете . что  "конкретный язык" - это конкретный С 
Цитата(main @  28.2.2007,  17:37 Найти цитируемый пост)
Думаю ознакомиться с OS Internals необходимо перед чтением книги про конкретный язык, чтобы знать и понимать о чем идет речь. Ведь часто описываються операции с файлами, ввод/вывод. А это уже зависимые от конкретной системы вещи..


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

В последнее время, кстати, я занимаюсь тем, что пишу кроссплатформенные приложения для Windows/Linux/HP-UX/Solaris.  И могу сказать, что больше всего меня напрягают не особенности платформ, а различия в компиляторах. И что особенно удивительно, мне удается написать приложения при том, что не считаю себя большим знатаком WInApi или POSIX. Оказалось, что для написания хорошего приложения достаточно добротного знания "конкретного языка" и умения пользоваться MSDN или man smile 


Автор: Daevaorn 28.2.2007, 23:56
Цитата(vitlic @  28.2.2007,  23:51 Найти цитируемый пост)
Так ведь MSDN и Рихтер едины  

да. мне кажется, что MS поступила абсолютно правильно, сделав UNICODE как бы стандартом. Я за то чтобы как можно большее количество разработчиков перешли на него, т.к. сам активно его применяю и понимаю всё удобство.

Автор: MAKCim 1.3.2007, 00:16
цитата из Руссинович/Соломон
Цитата

Windows отличается от большинства других операционных систем тем, что в качестве внутреннего формата для хранения и обработки текстовых строк использует Unicode.
...
Поскольку многие приложения имеют дело с 8-битными ANSI-символами, Windows-функции, принимающие строковые параметры, существуют в двух версиях: для Unicode и для ANSI. В Windows 95, Windows 98 и Windows ME реализована лишь часть Unicode-версий Windows-функций, поэтому приложения, рассчитаные на выполнение как в одной из этих операционных систем, так и в NT-подобных Windows, обычно используют ANSI-версии функций. Если вы вызываете ANSI-версию Windows-функции, входные строковые параметры перед обработкой системой преобразуются в Unicode, а выходные - из Unicode в ANSI.
...

Автор: S.A.G. 1.3.2007, 00:49
Цитата(MAKCim @ 1.3.2007,  00:16)
цитата из Руссинович/Соломон
Цитата

Windows отличается от большинства других операционных систем тем, что в качестве внутреннего формата для хранения и обработки текстовых строк использует Unicode.
...
Поскольку многие приложения имеют дело с 8-битными ANSI-символами, Windows-функции, принимающие строковые параметры, существуют в двух версиях: для Unicode и для ANSI. В Windows 95, Windows 98 и Windows ME реализована лишь часть Unicode-версий Windows-функций, поэтому приложения, рассчитаные на выполнение как в одной из этих операционных систем, так и в NT-подобных Windows, обычно используют ANSI-версии функций. Если вы вызываете ANSI-версию Windows-функции, входные строковые параметры перед обработкой системой преобразуются в Unicode, а выходные - из Unicode в ANSI.
...

именно на нее я и ссылался

Автор: nerezus 1.3.2007, 06:36
Цитата

Причем тут C++?? Я писал про- и имел ввиду язык C и опирался на его стандарт..
 Но при этом говорил про классы?   smile 

Автор: Earnest 1.3.2007, 09:02
Цитата(dumb @  28.2.2007,  22:07 Найти цитируемый пост)
ой. а это исходя из чего такой вывод сделан? 

Из того, что он доступен и меньше по размеру, чем UNICODE.

Цитата(Daevaorn @  1.3.2007,  00:56 Найти цитируемый пост)
да. мне кажется, что MS поступила абсолютно правильно, сделав UNICODE как бы стандартом.

Конечно, только это вовсе не тот набор симоволов, о котором говорится в цитате из Пратта. Если бы UNICODE стал "основным набором" тогда, действительно, от однобайтовых чаров пришлось бы отказаться... Теория теорией, а кто на это пойдет, да и зачем?
UNICODE - стандартный формат обмена текстовой информацией, а не "основной набор символов" OS.

И по теме: я считаю, что некоторое представления о ЯП весьма полезно при чтении книги об операционках. Равно как и наоборот. 
Читайте и изучайте одновременно, кто мешает? Кроме того, можно параллельно читать детективы или фэнтези, по вкусу  smile 


Автор: Rockie 1.3.2007, 13:12
Цитата(Fazil6 @  28.2.2007,  16:21 Найти цитируемый пост)
язык программирования никак с ОС не связан.

[offtop]
У нас сейчас довольно жесткие репрессии по поводу лицензионного/нелицензионного ПО. Так вот некоторые юзвери перескакивают с windows на unix-системы. В знакомой фирме разработчики вслед за изменением рынка пересаживаются на Java. Так что, как показывает практика, все таки связан.
[/offtop]

Автор: S.A.G. 1.3.2007, 13:39
Earnest,
Цитата
Конечно, только это вовсе не тот набор симоволов, о котором говорится в цитате из Пратта.

О каком тогда наборе говорил Прата?

Автор: Vyacheslav 1.3.2007, 14:10
Цитата(Rockie @  1.3.2007,  13:12 Найти цитируемый пост)
В знакомой фирме разработчики вслед за изменением рынка пересаживаются на Java. Так что, как показывает практика, все таки 

И причем тут операционка? Это рынок. А то что востребованность на Java-разработчиков больше, это не открытие. И это мало связано с переходом на другую платформу. Просто общая тенденция такая.  А на какой платфоре  будет установлен web-сервер , в котором будет крутиться сервлет, разработанный на этой самой Javа, это уже без разницы

Автор: nerezus 1.3.2007, 14:20
[quote]
Так что, как показывает практика, все таки связан.
[/quote И чем же? Даже из примера не видно. Разве под C++ нельзя писать под никсы? Или писали раньше на VB/Delphi/etc?

Автор: Fazil6 2.3.2007, 00:28
Цитата(main @  28.2.2007,  16:02 Найти цитируемый пост)
Приведу цитату из книги С.Праты "Язык программирования C":"Если говорить в общем, то в языке С гарантируеться, что данные типа char имеют достаточно большие размеры для того, чтобы вместить основной набор символов той вычислительной системы, в которой реализован язык C.... В языке C байт определяеться как число битов, используемых для представления данных типа char, поэтому в такой системе байт должен иметь длину не 8 битов, а 16 (по крайней мере, так следует из документации по языку C)"Как известно, байт не может быть большим чем 8 битов, поэтому в C тип char должен иметь размер 16 битов чтобы уместить основной набор символов Windows(Unicode). Так записано в стандарте.Мне кажеться термина "Однобайтный char" в языке С для Windows нет. Скорее всего имееться ввиду часть таблицы Unicode, вмещающая стандартные коды ASCII. 


вообще байт может состоять из какого хочешь количества битов.

Цитата(main @  1.3.2007,  12:39 Найти цитируемый пост)
О каком тогда наборе говорил Прата?

я не знаю о чем он говорил, но в стандарте  говорится о basic execution character set - основной набор символов среды исполнения
вот тебе цитата.
Цитата

С точки зрения Си и Си++ байт ― это наименьшая адресуемая ячейка памяти, составленная из 8-ми или более разрядов, каждый из которых является значащим (value bit), т. е. участвует в образовании значения. Кроме того гарантировано, что байта достаточно для размещения любого символа из основного набора символов среды исполнения (basic execution character set).
Как правило, байт в терминах целевой платформы (т. е. то, что принято называть байтом на этой платформе) ― это тот байт, который производитель инструментария выбирает для реализации абстрактной машины, однако удобный выбор не всегда однозначен. Так, [C99 Rationale] приводит в пример машину с 36-разрядным словом (адресуемой ячейкой), для которой байт может быть выбран 9-, 12-, 18- или 36-разрядным, поскольку все эти числа не меньше 8-ми и делят 36 нацело ([C99 Rationale 3]).

теперь по поводу основного набора. 
Цитата

Character constants

The mapping of characters in the source character set to the execution character set is one-to-one. The basic execution character set consists of 256 extended-ASCII characters: 127 U. S. ASCII characters plus system defined extensions. All integer character constants or escape sequences can be represented with the basic execution character set.

копирайт ->  http://www.digitalmars.com/ctg/CPP-Language-Implementation.html


Автор: Fazil6 2.3.2007, 00:43
MSDN
Цитата

Type char is an integral type that usually contains members of the execution character set — in Microsoft C++, this is ASCII.

Автор: Rockie 2.3.2007, 01:49
Цитата(nerezus @  1.3.2007,  14:20 Найти цитируемый пост)
Разве под C++ нельзя писать под никсы?

а разве я об этом что-то писал..
Цитата(nerezus @  1.3.2007,  14:20 Найти цитируемый пост)
 И чем же? Даже из примера не видно.

Ну как неясно. Фирма разработчиков проанализировала, что большинство фирм-клиентов переориентировалось с windows на unix, поэтому сделала уклон в сторону кроссплатформенности, сменив язык разработки. Насколько это правильное решение - это дело их маркетологов, мне как-то все равно.
Цитата(nerezus @  1.3.2007,  14:20 Найти цитируемый пост)
 Или писали раньше на VB/Delphi/etc?

Вполне возможно.
Цитата(Vyacheslav @  1.3.2007,  14:10 Найти цитируемый пост)
А то что востребованность на Java-разработчиков больше, это не открытие. И это мало связано с переходом на другую платформу. Просто общая тенденция такая.  А на какой платфоре  будет установлен web-сервер , в котором будет крутиться сервлет, разработанный на этой самой Javа, это уже без разницы

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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)