Вопрос

Я пытаюсь определить уровень техники для следующей идеи:

1) пользователь вводит некоторый код на языке, который называется (insert_name_here);

2) пользователь выбирает целевой язык из списка известных выходных кандидатов (javascript, ruby, perl, python);

3) процессор переводит insert_name_here в исполняемый код на языке назначения;

4) процессор затем запускает код с использованием соответствующего системного вызова на основе выбранного языка

Причина, по которой это работает, заключается в том, что существует предварительно установленное отображение 1: 1 между всеми языковыми конструкциями от insert_name_here до всех поддерживаемых языков назначения.

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

Это уже существует?

Это было полезно?

Решение

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

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

Другие советы

.NET CLR разработана таким образом, что C ++. Net, C # .Net и VB.Net все компилируются на одном и том же машинном языке, и вы можете " декомпилировать " этот CLI обратно на любой из этих языков.

Так что да, я бы сказал, что он уже существует, хотя и не совсем так, как вы описали.

Да, программа, которая преобразует программу из одного представления в другое , существует . Это называется & Quot; compiler & Quot;.

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

Однако нет необходимости в немом отображении 1: 1.

Например: у компилятора Microsoft Volta, который компилирует байт-код CIL в исходный код JavaScript, есть проблема: .NET имеет потоки, а JavaScript - нет. Но вы можете реализовать потоки с продолжениями. Ну, JavaScript также не имеет продолжения, но вы можете реализовать продолжения с исключениями. Итак, Volta преобразует CIL в CPS, а затем реализует CPS с исключениями. (Более новые версии JavaScript имеют полу-сопрограммы в форме генераторов; их также можно использовать, но Volta предназначена для работы с широким диапазоном версий JavaScript, включая, очевидно, JScript в Internet Explorer.)

Это кажется немного странным. Если вы используете термин & Quot; уровень техники & Quot; в его наиболее распространенной форме вы обсуждаете потенциально патентоспособную идею. Если это верно , у вас есть:

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 для промежуточного представления в любом случае.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top