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 ★★ ()
Ответ на: комментарий от vladimir-vg

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

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

Ты не ответил на вопрос зачем они нужны.

Stil ★★★★★ ()

Система Общего Назначения является Угребищной

всегда

Eddy_Em ☆☆☆☆☆ ()

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

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

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

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

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

man UNIX-way

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

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

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

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

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

Впилил рестарты в быдлокод на шарпе и система перестала быть ушребищной?

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

рестарты тоже впилил, но не в рестартах совершенно суть, рестарты это так, вспомогательная сущность

lovesan ()

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

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

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

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

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

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

Рестарты как в cl запилил? Можно подробнее?

loz ★★★★★ ()

Когда будет доказательство теоремы?

anonymous ()
Ответ на: комментарий от 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 ★★★★★ ()
Ответ на: комментарий от anonymous

Нет, читай код. Переиспользуются сами же структуры языка, это метациклический интерпретатор.

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

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

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

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

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

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

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

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

У SBCL на Си, но это им было лень на лисп переписать. Никаких проблем с написанием и рантайма в т.ч. на лиспе нет.

lovesan ()
Ответ на: комментарий от 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 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.