В вычислении , полиглот это компьютерная программа или скрипт написан в действительном виде нескольких языков программирования , который выполняет ту же операцию или выход , независимый от языка программирования , используемого для компиляции или интерпретации его. [1]
Как правило, полиглоты пишутся на комбинации C (что позволяет переопределить лексические токены с помощью препроцессора ) и языка сценариев, такого как Lisp , Perl или sh .
Разметка Polyglot аналогична, но касаетсяконтекста языка разметки .
Персистентность полиглота аналогична, но о базах данных .
Микросервисы polyglot позволяют разработчикам выбирать язык программирования по своему выбору, чтобы создавать продукты более эффективными способами. Профессионалы отрасли считают, что, когда ослабляется контроль над тем, какой язык программирования следует разрабатывать, появляется больше возможностей для творчества разработчиков и нестандартного решения проблем. [2]
Методы
Два наиболее часто используемых метода построения программы-полиглота - это либеральное использование языков, в которых используются разные символы для комментариев, и переопределение различных токенов на другие в разных языках. Часто хорошо используются особенности синтаксиса . Они продемонстрированы в этом многоязычном публичном пространстве, написанном на ANSI C , PHP и bash :
#define a / *# phpecho "\ 010Hello, world! \ n"; // 2> / dev / null> / dev / null \;// 2> / dev / null; х = а;$ x = 5; // 2> / dev / null \;если (($ x))// 2> / dev / null; тогдавозврат 0;// 2> / dev / null; фи#define e?>#define b * /#include# определить main () int main (void)#define printf printf (#define true)#define functionфункция main (){printf "Привет, мир! \ n" true / * 2> / dev / null | grep -v true * /;возврат 0;}#define c / *основной# * /
Обратите внимание на следующее:
- Знак решетки отмечает оператор препроцессора в C, но является комментарием как в bash, так и в PHP.
- «//» - это комментарий как в PHP, так и в C, а также в корневом каталоге в bash.
- Перенаправление оболочки используется для устранения нежелательных выходных данных.
- Индикаторы PHP "
" и "
?>
" действуют даже в закомментированных строках . - Оператор "
function main()
" действителен как в PHP, так и в bash; C #defines используются для преобразования его в "int main(void)
" во время компиляции. - Индикаторы комментариев можно комбинировать для выполнения различных операций.
- "
if (($x))
" является допустимым выражением как в bash, так и в PHP. printf
- это встроенная оболочка bash, которая идентична printf C, за исключением отсутствия скобок (которые препроцессор C добавляет, если он скомпилирован с помощью компилятора C ).- Последние три строки используются только bash для вызова
main
функции. В PHPmain
функция определена, но не вызывается, а в C нет необходимости явно вызыватьmain
функцию.
Некоторые менее распространенные языки также предлагают возможности для создания кода Polyglot. Вот небольшой пример, написанный одновременно в SNOBOL 4, Win32Forth , PureBasicv 4.x и REBOL :
* БУФЕР: AA; . (Привет, мир!) @ В том числе? Макрос SkipThis; ВЫХОД = Char (10) «Привет, мир!» ; OneKeyInput Input ('Char', 1, '[-f2-q1]'); Char End; SNOBOL4 + PureBASIC + Win32Forth + REBOL = <3 EndMacro: OpenConsole (): PrintN ("Привет, мир!") Повторение: до Inkey (): Macro SomeDummyMacroHere REBOL [ Название: "'Hello, World!' на 4-х языках " CopyLeft: " Разработано Обществом в 2010 г. " ] Печать " Hello, world! " EndMacro: FUNC [] [] набор режимы- система / порты / вход [ двоичный: истинно ] Входной набор режимы- система / порты / вход [ двоичный: ложь ] NOP :: EndMacro ; Хотите улучшить его с помощью нового языка? Продолжай !
Этот термин иногда применяется к программам, которые действительны более чем на одном языке, но не выполняют одни и те же функции в каждом из них. Одно из применений этой формы - это файл, который запускается как пакетный файл DOS , а затем повторно запускается в Perl :
@ rem = '--PERL-- @ echo off perl " % ~ dpnx0 " % * goto endofperl @ rem '; #! perl print "Привет, мир! \ n" ; __КОНЕЦ__ : endofperl
Это позволяет создавать сценарии Perl, которые можно запускать в системах DOS с минимальными усилиями.
Рекомендации
- ^ Fjeldberg Ганс (2008). Программирование полиглота - бизнес-перспектива (PDF) (M.Sc). Норвежский университет науки и технологий.
- ^ Гупта, Трипта (19 декабря 2018 г.). «Анализ микросервисов Polyglot» . Средний . Проверено 5 августа 2019 .
Внешние ссылки
- Полиглот на 301 разных языках
- Полиглот на 16 разных языках
- Полиглот на 8 разных языках (написан на COBOL , Pascal , Fortran , C , PostScript , Unix shell , машинном языке Intel x86 и Perl 5)
- Полиглот на 7 разных языках (написан на C , Pascal , PostScript , TeX , Bash , Perl и Befunge98 )
- Полиглот на 6 разных языках (написан на Perl , C , Unix shell , Brainfuck , Whitespace и Befunge )
- Список универсальных полиглотов