Обновить
0
@MacInread⁠-⁠only

Пользователь

5
Подписчики
Отправить сообщение
Вероятно, вы хотите сказать, что команда «распечатать строку» — выходные данные, которые интерпретируются процессором, но это неверно, вот почему:
Допустим, в теле интерпретатора есть последовательность 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 — устный переводчик

О нет, это только один из смыслов, это бытовое понятие 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»

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

Это если исключение «честное» и проходит через ядро.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность