Полиглот (вычисления)

редактировать

В вычислениях полиглот - это компьютерная программа или сценарий, написанный в допустимой форме для нескольких языков программирования, который выполняет одни и те же операции или вывод независимо от языка программирования, используемого для компиляции или интерпретировать это.

Как правило, полиглоты записываются в комбинации C (whi ch позволяет переопределить лексические токены с помощью препроцессора ) и языка сценариев, например Lisp, Perl или sh.

Polyglot разметка аналогична, но о языке разметки контексте.

Polyglot persistence аналогичен, но о базах данных.

Микросервисы polyglot позволяют разработчикам выбирать язык программирования по своему выбору, чтобы создавать продукты более эффективными способами. Профессионалы отрасли считают, что, когда ослабляется контроль над тем, какой язык программирования следует разрабатывать, появляется больше возможностей для творчества разработчиков и нестандартного решения проблем.

Методы

Два наиболее часто используемых метода построения программы-полиглота - это либеральное использование языков, в которых используются разные символы для комментариев, и переопределение разных токенов как других в разных языках. Часто хорошо используются особенности синтаксиса и. Они продемонстрированы в этом многоязычном общественном достоянии, написанном на ANSI C, PHP и bash :

#define a / * # / dev / null>/ dev / null \; // 2>/ dev / null; х = а; $ x = 5; // 2>/ dev / null \; if (($ x)) // 2>/ dev / null; затем верните 0; // 2>/ dev / null; fi #define e?># define b * / #include #define main () int main (void) #define printf printf (#define true) #define function function main () {printf "Привет, мир! \ n "true / * 2>/ dev / null | grep -v true * /; возврат 0; } #define c / * main # * /

Обратите внимание на следующее:

  • Знак решетки отмечает инструкцию препроцессора в C, но является комментарием как в bash, так и в PHP.
  • «//» - это комментарий как в PHP, так и в C, а также в корневом каталоге в bash.
  • Shell перенаправление используется для устранения нежелательных выводов.
  • Даже в закомментированных строках индикаторы PHP «» и «?>» все еще действуют.
  • Оператор «function main ()"действует как в PHP, так и в bash; C #defines используются для преобразования его в "int main (void)" во время компиляции.
  • Индикаторы комментариев можно комбинировать для выполнения различных операций.
  • "if (($ x))"является допустимым оператором как в bash, так и в PHP.
  • printf - это встроенная оболочка bash , которая идентична C printf за исключением отсутствия скобок (которые препроцессор C добавляет, если он скомпилирован с помощью компилятора C ).
  • Последние три строки используются только bash для вызова main. В PHP функция mainопределена, но не вызывается, а в C нет необходимости явно вызывать функцию main.

Некоторые менее распространенные языки также предлагают возможности создания кода Polyglot. Вот небольшой пример, написанный одновременно на SNOBOL 4, Win32Forth, PureBasicv 4.x и REBOL <97.>* BUFFER: AA;. (Привет, мир!) @ Для включения? Macro SkipThis; OUTPUT = Char (10) «Hello, World!»; OneKeyInput Input ('Char', 1, '[-f2-q1]'); Конец символа; S NOBOL4 + PureBASIC + Win32Forth + REBOL = <3 EndMacro: OpenConsole() : PrintN("Hello, world !") Repeat : Until Inkey() : Macro SomeDummyMacroHere REBOL [ Title: "'Hello, World !' in 4 languages" CopyLeft: "Developed in 2010 by Society" ] Print "Hello, world !" EndMacro: func set-modes system/ports/input [binary: true] Input set-modes system/ports/input [binary: false] NOP:: EndMacro ; Wishing to refine it with new language ? Go on !

Этот термин иногда применяется к программам, которые действительны более чем на одном языке, но не выполняют одни и те же функции в каждом из них. Одно из применений этой формы - это файл, который запускается как пакетный файл DOS, а затем повторно запускается в Perl :

@rem = '--PERL-- @echo off perl "% ~ dpnx0 "% * goto endofperl @rem '; #! perl print "Привет, мир! \ n"; __END__: endofperl

Это позволяет создавать сценарии Perl, которые можно запускать в системах DOS с минимальными усилиями.

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-02 10:30:27
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте