Написание приложения для Unix и Windows - PullRequest
1 голос
/ 10 ноября 2009

Я напишу программу для Interactive UNIX (http://en.wikipedia.org/wiki/INTERACTIVE_UNIX). Но через год она будет перенесена на Windows. Я напишу ее в ANSI C и / или SH-скрипте. Когда она будет работать в Windows он будет работать как служба Windows. Как мне сделать это максимально простым для меня?

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

К сожалению, Interactive Unix - это старая система, и единственная существующая оболочка - это / bin / sh

Ответы [ 6 ]

3 голосов
/ 10 ноября 2009

Если вы даже подумываете сделать это в скрипте SH, то вам следует серьезно подумать о Python, который уже переносим.

2 голосов
/ 10 ноября 2009
  • Порт рано и часто
  • Инкапсулируйте непереносимый код. (Не распространяйте слишком много #ifdef по всему коду - лучше создайте функции, реализованные отдельно для каждой ОС в отдельных исходных файлах.
  • Будьте очень строги с типами данных (используйте long short в структурах / классах, а не в int)
  • т.е. включите наивысший уровень предупреждения и устраните все предупреждения.
1 голос
/ 12 ноября 2009

Windows не может запускать sh-скрипты напрямую, для этого нужно использовать cygwin. Так что если вы действительно хотите работать на ванильных Windows, вам лучше использовать C. Придерживайтесь C89 и будьте осторожны. Если вы используете какие-либо системные вызовы, придерживайтесь POSIX и вы должны найти их или их эквиваленты в Windows. Windows также имеет довольно обширную библиотеку, похожую на сокеты Berkeley, так что вы можете использовать ее и в разумных пределах.

Вам все еще придется сделать # ifdefing.

В конечном итоге вы скомпилируете его с MinGW, если сделаете это задачей Windows, если слишком заблудитесь в логове UNIX, вам придется вместо этого сделать его двоичным файлом cygwin, с которым связан некоторый багаж.

1 голос
/ 11 ноября 2009

Я бы рекомендовал использовать ANSI-C и Lua (встраиваемый небольшой интерпретатор сценариев). Попробуйте использовать это с необходимыми базовыми функциями языка Си.

Вам нужно часто портировать и тестировать. Если вы один год работаете с Unix, а затем пытаетесь переключиться, это будет намного сложнее, потому что зачастую лучшим решением для портирования является другой дизайн, который реализован на всех платформах.

1 голос
/ 10 ноября 2009

Вы можете использовать платформо-зависимые ifdef-include прагмы и как можно более строгие типы. В GLib определены некоторые хорошие, которые можно использовать практически на любой платформе или архитектуре.

Параметр «только сценарий оболочки» не является жизнеспособной альтернативой, как на платформах Windows, по умолчанию нет оболочки Bourne, Bash или KSH, и, к сожалению, PowerShell редко встречается на машинах с XP. Но вы можете создать как традиционный пакетный файл, так и скрипт оболочки Bourne.

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

0 голосов
/ 11 ноября 2009

Если нет возможности добавить что-то переносимое по своей природе, например, python, ruby, perl, java и т. Д., То, вероятно, лучше всего использовать ANSI C. Одной из причин первоначальной популярности C была его (относительно хорошая) переносимость. , Тем не менее, все, что тесно связано с ОС, например, графика, работа в сети и т. Д., Гораздо менее переносимо в C, чем в чем-то вроде Python. Вы должны стремиться сделать «обертки» для специфических функций ОС и не допускать их выделения из основного кода. Таким образом, когда приходит время портировать его, вы переписываете оболочки, и все остальное должно компилироваться без особых проблем.

Все это говорит о том, что НАМНОГО проще написать что-то на Python и заставить его работать везде. Плюс это более "весело", чтобы написать. Поэтому, если вы можете избежать «интерактивного Unix» в будущем, сделайте это.

...