Опыт с “преобразователями языка”?

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

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

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

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

Там состояния автора:

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

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

Таким образом, кто-либо попробовал такие инструменты и нашел, что они стоят?

5
задан John Koerner 4 May 2012 в 01:54
поделиться

7 ответов

Мне кажется, как есть почти всегда бывает с вопросами 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, которое не использует никаких подчиненных форм (поскольку они не могут быть отвязаны), и приложение, которое использует только несколько событий из богатой модели событий (большинство из которых работают только с привязанными формами / элементами управления). Короче говоря, 100% несвязанное приложение Access будет тем, что борется со всей парадигмой разработки Access. Любой, кто думает, что хочет создать несвязанное приложение в Access, действительно не должен использовать Access в первую очередь, поскольку вся суть Access - это связанные формы / элементы управления! Если вы устраните это, вы выбросите большую часть преимуществ RAD в Access над другими платформами разработки и почти ничего не получите взамен (кроме огромной сложности кода).

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

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

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

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

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

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

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

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

5
ответ дан 18 December 2019 в 08:26
поделиться

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

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

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

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

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

  • полноты и точности перевода, и
  • удобочитаемости и ремонтопригодности полученного кода.
2
ответ дан 18 December 2019 в 08:26
поделиться

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

Вот тот, который я (и мои коллеги) построил для 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, ...)

9
ответ дан 18 December 2019 в 08:26
поделиться

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

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

0
ответ дан 18 December 2019 в 08:26
поделиться

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

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

Мартин

0
ответ дан 18 December 2019 в 08:26
поделиться

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

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

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

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

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

2
ответ дан 18 December 2019 в 08:26
поделиться

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

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

1
ответ дан 18 December 2019 в 08:26
поделиться
Другие вопросы по тегам:

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