Объем памяти программы для разных интерпретаторов / компиляторов - PullRequest
2 голосов
/ 12 февраля 2011

Вот выдержка из записи Википедии о языке программирования K :

Небольшой размер интерпретатора и компактный синтаксис языка позволяют K-приложениям полностью вписываться в кэш-память уровня 1 процессора.

Что, в частности, делает программы K такими маленькими? Когда кто-то использует оператор ' в K, map в скомпилированном функциональном языке, таком как Haskell, или эквивалентный цикл for в скомпилированном императивном языке, таком как C, я не могу представить, чтобы компилятор генерировал радикально различного ассемблерный код или то, что происходит во внутренностях интерпретатора, будет сильно отличаться от цикла for. Есть ли в K что-то особенное, что делает его время выполнения и программы настолько маленькими?

Существует аналогичный вопрос о SO, но ответы там в основном ничего не проясняют.

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Есть способы генерирования очень компактного кода.Например, http://en.wikipedia.org/wiki/Threaded_code Форта и тому подобное.Вполне вероятно, что K скомпилирован в какую-то форму.

1 голос
/ 12 февраля 2011

Я не автор приведенного выше заявления в Википедии, просто кто-то, кто широко использует K.

Что касается кода, то K не развертывает циклы и не вносит другие изменения в структуру программы, которые увеличивают его размер.за то, что вы ожидаете.Сам исполняемый интерпретатор крошечный.И программы, как правило, небольшие (хотя и не обязательно).Это не выполнение каких-либо конкретных инструкций для отображения и т. Д., Которые повышают вероятность того, что сам код будет выполнять все в кеше.

K-программы, как правило, имеют небольшой размер, поскольку они представляют собой небольшой жесткий байт-код в памятии их синтаксис приводит к очень небольшим объемам кода для данной операции.

Сравните эту программу на Java:

int r=0;
for(int i=0; i<100; i++) {
  r+=i;
}

Против этой программы K, чтобы получить тот же результат:

+/!100

Объем исполняемого кода аналогичен, но объем памяти, требуемый программой (намного меньше печатания!), Намного меньше.K отлично подходит для людей с повторяющимися травмами в результате стресса.

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

Но это всего лишь тенденции и лучшие практики в языке в сочетании с самим исполняемым файлом K.Если вы связываете большое количество дополнительного кода, особого случая с множеством функций и рандомизируете свои индексы перед доступом к вашим данным, ваша программа будет столь же недружелюбна к кешу, как вы ожидаете.

...