Вероятно, вы хотите сказать, что команда «распечатать строку» — выходные данные, которые интерпретируются процессором, но это неверно, вот почему:
Допустим, в теле интерпретатора есть последовательность 12 34 56h, которая означает «вывести на печать строку по адресу xyz». Эта последовательность на машинном языке не является выходными данными интерпретатора, потому что выходные данные — это те, что сформированы в ходе работы программы. (Даже если это полная печать своего, программы, тела. Или выдача части. Здесь же часть не выдается, она непосредственно выполняется ЦП. Выполняемое тело и части тела интерпретатора не являются выходными данными самого интерпретатора). Последовательность же 12 34 56h не сформирована в ходе работы интерпретатора, она сформирована компилятором в ходе компиляции самого интерпретатора. И, что важно, исполняется ЦП непосредственно (см. ниже определение машинного языка — для выполнения программы на оном не требуется дополнительных средств в виде к. т. или и. Т.е. машинный язык выделяется отдельно, как предел, и не допускается толкование ЦП как интерпретатора. ЦП определен как «техническое средство»).
Соответственно она транслирует исходный язык в выходной.
Никоим образом. Определение ниже (пролистайте) четко говорит, что переводит только транслятор, интерпретатор — реализует программу непосредственно.
Транслятор в терминологии, приведенной выше (и чуть ниже — определение интерпретатора из ЕСПД тоже дал) — это, если перефразировать — сущность (программа, программный комплекс или блок в составе программы), входными данными которого является текст программы на одном языке, выходными — текст программы на другом языке.
Частный случай транслятора — компилятор, выходные данные которого — программа на машинном языке.
Интерпретатор же — программа, входными данными которой также является текст программы на языке программирования, а выходными данными — результат работы интерпретируемой программы. И никакой программы ни на каком ЯП.
Пожалуйста: 27. Машинный язык — Язык программирования, предназначенный для представления программ в форме, позволяющей выполнять ее непосредственно техническими средствами обработки информации.
Примечание. Для выполнения программы на машинном языке не требуется применение трансляторов, компиляторов и интерпретаторов
Очевидно, что в случае с Java «техническим средством», которое непосредственно выполняет что-то, является виртуальная машина. Потому что мы вполне можем разработать ЦП, вполне себе такой чип, который будет выполнять Java байт-код. У нас же просто ВМ-эмулятор.
Кстати, нашел там и определение «интерпретации», которое я не привел выше:
Интерпретатор — Программа или техническое средство, выполняющие интерпретацию
Интерпретация — Реализация смысла некоторого синтаксически законченного текста, представленного на конкретном языке
Выше в одном из коментариев я использовал «выполнение действий», это и есть «реализация смысла» в терминах ЕСПД.
Нет, не допускает — выход транслятора — программа «на языке». Интерпретатор не имеет выхода в виде программы на языке. Выход(вывод) интерпретатора — результат работы самой интерпертируемой программы.
Однако, это допускает одну из упомянутых мною трактовок — транслятора как составной части интерпретатора. (В этом случае, действительно, мы можем иметь внутреннее представление в виде какого-то промежуточного кода, который не выходит за пределы интерпретатора).
О нет, это только один из смыслов, это бытовое понятие interpreter как устный переводчик. Но это следствие другого смысла — а это «толкователь». Т.е. переводчик — человек, который устно растолковывает, о чем там интурист говорит(те же яндекс-словари):
interpret [ɪnˈtɜːprɪt] Прослушать
Глагол
объяснять, толковать, интерпретировать
В качестве примеров применения «интерпретировать» приведена фраза:
«Его замечания были неправильно интерпретированы».
Т.е. интерпретатор — это толкователь. Обратите внимание на другие переводы: «раскрывать замысел, содержание (пьесы, музыкального произведения); передавать (настроение, переживания) ». «истолковывать, объяснять, расценивать ».
В машинный код (в форме вызова предзаписанных его кусочков) так же как устный переводчик представляет целевой языке в виде звуковых волн.
О нет, мы не получаем в интерпретаторе машинного кода. Мы получаем действия, соответствующие интерпретированной программе.
Вся разница как раз в этом — транслятор выдает нам код (область видимости — дело десятое). Интерпретатор же не создает кода, он выполняет действия.
Вы можете взять распечатку-выход (результат работы) транслятора и поиграть в процессор/ВМ — выполнить трассировку и получить результат работы программы. С результатом работы интерпретатора это невозможно — его р. — результат программы.
Процессор, вероятно, переводит машкод в электрические сигналы на его выводах.
ЕСПД по большей части просто перевод стандартов ANSI/ISO (не помню точно, межд. стандарты). Помню, в предисловии сказано, что такой-то и такой-то стандартны разработаны «путем адаптации стандартов ANSI/ISO»
Это уже не нужно, потому что дано определение «трансляции» как переводу в другой язык. И оно не допускает вашей трактовки интерпретатора как частного случая.
Вторая же фраза является трюизмом только если у вас переклинило в голове и вы забыли о том, что в русском языке слова могут иметь несколько значений
Именно об этом я вам и написал — о ином смысле слова «ограниченный», применимом в этом контексте.
Обсуждать же «ядро» высказывания после этого уже не нужно: я опроверг следствие
Только в случае, если воспринимать «ограниченность применения», как это сделали вы — как «редкий», «мало где применяющийся». Что, конечно, неверно. Опровержение следствия вида «хеш-таблицы используются повсюду, вы даже не замечаете этого» не опровергает посылки — посылка не была «мало где используется».
C «Я же замечаю, что эта одна-единственная операция, собственно, и нужна чуть ли не в сто раз чаще, чем все остальные, вместе взятые» не спорю.
P.S. Уж если хотите быть занудой — то хотя бы вчитывайтесь в то, что вы пишите. И не считайте всех кругом идиотами.
Что вы, это просто ремарка «проходя мимо» по поводу вашего разговора, не более. Никаких личных оценок; не воспринимайте это как выпад против вас. Вы правы по сути, и я с вами согласен в выводах. Просто претензия вида «хеш-таблицы, в силу своих особенностей (а и б) имеют ограниченное применение» разбивается простым «любая структура имеет ограничения в силу своих особенностей. Но операция поиска — наиболее частая и нагруженная, поэтому эти ограничения несущественны»(1). И это покрывает все смыслы «ограниченное применение». В отличие от «применяется повсюду»(2). (2) лишнее при наличии (1), я только об этом — по сути с вами согласен во всем.
Вот еще источник: раздел терминологии в гостовской ЕСПД:
Интерпретатор — Программа или техническое средство, выполняющие интерпретацию. Примечание — Большинство интерпретаторов осуществляют интерпретацию программы путем последовательной интерпретации ее предложений.
Транслятор — Программа или техническое средство, выполняющие трансляцию программы.
Трансляция программы — Преобразование программы, представленной на одном языке программирования, в программу на другом языке и в определенном смысле равносильную первой
Компиляция — Трансляция программы с языка высокого уровня в форму, близкую к программе на машинном языке.
Я так понял, что автор опирается на книжку по редкому языку, которая ссылается на статью Ершова в части определений. Не очень понятно, где именно у Ершова
Понятия не имею, на что опирается автор. Но именно такую классификацию (с выделением интерпретатора) я встречал повсеместно. Так же как и оба упомянутых мною смысла слова «трансляция».
Мне кажется, также, что сами термины имеют англоязычные корни и английские значения слов ближе к моей версии.
Я бы не сказал, что interpret — частный случай translate, если уж говорить об английских значениях.
Терминология в этой части очень неустойчивая. Например, я говорил ниже о встреченном описании ЦП как интерпретатора машинных команд.
… и в ответе стали говорить о том, что таблицы применяются повсеместно, а не характеристиках вставки и удаления и связанных с этим ограничениями по применению, что было «ядром» высказывания. То, что хеш-таблицы применяются повсеместно (во многих областях) не вляется опровержением того, что у них есть ограничения (применение ограничено в силу характеристик). «Ограниченное применение» вовсе не означает, что структура мало где применяется.
Мне стоило написать не «Вы всерьез не заметили, что человек сказал о куче, а не х. таблицах», а "… не заметили, что человек сказал об ограниченности применения без уточнений именно о куче, а не хеш-таблицах..."
В первом сообщении сказано об ограниченном применении обоих структур, но «ограниченность» хеш-таблицы аргументирована, в отличие от кучи. Причем получается по сути трюизм — у каждой структуры есть особенности, которые ограничивают ее применение. Т.е. оспаривать фразу в целом бессмысленно — она верна в таком изложении (это трюизм), оспорить можно значимость характеристик вставки и пр., но не ссылкой на массовость применения. Указание же на ограниченность применения кучи — «голая», здесь нет аргументов, оправдывающих «ограниченность», и оспорить эту часть отсылкой к широте применения — разумный первый шаг.
Статья в википедии — не единственный источник. Я привел выше для примера выдержку из российского учебного пособия, где четко указывается, что интерпретатор — не транслятор. Ниже — иное трактование из советской/российской литературы. Так учили и меня в середине 2000х.
Интерпретатор — частный случай транслятора когда перевод осуществляется символ за символом — то есть выполнение по мере разбора.
Это лишь одна из трактовок. Другая — транслятор — составная часть интерпретатора, его блок. Или вообще отдельный инструмент. Видом которого интерпретатор не является.
Интерпретатор — частный случай транслятора когда перевод осуществляется символ за символом
Для любопытсва поискал нынешние учебные пособия для ВУЗ в гугле.
Вот, например, цитата из Молдованова О.В.
Языки программирования и методы трансляции: Учебное пособие. – Новосибирск/СибГУТИ, 2012
(взял первое же пособие, которое можно было полностью открыть, и которое содержит слово «интерпретатор»):
Кроме схожих между собой понятий «транслятор» и «компилятор», существует принципиально отличное от них понятие «интерпретатор». Интерпретатор, так же как и транслятор, анализирует текст исходной программы
Понятно, что существует два наполнения(смысла) слова «транслятор» — 1)как отдельный инструмент, видом которого является компилятор, но не интерпретатор, так и 2)блок, переводящий входную программу в некое представление, которое используется в дальнейшей работе. Это блок, обеспечивающий трансляцию — составная часть как компилятора (который вид транслятора в смысле слова №1), так и интерпретатора.
Интерпретатор — то, что переводит по мере выполнения (как переводчик по слуху при интервью иностранцев, который переводит по фразе)
В таком случае можно сказать, что транслятор является составной частью интерпретатора, вкупе со второй частью, обеспечивающей выполнение (неважно, есть ли промежуточный код, или испольуются прямые методы трансляции).
Собственно, как я и пытался показать в статье, трудно провести формальную чёткую границу между интерпретацией и трансляцией.
Более того, если посмотреть на терминологию, используемую в разных источниках в разное время, а не только статью в википедии, то можно увидеть совершенно различное употребление этих терминов.
Например, встречается представление программы-интерпретатора как состоящей из двух частей — «собственно» интерпретатора и транслятора, который переводит, скажем, ЯВУ во внутреннее представление, которое затем используется второй частью для выполнения. Т.е. здесь транслятор является блоком, составной частью программы-интерпретатора. И никоим образом и. не выделяется как подвид т. — ведь он — составная часть и. Хотя то же самое можно описать как «компилятор в промежуточный код + виртуальная машина».
Встречается представление о процессоре, как интерпретаторе машинного кода.
Встречается представление о компиляторе как исключительно о трансляторе в машинный код. Наравне с этим возможна компиляция в код виртуальной машины.
Встречается отнесение компилятора к подвиду транслятора.
Встречается выделение транслятора как исключительно программы, не выдающей машинный код и т.д.
Таких коллизий — тьма. Кроме того, есть различие в классификации между советской/российской и американской «школой» и, соответственно, разница в терминологии как следствие традиций.
Я не исключал, вы что-то путаете. Это была ремарка про «нормальное» выполнение без исключений и сопутствующие накладные расходы. А так — каждому случаю — свой инструмент.
Да, но их могло и не быть. Комментарий, с которого началась ветка, содержит
try-catch вместо if — это плохо не только потому, что ухудшает читабельность кода, а ещё и потому, что это просто медленнее.
Заметьте, сказано не о создании исключения, а о блоке. Мой комментарий написан именно в этом контексте — «if против try..catch», а не «try..catch затратнее/менее затратен, чем throw»
Дорогой является именно процедура возбуждения исключения, включающая в себя системный вызов
Это если исключение «честное» и проходит через ядро.
Допустим, в теле интерпретатора есть последовательность 12 34 56h, которая означает «вывести на печать строку по адресу xyz». Эта последовательность на машинном языке не является выходными данными интерпретатора, потому что выходные данные — это те, что сформированы в ходе работы программы. (Даже если это полная печать своего, программы, тела. Или выдача части. Здесь же часть не выдается, она непосредственно выполняется ЦП. Выполняемое тело и части тела интерпретатора не являются выходными данными самого интерпретатора). Последовательность же 12 34 56h не сформирована в ходе работы интерпретатора, она сформирована компилятором в ходе компиляции самого интерпретатора. И, что важно, исполняется ЦП непосредственно (см. ниже определение машинного языка — для выполнения программы на оном не требуется дополнительных средств в виде к. т. или и. Т.е. машинный язык выделяется отдельно, как предел, и не допускается толкование ЦП как интерпретатора. ЦП определен как «техническое средство»).
Никоим образом. Определение ниже (пролистайте) четко говорит, что переводит только транслятор, интерпретатор — реализует программу непосредственно.
Транслятор в терминологии, приведенной выше (и чуть ниже — определение интерпретатора из ЕСПД тоже дал) — это, если перефразировать — сущность (программа, программный комплекс или блок в составе программы), входными данными которого является текст программы на одном языке, выходными — текст программы на другом языке.
Частный случай транслятора — компилятор, выходные данные которого — программа на машинном языке.
Интерпретатор же — программа, входными данными которой также является текст программы на языке программирования, а выходными данными — результат работы интерпретируемой программы. И никакой программы ни на каком ЯП.
Например:
Транслятор.
Входные данные(Basic):
PRINT «HELLO WORLD»
Выходные данные©:
printf(«hello world\r\n»);
Или, опять же транслятор:
Входные данные(Basic):
PRINT «HELLO WOLRD»
Выходные данные(Assembler):
push offset hw_string
call PrintToConsole
call ExitProgram
Или, компилятор (частный случай транслятора):
Входные данные(Basic):
PRINT «HELL WORLD»
Выходные данные(Машинный язык):
0E 1B 20 FF FE FF FF 81 7B 4D
И, теперь, внимание:
Интерпретатор.
Входные данные(Basic)
PRINT «HELLO WORLD»
Выходные данные…
......
HELLO WORLD.
27. Машинный язык — Язык программирования, предназначенный для представления программ в форме, позволяющей выполнять ее непосредственно техническими средствами обработки информации.
Примечание. Для выполнения программы на машинном языке не требуется применение трансляторов, компиляторов и интерпретаторов
Очевидно, что в случае с Java «техническим средством», которое непосредственно выполняет что-то, является виртуальная машина. Потому что мы вполне можем разработать ЦП, вполне себе такой чип, который будет выполнять Java байт-код. У нас же просто ВМ-эмулятор.
Кстати, нашел там и определение «интерпретации», которое я не привел выше:
Интерпретатор — Программа или техническое средство, выполняющие интерпретацию
Интерпретация — Реализация смысла некоторого синтаксически законченного текста, представленного на конкретном языке
Выше в одном из коментариев я использовал «выполнение действий», это и есть «реализация смысла» в терминах ЕСПД.
Однако, это допускает одну из упомянутых мною трактовок — транслятора как составной части интерпретатора. (В этом случае, действительно, мы можем иметь внутреннее представление в виде какого-то промежуточного кода, который не выходит за пределы интерпретатора).
О нет, это только один из смыслов, это бытовое понятие interpreter как устный переводчик. Но это следствие другого смысла — а это «толкователь». Т.е. переводчик — человек, который устно растолковывает, о чем там интурист говорит(те же яндекс-словари):
interpret [ɪnˈtɜːprɪt] Прослушать
Глагол
объяснять, толковать, интерпретировать
В качестве примеров применения «интерпретировать» приведена фраза:
«Его замечания были неправильно интерпретированы».
Т.е. интерпретатор — это толкователь. Обратите внимание на другие переводы: «раскрывать замысел, содержание (пьесы, музыкального произведения); передавать (настроение, переживания) ». «истолковывать, объяснять, расценивать ».
О нет, мы не получаем в интерпретаторе машинного кода. Мы получаем действия, соответствующие интерпретированной программе.
Вся разница как раз в этом — транслятор выдает нам код (область видимости — дело десятое). Интерпретатор же не создает кода, он выполняет действия.
Вы можете взять распечатку-выход (результат работы) транслятора и поиграть в процессор/ВМ — выполнить трассировку и получить результат работы программы. С результатом работы интерпретатора это невозможно — его р. — результат программы.
Тогда ЦП — это по-вашему, транслятор?
Именно об этом я вам и написал — о ином смысле слова «ограниченный», применимом в этом контексте.
Только в случае, если воспринимать «ограниченность применения», как это сделали вы — как «редкий», «мало где применяющийся». Что, конечно, неверно. Опровержение следствия вида «хеш-таблицы используются повсюду, вы даже не замечаете этого» не опровергает посылки — посылка не была «мало где используется».
C «Я же замечаю, что эта одна-единственная операция, собственно, и нужна чуть ли не в сто раз чаще, чем все остальные, вместе взятые» не спорю.
Что вы, это просто ремарка «проходя мимо» по поводу вашего разговора, не более. Никаких личных оценок; не воспринимайте это как выпад против вас. Вы правы по сути, и я с вами согласен в выводах. Просто претензия вида «хеш-таблицы, в силу своих особенностей (а и б) имеют ограниченное применение» разбивается простым «любая структура имеет ограничения в силу своих особенностей. Но операция поиска — наиболее частая и нагруженная, поэтому эти ограничения несущественны»(1). И это покрывает все смыслы «ограниченное применение». В отличие от «применяется повсюду»(2). (2) лишнее при наличии (1), я только об этом — по сути с вами согласен во всем.
Интерпретатор — Программа или техническое средство, выполняющие интерпретацию. Примечание — Большинство интерпретаторов осуществляют интерпретацию программы путем последовательной интерпретации ее предложений.
Транслятор — Программа или техническое средство, выполняющие трансляцию программы.
Трансляция программы — Преобразование программы, представленной на одном языке программирования, в программу на другом языке и в определенном смысле равносильную первой
Компиляция — Трансляция программы с языка высокого уровня в форму, близкую к программе на машинном языке.
Понятия не имею, на что опирается автор. Но именно такую классификацию (с выделением интерпретатора) я встречал повсеместно. Так же как и оба упомянутых мною смысла слова «трансляция».
Я бы не сказал, что interpret — частный случай translate, если уж говорить об английских значениях.
Терминология в этой части очень неустойчивая. Например, я говорил ниже о встреченном описании ЦП как интерпретатора машинных команд.
И да — вы не ответили:
Мне стоило написать не «Вы всерьез не заметили, что человек сказал о куче, а не х. таблицах», а "… не заметили, что человек сказал об ограниченности применения без уточнений именно о куче, а не хеш-таблицах..."
В первом сообщении сказано об ограниченном применении обоих структур, но «ограниченность» хеш-таблицы аргументирована, в отличие от кучи. Причем получается по сути трюизм — у каждой структуры есть особенности, которые ограничивают ее применение. Т.е. оспаривать фразу в целом бессмысленно — она верна в таком изложении (это трюизм), оспорить можно значимость характеристик вставки и пр., но не ссылкой на массовость применения. Указание же на ограниченность применения кучи — «голая», здесь нет аргументов, оправдывающих «ограниченность», и оспорить эту часть отсылкой к широте применения — разумный первый шаг.
?
Это лишь одна из трактовок. Другая — транслятор — составная часть интерпретатора, его блок. Или вообще отдельный инструмент. Видом которого интерпретатор не является.
В таком случае перевод во что мы осуществляем?
Терминология — очень, очень разная.
Вот, например, цитата из Молдованова О.В.
Языки программирования и методы трансляции: Учебное пособие. – Новосибирск/СибГУТИ, 2012
(взял первое же пособие, которое можно было полностью открыть, и которое содержит слово «интерпретатор»):
Понятно, что существует два наполнения(смысла) слова «транслятор» — 1)как отдельный инструмент, видом которого является компилятор, но не интерпретатор, так и 2)блок, переводящий входную программу в некое представление, которое используется в дальнейшей работе. Это блок, обеспечивающий трансляцию — составная часть как компилятора (который вид транслятора в смысле слова №1), так и интерпретатора.
В таком случае можно сказать, что транслятор является составной частью интерпретатора, вкупе со второй частью, обеспечивающей выполнение (неважно, есть ли промежуточный код, или испольуются прямые методы трансляции).
Более того, если посмотреть на терминологию, используемую в разных источниках в разное время, а не только статью в википедии, то можно увидеть совершенно различное употребление этих терминов.
Например, встречается представление программы-интерпретатора как состоящей из двух частей — «собственно» интерпретатора и транслятора, который переводит, скажем, ЯВУ во внутреннее представление, которое затем используется второй частью для выполнения. Т.е. здесь транслятор является блоком, составной частью программы-интерпретатора. И никоим образом и. не выделяется как подвид т. — ведь он — составная часть и. Хотя то же самое можно описать как «компилятор в промежуточный код + виртуальная машина».
Встречается представление о процессоре, как интерпретаторе машинного кода.
Встречается представление о компиляторе как исключительно о трансляторе в машинный код. Наравне с этим возможна компиляция в код виртуальной машины.
Встречается отнесение компилятора к подвиду транслятора.
Встречается выделение транслятора как исключительно программы, не выдающей машинный код и т.д.
Таких коллизий — тьма. Кроме того, есть различие в классификации между советской/российской и американской «школой» и, соответственно, разница в терминологии как следствие традиций.
Заметьте, сказано не о создании исключения, а о блоке. Мой комментарий написан именно в этом контексте — «if против try..catch», а не «try..catch затратнее/менее затратен, чем throw»
Это если исключение «честное» и проходит через ядро.