December 10th, 2014

компьютеры

О кросс-платформенном программировании

Вот на чём проще написать программу, которую можно использовать как на Хрюниксах, так и на Винде или на Маке -- на Си или на Джаве? Обычно я не задумываясь отвечаю "на Джаве!" Да? А вот фигачечная!!!

Всё зависит от того, что программе нужно делать. Если вывалить какое-то графическое окно и красиво считать там циферки -- да, можно на Джаве. И работать будет практицки везде.

А вот если надо работать с железом -- то частенько на Джаве без войны -- никак. Простой пример. Пишу небольшую программу, которая будет общаться с железкой через COM-порт. На Джаве для этого есть несколько библиотек. Оригинальная -- JavaComm. Не обновлялась с Джавы 1.2. Не входит в комплект стандартной поставки Джавы. Клон JavaComm -- RxTx. Проект ушёл в оффлайн. jSSC -- вроде живая... Для каждой из них нужно доставлять библиотеки и долго шаманить. Общее ощущение корявости и отсутствие человеческой документации полностью меня удручили.

Знаете, у кого есть хорошие и прекрасно документированные библиотеки для работы с серийными портами? ВНЕЗАПНО, у Майкрософт.

Там есть класс SerialPort с блекджеком и шлюхами: http://msdn.microsoft.com/en-us/library/system.io.ports.serialport%28v=vs.110%29.aspx

Красота же, блин! Но программа, написанная на C#, не запустится под Линуксом.

А что Си? А на Си писать под серийный порт можно, используя termios.h. И этот файл есть практически на всех итерациях хрюниксов -- на Линупсе, на FreeBSD, и даже на MacOS, и, более того, на cygwin под Виндой! Так что пусть бинарник и не запустится -- плевать я на это хотел, перекомпилировать, что, долго, что ли? Везде же есть животворящий gcc.

Только вот рисовать, используя termios.h, скажем так, непросто. Там надо коряги кода с битовыми операциями и флагами. Но есть добрый человек Теуниз ван Беелен (не знаю, правильно ли пишу его имя), который нарисовал свою библиотеку RS232, где работа с серийным портом была сильно упрощена:

http://www.teuniz.net/RS-232

Там нет работы с прерываниями (используется поллинг) и прочего, но для моих целей -- вполне достаточно. Мне сильно сложного не надо -- читать и писать char'ы в порт.
юмор

.NET на Линуксе

Ну... Работать-то оно, конечно, работает. Формально.

Только вот приложения с графическим интерфейсом надо писать под .NET 2.0 -- ибо ничего новее не поддерживается. И выглядят Windows Forms в такой интерпретации страшнее ядерной войны.


Привет, 1993 год! Джавовский AWT первого разлива и то выглядел симпатичнее, не говоря уже о SWT и Swing.

А если не графические приложения... писать консольные .NET приложения на Винде с тем, чтобы запускать их на Линуксе... Это, по-моему, из серии "О, мсье знает толк в извращениях!" Я уж лучше тогда на Перле или действительно освою Питон, как предлагали в предыдущем посте.