перевести код с одного языка на другой
TransCoder: нейросеть переводит код программы на другой язык
TransCoder — это нейросеть, которая переводит код программы с одного языка на другой. Модель не нуждается в размеченных параллельных данных для обучения. На данный момент TransCoder успешно переносит функции на C++, Java и Python 3. Нейросеть обходит существующие открытые и коммерческие программы по переводу кодовой базы.
Описание проблемы
Перенос кодовой базы с устаревшего языка, как COBOL, на альтернативные современные языки, как Java или C++, является ресурсоемкой задачей. Процесс предполагает наличие экспертизы в обоих языках: исходном и целевом.
Что внутри TransCoder
TransCoder позволяет облегчить процесс переноса кодовой базы на другой язык. Предыдущие подходы упирались в необходимость наличия параллельного корпуса данных для обучения. TransCoder обходит это ограничение. Модель опирается на исходный код на одном языке. При этом масштабируется на другие языки. Кроме того, исследователи ввели новую метрику для оценки корректности переведенного кода.
В качестве архитектуры модели в TransCoder использовали XLM. Для всех языков использовалась одна общая модель. Исследователи обучали TransCoder, учитывая best practices из unsupervised машинного перевода.
Оценка работы модели
По результатам экспериментов, модель верно переносит более 90% Java функций на C++, 74.8% С++ функций — на Java и 68.7% Java функций — на Python. Для сравнения, платный инструмент корректно переводит 61% функций из C++ на Java. При этом опенсорсное решение справляется с задачей перевода Java функций на C++ с точностью в 38.3%.
Транскомпилируемые языки: проекты конвертации код-в-код
Источник: Ward Cunningham
Транспиляция — это конвертация кода одного языка в другой. С помощью специального транспилера (транскомпилятора) один язык программирования общего назначения можно перенести на любой другой язык программирования общего назначения.
Если необходимо переключиться на другой язык, транспилеры помогут разработчикам сохранить бóльшую часть существующего кода, не переписывая весь код вручную. Например, при преобразовании программ из Python 2 в Python 3, или при переносе софта от старого API в новый.
Термины «транспилер» и «транскомпилятор» часто взаимозаменяемы, но все же считается, что различия есть. Например, для преобразования кода C++ в C потребуется транспилер, а для конвертации Python-Ruby — транскомпилятор. Babel для JavaScript — это транспилер, а TypeScript — транскомпилирумый язык.
Иногда после конвертации транспилером для правильной работы кода требуется ручная настройка, в то время как в транскомпилируемых языках код должен работать без изменений. Сегодня поговорим о тех и о других, но главное — расскажем о популярных транс-проектах, которые разработчики могут использовать в повседневной работе.
Транспилирование во фронтенде
Конвертация — важная часть фронтенд-разработки: поскольку новые фичи в браузерах появляются медленно, были созданы языки с экспериментальными возможностями, которые транспилируются в совместимые с браузерами языки.
За буйный расцвет транс-языков для JavaScript также несут ответственность разработчики браузеров, использующие в каждом проекте свой механизм JavaScript. В результате браузеры имеют различную производительность, реализуют свой набор функций JavaScript, и к полному соответствию спецификации приближаются с разной скоростью.
Sass, Less и Stylus упрощают создание CSS-кода. Так Sass обладает гибким синтаксисом, логикой (@if, each), математикой (можно складывать числа, строки и цвета), за счет чего все богатство кода транспилируется ruby-программой в обычный CSS.
Less (Leaner Style Sheets) выглядит так же, как CSS, но имеет удобные дополнения: переменные, миксины, арифметические операции (как у Sass) и т.д.
Stylus написан на Node.js и отличается от Sass и Less более чистым синтаксисом. Но фактически эти три языка очень похожи друг на друга, поэтому не ошибетесь, если выберите любой из них.
Скажем «Hello, World!» на CoffeeScript — что может быть проще:
CoffeeScript долгое время оставался самым популярным проектом для JavaScript. Это неудивительно: совмещая доступность (документация умещается на одной странице), функциональные фичи (скобки, отступы и т.д.) и чистый, вдохновленный Ruby, синтаксис, этот язык дает разработчикам много степеней свободы и позволяет сделать JS более выразительным.
TypeScript — конкурирующий проект под JavaScript, скриптовый язык с добавлением опциональной статичной типизации. Позволяет более полно описывать свойства и методы объектов и классов, в отличие от JS, избавляя от необходимости осуществлять проверку всех аргументов, входящих в метод или функцию.
Существует мнение, что JavaScript — это язык с фундаментальными изъянами. Иначе трудно объяснить популярность транс-языков, работающих именно над исправлением его недостатков. Помимо вышеназванных проектов есть еще гибкий язык веб-программирования Dart, компилятор из JavaScript в JavaScript Closure Compiler и многие другие решения, узнать о которых вы можете на странице «Список языков, которые компилируются в JS».
Конвертируем в С
В 2006 г. появился проект Vala, состоящий из двух языков: Vala и Genie, транслирующих самый обычный код на С, который, в свою очередь, компилируется в исполняемый файл или библиотеку.
Синтаксис Vala очень похож на C#, но адаптирован для лучшей совместимости с системами GObject, в то время как Genie имеет много общего с Python. Первый язык сейчас более распространен, чем Genie, поэтому рассмотрим его подробнее.
Почему возникла необходимость в таком проекте? Многие разработчики хотели писать приложения и библиотеки для GNOME на высокоуровневых языках, но по разным причинам не могли или не хотели использовать C# или Java. Vala позволяет быстро создать сложный объектно-ориентированный код, поддерживая стандартные C API и ABI при низких требованиях к памяти.
Библиотеки C# и Java нельзя использовать так же, как нативные библиотеки GObject из C и других языков, и нельзя считать их частью платформы GNOME. Valac, транскомпилятор Vala, создает файлы C из исходных файлов Vala так, словно вы написали свою библиотеку или приложение непосредственно на C. Использование библиотеки Vala из приложения C не отличается от использования любой другой библиотеки на основе GObject.
Читаем и записываем файл на Vala:
С другими примерами кода вы можете ознакомиться на сайте.
От Flash до мультиплатформенности
Haxe создавался одновременно с Vala, но предназначен для транспилирования во Flash, JavaScript и Neko. С таким набором скиллов язык был обречен на вымирание, однако он не только выжил, но и завоевал большую популярность.
Секрет успеха заключается в мультиплатформенности. Со временем Haxe разросся до мощного набора инструментов, поддерживающих транскомпиляцию на разные языки и платформы, включая JavaScript, C++, C#, Java, JVM, Python, Lua, PHP и Flash.
Haxe — современный, высокоуровневый, строго типизированный язык программирования. В то же время он довольно простой и практичный, благодаря чему компиляцию можно приспособить к различным целевым платформам. Его синтаксис в основном соответствует стандарту ECMAScript, но при необходимости изменяется.
«Hello World» на Haxe:
В JavaScript эти строчки кода будут выглядеть следующим образом:
Бóльшая часть кода Haxe организована в классы и функции, что делает его ООП-языком, напоминающим Java, ActionScript 3 и C#. Тем не менее Haxe разрабатывался с упором на прагматичность и легкость синтаксиса.
И о транспилерах
Заключение
Существует огромное количество других языков, поэтому для своего проекта вы всегда можете подобрать самый подходящий. Но ситуации, когда необходима конвертация код-в-код — не такая уж редкость, так как транспиляции C++ в C, PHP в C++ и «что угодно в JavaScript» случаются довольно часто.
«Переводчик» с одного языка на другой — хорошая идея, но лишь до тех пор, пока результат можно четко предсказать и использовать без рисков. Так, переход с COBOL на Java давался тяжело, поскольку в Java до версии JDK 1.4 не было memory-mapped files. А упомянутые в статье C2Rust и Corrode на выходе дают не идиоматичный код, помеченный как unsafe и наполненный «сырыми» указателями.
Автоматический перевод кода между языками програмирования
Клавиатура не переключает между языками.
Help, for me the keyboard has ceased to write in Russian! What to do? Probably that with the.
Как можно реализовать переключение между языками
Требуется сделать переключения между языками ru и eng (в виде флажков), сайт с фрэймами.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
В чем разница между CMS и языками программирования?
В чем разница между CMS и языками программирования? Если есть дизайн сайта в фотошопе можно его.
Автоматический перевод с английского языка
Уважаемые, подскажите, пожалуйста, каким способом возможно решить данную задачу. Дан текстовый.
Автоматический перевод с одного языка на другой
Возможно ли при переходе с одного сайта на другой переводить выделенное? Необходимо с.
Автоматический перевод плагинов с английского на русский
Всем привет! Каким образом можно перевести плагины с английского на русский язык автоматически?).
Автоматический перевод сайта на другие языки
Добрый день. Дано: сайт на вордпресс с русским контентом. Нужно: чтобы человек, заходящий на.
ИИ научили переводить код с одного языка на другой
Исследователи из компании IBM представили модель на основе ИИ, которая умеет переводить один язык программирования на другой. Ее обучили на 14 млн фрагментах кода.
Читайте «Хайтек» в
Ученые объяснили, что системы искусственного интеллекта и машинное обучение в последние годы становятся все более умными и способны не только понимать текст, но и писать его. Однако они пока слабо владеют языками программирования. Чтобы исправить это, компания IBM на конференции Think 2021 объявила, что ее исследователи создали ИИ для перевода кода — проект IBM CodeNet.
«Нам нужен свой ImageNet, который может исследовать инновационные идеи и отражать их в различных алгоритмах, — отметили исследователи. — CodeNet — это, по сути, ImageNet для компьютеров. Это обширный набор данных, предназначенный для обучения систем AI/ML переводу кода и состоящий из 14 млн фрагментов и 500 млн строк на более чем 55 старых и активных языках — от COBOL и FORTRAN до Java, C++ и Python».
Они объяснили, что набор данных построен таким образом, что он позволяет осуществлять двунаправленный перевод. То есть пользователь может взять устаревший код, которым часто пользуются в банковской и государственной сферах, и перевести его на Java и другой язык.
Ученые объяснили, что набор данных состоит из множество видов соревнований по программированию и всевозможных задач: некоторые из них более продвинутые, некоторые — более академические. Причем эти языки использовались в течение последних полутора десятилетий во многих из этих соревнований, решения которых представляли тысячи студентов.
Пользователи также могут запускать отдельные куски кода «для извлечения метаданных и проверки результатов генеративных моделей ИИ на корректность». Это позволит исследователям программировать эквивалентные части кода при переводе одного языка программирования на другой.
Ученые добавили, что их разработка важна для автоматизированного рассуждения и принятия решений, с возможностью объяснения этих решений. Фактически это такая же ветвь развития моделей, как и компьютерное зрение и обработка естественных языков.
ИИ научили переводить код с одного языка на другой
Исследователи из компании IBM представили модель на основе ИИ, которая умеет переводить один язык программирования на другой. Ее обучили на 14 млн фрагментах кода.
Ученые объяснили, что системы искусственного интеллекта и машинное обучение в последние годы становятся все более умными и способны не только понимать текст, но и писать его. Однако они пока слабо владеют языками программирования. Чтобы исправить это, компания IBM на конференции Think 2021 объявила, что ее исследователи создали ИИ для перевода кода — проект IBM CodeNet.
«Нам нужен свой ImageNet, который может исследовать инновационные идеи и отражать их в различных алгоритмах, — отметили исследователи. — CodeNet — это, по сути, ImageNet для компьютеров. Это обширный набор данных, предназначенный для обучения систем AI/ML переводу кода и состоящий из 14 млн фрагментов и 500 млн строк на более чем 55 старых и активных языках — от COBOL и FORTRAN до Java, C++ и Python».
Они объяснили, что набор данных построен таким образом, что он позволяет осуществлять двунаправленный перевод. То есть пользователь может взять устаревший код, которым часто пользуются в банковской и государственной сферах, и перевести его на Java и другой язык.
Ученые объяснили, что набор данных состоит из множество видов соревнований по программированию и всевозможных задач — некоторые из них более продвинутые, некоторые — более академические. Причем эти языки использовались в течение последних полутора десятилетий во многих из этих соревнований, решения которых представляли тысячи студентов.
Пользователи также могут запускать отдельные куски кода «для извлечения метаданных и проверки результатов генеративных моделей ИИ на корректность». Это позволит исследователям программировать эквивалентные части кода при переводе одного языка программирования на другой.
Ученые добавили, что их разработка важна для автоматизированного рассуждения и принятия решений, с возможностью объяснения этих решений. Фактически, это такая же ветвь развития моделей, как и компьютерное зрение и обработка естественных языков.
Интенсивность нового мощнейшего лазера сравнима с падающим на Землю светом Солнца
Физики создали аналог черной дыры и подтвердили теорию Хокинга. К чему это приведет?
Создана первая точная карта мира. Что не так со всеми остальными?