Category: лингвистика

Category was added automatically. Read all entries about "лингвистика".

Book

Duolingo Spanish

Галопом по европам прошёл весь испанский от дуолинго. Старт, как я раньше писал, очень хороший, а дальше - как везде.

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

По прагматике там ноль - по сути перевод отдельных предложений. Нет заданий с текстами и диалогами.

По грамматике 3 из 5. Есть упражнения на определённые грамматические конструкции, но правила употребления конструкций не объясняются (по-крайней мере в телефонном аппе). Предлагается перевести на испанский не английские фразы (так по-английски не говорят). Требуют в английском переводе артикли там, где они есть в испанском, кроме случаев, когда в английском получается совсем уж дебильно.

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

Ещё читить можно - вопросы из нескольких вариантов настолько разные, что всегда можно по смыслу догадаться. Или, например, один из вариантов начинается с маленькой буквы.
Book

Починил ещё 8 тестов

Теперь падает 3. Учитывая, что починится минимум 4 теста, можно переходить на новый инлайнер в качестве основного.

Сэкономить проходы не удалось, пришлось пойти по пути четвёртого прохода.

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

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

Теперь надо разобраться с падающими тестами - теми, которые падают сейчас, но работают со старым инлайнером, и теми, которые помечены как падающие и не запускаются.

Затем почистить код, и если окажется, что инлайнер работает удовлетоворительно - можно подобраться к циклам while. Идея у меня их функционально энкодить, типа

whileF :: (a -> Bool) -> (a -> a) -> a
whileF cond body start = import_from_ffi
а в cишном коде генерить как
auto p = start;
while (cond(p))
{
   p = body(p);
};
return p;
Если cond и body инлайнить - получится весьма удовлетворительно на выходе. Cобственно, я об этом неоднократно писал, и для этого мне понадобился рабочий инлайнер. А сейчас этот инлайнер близок как никогда, пусть даже на полухаках.

Upd: по итогам починил 13 тестов, поломал 3. В падающих зато обнаружил ошибки кодогенерации С++. Я уж думал, что эту тему закрыл. Теряются куски замыканий. Причём бывает, что оптимизатор нормально отрабатывает, а кодогенератор генерит по правильному соптимизированному .hn левый .cpp. Ну, то есть, починил я новым оптимизатором больше, чем 13, но часть падает по другим причинам. Теперь надо бы проверить, не записан ли где-нибудь битый С++ в ожидаемых тестами корректных значениях. Одно время было легко это делать - поставил всё билдиться, MSVC сказал, что побито. Но сейчас там прогнило, хоть снова Забиватора проси.

14 тестов, помеченных как падающие, отличаются разнообразием способов падения:

isDigit, allDigits, allDigits-ho и allDigits-ho-1 лепят разные идентификаторы под одним именем в один скоуп (баг GraphDecompiler) и не инлайнят определения-синонимы, типа let foo = bar in baz foo foo. А чё, foo честно 2 раза используется, нафиг копипасту разводить? :) (отсутствие фичи оптимизатора)

euler1 и euler6-1 просто не инлайнят синонимы.

allDigits-ho-2 и hoand заходят в одну и ту же нереализованную ветку оптимизатора

comp-1 недоинлайнивает (но такое и не было предусмотрено - обратите внимание, как далеко х надо ехать):

ii = let h x = incr (incr 5) in h

вместо

ii x = incr (incr 5)

euler48 теряет узлы. Переменная есть, а её определение утеряно.

euler5 как-то вообще неправильно восстанавливает скоупы. В результате переменная используется вне своего скоупа и валится проверка типов.

euler6-2 оптимизится нормально, но проглатывается локальная функция в С++, причём даже не замыкание.

euler6 зацикливается

hasChar как-то неправильно удаляет аргументы. В результате код чудом сохранил корректность, но поменялся по смыслу.
Book

А мне похуй, что хаскель не взлетит

Хуячу свой pet project (даже два, но сегодня один).

В коде, который компилировался, но не запускался, после запуска обнаружилось 3 бага и 1 воркараунд пришлось залепить. При разборе полётов с воркараундом обнаружилось, что потеря узлов - это какое-то общее место. Теперь только теряет узлы не Hoopl, а мой компонент с пафосным названием GraphDecompiler, который граф обратно в AST переделывает.

Там были авгиевы конюшни на 5 строк. После того, как их разгрёб, обнаружилось, что в одной из этих 5 строк я реализую fmap. Пришлось залепить два синонима типов в 100500 файлах, чтобы сделать функтор из семейства взаимно-рекурсивных типов, представляющих AST, и заменить ручной fmap на отдерайвленный.

После появления fmap стало ясно, что, поскольку fmap коммутирует с чем не попадя, можно вызовы fmap пронести вверх по дереву вызовов, и вообще оставить один-единственный fmap наверху.

После этой и других чисток стало видно (в тех же 5 строках), что код восстановления скоупов работает нерекурсивно - то есть, я как ни в чём ни бывало, восстанавливаю всего один уровень скоупов. Как оно вообще работало, ума не приложу.

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

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

Прилагательные уровня типов по-кметтовски

В процессе написания вопроса на SO о комбинировании линз застал себя за написанием типа

combo :: Simple Lens M (Array Int Int) -> Simple Lens M Int -> Simple Lens M Int

Синонимы Simple и Lens определены в х-ой библиотеке lens. Lens требует Rank2Types.
Book

Лингвистическое

Искал, что там нынче с ASN.1, а нашел в результате перлы:

"кора дуба" (Core Duo)
"смените свои розовые очки на контактные линзы"