LINUX.ORG.RU

Proof of concept для иммутабельности в SBCL

 , ,


0

1

Предыдущая серия фильма была здесь:

Исправить SBCL - добровольцы есть?

Теперь вот: http://lisper.ru/forum/thread/1361#comment-12370

https://github.com/budden/sbclt/commit/ba9ffd6d45441feed345b3a4dcfc1263daee94e9

Коротко говоря, ввёл в SBCL типы (mutable 1) (мутабельный) и (mutable 0) (иммутабельный). character, number иммутабельны всегда. Хеш-таблица иммутабельна, если она заморожена вызовом freeze-object. Если объект объявлен с типом (mutable 0), то (setf (gethash)) вызовет warning при компиляции, и в рантайме этот код упадёт.

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

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

И ещё - я пытаюсь фиксировать то, что узнаю по мере изучения SBCL. вот тут

★★★★★

Бенчмарка есть, сильно тормознее стало?

Проверка компилятором, или в рантайме?

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

Сходил по ссылке, прикольно, вопросы остались только про бенчмарк

yoghurt ★★★★★ ()

правильно frozen а не freezed, не иметь проверки правописания в редакторе кода в 2017 – признак настоящего инженера

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

тоже по ссылке сходил. вопрос только в том зачем тащить что-то туда где изначально его не было? неуж для этого вашего sbcl нет библиотек иммутабельных коллекций и структур данных? не проще ли взять язык иммутабельный по дизайну, например божественный ERLANG?

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

Разработчики СБЦЛ, после общения с Дениской, внесли его в игнор-лист, так что за СБЦЛ не переживай там этого не будет.

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

Буду рад, если возьмёшь на себя труд прогнать бенчмарк :) Или хотя бы посоветовать, какой бенчмарк взять, чтобы он был автоматизирован. Я почти развернул cl-test-grid, было бы интересно сравнить качество по тестам, но руки не доходят.

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

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

Перевёл на новейший SBCL - один тест не проходит. Сделал более приличную страничку и переименовал. Теперь живём тут:

https://github.com/budden/ysbcl

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