LINUX.ORG.RU

Об угребищности систем общего назначения

 , ,


2

5

Значит, я с бодуна вот что придумал.

Универсальный Критерий Угребищности Систем Общего Назначения. (Теорема лавсана)

Система Общего Назначения является Угребищной тогда и только тогда когда она не является Метациклическим Интерпретатором.

Другими словами: Система, не способная к построению Метасистемы в рамках самой себя, то есть не способная к описанию и изменению самой себя в своих же терминах, и при этом являющаяся Системой Общего Назначения(в какой-либо области), Угребищна.

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

Чем, в контексте языков программирования, это отличается от просто тьюринг-полноты?

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

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

Примеры, сначала метациклических интерпретаторов:

  • Универсальная машина Тьюринга
  • RASP-машина
  • Реляционная модель данных
  • Лисп

А вот скажем примеры систем, соответствующих критерию:

  • Среднестатистический современный регистровый процессор
  • Большинство языков программирования, особенно со статической типизацией.
  • Большинство NoSQL моделей данных или скажем иерархических моделей данных, вроде файловых систем

В частности, давайте посмотрим на C#. C# не является метациклическим интерпретатором, т.к. термины языка не являются его же объектами.

Отчасти, это компенсируется платформой .Net, для которой термины C#(но не все) объектами таки являются(System.Reflection, грядущий Roslyn и т.д.), отчасти, в самой малой степени, фичей nameof() из C# 6, но это все только отчасти.

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

Дискач.

UPD. Собственно, отличнейшую статью нашел на эту тему: http://weblog.raganwald.com/2006/11/significance-of-meta-circular_22.html

с бодуна вот что придумал

Дискач.

А я не пью вот, надоело что-то.

Shadow1251 ()

Пиши лучше про телочек.

anonymous ()

УКУСОН значит... а должно звучать как ЗАКУСОН, если с бодуна то. Дорабатывайте!

AIv ★★★★★ ()
Ответ на: комментарий от vladimir-vg

Система общего назначения если например про программирование это любой универсальный язык программирования, т.е. не DSL. Про хранение данных - это СУБД. И так далее. Система общего назначения это все что делается не под частный случай.

lovesan ★★ ()

Кстати, с утра разбирал спектрограф. Вот оно — универсальное средство от бодуна! Железо надо с утра тягать. Домой на обед пришел уже практически трезвый и со здоровой головой.

Но, блин, ненавижу себя! Работать в шаббат! Япона ж мать!!!

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

Нет. Во-первых, системы для решения частных случаев абсолютно всегда существуют только на системах для решения общих случаев. В типичной веб-опердени все системы от железа и до уровня веб-фрейморка являются системами решения общих случаев. Большинство из них, к сожалению, не являются метациклическими интерпретаторами(кроме, отчасти, ОС), поэтому, опять же, создается видимость что плохо вообще всё и всегда.

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

man UNIX-way

Все, что противоречит юниксвейности, угребищно по определению.

С другой стороны, операционная система общего назначения "линукс" не являлась угребищной. но скатывается в говно из-за всяких тварей ползучих, которые хотят ее юниксвейности лишить. Вывод: даже если система общего назначения и не является говном, она в конце-концов в говно скатится. Уроды найдутся всегда.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от lovesan

а ты работал над созданием каких-то реальных систем, которые не содержали бы зашкаливающее количество ls-угребищности?

stevejobs ★★★★☆ ()

Система, не способная к построению Метасистемы в рамках самой себя, то есть не способная к описанию и изменению самой себя в своих же терминах, и при этом являющаяся Системой Общего Назначения(в какой-либо области), Угребищна.

регистрация разрешена только для зарегистрированных пользователей

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

Если конкретнее про регистрацию.

Метациклическим интерпретатором система регистрации пользователей таковая система была бы если бы пользователь мог бы изменять саму эту систему регистрации. И такое кстати, совсем не эзотерика, а даже наоборот. Скажем есть пользователь с ролью admin, и он выбирает, какая роль присваивается пользователю по дефолту, на какие домены емейла регистрироваться запрещено итд.

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

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

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

КУЛУК

или кто бреет брадобрея

КУЛУК
Угребищность
Любого
Универсального
Критерия
1) Любой универсальный критерий является угребищным, если аббревиатура первых букв его названия не является рекуррентным полиндоромом.

2) Достоверным и аболютным истинным является любой универсальный критерий, хэш сумма (взятая по какому либо ГОСТ-у) формулировки которого является простым симметричным числом.

AIv ★★★★★ ()

Метациклический интерпретатор обшелиспа, часть функции eval

(cond
  ...
  ((applicationp exp)
     (apply (eval (operator exp) env)
         (list-of-values (operands exp) env)))
  ((macroformp exp) (позовите сюда этого мудака, пусть раскроет))
  ...
определен в терминах самого себя.

terminator-101 ()
Ответ на: комментарий от terminator-101

Это удар по яйцам, нельзя же так жестоко, религиозные фанатики очень ранимые натуры.

anonymous ()

Ты хоть понимаешь, что такое метациклический интрпретатор, товарищ фанбой?

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

Так что там с доказательством теоремы?

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

Ну я ж на хабр как-то статью писал.

Делается достаточно банально. Фактически для рестартов нужна функциональность динамического скоупа плюс семантика escape continuations.

Первое делается тред-локал переменными и IDisposable, второе есть в виде эксепшнов дотнета.

http://habrahabr.ru/post/150198/

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

Это к тому, видимо, было сказано, что CL не обходится без препроцессора, он не может быть языком описывающим себя в своих же терминах, ему нужен «помощник». CL без макросов, наверное, может быть реализован в качестве простого однопроходного интерпретатора, с макросами — нет.

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

Полный EVAL для CL, написан на нем самом же, собственно это *interpreter* mode у SBCL

Это тут не причем. Виртуальная машина, на которой крутится твой «полный eval» состоит из двух языков: исполнителя и препроцессора. Твой полный может быть написан на чем угодно, хоть на си, это не имеет никакого значения. Если так рассуждать, мы дойдем до того, что хаскель с его костылями можно напейсать на *самом* хаскеле. Любой язык, реализованный на 100 языках подойдет под этот критерий. Основной вопрос, что лежит в основе.

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

компилятор Steel Bank Common Lisp написал на Common Lisp

золотой дождь

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

Вообще, полноценный компилятор CL, по причине макросов и eval-when, может быть написан только на нем самом же, уже на работающей лисп-системе.

Для бутстрапа каким-либо другим языком используется урезанное подмножество лиспа, для которого пишется компилятор. После же - это урезанное подмножество используется для бустрапа полноценного компилятора.

Но это не всегда. SBCL например пошел дальше, и его невозможно собрать ничем кроме ANSI-compatible CL(и это еще усовершенствование по сравнение с CMUCL, от которого SBCL форкнулся - тот вообще только самим им же и собирался).

Кстати очень похоже на GCC - там stage 2 и 3 компилируются емнип только самим же GCC.

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

Это евал, который крутится внутри виртуальной машины. А на чем написана виртуальная машина? Например - на чем написан gc?

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

У SBCL на Си, но это им было лень на лисп переписать.

Нельзя.

Никаких проблем с написанием и рантайма в т.ч. на лиспе нет.

Чтобы запустить код на лиспе, тебе УЖЕ нужен рантайм. По-этому код рантайма на лиспе может существовать только в рамках какого-то другого рантайма. Другими словами, без начального рантайма на сишке, ты рантайм лиспа запустить не сможешь.

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

Предвосхищая вопрос - нет, нет, и еще раз нет, «виртуальная машина», «вычислитель» лиспа у SBCL не написан на Си. В «рантайме» SBCL - gc и разное вспомогательное для связи с системой(io, треды итд).

Понятие виртуальной машины в SBCL есть, но т.к. он компилирует в нейтив, то это понятие, естественно, уровня компиляции. Это IR2 оно же VMR, virtual machine representation - самое низкоуровневое из представлений компилятора, которое оперирует VOP-ами(virtual operations), генерирующими машинный код при фазе трансляции.

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

«виртуальная машина», «вычислитель» лиспа у SBCL не написан на Си.

Она написана на си. Зачем ты врешь?

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

Нельзя.

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

Чтобы запустить код на лиспе, тебе УЖЕ нужен рантайм. По-этому код рантайма на лиспе может существовать только в рамках какого-то другого рантайма. Другими словами, без начального рантайма на сишке, ты рантайм лиспа запустить не сможешь.

Чтобы запустить компилятор лиспа тебе УЖЕ нужен лисп, см. выше как это обходится.

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

Она написана на си. Зачем ты врешь?

Не на Си, еще раз. На Си - треды и связь с ОС. Еще раз перечитай.

Код на SBCL исполняется процессором напрямую после компиляции.

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

Можно

Нельзя.

Чтобы запустить компилятор лиспа тебе УЖЕ нужен лисп, см. выше как это обходится.

С компилятором - обходится, с виртуальной машиной - нет, никак. Невозможно запустить код на лиспе, если нету соответствующего рантайма. Именно по-этому история не знает ни одного случая, когда рантайм Х написан на Х.

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

Не на Си, еще раз. На Си - треды и связь с ОС.

На си.

Код на SBCL исполняется процессором напрямую после компиляции.

И что? Этот код не может работать вне рантайма, еще раз. Даже если ты его скомпилируешь - он просто не будет работать.

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

С компилятором - обходится, с виртуальной машиной - нет, никак. Невозможно запустить код на лиспе, если нету соответствующего рантайма. Именно по-этому история не знает ни одного случая, когда рантайм Х написан на Х.

Ты наркоман? Рантайм Си написан на Си, это собственно большниство современных ОС.

Рантайм лисп это лисп-система.

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

По аналогии - когда мы пишем ядро лисп-системы, нам достаточно ограничить использование стандартных фич, типа GC(как аналогично в ядре ограничивается использование юзерспейсного malloc)

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