Существуют ли программы, которые могут «переводить» исходный код между любыми двумя языками (при условии, что переводчик имеет доступ к необходимым библиотекам)?
Если есть, как они работают (используемые методы, необходимые знания и т. Д.)? Как они могут быть построены?
Если нет, то какие ограничения мешают их развитию? Это полная проблема ИИ (перевод на естественный язык указан как один)?
РЕДАКТИРОВАНИЕ Преобразование ожидается только в том случае, если язык имеет одинаковую мощность выражения, может решить те же проблемы, а код, который нужно преобразовать, может быть выражен на языке назначения. (Например, преобразование из сценария оболочки в MATLAB не ожидается).
Что вы подразумеваете под «любыми двумя языками»? Конечно, есть программы, которые можно переводить с одного языка на другой. Они называются «компиляторами». Это буквально определение компилятора: программы, которая переводит программы с одного языка на другой. Но «любые два языка»? Я не думаю, что это возможно.
Перевод своих ВИДЕО ФАЙЛОВ на разные языки, как включить переводчик голоса в видео
Переводчик должен знать как исходный, так и целевой язык, и он обычно специфичен для конкретной пары языков.
В программе указаны исходный и целевой языки. Я думаю о том, чтобы написать программу на C ++, перевести ее на Java, python, Perl, Ruby, Go и т. Д. Могут быть некоторые ограничения (я не ожидаю, что она конвертирует ваш скрипт оболочки, например, в MATLAB).
Да, их называют компиляторами, они работают как компиляторы, и их можно создавать как компиляторы.
Если под «любыми двумя языками» вы в буквальном смысле подразумеваете, что (конечная) программа должна быть способна читать и понимать бесконечное количество языков ввода, ответ тривиально — нет . Тем не менее, возьмите конечный набор языков ввода, и вы можете найти компилятор для всех этих языков ..
TLDR; это возможно, но не практично.
(при условии, что переводчик имеет доступ к необходимым библиотекам)?
Это становится хитрым и является частью того, почему такие вещи не используются на практике.
- Все составители являются переводчиками. Перевод с одного языка на другой, безусловно, возможен, и это буквально все, что делает компилятор. Язык, который компилятор выдает в качестве выходных данных, обычно является машинным кодом или сборкой, но это просто другой язык, и есть компиляторы (иногда называемые транспиляторами или транскомпиляторами), которые переводят между двумя языками . Например, существует множество языков компиляции в Javascript, таких как PureScript, Elm, ClojureScript и т. Д.
- Перевод между любыми двумя языками Turing Complete всегда возможен. То есть игнорирование таких вещей, как вызовы библиотек, FFI и другие неприятные практические моменты. Если язык является полным по Тьюрингу, то у вас есть:
- Перевод, который преобразует машину Тьюринга в код на этом языке
- Перевод с этого языка на машину Тьюринга
Таким образом, для перевода с языка A на язык B вы конвертируете код A в машину Тьюринга, а затем конвертируете эту машину в код B.
Перевод документов онлайн на 100 языков. Автоматический переводчик PDF/WORD/EXCEL/PPTX/InDesign
Конечно, на практике мешают практические навыки, и это также требует наличия доступных вам переводов. Они существуют практически для каждого языка, но это не значит, что кто-то нашел время, чтобы их написать.
Одним из примеров является точка 4 asm.js . Сегодня можно сделать Сорта читаемым, используя Javascript Источник Карты и Element Inspector, но никто не хочет , чтобы сделать это .
Modelica — это еще один пример языка, предназначенного для компиляции на другой язык (в данном случае C).
Перевод веб-сборки с C ++ на javascript.
Существует множество примеров переносчиков из X в Y, но это отличается от универсального компилятора что угодно. Очевидно, есть случаи, когда перенос имеет смысл.
В IMO отсутствует одно важное исключение: компиляция в C. Причина в том, что многие необычные системы имеют существующий компилятор C, который обычно может генерировать вполне приемлемый машинный код. Следовательно, компилируя язык в C, вам не нужно иметь backends для этих редких архитектур.
Есть такие программы. Например, переводчики Lisp-to-Fortran, которые широко использовались в свое время. Единственные компиляторы Lisp не компилируют Lisp напрямую, а генерируют код C вместо этого, который затем компилируется обычным компилятором C. Другим примером может быть Vala, которая не компилируется напрямую, а сначала транслируется в C ++ до компиляции кода C ++. Qt написан на MOC, языке, который переводится на C ++ для его компиляции (но поскольку MOC — это просто C ++ с несколькими дополнительными командами, можно поспорить, действительно ли он будет называться «новым языком») — и до того, как были компиляторы C ++, были C ++ — to-C-трансляторы. И некоторые проекты были написаны на Pascal, а затем переведены на C. Кроме того, clang и Java, как правило, представляют собой нечто вроде того, что они переводят код C ++ и Java на некоторый промежуточный язык, который затем можно обрабатывать дальше.
Чего нельзя ожидать от вывода языкового переводчика, так это того, что результат имеет какой-то смысл для читателя: задача программы — написать код, в результате которого программа будет выполнять то же самое, что и исходный код (что в моем опыте могло бы или могло бы быть не работает, в зависимости от того, какие функции языка и какие внешние библиотеки вы использовали). Но так как он не знает цели, которую выполняет эта задача, остальная часть смысла программы может быть в значительной степени потеряна.
Не прямой ответ, но есть инструментальный вызов ILSpy , который был написан для .Net Framework и позволяет декомпилировать сборку .Net в C # или VB.Net.
Если вы не знакомы с природой .Net, вы можете писать код .Net на многих языках, но в первую очередь на C # или VB.Net. Когда компилятор компилирует приложение, он переводит код в код «Intermediate Language» (или IL для краткости). Этот код затем компилируется в двоичные файлы .Net.
Так как приложения .Net являются двоичными файлами, скомпилированными из кода IL, ILSpy может перевести приложение .Net в обратное положение, обратно в код IL, а затем сделать еще один шаг вперед и обратно в C # или VB.Net.
Используя этот инструмент, все, что вам нужно сделать, это скомпилировать приложение, а затем вы можете просматривать скомпилированные файлы в виде кода IL, C # или VB.Net. Чтобы было ясно, не имеет значения, на каком языке изначально был написан код. Поскольку бинарный файл представляет собой сборку .Net, он может перепроектировать скомпилированные файлы и выводить содержимое на любом из этих трех языков.
Я знаю, что это не совсем компилятор, но это инструмент, который предлагает конечный результат, аналогичный тому, что вы ищете, и, фактически, я использовал это, чтобы «перевести» проекты VB.Net в нечто немного более знакомый мне — C #.
Для вашего варианта использования (на основе комментариев), это звучит так, как будто SWIG может быть полезен.
SWIG — это инструмент разработки программного обеспечения, который связывает программы, написанные на C и C ++, с различными языками программирования высокого уровня. SWIG используется с различными типами целевых языков, включая распространенные языки сценариев, такие как Javascript, Perl, PHP, Python, Tcl и Ruby. В список поддерживаемых языков входят также языки, не относящиеся к сценариям, такие как C #, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), язык D, Go, Java, включая Android, Lua, Modula-3, OCAML, Octave, Scilab и R Также поддерживаются несколько интерпретированных и скомпилированных реализаций Scheme (Guile, MzScheme / Racket, Chicken).
Я вспоминаю почтенного f2c , который переводит источник с источника на Fortran 77 на C.
Он использовался (иногда . ) в основном для перевода числового кода десятилетий назад без необходимости интеграции компилятора Фортрана в вашу цепочку инструментов.
Теория теории, которая говорит вам, что такие программы существуют, в принципе называется допустимой нумерацией . Мы можем доказать, что между любыми двумя такими нумерациями есть вычислимые компиляторы, и каждый полный по Тьюрингу формализм (или язык программирования), по сути, один.
Источник: qastack.ru
Oкей, Google, переведи print(«Hello, World!») на Pascal
Существует ли Google Translate для языков программирования? Разбираемся в транспайлерах.
Кирилл Молоков
Филолог, полиглот, IT-гик. В прошлом — преподаватель английского и литературы и рецензент Rolling Stone Russia. Ныне переводит для РБК и пишет о программировании и образовании для Skillbox.
Глядя на приложения и платформы, которые переводят иностранные языки, невольно задаёшься вопросом: «А можно ли так же перевести код с Java на Python?»
Если ответить коротко — можно. Если же вдаваться в подробности — то вроде как тоже да, но… нет. Давайте разбираться.
I, Robot: почему переводить языки программирования не так просто, как кажется
Google Translate и «Яндекс.Переводчик» вполне сносно справляются с простыми фразами и даже клишированными коммерческими статьями. Да, текст выходит немного кривым и теряет стилистическую окраску, но из него легко выхватить основную суть. То есть, несмотря на все шероховатости, автоматические переводчики отлично выполняют фундаментальную задачу перевода — передают смысл.
Логично, что раз компьютеры справляются с обычными языками, то с языками программирования должно быть ещё легче — они строже, структурированнее, проще в плане синтаксиса и не двусмысленны. Но на деле именно эти простота и строгость усложняют автоматический перевод программ с одного языка на другой.
Человек легко додумывает или мысленно исправляет косяки «Google Переводчика». А вот компьютер — нет. Даже самая мелкая неточность приводит к тому, что программу невозможно запустить. Иначе говоря, перевод языков программирования должен быть идеальным, чтобы от него был хоть какой-то толк. И это при том, что программирование не стоит на месте — появляются новые библиотеки, фреймворки и языки, дополняются и изменяются старые.
Не спасают ситуацию и автокорректоры — это те же программы, которые пишут люди. Легко запрограммировать компьютер и указать ему, что слово «корова» пишется именно так. А вот понять намерения программиста, если он ошибся, машине трудно — требуется слишком много сценариев.
Языки программирования строже и не прощают даже самые мелкие неточности. При этом они меняются и дополняются так же быстро, как и естественные языки.
Ну и что? Just Do It!
Действительно. Языки программирования всё же возможно переводить автоматически. Для этого есть специальные программы — транспайлеры. Они переводят исходный код в рамках одного и того же уровня или абстракции — например, Python в JS (оба языка высокоуровневые) или JS ES2015 в JS ES5.
Одним из первых транспайлеров можно считать Ratfor — язык программирования, который расширяет возможности Fortran 66 — в частности, предоставляет операторы if-else и while. Он появился в середине 1970-х и, по сути, переводил программы, написанные на Fortran 66, на более современные стандарты языка.
Однако автоматические переводчики с разных языков стали создавать в конце 1980-х. Тогда появился Fortran-to-C Converter (F2C) — программа, которая переводит код с Fortran на C. Другой яркий пример — Pascal to C Translator (P2C), который транслирует Pascal в C.
Правда, F2C и P2C создавали под конкретную задачу — портирование приложений между разным железом и операционными системами. Первый переводил важные программы с уже мёртвого языка программирования на живой. Второй — портировал их на ПО Unix, созданное на Pascal: для этого программу также было необходимо перевести на C. То есть ни один из транспайлеров не делался именно для того, чтобы легко переводить любую программу с одного языка на другой.
Как работают транспайлеры
Компиляция большинства языков программирования включает шаг «взять текст программы и преобразовать его в синтаксическое дерево».
Всё, что необходимо сделать транспайлеру, — это получить такое дерево (компиляторы большинства языков уже научились отдавать его другим программам) и для каждого узла подобрать похожую конструкцию из целевого языка. В самом примитивном случае если есть компилятор целевого языка и ему можно передать синтаксическое дерево, то вся задача сводится к преобразованию одного дерева в другое.
Но чаще всего траспайлер преобразует текст программы на другом языке, так что программисту нужно для каждого узла синтаксического дерева подобрать нужный текст на целевом языке. К примеру, если компилятор Python увидел код:
то он построит из него синтаксическое дерево с корнем if, от которого идут ветки «условие» и «тушка». Преобразуя это в JavaScript, разработчик транспайлера пишет код, который для ветки if создаст следующий текст:
Далее внутрь круглых скобок устанавливается транспилированное условие, а внутрь фигурных — транспилированная «туша».
Ну и так далее. Всего будет примерно сотня разных узлов. Плюс преобразования для ситуаций, когда в исходном языке есть что-то, чего нет в целевом. Тогда генерируется код, который делает то же по смыслу, но в форме, которая доступна целевому языку.
Григорий Петров
Генералист, нейрофизиолог-любитель. Организует разработку, конференции, хакатоны. Участвовал в создании Radmin и Advanced IP Scanner, продвигал интерактивное телевидение NPTV и программируемую телефонию Voximplant. Сейчас — head of developer relations в Evrone.
«Твоя моя не понимать»: почему транспайлеры почти никому не нужны
Итак, есть транспайлеры, которые автоматически переводят программу с одного языка программирования на другой. Почему же тогда нет популярных приложений, которые легко делают такие переводы?
Большинство программ и так изначально пишут на том, что решает эти задачи лучше всего. Вряд ли кто-то будет писать сайт на C#, когда есть JS, PHP и прочие инструменты веб-разработки. Переводить потом этот сайт на Swift или Perl — такое же бесполезное и даже глупое занятие.
С другой стороны, гораздо чаще разработчики просто работают с тем, что умеют и знают лучше всего. Но даже в этом случае команда, в которой есть крутые спецы по JS, Python и С++, вряд ли будет использовать транспайлеры, если надо сделать мобильное приложение на iOS.
Никто в здравом уме не будет писать приложение на Python, чтобы потом перевести его на Swift. Ведь тогда пришлось бы использовать все библиотеки, которые написаны для Swift и документированы на Swift, из Python. Гораздо проще будет нанять ещё одного спеца или просто выучить Swift.
P. S. Кстати, в 2016 году Google выпустил специальный инструмент для портирования программ с Android на iOS. Эффекта волшебной палочки от него ждать не стоит, но если вы предпочитаете портировать Android на iOS, а не наоборот, то есть смысл протестировать.
Мнение эксперта
Задача сделать транспайлер по сложности тянет на уровень для курсовой работы студента-первокурсника. Есть одно но: сам язык программирования — это очень маленькая часть того, что нужно для разработки программы. Гораздо более сложная и объёмная часть — это фреймворки с библиотеками. И если сделать транспайлер для самого языка — не слишком сложная задача, то вот с фреймворками и библиотеками всё уже не так радужно.
Они создаются для конкретного языка и намертво заточены на его идиомы и синтаксис. Делать перевод на другой язык теоретически можно, но практически использование библиотек из неродного языка превращается в ад. Это уже несколько раз проходили, когда пытались сделать языки для экосистемы Java. Самый болезненный опыт получился у Apple, когда они заменили Objective-C на Swift, оставив большую часть библиотек от Objective-C. Разработчики до сих пор, мягко говоря, в шоке.
Вообще, самое популярное в этом направлении — транспайлеры для JavaScript. На этом их применение по большей части и заканчивается. Почему именно JS? Потому что часто возникает ситуация, когда веб-сайт на стороне сервера реализован на Python, Ruby или PHP, а нужно добавить чуть-чуть кода в браузер.
И чтобы разработчикам не использовать сразу два языка, часто применяют транспайлер, который позволяет, к примеру, писать всё на Python, а часть кода на Python превращать в код на JS. JS в этом плане, кстати, удобен ещё и тем, что у него удивительно бедная стандартная библиотека. Ну и стоит упомянуть про TypeScript: надстройку на JavaScript от Microsoft. Эта «тушка» уже превосходит сам JavaScript по популярности, но при этом не является самостоятельным языком: исходный код на TypeScript транспилируется в JavaScript.
А вот большинство транспайлеров для других языков — просто поделки без какой-либо реальной практической значимости. Поэтому в интернете очень сложно найти качественный переводчик других языков — всерьёз ими никто не занимается. Получается такой замкнутый цикл:
никому не нужно и плохо работает → никто их не улучшает и не делает → поэтому они продолжают плохо работать → и поэтому они никому и не нужны.
Григорий Петров
Генералист, нейрофизиолог-любитель. Организует разработку, конференции, хакатоны. Участвовал в создании Radmin и Advanced IP Scanner, продвигал интерактивное телевидение NPTV и программируемую телефонию Voximplant. Сейчас — head of developer relations в Evrone.
Вывод
Автоматические переводчики языков программирования существуют — это транспайлеры. Однако навороченных приложений вроде Google Translate для программирования нет. Обычно транспайлеры делают для конкретных задач и удобства в веб-разработке — под JavaScript.
Всё остальное не имеет особого смысла — не потому, что сложно, а потому, что это бессмысленные поделки, в которых нет никакой практической пользы. В самом деле — кому вообще в голову может прийти переводить Python в Pascal? 🙂
ECMAScript (сокращённо ES) — стандарт, на котором базируется JavaScript.
Адаптация программы или её части для работы в другой среде.
Источник: skillbox.ru
Portable-soft.com — Лучшие portable (портативные) программы!
Программа поможет вам в изучении иностранных слов. Она интегрируется с Google-переводчиком, что позволяет вам создавать, редактировать и проходить тесты легче. По умолчанию в программу включена база слов для обучения Китайскому языку англоговорящих пользователей. Для изучения других языков используется база Google-переводчика и собственные словари пользователей. Для запоминания слов используется 3 прогрессивных метода.
Просмотреть Посмотрели: 5789 | Прокомментировали: 0
Dictionary.NET 10.5.8195 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (7-11-2022, 15:58)
Программа представляет из себя простой переводчик, который, как и аналогичные утилиты, для перевода использует сервис Google Переводчик. Dictionary .NET также поддерживает работу с Wikipedia и словарем Google. Поддерживаются 59 языков, которые можно использовать как в качестве исходных, так и в качестве конечных. При вводе необходимого слова поиск происходит автоматически. Программа очень мала по размеру, и не перенасыщена не нужными элементами.
Просмотреть Посмотрели: 8632 | Прокомментировали: 0
QTranslate 6.10.0 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (26-08-2022, 22:22)
Программа, которая переводит текст на различные языки, используя онлайн сервисы. Перевод осуществляется нажатием всего одной комбинации «горячих» клавиш (Ctrl+Q для перевода выделенного текста в всплывающем окне или Ctrl+W для перевода выделенного текста в основном окне программы). Также вы можете открыть главное окно и ввести весь текст вручную.В программе есть возможность воспроизводить (озвучивать) текст (Ctrl+E для озвучивания выделенного текста). Программа переводит текст с помощью онлайн-переводчиков, поэтому необходимо подключение к Интернету.
Просмотреть Посмотрели: 6762 | Прокомментировали: 0
PROMT Pro 18 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (10-12-2017, 20:57)
Просмотреть Посмотрели: 11446 | Прокомментировали: 0
Babylon Pro 10.5.0 r15 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (7-01-2017, 20:41)
Словарь, позволяющий переводить слова с одного языка на другой. Работать со словарем очень просто: после нажатия кнопкой мыши (какой кнопкой — настраивается) на интересующее слово появляется окно с его переводом. Кроме перевода слов, Babylon включает в себя английские тематические и толковые словари, а также имеет функции конвертации валют на текущую дату и перевода мер из одной системы в другую. Англо-русско-английский и другие словари можно закачать дополнительно с сайта с сайта разработчика. Кроме собственно словаря, который можно использовать в любое время, при онлайн-работе (т.е. во время подключения к Интернету) Babylon позволяет воспользоваться огромными базами данных, сосредоточенными в таких глоссариях, как Britannica, Amazon, Accuweather и др.
Просмотреть Посмотрели: 8300 | Прокомментировали: 0
Ace Translator 16.2 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (2-04-2016, 02:17)
Легкая в использовании утилита для перевода текстов, актульна для повседневного использования. Программу можно применять для экстренного перевода интернет страниц или переписки с собеседником в чате. Программа работает со многочисленными языками: португальским, голландским, французским, китайским, немецким, английским, японским, греческим, итальянским и русским языками (59 языков).
Просмотреть Посмотрели: 8223 | Прокомментировали: 0
Polyglot3000 3.79 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (3-02-2015, 14:26)
Полиглот 3000 (или сокращённо П3000) – это автоматический определитель языка, который предназначен для быстрого и корректного определения того на каком языке написан введённый Вами текст. Распознаёт более 400 языков. Полностью поддерживает юникод. Имеет красивый пользовательский интерфейс. Быстрое и точное определение языка.
Полноцветные пиктограммы в меню.
Просмотреть Посмотрели: 4558 | Прокомментировали: 0
Babylon 10.3.0.12 portable
Добавил antan, в категорию: portable Программы / portable переводчики (20-01-2015, 23:20)
Babylon — словарь, позволяющий переводить слова с одного языка на другой. Работать со словарем очень просто — после нажатия кнопкой мыши на интересующее слово появляется окно с его переводом. Кроме перевода слов, программа включает в себя английские тематические и толковые словари, а также имеет функции конвертации валют на текущую дату и перевода мер из одной системы в другую. Англо-русско-английский и другие словари можно закачать дополнительно с сайта разработчика.
Просмотреть Посмотрели: 3203 | Прокомментировали: 0
Client for Google Translate 6.2.620 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (15-12-2014, 12:25)
Переводчик для Windows, который позволяет быстро переводить текст в большинстве приложений, таких как Outlook, MS Word, Internet Explorer, Firefox с помощью сервиса Google Translate. Google Translate является одним из самых популярных сервисов машинного перевода, но перевод текста с помощью онлайн-переводчика не всегда удобен: вам необходимо запустить браузер, открыть сайт, скопировать и вставить текст, выбрать язык. Слишком долго! Теперь вы можете переводить web-страницы, электронную почту и другие документы не заходя на сайты онлайн-переводчиков и не покупая дорогих, громоздких программ. Бесплатный переводчик всегда под рукой — достаточно просто выделить текст мышкой!
Просмотреть Посмотрели: 5238 | Прокомментировали: 0
Lingoes 2.9.2 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (19-08-2014, 13:23)
Позволяет работать с более 60 языками мира, среди которых присутствуют следующие языки: английский, испанский, французский, немецкий, русский, японский, эсперанто и многие другие. Между всеми поддерживаемыми языками возможно выполнение перекрестного перевода.
Программа интегрируется в операционную систему, предлагая мгновенный перевод слов при простом наведении на них курсора мыши, а также при копировании слов в буфер обмена. В Lingoes Translator присутствует функция произношения переводимого слова или текста, использующая технологию преобразования текста в речь. На сайте разработчиков можно найти множество словарей и тезаурусов, которые постоянно обновляются и корректируются. Кроме того, здесь есть встроенные средства для перевода текста с помощью известных онлайн-сервисов перевода в Интернете.
Просмотреть Посмотрели: 6596 | Прокомментировали: 0
TranslateIt! 8.1 build 3 Portable
Добавил gibert44, в категорию: portable Программы / portable переводчики (28-09-2011, 11:10)
Вы ищете электронный словарь, который поможет Вам переводить с английского и немецкого на русский? Вы его нашли! Больше того, Вы нашли ненавязчивого помощника, с помощью которого сможете читать новости и почту, просматривать сайты на иностранном языке, работать с нерусифицированными справками и программами. TranslateIt! принципиально отличается от обычных электронных словарей. С нашей программой Вам не нужно копировать неизвестное слово в буфер, не нужно запускать словарь и вставлять скопированное, достаточно просто подвести указатель мыши!
Источник: portable-soft.com