LINUX.ORG.RU

Ответ на: комментарий от monk

Шитый код — код на ассемблере выглядящий как

Это не шитый код. Это подпрограммный код :) Шитый код — набор адресов слов для вызова.

KRoN73 ★★★★★
()
Ответ на: комментарий от monk

Писали разработчики Питона

Значит, им пофиг на точности формулировок. Вот из-да таких и плодится потом каша, в т.ч. на Вики. У классического Питона интерпретатор только в виртуальной машине, да и там сегодня уже JIT-компиляция используется.

KRoN73 ★★★★★
()
Ответ на: комментарий от monk

И если я к gcc добавлю принудительный запуск скомпилированного файла, то он станет интерпретатором?

Внезапно: не gcc его исполняет. Обалдеть, правда? :D

Файлы .pyc можно выполнять без .py. Например коммерческие модули так и распространяются.

Можно. Но интепретатор .pyc-файлов от этого не становится компилятором.

Питон включает в себя компилятор .py -> .pyc. Но основная его функция - интепретация. Иными словами, компилятор там тоже есть. Ключевое слово: тоже.

anonymous
()
Ответ на: комментарий от KRoN73

Значит, им пофиг на точности формулировок.

У них всё нормально с точностью формулировок. А вот ты пытаешься смешать уровни абстракции, и получается каша.

anonymous
()
Ответ на: комментарий от anonymous

И если я к gcc добавлю принудительный запуск скомпилированного файла

Внезапно: не gcc его исполняет.

Почему это?

В gcc будет

int main...
{
...
  return system(outfile);
}

и он его прекрасно исполнит. Не хуже, чем python исполняет .pyc

monk ★★★★★
()
Ответ на: комментарий от monk

В gcc будет ... и он его прекрасно исполнит.

Если у тебя будет такой gcc, и ты его будешь так использовать, то с точки зрения пользователя, это интерпретатор.

Но использовать его так - бессмысленно.

anonymous
()
Ответ на: комментарий от anonymous

Если у тебя будет такой gcc, и ты его будешь так использовать, то с точки зрения пользователя, это интерпретатор.

TCC (Tiny C Compiler). Умеет так «tcc --run hello.c» — компилирует в память и запускает результат. Значит этот Compiler — интерпретатор?

monk ★★★★★
()
Ответ на: комментарий от anonymous

С какого хрена? Пруф будет?

с какого хрена бесконечное? В принципе атомы можно посчитать. Значит конечное.

emulek
()
Ответ на: комментарий от anonymous

Ты опускаешь тот момент, что сопоставить должен кто-то, твое сопоставление субъективно, например, кто-то может сопоставить 10-ти яблокам слово «10 яблок»

нет, объективно. Если кто-то сопоставит 10и яблокам число 17, то он идиот. Сопоставление однозначное.

И любое яблоко можно разделить на произвольное количество частей, в том числе бесконечное.

нет, нельзя. Если долго делить яблоки, они перестанут быть яблоками. Пюре ≠ часть яблока. А уж тем более, яблоками не является кислород, водород, и углерод.

Поэтому, твои «числа» субъективны, они имеют отношение к реальности не больше и не меньше чем любая другая абстракция, в том числе бесконечность.

нет, объективны, ибо сопоставление чисел однозначно, и НЕ зависит от субъекта(если субъект не идиот).

emulek
()
Ответ на: комментарий от quasimoto

То есть я одним enum-ом и функцией в несколько строк целый компилятор всего си в ассемблер написал?

да. Только негодный и никому не нужный.

В более сложном и реальном случае соответствия между элементами интерпретируемого языка и ассемблером тем более нет.

соответствие всегда есть. CPU ведь что-то выполняет? Как думаешь, что?

Допустим, есть машинный код интерпретатора, если взять произвольную программу интерпретатора, то никакого машинного кода ей не соответствует,

соответствует. Ведь выполняет программу всё равно CPU. Т.е. код на bash'е ведь исполняется? ЧЕМ исполняется?

emulek
()
Ответ на: комментарий от anonymous

Счетные — это всегда (только лишь) бесконечные.

да. Уродское название. Какой идиот придумал назвать «счётным» то, что нельзя посчитать?

emulek
()
Ответ на: комментарий от KRoN73

Пробный камень для понимания — циклы. У компилятора, поскольку трансляция происходит перед запуском, трансляция тела цикла происходит один раз. У интерпретатора трансляция происходит на каждой итерации.

т.е. если в bash'е сделать предпросмолтр циклов, и их выполнепние только после парсинга done, то это сделает из bash компилятор?

ВНЕЗАПНО:

$ bash loop.bash 
loop.bash: line 11: ошибка синтаксиса: неожиданный конец файла
#!/bin/bash

(( COUNT = 0 ))

while true; do
	(( COUNT++ ))
	echo "pass $COUNT"
done_XXX

по твоему выходит, что bash == компилятор, ибо НЕ выполнил ни единой итерации цикла! Хотя интерпретатор просто обязан был начать выполнение, распечатать COUNT, и лишь ПОСЛЕ этого рухнуть с ошибкой.

emulek
()
Ответ на: комментарий от quasimoto

Нет (следует читать как — можно встретить литературу в которой A счётно iff |A| <= aleph_0).

я тоже так думал, но ЛОРовские аналитеги считают, что равенство строгое, т.е. конечное множество НЕ является счётным множеством.

emulek
()
Ответ на: комментарий от aedeph_

A ⊂ ℕ => |A| = |ℕ|

это утверждение истинно, т.к. А бесконечно.

emulek
()
Ответ на: комментарий от quasimoto

я не думаю, что он считает финитные и счётные множества равномощными :)

я может и тролль, но не идиот.

emulek
()
Ответ на: комментарий от anonymous

«Бинарная форма» программы - собранная из исходного кода компилятором форма представления программы в операционной системе. Трудно читаемая человеком однако прекрасно читаемая операционной системой/процессором/машиной...

если ты исходник предоставишь в таком виде:

00000000  23 69 6e 63 6c 75 64 65  20 3c 73 74 64 69 6f 2e  |#include <stdio.|
00000010  68 3e 0a 0a 69 6e 74 20  6d 61 69 6e 28 69 6e 74  |h>..int main(int|
00000020  20 61 72 67 63 2c 20 63  68 61 72 20 2a 61 72 67  | argc, char *arg|
00000030  76 5b 5d 29 0a 7b 0a 09  70 72 69 6e 74 66 28 22  |v[]).{..printf("|
00000040  68 65 6c 6c 6f 20 77 6f  72 6c 64 5c 6e 22 29 3b  |hello world\n");|
00000050  0a 09 72 65 74 75 72 6e  20 61 72 67 63 2f 33 3b  |..return argc/3;|
00000060  0a 7d 0a                                          |.}.|
00000063

(без правого столбца), то его тоже будет «сложно читать человеком».

Тем не менее, исходник в таком виде:

	.file	"helloworld.c"
	.section	.rodata
.LC0:
	.string	"hello world"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushl	%ebp
	.cfi_def_cfa_offset 8
	.cfi_offset 5, -8
	movl	%esp, %ebp
	.cfi_def_cfa_register 5
	andl	$-16, %esp
	subl	$16, %esp
	movl	$.LC0, (%esp)
	call	puts
	movl	8(%ebp), %ecx
	movl	$1431655766, %edx
	movl	%ecx, %eax
	imull	%edx
	movl	%ecx, %eax
	sarl	$31, %eax
	subl	%eax, %edx
	movl	%edx, %eax
	leave
	.cfi_restore 5
	.cfi_def_cfa 4, 4
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (GNU) 4.8.2"
	.section	.note.GNU-stack,"",@progbits

читается очень просто.

emulek
()
Ответ на: комментарий от KRoN73

Ну да:

Да

«Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке»

«Интерпрета́тор — программа (разновидность транслятора), выполняющая интерпретацию

Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения»

Вот что тут непонятного в контексте вопроса ТС?

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

Интерпретатор — это исполнитель.

сам по себе интерпретатор ничего не исполняет. Исполняет процессор и/или системные функции.

emulek
()
Ответ на: комментарий от anonymous

Ты python запускаешь, чтобы получить результаты вычисления входной программы или чтобы перевести её на другой язык?

суть в том, что мой процессор не умеет питоно-код. Он умеет только IA-32 код.

emulek
()
Ответ на: комментарий от anonymous

числа это конечно абстракция, но любое число можно сопоставить с предметами IRL. Например два яблока соответствуют абстракции 2. А вот абстракции ∞ НЕ соответствует никакое количество яблок.

А какоеколичество яблок соответствуе тчислу Pi+e*i?

никакое. Т.к. это число не принадлежит к ℕ. Также оно не принадлежит к ℤ (если допустить, что яблоки можно брать в долг), и не принадлежит к ℚ (если допустить, что яблоки можно резать).

emulek
()
Ответ на: комментарий от anonymous

Внезапно: не gcc его исполняет.

ВНЕЗАПНО: bash тоже ничего не исполняет.

emulek
()
Ответ на: комментарий от emulek

и не принадлежит к ℚ (если допустить, что яблоки можно резать).

Тут то и возникает проблема. На сколько долей можно разделить яблоко?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Тут то и возникает проблема. На сколько долей можно разделить яблоко?

нет, не возникает. Если разделить яблоки на Over9000 частей они перестанут быть яблоками, а станут яблочным пюре.

И даже если допустить, что «молекула яблока» == яблоко, то достаточно всего 24..27 делений пополам, что бы поделить и эту молекулу H₂O.

Или ты считаешь, что кислород==яблоко?

emulek
()
Ответ на: комментарий от emulek

Если разделить яблоки на Over9000 частей они перестанут быть яблоками, а станут яблочным пюре

А если доказывать неверное утверждение, то доказательство станет софистикой. Не надо крутить жопой - сколько рациональных чисел между 0 и 1? А иррациональных? А на сколько промежутков времени можно разделить 1 секунду?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Начнём с того, что вселенная ограничена. Согласен?

не согласен. Я не знаю ограничена, или нет.

Но если ввести слово «наблюдаемая», то всё становится нормальным и конечным. Причём энергия тут не нужна. Ты её зря приплёл.

emulek
()
Ответ на: комментарий от no-such-file

Если разделить яблоки на Over9000 частей они перестанут быть яблоками, а станут яблочным пюре

А если доказывать неверное утверждение, то доказательство станет софистикой.

я доказываю верное утверждение.

Не надо крутить жопой - сколько рациональных чисел между 0 и 1?

жопой крутишь ты. Между 0 и 1 НЕТ натуральных чисел. А мы про натуральные вообще-то.

Рациональные ты сюда тоже приплёл зря, т.к. в ℚ нет определения «следующего числа». А значит яблоки тут не причём. Их нельзя нумеровать рациональными числами. Мало того, нельзя даже их части нумеровать, т.к. деление яблок — конечная операция. Их невозможно делить до бесконечности(ибо они очень быстро перестают быть яблоками). Т.е. множество частей яблока НЕ является множеством рациональных чисел, а лишь конечным подмножеством ℚ.

Вообще, операция деления над конечными множествами в 95% скатывает множество в непонятное говно (в бесконечных множествах всё прекрасно делится, кроме /0. А в конечном /0 в 95% получается). Разве что в полях Галуа можно что-то делить, в другом говне деление работает только иногда. Но поля Галуа к яблокам не относятся, ибо если ты 5 из 7и яблок поделишь пополам, то получится по 6 яблок в каждой половине (ибо 6*5=2 GF(7)). Бред, да? Потому яблоки вообще делить нельзя, это операция смысла не имеет, и ведёт к противоречию.

emulek
()
Ответ на: комментарий от no-such-file

Не знаешь, но утверждаешь что бесконечности IRL не существует? Разупорись.

у тебя глупая бинарная логика. Включи мозг, и перестань быть блондинкой.

У меня есть рубль. Я его сейчас подкину. Существует ответ на вопрос «какой стороной упадёт рубль»? Нет, ответа на этот вопрос не существует. Также и «бесконечной вселенной» тоже не существует, есть только конечная часть. А что там за этой частью — мы не знаем. Как ты не знаешь, какой стороной упал мой рубль.

emulek
()
Ответ на: комментарий от emulek

Между 0 и 1 НЕТ натуральных чисел

Рациональные ты сюда тоже приплёл зря, т.к. в ℚ нет определения «следующего числа».

Я их «приплёл» как пример реально существующих сущностей.

А значит яблоки тут не причём. Их нельзя нумеровать рациональными числами

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

Их невозможно делить до бесконечности(ибо они очень быстро перестают быть яблоками).

Ну ты дубина. Делить можно или до бесконечности, или вообще нельзя (пол-яблока это уже не яблоко - объект другого множества). Т.е. что комплексные числа деление - незаконно?

операция деления над конечными множествами в 95% скатывает множество в непонятное говно

Обратные элементы - нет, не знаю.

делить нельзя, это операция смысла не имеет

Ок. Так и запишем.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Рациональные ты сюда тоже приплёл зря, т.к. в ℚ нет определения «следующего числа».

Я их «приплёл» как пример реально существующих сущностей.

ещё раз: рациональных чисел не существует IRL. Существует только конечное подмножество рациональных чисел.

Ну т.е. они _могут_ существовать, там, в невидимой части вселенной, вместе с ответом на вопрос «какой стороной упадёт монетка?». Но здесь их нет. Мы их можем только представить и предположить, что они «есть». Однако, надо всегда помнить, что это не более, чем наша фантазия.

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

нету такой мощности, как у ℕ. Это оторванная от RL абстракция. Нечего нумеровать. И делить бесконечно IRL тоже нельзя. Обычно за <30 делений можно скатить что угодно в говно, из которого целое уже не собрать. Как не собрать яблоко из пюре.

Ну ты дубина. Делить можно или до бесконечности, или вообще нельзя (пол-яблока это уже не яблоко - объект другого множества). Т.е. что комплексные числа деление - незаконно?

это ты дубина. Деление «до бесконечности» не имеет смысла. Не, это законно. УК РФ не запрещает. Можешь и на ноль делить, можешь сравнивать тёплое с мягким, я не против.

Обратные элементы - нет, не знаю.

вот именно. А теперь знай, что эти твои «обратные» в 95% случаев не определены. А если ты их определишь, у тебя получится не поле, а говно с делителями нуля и прочими кошерными вещами.

делить нельзя, это операция смысла не имеет

Ок. Так и запишем.

ага. Запиши.

1. бесконечности не бывает IRL

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

3. Обычные множества чисел ℕ, ℤ, ℚ, ℝ представляют собой неточную модель того, что существует в реальной жизни.

4. из п3 следует, что применять математику на практике нужно осторожно, помня о том, что это всего лишь приближённая модель.

emulek
()
Ответ на: комментарий от emulek

Существует только конечное подмножество рациональных чисел

Если оно конечно, то тебя не затруднит перечислить все рациональные числа, которые существуют. Так?

Это оторванная от RL абстракция

Ты уже совсем там берега потерял, да?

Деление «до бесконечности» не имеет смысла.

Ты упорно не желаешь понять, что бесконечность это не какие-то действия (деление) до бесконечности. Это возможность производить такие действия. Возможность делить яблоко существует, эта возможность ничем не ограничена = можно получить любое (бесконечное) количество долей.

А если ты их определишь, у тебя получится не поле, а говно с делителями нуля и прочими кошерными вещами

Берём поле вычетов Z(3) 0,1,2. Добавляем обратный 1/2. Найди делитель нуля.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Если оно конечно, то тебя не затруднит перечислить все рациональные числа, которые существуют.

что ты глупости спрашиваешь? Затруднит конечно. Это разве доказывает принципиальную возможность перечисления?

Это оторванная от RL абстракция

Ты уже совсем там берега потерял, да?

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

И кстати перечитай учебник, там много чего написано, но вот того, что эти ℚ можно сопоставить с RL — не написано. Сопоставление есть только для конечного подмножества ℕ. Ну и некоторые из ℚ тоже можно сопоставлять с реальными объектами, например ¾ или ⅘. На практике и побольше бывают ℚ, например float'ы это что-то типа 12345/8388608. Приближённо это даёт нам представление действительных чисел(которые тоже только в нашей фантазии существуют).

Ты упорно не желаешь понять, что бесконечность это не какие-то действия (деление) до бесконечности. Это возможность производить такие действия. Возможность делить яблоко существует, эта возможность ничем не ограничена = можно получить любое (бесконечное) количество долей.

ты никак не можешь понять, что возможность существует только в нашем воображении. IRL нет у нас «идеально острого ножа» и «бесконечно делимых яблок». Потому поделить яблоко можно только на конечное число частей.

Берём поле вычетов Z(3) 0,1,2. Добавляем обратный 1/2. Найди делитель нуля.

это говно, а не поле. Тут у тебя даже умножения нет. Сколько будет в твоём говне ½*½=? Сначала определи умножение, а потом уже я тебе продемонстрирую, почему твоё множество — говно.

emulek
()
Ответ на: комментарий от emulek

Берём поле вычетов Z(3) 0,1,2. Добавляем обратный 1/2.

а вот не добавлял-бы ½, тогда всё было чудесно. Делителей нуля не было бы, и мы имели-бы поле Галуа с однозначным делением GF(3).

Правда с такой математикой яблоки делить не очень хорошо, ибо 2*2=1, а отсюда следует, что 1/2=2. Т.е. если у нас всего 3 яблока, и мы хотим два яблока оставить себе, а половину из того, что останется отдать, то нам нужно отдать 2 яблока из одного... Причём из этого одного яблока мы два яблока отдадим, и ещё два останется. Бред? Да. За то деление вполне однозначно. А чисел всё равно не существует ☺

emulek
()
Ответ на: комментарий от monk

«Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно». И почему ты считаешь, что он является транслятором?

я тебе больше скажу. любой компилятор сначала читает и интерпретирует программу. и почему ты считаешь, что он не является интерпретатором?

MyTrooName ★★★★★
()
Ответ на: комментарий от buddhist

А вот Ноздрунов-Баранов причисляют подпрограммный код к шитому

Он не единственный, кому пофиг на точность терминологии. У шитого кода вполне конкретный вид. Что у прямого, что у косвенного.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Дай тогда точное определение шитого кода. Которое включало бы прямой и косвенный, но не включало бы подпрограммный.

buddhist ★★★★★
()
Ответ на: комментарий от emulek

да. Только негодный и никому не нужный.

Нет, это легко проверить — позволяет ли эта функция interpret транслировать (или интерпретировать) _любые_ программы языка си? Нет, значит она не является транслятором (или интерпретатором) этого языка. Язык это некое множество строк (определённое подмножество всех цепочек над словарём, подмножество замыкания Клини, множество термов порождённое грамматикой), enum Cmd { Con1, Con2, ... }; это простой язык — он даёт нам множество термов {Con1, Con2, ...}, ему соответствует BNF вида Cmd ::= Con1 | Con2 | ..., к языку си он не имеет отношения. Функция interpret не транслирует язык Cmd в какой-либо другой язык (читаем опять определение языка), она его выполняет, то есть обходит AST (в данном случае этот обход — switch) и по мере обхода производит эффекты.

соответствие всегда есть.

Нет, нет терма какого-либо языка который бы соответствовал терму интерпретируемого (если есть то это уже компилятор), сам попробуй найти это соответствие для сколько-нибудь сложного интерпретатора — терму исходного языка не соответствует ни какая-то инструкция, ни их последовательность, ему соответствует конкретный control flow размазанный по всему коду интерпретатора (на языке его реализации, будь то ЯВУ со своей семантикой или сразу машинный код от его трансляции).

Что касается общепринятости определений — я нашёл одну русскоязычную книжку («рекомендовано для ВУЗов», все дела) в которой и интерпретатор и компилятор это трансляторы.

Но:

Чем отличается компилятор от интерпретатора? (комментарий)

И даже классика:

http://www.amazon.com/Compilers-Principles-Techniques-Tools-Edition/dp/032148...

An interpreter is another common kind of language processor. Instead of producing a target program as a translation, an interpreter appears to directly execute the operations specified in the source program on inputs supplied by the user

Как со счётными множествами история — выбирай что хочешь :)

quasimoto ★★★★
()
Ответ на: комментарий от emulek

да. Уродское название. Какой идиот придумал назвать «счётным» то, что нельзя посчитать?

Они «счетные», а не «посчетные». То есть их можно «считать», но не «посчитать». Все правильно.

anonymous
()
Ответ на: комментарий от emulek

никакое. Т.к. это число не принадлежит к ℕ. Также оно не принадлежит к ℤ (если допустить, что яблоки можно брать в долг), и не принадлежит к ℚ (если допустить, что яблоки можно резать).

То есть по твоей логике это не число, так же как и inf?

anonymous
()
Ответ на: комментарий от emulek

И даже если допустить, что «молекула яблока» == яблоко, то достаточно всего 24..27 делений пополам, что бы поделить и эту молекулу H₂O.

То есть не существует дробей со знаменателем больше чем 2^27?

anonymous
()
Ответ на: комментарий от emulek

то получится по 6 яблок в каждой половине (ибо 6*5=2 GF(7)). Бред, да?

Конечно, бред. В GF(7) 6*5!=2. Там вообще нету ни 6, ни 5, ни 2. А тебе пора бы уже перестать говорить об алгебре, если ты не обладаешь даже знаниями первокурсника.

anonymous
()
Ответ на: комментарий от emulek

Существует только конечное подмножество рациональных чисел.

Ты можешь это доказать?

вот именно. А теперь знай, что эти твои «обратные» в 95% случаев не определены.

В каких 95%? Обратного нету только у нуля.

3. Обычные множества чисел ℕ, ℤ, ℚ, ℝ представляют собой неточную модель того, что существует в реальной жизни.

Только наоборот. То, что существует в реальной жизни - представляет собой неточную модель N, Z, Q, R.

anonymous
()
Ответ на: комментарий от emulek

это говно, а не поле. Тут у тебя даже умножения нет.

Вообще-то есть. Любое кольцо классов вычетов по простому модулю - поле (то есть в нем есть умножение), и оно изоморфно соответствующему полю Галуа. Просто ты - необразованный еблан.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.