Открытие сезона на C и C++! Наполеон отдыхает...
Если Вы знакомы с компьютером более 5 лет, то задайте себе тривиальный вопрос: "А знаю ли я C или С++?". Примерно 20% пользователей не поймут вопроса, еще 20% вспомнят, что это язык программирования, еще 20% скажут, что C и С++ не нужен им, а еще у 20 процентов забьется сердце сильнее обычного. Так вот про последних 20% пользователей я бы и хотел рассказать, как о людях, которые в основе своей являются базой всего мира программного обеспечения уже 20 лет.
Да, конечно, проще сделать страницу, за которую сейчас же заплатят копейки, чем делать продукт на C/C++, но прибыль ждать придется долгие месяцы. У нас это называется "терпением", и его никогда у нас не хватало. У этих людей есть оно в достатке. Сейчас мы наблюдаем самый настоящий регресс, т.к. у нового поколения отсутствует желание к изучению чего-то сложней, чем HTML или JAVA. Это неправильно. Не нужно только думать, что на земле белорусской не осталось вовсе людей, которые не желают примыкать к рядам псевдохакеров, псевдоспециалистов по Hardware, псевдоспециалистов по Интернет технологиям. Мой жизненный опыт показал, что возрастает интерес к C/C++ чаще у тех людей, которым C/C++ нужен, чтобы "уехать за бугор". Поверьте, что "Загранице" уже давно не нужны просто специалисты по C/C++ и тем более по HTML. Им нужны опытные специалисты, которые могут не только пройти через огонь и воду, но и как от прохождения по этой воде и огню получить прибыль. Проще говоря, их трудно удивить, да и не нужно. У них другой менталитет, и нам (хотя лучше отвечать за себя) с ними не по пути, по той причине, что многие из нас не смогут врать всю жизнь без остановки про крутые технологии (которые, на подозрение, почему-то уж очень медленно стали развиваться в 90-ые годы, по сравнению с "кривой" 80-ого). Блестящие этикетки с загадочными надписями названий технологий, которые нельзя ни увидеть, ни услышать, ни почувствовать, ни использовать, еще, похоже, не перестали интересовать нас. Так было и будет, пока наш человек не перестанет задавать вопросы вроде: "А это модно (круто)?".
Хватит пессимизма. У нас есть шансы выжить в мире технологий. Еще осталось молодое поколение, которому не все равно, что будет через 10-20 лет в Беларуси. Их нужно направить в правильном направлении. Не судите строго. Я всего лишь предложу изучать язык C и Си++, вместо "кликаний по баннерам" и лазаний по беспредметным чатам, которых сейчас развелось, как бумажных денег, не имеющих золотого "прикрытия".
Вы хотите изучать язык программирования C/C++? Не знаете, какой компилятор Вам может помочь на практике?
Действительно, Вам решать, что будет нужно в жизни, и я не настаиваю на том, что у меня нет предвзятого отношения к некоторым компиляторам. Речь о моем единичном опыте и практике. Итак, существует 3 хорошо распространенных компилятора: Microsoft, Watcom и Borland. О каждом из них я расскажу подробно. Естественно, что я говорю о компиляторах для серии операционных систем Microsoft Windows.
Borland C/C++ 5.02
То, что о нем я хочу рассказать первым, не означает, что он лучший, но и не говорит об обратном. Давайте рассмотрим его как серьезный компилятор. В нем есть большее число настроек, чем в Microsoft Visual C/C++, но если Вас спросить: "Видели ли вы хоть одну коммерческую работу, написанную на Borland'е?" и Вы скажете "Да", значит продукт содержит BCWL32.DLL.
Она Вам нужна? Нет? Откуда берутся проблемы у этого компилятора? Возьмем Microsoft DirectX SDK 7.0. Посмотрим в директорию LIB\. Мы видим директорию Borland, где лежат Lib'ы для Borland компилятора. А представьте себе, что Вы делаете проект с размахом на будущее, а потом, при обновлении SDK, оказывается, что она не знает, что такое Borland C/C++. Мои слова обидны для любителей продукции Borland, но я не вижу оправдания многому в политике Borland'a. Их идея с визуальным программированием в лице Delphi, C++ Builder - это хорошая вещь в теории, но когда на практике решаешь серьезные задачи, то удивляешься, что одна и та же программа ведет себя на разных компьютерах по-разному. Оказывается, что ты не можешь контролировать собственные ресурсы (т.е. приходящие на них сообщения от ядра). Проще говоря, очень уж мало альтернативности и обратной связи. Поймите, что написанное "вручную" приложение будет легче всегда вами самими пониматься и контролироваться. Я, честно говоря, мало понимаю любовь некоторых людей к компилятору Borland C/C++. Чаще всего это говорит о том, что человек ленив, чтобы перейти на Microsoft Visual C/C++ или Watcom C/++. Правда, есть случаи, когда Borland на высоте. К этим случаям относятся скорость процесса компиляции и достаточно гибкая IDE.
Watcom C/C++ 11.0B-release
Знакомьтесь. WATCOM C/C++ - это бог DOS-овских игр. Вы играли в DOOM 1,2, Descent 1,2, Magic Carpet 1,2, Hexen, Heretic, Warcraft 1,2, Nascar 1,2? Это все откомпилировано на нем. Почему он был так актуален тогда? Компилятор может генерировать не только приложения реального режима (которые работают так же, как программы на Turbo Pascal), но и генерирует программы защищенного режима 386 (32-битные приложения). Было 2 способа работы в защищенном режиме: Pharlap и DOS4GW(DOS4G). Первый использовался в Autodesk 3D Studio, а второй "прирос намертво" к DOS-играм. DOS4G производства Tenberry Software ипользовался даже при создании очень серьезных конструкторских программ космического толка ("Cappilano Engineer"). В общем, когда Watcom С/C++ 11.0 B-release вошел в MS Windows'95, у него возможностей не уменьшилось, но появилась куча проблем, которые никто уже не устранит.
Главная проблема Watcom'овского экзекутэйбла (executable) под Win32 - стартаповский код. Он творит такие вещи, что порой удивляешься. Почему? Зачем? Например, пытается узнать, на каком он процессоре запущен. Поэтично? Но с другой стороны, это нужно, если вы компилируете под Pentium Pro, а запускаете под 80386. Вторая проблема пришла вместе с появлением Microsoft Windows 98.
У многих, включая меня, Watcom IDE стал загружаться через раз или при ряде условий. Это не нормальная ситуация, но все привыкли к этому и работают. В общем, могу отметить, что очень много чудес я увидел, пока работал с этим компилятором. Но не нужно забывать, что тех возможностей, которые есть у компилятора WATCOM, нет ни у Microsoft Visual C/C++, ни у Borland C/C++. Самая сильная сторона WATCOM - это его оптимизатор. Этот оптимизатор может сделать из кривого Си-текста отличный EXE. Удивляет то, с какой ловкостью разработчики компилятора чувствуют потребности программиста. Похоже, что они на оптимизатор потратили все время и силы и совсем забыли про IDE. Среда разработчика (IDE) - это сегодня одно из главных требований пользователей. Ведь поверьте, что можно все делать вполне нормально и в командной строке, но при этом вы не наблюдаете всего "процесса" разработки. Это многих отталкивает, но и с этим можно смириться или привыкнуть.
Все упирается в скорость разработки конечного продукта. С другой стороны, скорость конечного продукта на WATCOM'е под WIN32 с использованием всех опций оптимизатора выглядит очень впечатляюще. Что ж, нужно выбирать: либо быстро изготовленный продукт, либо быстро работающий продукт. Однако, не всегда оптимизация приводит к положительным результатам. В любом сложном продукте есть очень загадочные ошибки. Когда я три года проработал с WATCOM, а точней я на нем и изучал C и C++, я нашел кучу ошибок компилятора, которые научился обходить. Самая запоминающаяся ситуация произошла тогда, когда я в программе описал достаточно хитрый цикл и запустил оптимизацию по раскручиванию циклов. Я узрел интересную ситуацию, которая заключалась в бесконечной компиляции того исходного текста, где был тот злополучный цикл. Это немного охладило мое отношение к WATCOM компилятору, но, как понимаете, ошибка обнаружилась по методу "научного тыка" и я со временем смирился с такой проблемой. Это послужило мне уроком, и я взял за основу стиль описания циклов и структур попроще, тем более, что хотелось, чтобы и на другие компиляторы исходники успешно переносились.
Если его сравнивать с Microsoft Visual C/C++, то нужно отметить тот факт, что WATCOM'овский компилятор достаточно сильный конкурент Microsoft, потому что там имеется даже режим компиляции исходных текстов в режиме совместимости с Microsoft Visual C/C+. Это, я считаю, очень сильный аргумент за WATCOM.
Позже, когда я все чаще стал обнаруживать, что вся коммерческая продукция производится под Microsoft Visual C/C++, я очень сильно стал интересоваться вопросом переноса исходников из WATCOM под MSVC/C++ (Microsoft Visual C/C++).
Отличия будут выражаться в следующих моментах:
1. У Microsoft "#pragma" описывается по-другому, но если это "#pragma pack()", то изменений не нужно вносить.
2. По умолчанию переменные у Microsoft - знаковые (signed), а у Watcom - беззнаковые (unsigned).
3. Отличия есть и в системе описания функций, и в системе управления указателями (pointer).
4. Это далеко не полный список тех изменений, которые Вам придется внести.
Вот она забота о конечном пользователе. Теперь вспомним, что у американцев есть целый Институт, занимающийся стандартами (ANSI). Куда они смотрят? В рот крупным корпорациям, у которых есть "зеленые". Не надо никого обвинять ("Во всем виновна Microsoft" - вот эта фраза уже действительно стала стандартом для многих). Нужно просто не брать взяток институту стандартов, а работать на совесть.
Права существуют, пока за них борются, а стандарты существуют для того, чтобы человек мог сберегать и фиксировать свои знания для последующих поколений. Стандарт - ускоритель прогресса. Именно из-за их отсутствия вы потратите время и деньги на то, чтобы перенести свои исходники. Считайте, что эти время и деньги себе в карман положила ANSI.
Microsoft Visual C/C++ 5.0 и/или 6.0
Я считаю, что только этот вариант способен избежать кучи ненужных проблем. Ведь если Вы работаете под Microsoft Windows, то вывод напрашивается сам собой. С Microsoft Visual C/C++ 6.0 на сегодняшний день работает огромная часть программистов. Это не выдумки - я опираюсь на тот факт, что все коммерческое ПО под MS Windows сделано на нем. Почему на нем? Представьте себе, что Вы нашли ошибку в компиляторе.
Другой программист нашел тоже такую ошибку. Третий нашел еще более странную ошибку. Они начинают связываться со службой поддержки Microsoft и рассказывать о проблемах. Microsoft выслушивает многочисленные заявки и через несколько недель ждите Special Pack. Вот и вся процедура. Популярность он приобрел и по другой причине. Все существующие SDK для Windows в основном рассчитываются на Microsoft Visual C/C++, а другим как придется. В общем, кто не хочет переходить к Microsoft Visual C/C++, тот может забыть про коммерческий интерес к своей продукции.
Очень много дешевых выпадов, что в MSVC плохой оптимизатор. Я настаиваю на сравнении с возможностями WATCOM. Если разобраться, ведь очень мало отличий.
Да и кроме того, у Watcom нет такой вещи, как Blend в оптимизации по процессору. Выбирайте компилятор, исходя из Ваших потребностей, но знайте, что лучше пользоваться тем, чем пользуются миллионы разработчиков ПО, чем быть первопроходцем и наступать на многочисленные грабли.
Слова о стилях
У тех, кто не знает еще C или С++, основным вопросом будет такой: "C или С++? Что лучше?". Оба они хороши, но пользователь должен сделать шаг в своем индивидуальном развитии. Т.к. "что русскому хорошо, то немцу смерть". Я, к примеру, очень люблю стандартный С, он везде почитается за свою простоту. Если Вы будете уметь писать программы на обыкновенном С, то на С++ перейти проблем не будет. А вот если поначалу возьметесь за изучение C++, то путь Ваш будет длинным, т.к. Вы забьете себе мозги всякой чепухой, о которой будете вспоминать в страшных снах. Представьте себе, Вам снится, что Вы не можете найти ошибку в исходнике. Это нормально, если Вы учитесь C++. Я Вас не пытаюсь запугивать. К примеру, возьмем многочисленные поиски фирм, которые дают объявления, что ищут С++ программистов. Учтите, что они пишут слово "С++" не просто так. Они ждут зачастую специалистов, которые лишь знают азы С++, а нужен им все равно обыкновенный С-программист. Поймите, что на практике С++ хорош для скоростных офисных работ, а устойчивость таких работ много ниже, чем ежели бы они были написана на С. Естественно, я должен аргументировать это. В Си++ есть понятие конструктора, за которое приходится дорого платить производительностью приложения, и в связи со сложностью механизма у вас есть шансы наблюдать стек сумасшедшего размера. Вывод из этого можете делать самостоятельно, т.к. стек - механизм "нежный" в основе своей и хорош при небольших объемах данных.
Чтобы не было обидно
Хочу отметить тот факт, что каждый из компиляторов имеет право на существование.
И если говорить об их назначении, то можно выделить три области применения, где все они делают свои индивидуальные успехи.
Borland = 1.Быт; 2.Наука; 3.Коммерция.
Watcom = 1.Наука; 2.Коммерция; 3.Быт.
Microsoft = 1.Коммерция; 2.Наука; 3.Быт.
10 советов нью-наполеона
1. Изучите С/C++, как бы это ни было сложно. Сделайте так, чтобы хотя бы недальновидный специалист по C/C++, как я (автор статьи), - был пустяковым конкурентом для Вас.
2. Знайте, подкрепляйте информацию об ассемблере платформы, на которой Вы работаете (80x86,Alpha,RISC).
Интересуйтесь практической стороной технологий. Зачастую, их технологии - это бутафория.
Помните, что MMX, 3DNOW!, SSE - это реклама. На практике нужна совместимость, и пользователя не нужно раздражать тем, что его компьютер устарел. Раздражайтесь лучше тем, что Вы не способны написать приложение, которое смогло бы работать и у него.
Меньше обращайте внимание на споры о скорости процессоров и скорости акселераторов. Все показатели работают всегда не на истину, а на заказчика.
3. Знайте хоть что-нибудь об устройстве своей операционной системы. При этом я имею в виду не то, что у Вас есть в закладке "оборудование", если это Windows, а как работают VXD драйверы, какие отличия между MS Windows NT и MS Windows 2000. Вы обязаны знать, как работает Виртуальная Машина (или Виртуальные Машины). Если Вы будете "глотать" даже такое, то точно при любом менталитете в США, Канаде так называемые коллеги долго не протянут.
4. Знай HTML не по редакторам и книжкам, а по ANSI-тексту. Такое знание HTML отличается от знаний FrontPage в такой противоположности, как дискретная математика вуза и математика второклассников.
5. Не тратьте время на сорные языки: Pascal и Basic (пускай простят меня фанаты этих языков). Вы никогда больше не увидите 80286 процессоров, для которых собственно и были сделаны компиляторы Borland Pascal и Microsoft QuickBasic. Я знаю, что Паскалем (уже на подносе, как Delphi) захламляют мозги студентам вузов. Заметьте, тот факт, что дают в вузах Вам сегодня, Паскаль или Бейсик, - это и есть тот самый результат утечки мозгов в Штаты в лице лучших преподавателей, которые зачастую не имели степеней и высоких наград. Если все-таки учитесь в вузе, то изучайте их Паскаль, но между тем не забывайте сравнивать его с C или C++.
Скоро Вы поймете, что актуален Паскаль был 20 лет назад. Т.е., там, где молодость этих преподавателей.
Учтите, что высшее образование, какое у нас есть в Беларуси, давно уже нужно только для птички в Вашей биографии.
6. Не занимайтесь серьезно недостойной продукцией: Excel, VisualBasic. Программирование без фидбэка очень плохо показывает себя на практике. Это не означает, что Вы не должны уметь на Excel'е деньги считать, но не лезьте в понятия макросов. Как показывает опыт, Microsoft очень мало заботится о совместимости версий одного и того же продукта. Проще говоря, главное не влипнуть в историю.
Приключений для Вас и так найдется много в жизни без Excel. Уже, наверное, давно все знакомы с ситуацией, когда одним новым фонтом набран документ, а на другом этого фонта нет. Это живой пример того, как заботятся о конечном пользователе корпорации-гиганты. Так разве смогут они конкурировать при нормальном подходе к делу? Я думаю, это будет недолго, если наш пользователь захочет развиваться, а их - останется в своих запросах на текущем уровне.
Не верьте в то, что на том берегу "нездоровые мозги" - просто знайте это! Лень их когда-нибудь доведет до первобытного состояния, а Мы - голь, которая на выдумки хитра, останемся на планете и дальше, но только будем сохранять стандарты, будем видеть будущее, будем умнеть, а не хитреть, будем пропитыми трудоголиками и творцами. Будьте дружны. И объединяйтесь в команды, но не допускайте энтузиазма. Энтузиазм - враг команды.
7. Умейте работать хотя бы с одним видом баз данных. Возьмите лучше SQL, т.к. на мой скромный взгляд, это лучший вариант для начинающего и профессионала.
8. Попробуйте себя в создании интернет-сервера, если подвернется возможность. Желательно Вам оценить серверы NT4 и/или FreeBSD.
9. Умейте работать с растровой и векторной графикой. Узнайте принципы работы с трехмерными объектами и наконец возьмите на вооружение себе ПО для создания такой графики. Рекомендую 3D Studio MAX и Adobe Photoshop.
10. Отвыкайте от работы с мышью. Это заметно повлияет на Ваши успехи.
Бонус совет: не искать приключений самому себе.
Если эти советы восприняли агрессивно, то Вам стоит остыть и предложить мне лучший вариант. Я могу его рассмотреть, но, думаю, и этого варианта не сдюжить 15-летнему до 20-летия.
Вывод, или Наполеон отдыхает
Желаем ли мы добра своей стране? Думаю, что ответ на вопрос уже давно не однозначен. Я бы еще раз хотел подчеркнуть тот момент, что наш уровень жизни зависит не от политики, а от наших рвений к знаниям, науке, технологиям, качеству. Судите сами.
Если нас, программистов на C/C++, становится в Беларуси много, то заграничные инвесторы, зная, что нам можно платить меньше, чем их местным (США, Канада) специалистам, будут работать с нами. Мы будем наращивать потенциал программеров, а на их специалистов спрос упадет, потому что они привыкли круто загибать пальцы. В итоге, на их стороне массовые увольнения, и многие из их специалистов либо возьмутся за более глупые занятия, либо вернутся на Родину. Ну как? Понятно, что при этом мозги перетекут сюда, а при наличии мозгов в стране появляется высокий жизненный уровень и капитал. Ведь, где мозги - там и капитал.
Вот тогда американизированной оппозиции точно нечего будет делать на нашей земле. Ведь их доллар - это бутафория, которую стоит только чуть-чуть "проверить на стойкость" и процесс пойдет сам по себе. В доказательство, возьмите Японию. Им не нужно доллара.
Что нужно, чтобы воплотить такие планы? Если Вы пришли домой (с работы или из учебного заведения) и легли на диван посмотреть телевизор или сели за компьютер поиграть в новую игрушку, то Вы уже можете забыть про так называемую хорошую жизнь. Не нужно обижаться на страну, на других людей - обижайтесь на себя, что Вы (или Вас) не научились работать. Пока таких людей будет много, до тех пор моя наполеоновская мысль будет неактуальной.
Субъективный подход
В Беларуси, несмотря на нашу нищету, регулярно расходится Enterprise Edition: Microsoft Developer Studio 6: Microsoft Visual C/C++ 6.0 (2 and 6CD version). Исходя из этого, я сделал субъективный вывод, что желающих познать таинства Microsoft Visual C/C++ становится много.
Я отвечу или попытаюсь ответить на все вопросы, присланные мне по электронной почте (ip@vitebsk.net), в следующих номерах газеты или лично Вам. Мне интересно знать: сколько Нас таких.
Есть просьба: не присылать вопросов типа: "Чем докажешь, что Паскаль хуже C/C++?". Этот вопрос уже давно подходит к тому, чтобы его разместить в рубрике "Тупые вопросы 2000". Задавайте вопросы по существу дела - получите такие же ответы.
Павел Горбунов
Да, конечно, проще сделать страницу, за которую сейчас же заплатят копейки, чем делать продукт на C/C++, но прибыль ждать придется долгие месяцы. У нас это называется "терпением", и его никогда у нас не хватало. У этих людей есть оно в достатке. Сейчас мы наблюдаем самый настоящий регресс, т.к. у нового поколения отсутствует желание к изучению чего-то сложней, чем HTML или JAVA. Это неправильно. Не нужно только думать, что на земле белорусской не осталось вовсе людей, которые не желают примыкать к рядам псевдохакеров, псевдоспециалистов по Hardware, псевдоспециалистов по Интернет технологиям. Мой жизненный опыт показал, что возрастает интерес к C/C++ чаще у тех людей, которым C/C++ нужен, чтобы "уехать за бугор". Поверьте, что "Загранице" уже давно не нужны просто специалисты по C/C++ и тем более по HTML. Им нужны опытные специалисты, которые могут не только пройти через огонь и воду, но и как от прохождения по этой воде и огню получить прибыль. Проще говоря, их трудно удивить, да и не нужно. У них другой менталитет, и нам (хотя лучше отвечать за себя) с ними не по пути, по той причине, что многие из нас не смогут врать всю жизнь без остановки про крутые технологии (которые, на подозрение, почему-то уж очень медленно стали развиваться в 90-ые годы, по сравнению с "кривой" 80-ого). Блестящие этикетки с загадочными надписями названий технологий, которые нельзя ни увидеть, ни услышать, ни почувствовать, ни использовать, еще, похоже, не перестали интересовать нас. Так было и будет, пока наш человек не перестанет задавать вопросы вроде: "А это модно (круто)?".
Хватит пессимизма. У нас есть шансы выжить в мире технологий. Еще осталось молодое поколение, которому не все равно, что будет через 10-20 лет в Беларуси. Их нужно направить в правильном направлении. Не судите строго. Я всего лишь предложу изучать язык C и Си++, вместо "кликаний по баннерам" и лазаний по беспредметным чатам, которых сейчас развелось, как бумажных денег, не имеющих золотого "прикрытия".
Вы хотите изучать язык программирования C/C++? Не знаете, какой компилятор Вам может помочь на практике?
Действительно, Вам решать, что будет нужно в жизни, и я не настаиваю на том, что у меня нет предвзятого отношения к некоторым компиляторам. Речь о моем единичном опыте и практике. Итак, существует 3 хорошо распространенных компилятора: Microsoft, Watcom и Borland. О каждом из них я расскажу подробно. Естественно, что я говорю о компиляторах для серии операционных систем Microsoft Windows.
Borland C/C++ 5.02
То, что о нем я хочу рассказать первым, не означает, что он лучший, но и не говорит об обратном. Давайте рассмотрим его как серьезный компилятор. В нем есть большее число настроек, чем в Microsoft Visual C/C++, но если Вас спросить: "Видели ли вы хоть одну коммерческую работу, написанную на Borland'е?" и Вы скажете "Да", значит продукт содержит BCWL32.DLL.
Она Вам нужна? Нет? Откуда берутся проблемы у этого компилятора? Возьмем Microsoft DirectX SDK 7.0. Посмотрим в директорию LIB\. Мы видим директорию Borland, где лежат Lib'ы для Borland компилятора. А представьте себе, что Вы делаете проект с размахом на будущее, а потом, при обновлении SDK, оказывается, что она не знает, что такое Borland C/C++. Мои слова обидны для любителей продукции Borland, но я не вижу оправдания многому в политике Borland'a. Их идея с визуальным программированием в лице Delphi, C++ Builder - это хорошая вещь в теории, но когда на практике решаешь серьезные задачи, то удивляешься, что одна и та же программа ведет себя на разных компьютерах по-разному. Оказывается, что ты не можешь контролировать собственные ресурсы (т.е. приходящие на них сообщения от ядра). Проще говоря, очень уж мало альтернативности и обратной связи. Поймите, что написанное "вручную" приложение будет легче всегда вами самими пониматься и контролироваться. Я, честно говоря, мало понимаю любовь некоторых людей к компилятору Borland C/C++. Чаще всего это говорит о том, что человек ленив, чтобы перейти на Microsoft Visual C/C++ или Watcom C/++. Правда, есть случаи, когда Borland на высоте. К этим случаям относятся скорость процесса компиляции и достаточно гибкая IDE.
Watcom C/C++ 11.0B-release
Знакомьтесь. WATCOM C/C++ - это бог DOS-овских игр. Вы играли в DOOM 1,2, Descent 1,2, Magic Carpet 1,2, Hexen, Heretic, Warcraft 1,2, Nascar 1,2? Это все откомпилировано на нем. Почему он был так актуален тогда? Компилятор может генерировать не только приложения реального режима (которые работают так же, как программы на Turbo Pascal), но и генерирует программы защищенного режима 386 (32-битные приложения). Было 2 способа работы в защищенном режиме: Pharlap и DOS4GW(DOS4G). Первый использовался в Autodesk 3D Studio, а второй "прирос намертво" к DOS-играм. DOS4G производства Tenberry Software ипользовался даже при создании очень серьезных конструкторских программ космического толка ("Cappilano Engineer"). В общем, когда Watcom С/C++ 11.0 B-release вошел в MS Windows'95, у него возможностей не уменьшилось, но появилась куча проблем, которые никто уже не устранит.
Главная проблема Watcom'овского экзекутэйбла (executable) под Win32 - стартаповский код. Он творит такие вещи, что порой удивляешься. Почему? Зачем? Например, пытается узнать, на каком он процессоре запущен. Поэтично? Но с другой стороны, это нужно, если вы компилируете под Pentium Pro, а запускаете под 80386. Вторая проблема пришла вместе с появлением Microsoft Windows 98.
У многих, включая меня, Watcom IDE стал загружаться через раз или при ряде условий. Это не нормальная ситуация, но все привыкли к этому и работают. В общем, могу отметить, что очень много чудес я увидел, пока работал с этим компилятором. Но не нужно забывать, что тех возможностей, которые есть у компилятора WATCOM, нет ни у Microsoft Visual C/C++, ни у Borland C/C++. Самая сильная сторона WATCOM - это его оптимизатор. Этот оптимизатор может сделать из кривого Си-текста отличный EXE. Удивляет то, с какой ловкостью разработчики компилятора чувствуют потребности программиста. Похоже, что они на оптимизатор потратили все время и силы и совсем забыли про IDE. Среда разработчика (IDE) - это сегодня одно из главных требований пользователей. Ведь поверьте, что можно все делать вполне нормально и в командной строке, но при этом вы не наблюдаете всего "процесса" разработки. Это многих отталкивает, но и с этим можно смириться или привыкнуть.
Все упирается в скорость разработки конечного продукта. С другой стороны, скорость конечного продукта на WATCOM'е под WIN32 с использованием всех опций оптимизатора выглядит очень впечатляюще. Что ж, нужно выбирать: либо быстро изготовленный продукт, либо быстро работающий продукт. Однако, не всегда оптимизация приводит к положительным результатам. В любом сложном продукте есть очень загадочные ошибки. Когда я три года проработал с WATCOM, а точней я на нем и изучал C и C++, я нашел кучу ошибок компилятора, которые научился обходить. Самая запоминающаяся ситуация произошла тогда, когда я в программе описал достаточно хитрый цикл и запустил оптимизацию по раскручиванию циклов. Я узрел интересную ситуацию, которая заключалась в бесконечной компиляции того исходного текста, где был тот злополучный цикл. Это немного охладило мое отношение к WATCOM компилятору, но, как понимаете, ошибка обнаружилась по методу "научного тыка" и я со временем смирился с такой проблемой. Это послужило мне уроком, и я взял за основу стиль описания циклов и структур попроще, тем более, что хотелось, чтобы и на другие компиляторы исходники успешно переносились.
Если его сравнивать с Microsoft Visual C/C++, то нужно отметить тот факт, что WATCOM'овский компилятор достаточно сильный конкурент Microsoft, потому что там имеется даже режим компиляции исходных текстов в режиме совместимости с Microsoft Visual C/C+. Это, я считаю, очень сильный аргумент за WATCOM.
Позже, когда я все чаще стал обнаруживать, что вся коммерческая продукция производится под Microsoft Visual C/C++, я очень сильно стал интересоваться вопросом переноса исходников из WATCOM под MSVC/C++ (Microsoft Visual C/C++).
Отличия будут выражаться в следующих моментах:
1. У Microsoft "#pragma" описывается по-другому, но если это "#pragma pack()", то изменений не нужно вносить.
2. По умолчанию переменные у Microsoft - знаковые (signed), а у Watcom - беззнаковые (unsigned).
3. Отличия есть и в системе описания функций, и в системе управления указателями (pointer).
4. Это далеко не полный список тех изменений, которые Вам придется внести.
Вот она забота о конечном пользователе. Теперь вспомним, что у американцев есть целый Институт, занимающийся стандартами (ANSI). Куда они смотрят? В рот крупным корпорациям, у которых есть "зеленые". Не надо никого обвинять ("Во всем виновна Microsoft" - вот эта фраза уже действительно стала стандартом для многих). Нужно просто не брать взяток институту стандартов, а работать на совесть.
Права существуют, пока за них борются, а стандарты существуют для того, чтобы человек мог сберегать и фиксировать свои знания для последующих поколений. Стандарт - ускоритель прогресса. Именно из-за их отсутствия вы потратите время и деньги на то, чтобы перенести свои исходники. Считайте, что эти время и деньги себе в карман положила ANSI.
Microsoft Visual C/C++ 5.0 и/или 6.0
Я считаю, что только этот вариант способен избежать кучи ненужных проблем. Ведь если Вы работаете под Microsoft Windows, то вывод напрашивается сам собой. С Microsoft Visual C/C++ 6.0 на сегодняшний день работает огромная часть программистов. Это не выдумки - я опираюсь на тот факт, что все коммерческое ПО под MS Windows сделано на нем. Почему на нем? Представьте себе, что Вы нашли ошибку в компиляторе.
Другой программист нашел тоже такую ошибку. Третий нашел еще более странную ошибку. Они начинают связываться со службой поддержки Microsoft и рассказывать о проблемах. Microsoft выслушивает многочисленные заявки и через несколько недель ждите Special Pack. Вот и вся процедура. Популярность он приобрел и по другой причине. Все существующие SDK для Windows в основном рассчитываются на Microsoft Visual C/C++, а другим как придется. В общем, кто не хочет переходить к Microsoft Visual C/C++, тот может забыть про коммерческий интерес к своей продукции.
Очень много дешевых выпадов, что в MSVC плохой оптимизатор. Я настаиваю на сравнении с возможностями WATCOM. Если разобраться, ведь очень мало отличий.
Да и кроме того, у Watcom нет такой вещи, как Blend в оптимизации по процессору. Выбирайте компилятор, исходя из Ваших потребностей, но знайте, что лучше пользоваться тем, чем пользуются миллионы разработчиков ПО, чем быть первопроходцем и наступать на многочисленные грабли.
Слова о стилях
У тех, кто не знает еще C или С++, основным вопросом будет такой: "C или С++? Что лучше?". Оба они хороши, но пользователь должен сделать шаг в своем индивидуальном развитии. Т.к. "что русскому хорошо, то немцу смерть". Я, к примеру, очень люблю стандартный С, он везде почитается за свою простоту. Если Вы будете уметь писать программы на обыкновенном С, то на С++ перейти проблем не будет. А вот если поначалу возьметесь за изучение C++, то путь Ваш будет длинным, т.к. Вы забьете себе мозги всякой чепухой, о которой будете вспоминать в страшных снах. Представьте себе, Вам снится, что Вы не можете найти ошибку в исходнике. Это нормально, если Вы учитесь C++. Я Вас не пытаюсь запугивать. К примеру, возьмем многочисленные поиски фирм, которые дают объявления, что ищут С++ программистов. Учтите, что они пишут слово "С++" не просто так. Они ждут зачастую специалистов, которые лишь знают азы С++, а нужен им все равно обыкновенный С-программист. Поймите, что на практике С++ хорош для скоростных офисных работ, а устойчивость таких работ много ниже, чем ежели бы они были написана на С. Естественно, я должен аргументировать это. В Си++ есть понятие конструктора, за которое приходится дорого платить производительностью приложения, и в связи со сложностью механизма у вас есть шансы наблюдать стек сумасшедшего размера. Вывод из этого можете делать самостоятельно, т.к. стек - механизм "нежный" в основе своей и хорош при небольших объемах данных.
Чтобы не было обидно
Хочу отметить тот факт, что каждый из компиляторов имеет право на существование.
И если говорить об их назначении, то можно выделить три области применения, где все они делают свои индивидуальные успехи.
Borland = 1.Быт; 2.Наука; 3.Коммерция.
Watcom = 1.Наука; 2.Коммерция; 3.Быт.
Microsoft = 1.Коммерция; 2.Наука; 3.Быт.
10 советов нью-наполеона
1. Изучите С/C++, как бы это ни было сложно. Сделайте так, чтобы хотя бы недальновидный специалист по C/C++, как я (автор статьи), - был пустяковым конкурентом для Вас.
2. Знайте, подкрепляйте информацию об ассемблере платформы, на которой Вы работаете (80x86,Alpha,RISC).
Интересуйтесь практической стороной технологий. Зачастую, их технологии - это бутафория.
Помните, что MMX, 3DNOW!, SSE - это реклама. На практике нужна совместимость, и пользователя не нужно раздражать тем, что его компьютер устарел. Раздражайтесь лучше тем, что Вы не способны написать приложение, которое смогло бы работать и у него.
Меньше обращайте внимание на споры о скорости процессоров и скорости акселераторов. Все показатели работают всегда не на истину, а на заказчика.
3. Знайте хоть что-нибудь об устройстве своей операционной системы. При этом я имею в виду не то, что у Вас есть в закладке "оборудование", если это Windows, а как работают VXD драйверы, какие отличия между MS Windows NT и MS Windows 2000. Вы обязаны знать, как работает Виртуальная Машина (или Виртуальные Машины). Если Вы будете "глотать" даже такое, то точно при любом менталитете в США, Канаде так называемые коллеги долго не протянут.
4. Знай HTML не по редакторам и книжкам, а по ANSI-тексту. Такое знание HTML отличается от знаний FrontPage в такой противоположности, как дискретная математика вуза и математика второклассников.
5. Не тратьте время на сорные языки: Pascal и Basic (пускай простят меня фанаты этих языков). Вы никогда больше не увидите 80286 процессоров, для которых собственно и были сделаны компиляторы Borland Pascal и Microsoft QuickBasic. Я знаю, что Паскалем (уже на подносе, как Delphi) захламляют мозги студентам вузов. Заметьте, тот факт, что дают в вузах Вам сегодня, Паскаль или Бейсик, - это и есть тот самый результат утечки мозгов в Штаты в лице лучших преподавателей, которые зачастую не имели степеней и высоких наград. Если все-таки учитесь в вузе, то изучайте их Паскаль, но между тем не забывайте сравнивать его с C или C++.
Скоро Вы поймете, что актуален Паскаль был 20 лет назад. Т.е., там, где молодость этих преподавателей.
Учтите, что высшее образование, какое у нас есть в Беларуси, давно уже нужно только для птички в Вашей биографии.
6. Не занимайтесь серьезно недостойной продукцией: Excel, VisualBasic. Программирование без фидбэка очень плохо показывает себя на практике. Это не означает, что Вы не должны уметь на Excel'е деньги считать, но не лезьте в понятия макросов. Как показывает опыт, Microsoft очень мало заботится о совместимости версий одного и того же продукта. Проще говоря, главное не влипнуть в историю.
Приключений для Вас и так найдется много в жизни без Excel. Уже, наверное, давно все знакомы с ситуацией, когда одним новым фонтом набран документ, а на другом этого фонта нет. Это живой пример того, как заботятся о конечном пользователе корпорации-гиганты. Так разве смогут они конкурировать при нормальном подходе к делу? Я думаю, это будет недолго, если наш пользователь захочет развиваться, а их - останется в своих запросах на текущем уровне.
Не верьте в то, что на том берегу "нездоровые мозги" - просто знайте это! Лень их когда-нибудь доведет до первобытного состояния, а Мы - голь, которая на выдумки хитра, останемся на планете и дальше, но только будем сохранять стандарты, будем видеть будущее, будем умнеть, а не хитреть, будем пропитыми трудоголиками и творцами. Будьте дружны. И объединяйтесь в команды, но не допускайте энтузиазма. Энтузиазм - враг команды.
7. Умейте работать хотя бы с одним видом баз данных. Возьмите лучше SQL, т.к. на мой скромный взгляд, это лучший вариант для начинающего и профессионала.
8. Попробуйте себя в создании интернет-сервера, если подвернется возможность. Желательно Вам оценить серверы NT4 и/или FreeBSD.
9. Умейте работать с растровой и векторной графикой. Узнайте принципы работы с трехмерными объектами и наконец возьмите на вооружение себе ПО для создания такой графики. Рекомендую 3D Studio MAX и Adobe Photoshop.
10. Отвыкайте от работы с мышью. Это заметно повлияет на Ваши успехи.
Бонус совет: не искать приключений самому себе.
Если эти советы восприняли агрессивно, то Вам стоит остыть и предложить мне лучший вариант. Я могу его рассмотреть, но, думаю, и этого варианта не сдюжить 15-летнему до 20-летия.
Вывод, или Наполеон отдыхает
Желаем ли мы добра своей стране? Думаю, что ответ на вопрос уже давно не однозначен. Я бы еще раз хотел подчеркнуть тот момент, что наш уровень жизни зависит не от политики, а от наших рвений к знаниям, науке, технологиям, качеству. Судите сами.
Если нас, программистов на C/C++, становится в Беларуси много, то заграничные инвесторы, зная, что нам можно платить меньше, чем их местным (США, Канада) специалистам, будут работать с нами. Мы будем наращивать потенциал программеров, а на их специалистов спрос упадет, потому что они привыкли круто загибать пальцы. В итоге, на их стороне массовые увольнения, и многие из их специалистов либо возьмутся за более глупые занятия, либо вернутся на Родину. Ну как? Понятно, что при этом мозги перетекут сюда, а при наличии мозгов в стране появляется высокий жизненный уровень и капитал. Ведь, где мозги - там и капитал.
Вот тогда американизированной оппозиции точно нечего будет делать на нашей земле. Ведь их доллар - это бутафория, которую стоит только чуть-чуть "проверить на стойкость" и процесс пойдет сам по себе. В доказательство, возьмите Японию. Им не нужно доллара.
Что нужно, чтобы воплотить такие планы? Если Вы пришли домой (с работы или из учебного заведения) и легли на диван посмотреть телевизор или сели за компьютер поиграть в новую игрушку, то Вы уже можете забыть про так называемую хорошую жизнь. Не нужно обижаться на страну, на других людей - обижайтесь на себя, что Вы (или Вас) не научились работать. Пока таких людей будет много, до тех пор моя наполеоновская мысль будет неактуальной.
Субъективный подход
В Беларуси, несмотря на нашу нищету, регулярно расходится Enterprise Edition: Microsoft Developer Studio 6: Microsoft Visual C/C++ 6.0 (2 and 6CD version). Исходя из этого, я сделал субъективный вывод, что желающих познать таинства Microsoft Visual C/C++ становится много.
Я отвечу или попытаюсь ответить на все вопросы, присланные мне по электронной почте (ip@vitebsk.net), в следующих номерах газеты или лично Вам. Мне интересно знать: сколько Нас таких.
Есть просьба: не присылать вопросов типа: "Чем докажешь, что Паскаль хуже C/C++?". Этот вопрос уже давно подходит к тому, чтобы его разместить в рубрике "Тупые вопросы 2000". Задавайте вопросы по существу дела - получите такие же ответы.
Павел Горбунов
Компьютерная газета. Статья была опубликована в номере 18 за 2000 год в рубрике программирование :: разное