На каких платформах нет jvm или jvm с ограниченной функциональностью по сравнению с windows или linux - PullRequest
2 голосов
/ 22 ноября 2010

Контекст этого вопроса - спор между пользователями C и Java.Пользователь C утверждает, что бэкэнд C является более переносимым, чем JVM.Это верно, если мы сталкиваемся с платформой без уже существующей поддержки JVM или относительно слабой поддержки.Кто-нибудь в переполнении стека сталкивался с такой платформой?Можем ли мы собрать список примеров?

Ответы [ 6 ]

4 голосов
/ 22 ноября 2010

Я не понимаю "переносимость" C в этом контексте. Если вы имеете в виду, что вы можете скомпилировать «hello world» для любого процессора - тогда да, C более переносим Но можете ли вы сделать какой-либо переносимый графический интерфейс или сеть, многопоточность и т. Д. С помощью C? Да, вы можете использовать QT или что-то подобное. Но это портативность? Java - это платформа, а C - это язык. ИМХО это очень разные вещи

2 голосов
/ 22 ноября 2010

«Более портативный», вероятно, не лучший вопрос.Что вам нужно сделать, это определить платформы, которые вам, возможно, целесообразно поддерживать, и выяснить, доступны ли для них C и / или Java.Если оба доступны, то переносимость не проблема для вас.Тот факт, что C доступен на большем количестве платформ (которые, вероятно, есть), многие из которых могут быть очень неясными, не имеет значения.

Если это просто абстрактная дискуссия, то уместным ответом будет «кого это волнует»?

РЕДАКТИРОВАТЬ: В ответ на комментарии.

Это не просто "выкуп продукта на этой неделе".Если вы ориентируетесь на рабочий стол, то Windows, Mac и Linux покрывают около 99,99999999% всех установок (дайте или возьмите несколько девяток), и все они имеют Java.

Если вы нацеливаетесь на мобильные устройства, то вы можете посмотреть, у кого есть Java, но вам все равно придется проделать работу по переносу между ними, и использование C вам не поможет.

Какие еще платформы вы рассматривали для таргетинга?IBM 370?Дек VAX?OS9?Если вы не можете придумать платформу, на которую вы хотите нацелиться, но не относящуюся к одному из вышеперечисленных, то дополнительная мобильность тратит ваше собственное время.И помните, что при прочих равных C разработка будет медленнее, чем Java.Если вы собираетесь тратить свое драгоценное время на написание на C, вам лучше получить от него что-то, что вам, вероятно, понадобится.

Если вы хотите создать «универсальный инструментарий», который вы можете использовать в различныхпроекты в течение следующих десяти лет, тогда «один язык» не поможет.Если вы работаете над Java-проектом, включение кода на C достаточно сложно, так что, вероятно, оно того не стоит, даже если это позволят соображения безопасности.Вероятно, вам понадобится отдельный набор инструментов для каждого языка, на котором вы собираетесь работать - один для Java, один для C и т. Д. Набор C, вероятно, будет включать такие вещи, как расширяемые массивы и другие бесплатные компоненты Java.В любом случае: сначала выберите язык для каждого проекта, а затем извлеките соответствующий набор инструментов для этого языка.

2 голосов
/ 22 ноября 2010

Для всего, что работает с ARM или MIPS, вряд ли будет доступен полный JDK, хотя он может иметь доступ к J2ME.

1 голос
/ 22 ноября 2010

Любая платформа, кроме x86 и x86_64, имеет плохую поддержку JVM.

1 голос
/ 22 ноября 2010

Список загрузок JVM можно найти здесь .

У меня нет особого опыта в поддержке JVM, но на первый взгляд кажется, что поддерживаются Windows, Linux, Solaris и OS X Я полагаю, если вы используете что-то еще, то Java - не тот путь ...

Вот довольно полный список всех операционных систем. Мне жаль говорить, что для Amiga или ProDOS нет JVM.

0 голосов
/ 12 декабря 2010

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

Java была разработана, чтобы быть переносимым языком; вы можете взять 32-битную программу и работать под 64-битной виртуальной машиной без изменений (если вы не перейдете на JNI).

...