LINUX.ORG.RU

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

А если в программе есть цикл, который выполняется uint16_t раз, то ты тоже предлагаешь для каждого из 65536и чисел компилировать свой код? Нет, ты сделаешь один цикл

А в интерпретаторе, как правило, будет произведена интерпретация 65536 раз.

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

В sh вообще нет генерации машкода.

Но процессор ничего кроме машкода не понимает! Там есть генерация--->выполнение--->подстановка_на_вход_результа_выполнения. Т.е. получается 2-х сторонняя трансляция внутри (точней во время) процесса трансляции. Следующий шаг интерпретатора может работать с результатом генерации+выполнения исходной строки, как раз то, чего компилятор не может, или ограничен препроцессором.

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

Вот например eval в sed/perl eval'ит bash'ем

$ cat tmp.pl
eval { print "emulek, не тупи\n" }

$ perl tmp.pl
emulek, не тупи

Напоминаю, что print в sh нет.

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

ну и eval в нём тоже полнофункциональный. Поэтому сделать компилятор из *.sh в бинарник тоже невозможно

почему «невозможно»-то? Вполне себе возможно: открываешь файл, и парсишь его в рантайме. Да, нужен будет интерпретатор некоторого промежуточного (или даже исходного) ЯП.

А в интерпретаторе, как правило, будет произведена интерпретация 65536 раз.

так было только в 70х годах прошлого века. Даже в ZX Spectrum парсился не текстовый файл с BASIC программой, а нечто промежуточное, вроде LLVM. Каждая команда BASIC'а кодировалась одним байтом.

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

eval { print «emulek, не тупи\n» }

ты не eval юзай, e в регулярках.

$ echo "test test test" | sed 's~.*~rm -rf /~e'
rm: опасно рекурсивно обрабатывать «/»
rm: используйте --no-preserve-root, чтобы отменить предупреждение об опасности

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

Даже в ZX Spectrum парсился не текстовый файл с BASIC программой

Возьми для примера тот же sh

for i in *
do
   source $i
   foo
done

foo будет перепарсен в каждом цикле, так как $i может его переопределить как функцию. Или в середине цикла может появится foo раньше по $PATH

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от emulek

ты не eval юзай, e в регулярках

Ну так и говори не про eval, а про подстановку. Так и в Си есть system. Тоже можно считать «eval для sh»

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

Возьми для примера тот же sh

вот разве что sh остался из 70х.

И пойми ты, source это часть ЯП sh, а вот #include строго говоря к C/C++ не относится.

И ещё, эта твоя sh написана на C. Т.ч. ты сам себе противоречишь, когда говоришь «невозможно».

Ну так и говори не про eval, а про подстановку.

какая разница? Всё равно создание команды в рантайме, и её выполнение.

При желании можно и не только sh команды создавать.

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

Поэтому сделать компилятор из *.sh в бинарник тоже невозможно

Да, нужен будет интерпретатор некоторого промежуточного (или даже исходного) ЯП.

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

Не, если считать компилятором программу, которая генерит что-то вроде

int main()
{
   char *data = "... весь исходный код ...";
   return interpret(data);
}
тогда ладно. К слову, считаешь ли ты приведённую программу компилятором? Бинарник в результате получается...

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

Всё равно создание команды в рантайме

Для этого используется внешний интерпретатор.

да. Ну и что?

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

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

и что? Подумаешь — трагедия.

К слову, считаешь ли ты приведённую программу компилятором?

нет. У тебя просто программа в программе. Т.е. данные для C кода используются как код интерпретатора. Впрочем, если интерпретатор получает неконстантный указатель, то что мешает ему изменить код *data, реализовав полноценный eval? Короче: отсюда не видно реализации interpret();, и ответить на вопрос невозможно.

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

не. выражение [smth] можно прямо так отдать исполнителю.

Как ты отдашь его так исполнителю, если оно еще не вычислено?

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

Как ты отдашь его так исполнителю, если оно еще не вычислено?

как угодно. Хоть в виде текстовой строки.

код типа

mov eax, 10
add eax, 20
тоже не вычислен, это не мешает отдать его процессору IA-32, и получить результат 10+20=30 в eax.

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

Хоть в виде текстовой строки

В виде текстовой строки, которой не существует на момент передачи? Ты собрался передавать на вход несуществующую строку?

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

В виде текстовой строки, которой не существует на момент передачи? Ты собрался передавать на вход несуществующую строку?

что в этом такого страшного? Почему нельзя передать строку z=x+y;? Да, оно не знает, что такое x, и чему оно равно. Узнает в рантайме.

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

Узнает в рантайме

Да, тут твой компилятор — это и есть интерпретатор. И этот интерпретатор узнает в компилтайме, который ты называешь рантаймом, значение твоего выражения, а потом запишет все в бинарь. Только тонкость в том, что ты из своего ЯП не имееш доступа к этому интерпретатору, а следовательно и к написанному тобой коду.

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

Только тонкость в том, что ты из своего ЯП не имееш доступа к этому интерпретатору, а следовательно и к написанному тобой коду.

возьму другой ЯП, или расширю существующий. Я всё ещё не вижу проблемы.

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

Я всё ещё не вижу проблемы.

Проблемы нет, есть априорная слабость компилируемых языков по отношению к интерпретируемым.

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

Проблемы нет, есть априорная слабость компилируемых языков по отношению к интерпретируемым.

ясное дело, что за всё надо платить. Предварительная компиляция без исполнения(как в C/C++) это годная фича, но она естественно не бесплатная.

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

Мощность множества и его подмножества одинаковы?

для счётного множества: да.

Каждый раз, когда я думаю, что это дно, Батти не сможет уже сморозить что-нибудь ещё тупее, он стучит снизу.

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

Откройте уже наконец, что там будет одинаково мощность или количество? Видимо получается, что количество элементов в любом бесконечном счетном множестве одинаковы? В таком случае, логика автора не выглядит такой уж и странной, как некоторые пытаются ее представить тут.

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

Шелл не создаёт «выходную программу». Он просто выполняет команды, которые являются входной программой, а потому транслятором не является.

Три звезды, а такое порешь.

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

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

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

Понятие «количество элементов» для бесконечных множеств не определенно.
Любые два множества, между элементами которых может быть установлено взаимно-однозначное соответствие (биекция), содержат одинаковое количество элементов (имеют одинаковую мощность).

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

Насколько я понимаю, понятие мощность и была введена с целью обеспечения возможности сопоставлять кол-ва бесконечных множеств, иначе в нем нет нужды.

А если так, то очевидно, что мощности, а значит и кол-ва эл-в любых счетных множеств равны.

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

Откройте уже наконец, что там будет одинаково мощность или количество?

мощность. «Количество» не определено в бесконечности.

Видимо получается, что количество элементов в любом бесконечном счетном множестве одинаковы?

бред.

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

точно также можно доказать, что все числа равны. Достаточно разделить на ноль. Ну или вычесть из бесконечности бесконечность. Без разницы.

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

я уже писал ниже: ассемблер взаимооднозначен машинному коду.

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

А если так, то очевидно, что мощности, а значит и кол-ва эл-в любых счетных множеств равны.

бесконечность по определению больше _любого_ числа. Следовательно число элементов бесконечного множества, если и есть, то это НЕ ЧИСЛО. Какое ты имеешь право сравнивать и вычитать НЕ ЧИСЛА?

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

На определение отличное от того, которое дано в вики, очевидно.

в вике часто очень упрощают, и всем насрать, что получается ерунда. За то и дебилу понятно.

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

«Элементы теории функций и функционального анализа», А.Н. Колмогоров, С.В. Фомин.

Глава 1 § 3.6. Понятие мощности множества.

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

я это читал. Правда очень давно. Что тебе не понравилось-то? Что мощность чётных чисел совпадает с мощностью целых чисел? А это не так?

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

Какое ты имеешь право сравнивать и вычитать НЕ ЧИСЛА?

А какое право ты имеешь называть счетным то, что невозможно пересчитать, и сопоставлять то, что невозможно сопоставить? Будь последователен.

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

число элементов бесконечного множества, если и есть, то это НЕ ЧИСЛО

Число = Не число. Садись пять за блондо-логику. И помни, что пять - это не число.

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

Это так. Не так ровно то, что я процитировал.

Ты обосрался, признай уже, хватит жопой вертеть как шлюха. Хотел проканать за умного, но на этот раз фокус не прошел, да?

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

А какое право ты имеешь называть счетным то, что невозможно пересчитать

это общепринятое название. А право мне даёт тупо определение.

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

речь шла о счётных бесконечных множествах. Какого хрена ты влез с конечными? С конечными без тебя всем всё ясно.

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

число элементов бесконечного множества, если и есть, то это НЕ ЧИСЛО

Число = Не число. Садись пять за блондо-логику. И помни, что пять - это не число.

5 — число. ∞ — не число. Абстракция, над которой некоторые действия можно делать, а некоторые нельзя. IRL ∞ не существует, только в нашем воображении. И это не моя логика. Это математика. Я слишком стар, что-бы спорить с учебником.

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

Абстракция

Числа — это тоже абстракция

над которой некоторые действия можно делать, а некоторые нельзя

Тогда определи барьеры абстракции. Озвучь общее правило, что и когда можно, а что и когда нельзя. И это должен быть не просто высер Васи Пупкина, а обоснованное правило, следующее из...

Я слишком стар, что-бы спорить с учебником.

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

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

IRL ∞ не существует, только в нашем воображении.

Тогда покажи мне конец IRL.

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