2008-12-03 9 views
3

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

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

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

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

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

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

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

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

ответ

2

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

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

4

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

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

+1

Действительно, с Инструмент Reflector от Red Gate позволяет тривиально конвертировать между языками. – 2008-12-03 22:00:41

2

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

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

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

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

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

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

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

2

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

3

Да, программа, которая преобразует программу из одного представления в другое делает есть. Он называется «компилятор».

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

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

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