Я пытаюсь определить уровень техники для следующей идеи:
1) пользователь вводит некоторый код на языке с именем (insert_name_here);
2) пользователь выбирает целевой язык из списка известных выходных кандидатов (javascript, ruby, perl, python);
3) процессор переводит insert_name_here в исполняемый код на языке назначения;
4) затем процессор запускает код, используя соответствующий системный вызов на основе выбранного языка.
Причина, по которой это работает, заключается в том, что между всеми языковыми конструкциями из insert_name_here на все поддерживаемые целевые языки существует предварительно установленное соответствие 1: 1.
(Заявление об ограничении ответственности: Очевидно, что при этом не создается "элегантный" код, хорошо адаптированный к целевому языку. Он просто выполняет элементарный перевод, который можно запускать. Цель состоит в том, чтобы позволить разработчикам получить быструю и грязную реализацию алгоритмов в нескольких разные языки для тех случаев, когда они не хотят заново изобретать колесо, но по какой-либо причине необходимы для работы с определенным языком в конкретном проекте.)
Это уже существует?





.NET CLR спроектирован таким образом, что C++. Net, C# .Net и VB.Net все компилируются на один и тот же машинный язык, и вы можете «декомпилировать» этот CLI обратно на любой из этих языков.
Так что да, я бы сказал, что он уже существует, хотя и не совсем так, как вы описываете.
«не совсем так, как вы описываете» - вот на чем, к сожалению, построена система патентования программного обеспечения. Вы можете превратить двухэтапный процесс в одноэтапный и сделать его патентоспособным.
Доступны конвертеры для разных языков. Проблема, с которой вы столкнетесь, связана с библиотеками. Хотя сопоставление между операторами языка может быть простым, найти сопоставления между библиотечными функциями будет очень сложно.
Я не совсем уверен, насколько полезен такой генератор кода. Зачем вам писать что-то на одном языке, а затем сразу же преобразовывать его на другой язык? Я понимаю, почему языки 4-го поколения преобразуют диаграммы или модели в код, но не вижу смысла в ваших усилиях.
Это кажется немного странным. Если вы используете термин «предшествующий уровень техники» в его наиболее распространенной форме, вы обсуждаете потенциально патентоспособную идею. Если это является случай, у вас есть:
1 / Опубликовал идею, запустив отсчет времени для подачи заявки на патент - я предполагаю, возможно, ошибочно, что вы находитесь в США. В других юрисдикциях могут быть другие правила.
2 / Рассказал всей планете о своей идее, а это значит, что бесполезно пытаться запатентовать ее, если только вы не действуете очень быстро.
Если вы не думаете о патентовании этого и просто использовали термин «предшествующий уровень техники» в обычном смысле, прошу прощения. Я работаю в компании, которая очень серьезно относится к патентам и очень подробно разбирается в нас, что нам разрешено делать с информацией перед подачей заявки.
При этом патентоспособные идеи должны быть новыми, полезными и неочевидными. Я думаю, что ваша идея не пройдет мимо третьего из них, поскольку вы описываете языковой переводчик, который будет иметь предшествующий уровень техники многих преобразователей pascal-to-c и fortran-to-c.
Единственным проблеском надежды будет способность вашей идеи генерировать один из нескольких языков вывода (чего не делают p2c и f2c), но я думаю, что даже это можно будет покрыть с помощью кросс-компиляторов (таких как gcc), которые превращают исходный код на одном из множества различных объектных языков.
У IBM есть продукт под названием Visual Age Generator, в котором вы пишете код на одном (проприетарном) языке, и он конвертируется в COBOL / C / Java / другие для работы на разных целевых платформах, от ПК до больших мэйнфреймов System z. проблема (думая о патентовании идеи, которую уже использует IBM, крупнейший в мире патентователь).
Их тонны. p2c, f2c и исходные реализации C++ и Objective C сразу бросаются в глаза. Кроме того, сложно отличить то, что вы описываете, от любого компилятора, особенно для нас, стариков, чьи компиляторы все равно сгенерировали код ASM для промежуточного представления.
Да, существует программа, которая преобразует программу из одного представления в другое делает. Это называется «компилятор».
А что касается вашего вопроса, всегда ли это возможно: если ваш целевой язык по крайней мере такой же мощный, как исходный язык, то это возможно. Итак, если ваш целевой язык является полным по Тьюрингу, тогда это всегда возможно, потому что не может быть языка более мощного, чем полный по Тьюрингу язык.
Тем не менее, не обязательно должно быть тупое сопоставление 1: 1.
Например: компилятор Microsoft Volta, который компилирует байт-код CIL в исходный код JavaScript, имеет проблему: .NET имеет потоки, а JavaScript - нет. Но вы можете реализовать потоки с продолжениями. Что ж, в JavaScript тоже нет продолжений, но вы можете реализовать продолжения с исключениями. Итак, Volta преобразует CIL в CPS, а затем реализует CPS с исключениями. (В более новых версиях JavaScript есть полу-сопрограммы в виде генераторов; их также можно использовать, но Volta предназначена для работы с широким спектром версий JavaScript, включая, очевидно, JScript в Internet Explorer.)
Действительно, с помощью инструмента Red Gate Reflector вы можете легко конвертировать между языками.