Переход с VMS на Unix

String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true

Убедитесь, что вы понимаете, почему. Это потому, что сравнение == сравнивает только ссылки; equals() метод сопоставляет содержимое по символу.

Когда вы вызываете new для a и b, каждый получает новую ссылку, указывающую на "foo" в таблице строк. Ссылки разные, но контент один и тот же.

11
задан Nathan Campos 26 November 2009 в 16:15
поделиться

8 ответов

У вас есть несколько варианты.

  1. Получите исходный код OpenVMS и продолжайте поддерживать Open VMS, как если бы это был дистрибутив Linux. Некоторые люди не против идти в ногу с дистрибутивами Linux и OpenVMS. Это можно сделать.

  2. Попробуйте перекомпилировать VMS C в Linux. Это может быть тривиально, если C использовал только стандартные библиотеки. Это может быть очень и очень сложно, если C использовал много библиотек VMS.

    Когда у вас под рукой будут факты, вы можете пересмотреть этот курс действий. Поскольку вы не перечислили набор методов библиотеки VMS, которые использует эта программа, невозможно сказать, насколько она связана с ОС.

    Это может быть тривиально или невозможно. Трудно сказать без анализа источника.

  3. Пишите библиотеки моста с VMS на Linux. Если ваша программа выполняет лишь несколько функций VMS, это не очень сложно. Если ваша программа выполняет обширные функции VMS, это безумие.

    Мост - в конечном итоге - ужасная идея. Однако менеджерам это нравится.

    Альтернативой является замена вызовов библиотеки VMS правильными переносимыми вызовами Linux вместо записи мостов. Это лучше в долгосрочной перспективе, поскольку исключает непереносимые функции программы.

  4. Перепишите ее с нуля на Python. Обычно это проще, чем пытаться перенести код C. Он будет короче, чище, проще и портативнее.

3
ответ дан 3 December 2019 в 02:30
поделиться

Чтобы выучить C, вы могли бы с таким же успехом перетащить его изо рта: «Язык программирования C» его изобретателей, Кернигана и Ричи.

Я могу порекомендовать «Среда программирования UNIX» "(снова) Брайан Керниган; более авторитетный источник вы вряд ли найдете, и он учит вас одновременно идиомам Unix / C и немного программированию на C.

Для большей глубины и подробностей о C мне очень понравилась книга Питера ван дер Linden: «Экспертное программирование на C - секреты Deep C»

Вы также захотите побороться с LMS за библиотечную документацию по специфическим для VMS функциям C с (конечно) особым акцентом на тех, которые фактически используются в приложении. Вот где будут ваши усилия по переносу.

Работа может быть легкой или сложной, в зависимости от того, как много машинно-зависимых умений и бит-тидлинга сделано, и сколько используется специфичных для VMS системных вызовов. Было бы очень хорошо, если бы размер слова был равным (другими словами, если ваш VMS-ящик имеет размер слова 32 бита, не запускайте код в 64-битной версии Unix!)

1
ответ дан 3 December 2019 в 02:30
поделиться

Все, что написано на VMS, использует множество специфических для VMS вещей, это было настолько удобно.

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

Другой вариант - запускать openVMS на некотором современном оборудовании, возможно, в виртуальной машине.

6
ответ дан 3 December 2019 в 02:30
поделиться

Что ж, у тебя есть несколько вариантов. если этот код нужно портировать довольно быстро, я бы написал библиотеку моста для эмуляции vms libs. когда вы восстановите его и запустите на * nix, затем выполните замену вызовов библиотеки vms на собственные / переносные вызовы для * nix.

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

-1
ответ дан 3 December 2019 в 02:30
поделиться

Если вы хотите продолжать использовать VMS на виртуальной машине, вы можете изучить CHARON-VAX ( http://www.charon-vax.com/ ) . Как упоминалось ранее, простота переноса действительно во многом зависит от того, сколько расширений VMS использовалось; поиск в исходном коде символов $, встроенных в строки (обычно с 3-символьной ведущей подстрокой, такой как lib $ gettime, dsc $ descriptor или sys $ foobar и т. д.), даст вам хотя бы базовое представление о том, какие системные функции VMS вызываются и насколько вероятно, что они будут переносными, если название достаточно очевидно.

3
ответ дан 3 December 2019 в 02:30
поделиться
  1. Первый вопрос Мне нужно спросить, почему, и я буду вести разговор в направлении «Вам действительно нужно переносить это с VMS». О VMS стоит упомянуть несколько вещей:

    -> VMS все еще активно разрабатывается и поддерживается HP. Они только на прошлой неделе выпустили V8.4 для полевых испытаний (см. http://h71000.www7.hp.com/openvmsft/ ).

    -> VMS доступна на новом оборудовании; в частности, серверы HP Integrity на базе процессора Itanium.

    -> VMS также доступна на виртуальных платформах через продукты Charon Emulation.

    -> По популярным оценкам, сегодня активно используется около 300 000 систем VMS. LMS может быть последним человеком в LargeCo, но он далеко не последний человек в мире.

    -> Много информации там, см. Openvms.org, например, чтобы увидеть много текущей информации о VMS, все от текущих пользователей .

  2. Хорошо, вы все еще хотите перенести VMS. Как ты делаешь это? Ну, это зависит от множества вещей.

    -> Как говорили другие, насколько стандартен код? Скорее всего, не очень. Чем больше VMS-измов, тем труднее работа. 'Нуфф сказал.

    -> Что такое база данных? Если это Oracle, вероятно, не так уж сложно перейти на Oracle на какой-то другой платформе. Если это какая-то специальная БД, основанная на индексных файлах RMS, то вам нужно проделать больше работы, вам нужно будет воссоздать эту псевдо БД или достаточно понять ее, чтобы заменить ее какой-нибудь реляционной БД.

    -> Кроме C, что еще используется для создания приложения? Что на передней панели? DECforms? ФМС? Есть ли механизм транзакций, например ACMS? РТР? Эти вещи будут иметь огромное влияние на выполнимость и усилия, необходимые для переноса на UNIX.

    -> Какие еще продукты задействованы? Используются ли сторонние библиотеки? Используются ли сторонние продукты, критически важные для приложения или функциональности?

    -> Сгруппирована ли эта система? Если да, то почему? Вам нужно будет достичь тех же целей с UNIX-системой.

    -> Есть компании, которые помогут вам в этом, и утверждают, что у них есть инструменты, облегчающие задачу, но мой опыт показывает, что эти компании, как правило, продавать вам больше услуг, чем продуктов (т.е. вам нужно нанять их, чтобы использовать инструменты. Это будет дорого).

  3. Книга UNIX для пользователей OpenVMS даст новичку VMS некоторую помощь в понимании VMS, но, как сказано в названии, книга действительно предназначена для противоположной цели.

12
ответ дан 3 December 2019 в 02:30
поделиться

В зависимости от того, какие языки вы уже знаете, C не так уж сложно учиться. Я преподавал себя в процессе обучения C ++, наконец, поручил себя от Паскаля. (VAX PASCAL, PLUS RDB / VMS, PLUS DCL сформировал комбинацию, которая была трудно победить.)

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

Это довольно легкие вещи, но я прошел через онлайн-учебные пособия для C ++, что Microsoft делает доступным в сочетании с Express Edition Visual Studio для C ++.

Вот Учебник новичка:

http://msdn.microsoft.com/en-us/beginner/cc305129.aspx

0
ответ дан 3 December 2019 в 02:30
поделиться

Брайан, я не уверен, что LMS указала / позаботилась о портировании кода C или ВСЕГО процесса. Поскольку слишком часто люди думают о языках вне системы.

Если и был процесс, построенный на VMS, скорее всего, он использовал как минимум средства планирования / пакетной обработки, которые часто пишутся на DCL (довольно простой и понятный язык, в отличие от сценариев оболочки или Perl).

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

Если вы хотите просто попробовать C-код, как было написано ранее, поищите в нем совпадения "$". Или просто скопируйте его со всеми присутствующими заголовками, основ команды compile-link должно быть достаточно.

С другой стороны, это выглядит как вызов консультанта, поскольку действительно таких рабочих мест было много во времена «исхода». Все сказанное VMS остается довольно надежной платформой (24x7 - это норма!), Если только аппаратное обеспечение не умрет, то останутся тонны «исходящих» запчастей. УДАЧИ!

1
ответ дан 3 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: