Почему некоторые программы написаны на C ++ только для Windows, а другие нет? - PullRequest
2 голосов
/ 16 февраля 2009

Это то, о чем я давно уже думал.

Возьмите Notepad ++ для установки. Википедия сообщает мне, что она написана на C ++ и предназначена только для Windows.

Теперь возьмите PHP. Википедия говорит мне, что это также написано на C ++, но работает и на других ОС.

Но я вижу больше языков, чем просто C ++ для PHP ... как это сделать? Делают ли они какой-то новый код в C ++, видят, как он работает, а затем выясняют, как это сделать в Perl, или что происходит?

Ответы [ 8 ]

11 голосов
/ 16 февраля 2009

Это зависит от того, используете ли вы платформо-зависимые библиотеки или нет. Notepad ++ - это настольное приложение, для которого требуется инструментарий с графическим интерфейсом. Хотя существуют кроссплатформенные библиотеки C ++, такие как Qt и wxWidgets, Notepad ++, вероятно, использует специальную технологию Microsoft. Таким образом, он не может быть перенесен на другие платформы.

PHP с другой стороны - это технология WEB-сценариев, поэтому нет необходимости в GUI-библиотеке. Кроме того, гораздо больше интереса к запуску PHP на многих платформах, чем к Notepad ++. Это стимул для разработчиков сделать кросс-платформенный код на C ++.

Избегайте платформо-зависимых библиотек - не единственное, что нужно для кроссплатформенного приложения C ++. Обычно это означает кодирование для наименее общего знаменателя и сохранение разных веток кода для каждой поддерживаемой платформы. Хотя C ++ является кроссплатформенным языком, каждая система имеет свои тонкости. Фактически, код мог бы отличаться на той же платформе, если бы использовался другой компилятор. Попробуйте загрузить исходный код C ++ приложения с открытым исходным кодом, например, PHP. Вы могли бы заметить, что большая часть кода одинакова для всех платформ, но также будут разные биты. Иногда используются директивы препроцессора, в других случаях используются совершенно разные исходные файлы.

Таким образом, создание настоящего кроссплатформенного приложения на C ++ - это сложная работа, и обычно она создается, когда для этого существует сильный стимул и в нем участвует много людей. Однофункциональное приложение, такое как Notepad ++, не может быть кроссплатформенным.

4 голосов
/ 16 февраля 2009

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

  • Вы программируете независимо от операционной системы и от того, что лежит у вас под ногами (поэтому вы не используете средства операционной системы, платформы и т. Д.).
  • Вы программируете, используя библиотеки и инструменты, которые запрограммированы таким образом, и, таким образом, работаете в нескольких операционных системах (например, вы используете кросс-платформенные Qt или wxWindows для управления окнами и интерфейсами).
  • Вы создаете несколько версий кода, чтобы учитывать особенности различных архитектур, на которых он будет работать. Таким образом, вы, вероятно, достигнете большей производительности и «лучшего» программного обеспечения, потому что код оптимизирован для его собственной архитектуры, но его очень сложно поддерживать.

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

3 голосов
/ 16 февраля 2009

В отличие от некоторых современных языков, таких как Java и C #, язык C ++ обеспечивает только базовую функциональность. У него нет стандартного способа обработки пользовательского интерфейса, потоков, сетевого взаимодействия, криптографии или даже чтения XML. Вместо этого поддержка такого рода функций остается за операционной системой. Windows предоставляет широкий набор API под названием Win32, которым могут воспользоваться приложения, написанные для Windows. Существуют аналогичные API, созданные на основе Linux и других операционных систем. Всякий раз, когда авторы пользуются библиотеками определенной операционной системы, они используют их так, чтобы их программы не работали в других операционных системах.

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

1 голос
/ 16 февраля 2009

Notepad ++ - это Windows только потому, что Notepad ++ является заменой Windows Notepad, что, как известно, плохо. Никто в любой уважающей себя ОС не использовал бы редактор с именем «Блокнот» в имени;>.

Ядром Notepad ++ является компонент текстового редактора Scintilla , который является кроссплатформенным (Linux, OS X и Windows) и используется как в кроссплатформенных, так и в платформенных приложениях . Общая логика представления является общей с абстрактными классами для взаимодействия с оконными системами и графическими контекстами. Приложения берут кроссплатформенный компонент и связывают его с конкретным окном ОС и графическим контекстом. Мой любимый редактор для Linux и Windows - SciTE , который является очень быстрой легкой оболочкой для редактора со сценариями Lua; есть также Komodo , который оборачивает компонент редактора Scintilla в контейнер Mozilla XUL - еще один кроссплатформенный стек C ++.

Существует определенная стоимость создания кроссплатформенных приложений; эти инвестиции окупятся, только если на этих платформах есть потенциальные пользователи.

1 голос
/ 16 февраля 2009

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

0 голосов
/ 16 февраля 2009

Другие прокомментировали GUI и использование других библиотек, которые существуют только на подмножестве основных платформ.

Еще одним фактором являются разработчики. Многие разработчики (или компании-разработчики программного обеспечения) имеют только опыт, доступ, потребности клиентов или необходимость использовать одну платформу, и поэтому они не тратят лишних усилий, чтобы сделать свое программное обеспечение кроссплатформенным. Например, если у компании есть ПК с Windows и инструменты для разработчиков на каждом рабочем месте, нет собственных компьютеров под управлением Linux или Mac, на которых можно разрабатывать или тестировать, а также нет разработчиков, которые являются экспертами в этих других платформах, и нет крупных клиентов, требующих другую платформу, им трудно оправдать не просто продвижение вперед с помощью пакета только для Windows. И если они передумают позже, когда у них есть опыт, оборудование или дополнительные требования, они могут обнаружить, что уже слишком поздно исправлять большую кодовую базу, которая позволила стать очень зависимой от платформы.

Независимость от платформы требует реальных усилий, на каждом этапе пути. Если вы начинаете с первого дня с планом, используете кроссплатформенные библиотеки (например, Qt, boost, OpenGL и т. Д., Тщательно избегая MFC, DirectX и т. Д.), А также регулярно собираете и тестируете на всех платформах, вероятно, это всего лишь 10 -20% больше усилий, чтобы сделать хорошее кроссплатформенное приложение. Но если вы начнете с одноплатформенного приложения, которое разрабатывалось в течение длительного времени, то для его кроссплатформенности может потребоваться столько же усилий, сколько для его написания с нуля, и это может быть особенно трудно обосновать, если новая платформа имеет сравнительно небольшая доля рынка в вашей отрасли или если ваши разработчики ненавидят работать над этим.

0 голосов
/ 16 февраля 2009

Помимо специфичных для платформы библиотек и API, C и C ++ также не являются кросс-платформенными языками (по уважительной причине). Они намеренно оставляют множество деталей неуказанными, например, длины типов, порядковый номер, выравнивание переменных в структурах и инициализируется ли вновь выделенная память.

Это позволяет вам писать (специфичный для платформы) код, который настолько быстр, насколько возможно ваш процессор, но это также означает, что если вы хотите, чтобы ваш код был переносимым, то это потребует дополнительных усилий и тестирования - что многие нацеливание на платформу Windows / x86, вероятно, пропустить.

0 голосов
/ 16 февраля 2009

Теперь возьмите PHP. Википедия говорит мне это также написано на C ++, но это работает на других ОС тоже.

PHP написан на C только для того, чтобы сделать его доступным на большем количестве платформ. Есть даже правила делать комментарии только в стиле C, а не в C ++ //.

См. Стандарты кодирования PHP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...