Обновить
25
ApeCoder@ApeCoder

Разработчик

0,1
Рейтинг
6
Подписчики
Отправить сообщение
1. Компилировать restricted Haskell (eDSL манипулирующий моделью машины) в машинный код.
2. Так как restricted Haskell это Haskell — то на нем можно написать рантайм для хаскеля и компилятор (вернее переписать ту часть, которая написана на C)
Мотом можно сделать embedded restricted Haskell и интегрировать его в сам Haskell.

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

Как-то так.

кстати

1. mutable уже есть внутри монады IO

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

drop 1 (drop 2 someList)

не приводит к порождению новой структуры в памяти, а просто удаляет 3 элемента из не в два этапа.

P.S. Я не настоящий хаскелист, я просто немножко изучал концепции некоторое время назад из интереса, так что, в каких-то деталях могу ошибаться.
«Там могут возникать весёлые моменты с join'aми, иногда проще»

Прочитал.

Статья написана в каком-то дебильном стиле «возьмите нож за лезвие для забивания гвоздя, видите — порезались. Никогда не берите ножи и не забивайте гвозди» автора надо посадить на год в камеру и чтоб там была книжка дейта в качестве единственного источника информации.
В описанном бутстрапе после шага 2 возникает такой компилятор.
>>>Мне не нужны ваши объяснения, решение этой проблемы я сам описал выше.

Нет никакой проблемы?

>>>Да, я прекрасно знаю как работает оптимизация релятивных запросов

Но мы-то речь идем по релятивистские!

>>>Я не собираюсь объяснять всех причин такого отношения к предмету, просто потому что в этом обсуждении никто не собирается входить в моё положение — у вас тут другие задачи (в основном компенсаторные).

Я, вот честно говоря, не понял вообще что у вас положение. Мой приведенный пример вы проигнорировали — привезите свой пример в котором будет продемонстрирована разница в планах запроса с outer join и c другими джоинами. Пока я виде вообще нежелание с вашей стороны аргументированно обсуждать. Вместо этого вы обижаетесь.

Если вы хотите чего-то объективного — проведите упомянутый эксперимент. Кстати, я могу оказаться не прав — в каком-нибудь MySQL может быть глюк, который препятствует логично оптимизации запросов именно с outer join. Тогда в рамках этой глюковины ваш совет будет верен :).

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

Можно поступить примерно так же как авторы Squeak:
1. Описать машину как класс типов
2. Написать ограниченный эмулятор машины внутри Haskell программы
2. Выбрать подмножество Haskell, которое легко транслируется в машинный код и написать на нем компилятор Haskell
3. Скомпилировать компилятор Haskell в машинный код путём трансляции кода компилятора на ограниченном подмножества Haskell в машинный код.

Тот есть примитивы мы не «реализовываем» а просто отображает хаскельный eDSL для эмулятора машины в машинный код.

Только так никто не делает, потому, что проще через C. см главу Smalltalk to C Translation тут
ftp.squeak.org/docs/OOPSLA.Squeak.html

Щас такое распространено для JavaScript (см. Например WebSharper)

То есть мы представляем ассемблера, как частный случай хаскела с ограничениями, после чего пишем на этом ассемблерохаскеле компилятор хаскела и транслирует его самим собой.
Меня игнорируйте ради бога. Эксперимент советую провести.
1. Зачем тут что-то кроме двух index seek
Вы ведь эксперимент не провели?

2. Нужно смотреть количество бухгалтерских поводок между двумя датами d1 и d2 даты водятся пользователем. Как вы организуете счётчики?

Я пока вижу что вы даете категоричные советы и знаете очень мало именно в той области, в которой даете. Все равно что говорить «не пользуйтесь ножом, потому, что если взять за лезвие и стучать по гвоздю, он взрывается»
1. Если внешняя часть круга — это таблица без условий — то да. Как и в случае просто select без джоинов. Домашнее задание: получить план запроса select * from order outer join customer on order.customer = customer.Id where order.Id =3 при условии что есть уникальные индексы по order.id, customer.id и в таблицах большет1000тзаписей

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

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

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

Вид джоина никак не должен влиять на full table scan — влияет сиатистика по индексам. Про count вам комбинаторная задача — в таблице 16 полей по которым мы хотим группировать в любых сочетаниях — сколько и каких индексов вы создадите в таблице счетчиков и как она должна вообще выглядеть?
Счетчики на все возможные сочетания группировок?
А outer joinы почему долго?
«Подробнее всего в этом плане были изучены события, сопровождавшие вспышку миксоматоза в австралийской популяции кроликов. Было замечено, что миксовирус, изначально эндемик дикого бразильского вида кроликов, несколько раз становился причиной летальной эпизоотии среди европейских домашних кроликов — которые относятся к другому виду. Поэтому в 1950 г. вирус целенаправленно перенесли в Австралию в надежде избавиться от недальновидно завезенных сюда в XIX в. европейских кроликов, ставших настоящим бичом местного сельского хозяйства. В первый год миксоматоз дал превосходные (для австралийских фермеров) показатели — 99,8% смертельных случаев среди зараженных особей. К несчастью фермеров, на следующий год смертность упала до 90%, а со временем стабилизировалась на 25%, покончив с планами австралийцев искоренить кроличью напасть. Проблема заключалась в том, что миксовирус эволюционировал и при этом руководствовался собственными интересами, которые отличались не только от кроличьих, но и от наших. В результате его модификации кролики стали реже заражаться, а зараженные — дольше не умирать. Таким образом, эволюционировавший миксовирус научился передавать свое потомство большему числу кроликов, чем это удавалось его сверх меры активному предшественнику.

Чтобы привести аналогичный пример из человеческой практики, достаточно вспомнить об удивительной эволюции сифилиса. У нас сифилис в первую очередь ассоциируется с двумя признаками: генитальными язвами и очень медленным развитием болезни, во многих случаях приводящим к смерти — у нелечащихся людей — лишь по прошествии многих лет. Однако во времена первых достоверно засвидетельствованных случаев этого заболевания в Европе — 1495 г. — характерные сифилитические нагноения часто покрывали тело человека с головы до коленей, с лица облезала кожа, а смерть наступала всего лишь через два-три месяца. К 1546 г. сифилис уже превратился в болезнь с набором хорошо известных нам сегодня симптомов. Очевидно, что так же, как в случае с миксоматозом, трансформация вызывающих сифилис спирохет, направленная на удлинение срока жизни зараженного, дала им возможность распространять свое потомство среди большего круга потенциальных жертв.
»
В данной статье — внешний

embedded (or internal) domain-specific languages, implemented as libraries which exploit the syntax of their host general purpose language or a subset thereof, while adding domain-specific language elements (data types, routines, methods, macros etc.).
Чистая функция, это такая у которой результат зависит только от аргументов. В императивной программе результат зависит не только от аргументов, он и от глобального состояния (состояния мира). Таким образом можно представить императивную программу, как функциональную, у которой у каждой чистой функции приписан еще один аргумент — текущее_состояние_мира и еще одно возвращаемое значение — новое состояние мира.

См как устроено IO в языке clean clean.cs.ru.nl/download/html_report/CleanRep.2.2_11.htm

Так как мир нельзя копировать то такие функции приходится выстраивать в цепочки — step3(step2(step1(world)))

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

world1, byte = receiveByte(world0)
world2, handle = openFile(world1, filename)
world3 = writeToFile(world2, handle, byte)

Итого получаем паттерн — каждый шаг принимает и возвращает world, плюс шаги выстраиваются в цепочку.

Это и называется монадой IO — функции встроенные в цепочку с приписанным им значением определённого типа (состояние мира).

Но в отличие от императивного программирования, у нас есть другие монады. Например если мы уберем требование уникальности типа приписываемого значения у нас может быть вычисления встроенные в расходящиеся и сливающиеся цепочки. Так же в императивной программировании состояние мира одно, а в функциональном программировании может быть много «мирков» с изолированным состоянием, таким образом мы легко видим, какие вычисления могут повлиять на какие, а на какие не могут.
Не зная человека я бы не решился так утверждать — вдруг что-то медицинское, хотя спорт, умеренное употребление кофе и прочие рекомендации которые уже были на хабре, помогают обычно
а почему не сделать внутренний DSL?
«И многие из них уничтожили 100% своих целей» я думаю что у самоубийственных сект во-первых, счет идет на сотни жертв максимум, во-вторых, обычно там люди не все, а специально отобранные — уязвимые для пропаганды. То есть не факт, что это масштабируется на все человечество.

«Проблема-то именно во внезапности перестройки вирусов.»

Тут и проблема и не проблема. Я кажется уже где-то читал, что путь вируса обычно такой: Он приходит с другого вида на человека, потом некоторое время может быть очень опасным, потом эволюционирует приспосабливаясь к хозяину и становится не таким опасным. В качестве примера приводилась испанка и современный грипп. Вообще, это все ламмеризм пока уже искать материалы и цитировать
На сегодняшний день на полуострове Юкатан, в том числе в Белизе, Гватемале и Гондурасе живут около 6,1 млн майя[4][нет в источнике]. В Гватемале до 40 % населения относятся к майя, в Белизе — порядка 10 %. Сегодняшняя религия майя представляет собой смесь из христианства и традиционных верований майя.

Информация

В рейтинге
4 716-й
Откуда
Россия
Дата рождения
Зарегистрирован
Активность