работающий псевдокод? - PullRequest
       22

работающий псевдокод?

3 голосов
/ 04 декабря 2008

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

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

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

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

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 04 декабря 2008

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

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

3 голосов
/ 04 декабря 2008

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

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

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

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

2 голосов
/ 04 декабря 2008

Тонны из них. p2c, f2c и исходные реализации C ++ и Objective C сразу бросаются в глаза. Кроме того, довольно сложно отличить то, что вы описываете, от любого компилятора, особенно для нас, старых парней, чьи компиляторы генерировали код ASM для промежуточного представления в любом случае.

2 голосов
/ 04 декабря 2008

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

1 / Опубликована идея, согласно которой часы запускаются при подаче патента - я предполагаю, возможно, неправильно, что вы находитесь в США. В других юрисдикциях могут быть другие правила.

2 / Расскажи свою идею всей планете, а это значит, что пытаться запатентовать ее, если ты действуешь очень быстро, практически бесполезно.

Если вы не думаете о патентовании этого и просто использовали термин «известный уровень техники» в смысле непрофессионалов, прошу прощения. Я работаю в компании, которая очень серьезно относится к патентам и подробно рассказывает нам, что нам разрешено делать с информацией до подачи заявки.

Сказав это, патентоспособные идеи должны быть новыми, полезными и неочевидными. Я думаю, что ваша идея не будет распространяться на третье из них, так как вы описываете языковой переводчик, который имел бы предшествующий уровень техники многих конвертеров pascal-to-c и fortran-to-c.

Единственный проблеск надежды - способность вашей идеи сгенерировать один из нескольких выходных языков (чего не делают p2c и f2c), но я думаю, что даже это будет покрыто подобными кросс-компиляторами (такими как gcc). ), которые превращают источник в один из множества различных объектных языков.

У IBM есть продукт под названием Visual Age Generator, в котором вы кодируете на одном (проприетарном) языке, и он конвертируется в COBOL / C / Java / другие для работы на разных целевых платформах от ПК до мэйнфреймов System z большого хонкинга, поэтому это ваша первая проблема (подумать о патентовании идеи, которую уже использует IBM, крупнейший патент в мире).

2 голосов
/ 04 декабря 2008

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

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

...