Опыт работы с "преобразователями языка"? - PullRequest
5 голосов
/ 12 июня 2010

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

Я немного скептически отношусь к использованию такого рода инструментов. Кто-нибудь знает или имеет опыт, скажем, о Visual Basic для Java или против преобразователей? Только один пример, чтобы выбрать

http://www.tvobjects.com/products/products.html, претендует на звание "мирового лидера" или около того в этом аспекте, однако, если читать это:

http://dev.mysql.com/tech-resources/articles/active-grid.html

Там автор утверждает:

"Пользователи MySQL единодушны в том, что инструменты автоматического преобразования для MS Access не работают. Например, инструменты, которые переводят существующие приложения Access в Java, часто приводят к выполнению на 80% полных решений, где выполнение последних 20% работы занимает больше времени. чем начинать с нуля. "

Ну, мы знаем, что нам нужно 80% времени для реализации первых 80% функциональности и еще 80% времени для остальных 20% ....

Значит, кто-нибудь пробовал такие инструменты и считал их полезными?

Ответы [ 7 ]

9 голосов
/ 12 июня 2010

Пробовал?Нет, фактически встроенный (более одного) языковой конвертер.

Вот один я (и мои коллеги), созданный для B2 Spirit Stealth Bomber для преобразования программного обеспечения миссии, написанного на унаследованном языке., JOVIAL, в поддерживаемый код C, со 100% автоматическим преобразованием.Одним из требований было то, что нам НЕ разрешали видеть фактический исходный код.Без шуток.

Вы правы: если вы получаете только средний высокий коэффициент конверсии (например, 70-80%), усилия по завершению конверсии все еще очень значительны, если вы действительно можете это сделать вообще.Мы нацелены на 95% + и делаем лучше, когда говорят, что стараемся больше, чем в случае с B2.Единственная причина, по которой люди принимают конвертеры со средней скоростью, заключается в том, что они не могут найти (или не будут финансировать!) Лучшего, настаивают на том, чтобы начать сейчас , и принимают тот факт, что преобразование таким образом может бытьбольно (обычно они не знают, сколько), но на самом деле менее болезненно, чем восстанавливать его с нуля.(Я согласен с этой оценкой: в общем, проекты, которые пытаются перекодировать большую систему с нуля, обычно терпят неудачу, и преобразования, использующие инструменты со средней высокой степенью конверсии, не имеют такой высокой частоты отказов.)

ТамЕсть много плохих инструментов преобразования, что-то, сложенное вместе с множеством кода PERL, выполняющего регулярные выражения для текстовых строк, или некоторый парсер на основе YACC с генерацией кода, по существу, один к одному для каждого оператора в модуле компиляции.Первые построены людьми, которым выпало обращение с неба.Последние часто строятся из благих намерений инженеров, которые не имеют приличного опыта работы с компилятором.

Необычный пример приведен в моем ответе на этот SO вопрос о миграции на COBOL: Опыт миграции с устаревшего Cobol /PL1 в Java , который является прямым переводчиком утверждений ... производит материал, который породил термин "JOBOL".

Чтобы получить такие высокоточные показатели конверсии, вам нужно высокое качествосинтаксические анализаторы и средства для создания высококачественных правил перевода, которые сохраняют семантику и оптимизируют для свойств целевого языка и особых случаев.По сути, вам нужно то, что составляет настраиваемую технологию компиляции.ИМХО причина, по которой мы добиваемся успеха, - это DMS Software Reengineering Toolkit , который был разработан для этой работы.(Я архитектор; зацените мою иконку SO / биографию).

Много тщательного тестирования тоже помогает.

DMS "знает", что компилятор знает о коде, благодаряиметь подобный компилятору внешний интерфейс для интересующего языка и иметь возможность создавать AST, таблицы символов, потоки управления и данных, графы вызовов.Он использует большую часть технологии компиляции, которую сообщество компиляторов потратило за последние полвека, изобретая, , потому что это доказало свою полезность при переводе!

DMS знает больше , чем известно большинству компиляторов, поскольку он может считывать / анализировать / преобразовывать все приложение одновременно;большинство компиляторов придерживаются отдельных модулей компиляции.Таким образом, можно кодировать правила перевода, которые зависят от всего приложения, а не только от текущего оператора.Мы часто добавляем знания о проблемах или приложениях, чтобы улучшить перевод.Это часто проявляется при преобразовании специальных функций языка или обращений к библиотекам, где необходимо распознавать вызовы библиотек как специальные идиомы и переводить их в вызовы композиций целевых библиотек и языковых конструкций.

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

Чаще всего мы создаем сложные автоматизированные средства разработки программного обеспечения, которые решают проблемы, характерные для клиентов, такие как средства анализа программ (мертвый код)., дублированный код, неработающий код, метрики, извлечение архитектуры, ...) и инструменты массовых изменений (миграция платформы [не язык], вставка слоя данных, замена API, ...)

5 голосов
/ 13 июня 2010

Мне кажется, как почти всегда в случае вопросов MS-ACCESS, имеющих теги, которые привлекают более широкое население StackOverflow, что отвечающие люди упускают ключевой вопрос здесь, который я прочитал как:

Существуют ли какие-либо инструменты, которые могут успешно преобразовать приложение Access в любую другую платформу?

И ответом будет

АБСОЛЮТНО НЕ

Причина этого заключается просто в том, что инструменты вВ том же семействе, в котором используются аналогичные модели для объектов пользовательского интерфейса (например, VB6), отсутствует так много вещей, которые Access предоставляет по умолчанию (как преобразовать непрерывную подчиненную форму Access в VB6 и не потерять функциональность?).А другие платформы даже не разделяют ту же базовую модель, что и VB6 и Access, поэтому у них еще больше препятствий для прояснения.

Цитируемая статья MySQL довольно интересна, но она действительно путает проблемы, которые возникают некомпетентно-разработанные приложения в сравнении с проблемами, связанными с используемыми инструментами разработки.Плохая схема данных не присуща Access - она ​​присуща [большинству] начинающих пользователей баз данных.Но статьи, кажется, приписывают эту проблему Access.

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

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

Эта статья даже не рассматривает преобразование приложения Access, и для этого есть веская причина.Все инструменты, которые я видел, утверждают, что конвертируют приложения Access (на любую платформу) либо конвертируют только данные (в этом случае они вообще не конвертируют приложение - дебилы!), Либо рабски преобразуют структуру интерфейса.с соответствием 1: 1 между объектами пользовательского интерфейса в приложении Access и в целевом приложении.

Это не работает.

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

Во-вторых, при рассмотрении вопроса о преобразовании приложения Access для развертывания в веб-браузере вся модель приложения отличается, т. Е. От состояния с состоянием добез состояния, и поэтому дело не только в нескольких неподдерживаемых функциях Access, но и в совершенно другой фундаментальной модели взаимодействия объектов пользовательского интерфейса с данными.Возможно, 100% несвязанное приложение Access можно было бы относительно легко преобразовать в браузерную реализацию, но сколько их там?Это будет означать приложение Access, которое не использует никаких подчиненных форм (поскольку они не могут быть связаны), и приложение, которое использует только несколько событий из расширенной модели событий (большинство из которых работают только со связанными формами / элементами управления).Короче говоря, 100% несвязанное приложение Access будет тем, которое борется против всей парадигмы разработки Access.Любой, кто думает, что хочет создать несвязанное приложение в Access, на самом деле не должен использовать Access в первую очередь, поскольку вся точка доступа - это связанные формы / элементы управления!Если вы устраните это, вы потеряете большинство преимуществ Access RAD по сравнению с другими платформами разработки и не получите почти ничего взамен (кроме огромной сложности кода).

Создание приложения для развертывания в Интернете.Браузер, выполняющий те же задачи, что и приложения Access, требует полного перепроектирования пользовательского интерфейса и рабочего процесса приложения.Преобразование или перевод не будут работать, потому что успешная модель приложения Access противоположна успешной модели веб-приложения.

Конечно, все это меняется с Access 2010 и Sharepoint Server 2010 с Access Services.В этом случае вы можете создать свое приложение в Access (используя веб-объекты) и развернуть его на Sharepoint, чтобы пользователи могли запускать его в браузере.Результаты функционально эквивалентны на 100% (и визуально на 90%) и работают во всех браузерах (здесь нет специфических для IE зависимостей).

Итак, начиная с июня этого года, это самый дешевый способ преобразования приложения Access для развертывания.в браузере вполне может быть обновление до A2010, преобразование дизайна для использования всех веб-объектов, а затем развертывание с помощью Sharepoint.Это не тривиальный проект, так как веб-объекты Access имеют ограниченный набор функций по сравнению с клиентскими объектами (например, без VBA, поэтому вам нужно изучить новые макросы, которые гораздо более мощные и безопасные, чем старые,так что это не страшные трудности, которые могут показаться тем, кто знаком с устаревшими макросами Access), но это, вероятно, будет гораздо менее трудоемким, чем полномасштабный редизайн для развертывания в Интернете.

Другое дело, что онне потребует никакой переподготовки для конечных пользователей (поскольку версия веб-объекта совпадает с исходной версией клиента), так как она будет такой же в клиенте Access, как и в веб-браузере.

ИтакКороче говоря, я бы сказал, что обращение - это химера, и почти всегда оно того не стоит.На самом деле я согласен с цитируемым мнением (даже если у меня много проблем с другими комментариями из этого источника).Но я также хотел бы предупредить, что желание конверсии часто вводит в заблуждение и упускает более дешевые, простые и качественные решения, которые не требуют полной замены приложения Access сверху донизу.Очень часто неудовлетворенность Jet / ACE как хранилищем данных вводит людей в заблуждение, что они также должны заменить приложение Access.И это правда, что многие приложения Access, разработанные пользователями, наполнены ужасными, неразрешимыми компромиссами и держатся вместе с жевательной резинкой и проволокой.Но плохо спроектированное приложение Access может быть улучшено в сочетании с внутренним увеличением и просмотром схемы данных - его не нужно отбрасывать.

Это не значит, что просто - это очень часто нет.Как я все время говорю клиентам, обычно легче построить новый дом, чем реконструировать старый.Но одна из причин, по которой мы реконструируем старые дома, заключается в том, что они имеют незаменимые характеристики, которые мы не хотим потерять.Очень часто случается, что приложение Access неявно включает в себя множество бизнес-правил и моделирование рабочих процессов, которые не должны быть потеряны в новом приложении (старая головоломка Netscape, темп Джоэла Спольски).Эти вещи могут быть неочевидны для стороннего разработчика, пытающегося портировать на другую платформу, но для конечного пользователя, если приложение дает результаты, которые на копейку меньше по сравнению со старым приложением, они будут несчастны (и, вероятно,должно быть, так как это может означать, что другие аспекты приложения также не дают надежных результатов).

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

Но, конечно, так я зарабатываю на жизнь, то есть исправляю приложения Access.

2 голосов
/ 13 июня 2010

Вещи, которые вы никогда не должны делать, часть I от Джоэла Спольски

".... Они сделали это, совершив одну худшую стратегическую ошибку, которую может сделать любая компания-разработчик программного обеспечения:

Они решили переписать код с нуля. "

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

Также обратите внимание, что в Access имеется значительный объем функциональных возможностей, таких как связанные непрерывные формы или подчиненные формы, которые являются дополнительной работой для воспроизведения в других системах.Не обязательно много работы, но больше работы.И еще больше проблем, когда приходит время распространять и устанавливать приложение.

2 голосов
/ 12 июня 2010

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

  • Перевод с C ++ на C долженбыло бы относительно легко, но перевод C на идиоматический C ++ был бы почти невозможен, потому что было бы почти невозможно автоматически превратить процедурную программу в ОО-программу.

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

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

Что это значитзаключается в том, что некоторые переводчики обязательно будут более успешными, чем другие, с точки зрения:

  • полноты и точности перевода и
  • читабельности и удобства обслуживаниярезультирующий код.
1 голос
/ 12 июня 2010

Я использовал автоматический конвертер из C # в Visual Basic.NET. Он работал довольно хорошо, за исключением добавления некоторых ненужных операторов If True.

Я также пытался использовать Shed Skin для преобразования Python в C ++, но он не работал из-за отсутствия поддержки разделения по новому стилю.

0 голосов
/ 12 июня 2010

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

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

0 голосов
/ 12 июня 2010

Я использовал инструменты для преобразования проекта VB6 в VB.Net - который, как вы надеетесь, станет одним из самых простых примеров такого рода вещей.Мой опыт состоял в том, что все должно быть проверено, в мелких деталях, и половина материала отсутствовала / была неправильной.

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

Martin

...