LINUX.ORG.RU

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

 ,


1

4

Я хочу следующие исправления/улучшения в SBCL:

Некорректная работа вывода типов

(defparameter *g* (cons 1 2))
(defun g () (setf (car *g*) 'a))

(defun f (x)
  (when (typep x '(cons fixnum))
    (g)
    (if (typep x '(cons fixnum))
      "Still cons fixnum!"
      "Not cons fixnum")))
(f *g*)
Это - баг в SBCL, который никого не интересует. Причина в том, что типы делятся на две категории: настоящие типы и предикаты. Принадлежность объекта к настоящему типу не меняется, например, к типу fixnum. Предикат (cons fixnum) может измениться.

Нужно внести в язык и в реализацию понятие о настоящем и ненастоящем типе и сделать так, чтобы вывод типов не использовал ненастоящие типы (или использовал их настоящую часть, в данном случае cons). При этом будет установлено, что defstruct-ы и deftype всегда будут переопределяться только вместе с unintern того символа, который их именует, за счёт этого настоящих типов станет гораздо больше.

Декларация const Нужно её как-то воплотить и использовать в системе типов. Соответственно, если объект const, то его можно передавать только в функцию, которая принимает const. Для структур, массивов и консов const распространяется только на первый уровнь ссылок (или рекурсивно? я не знаю, как надо сделать). Для классов CLOS - не нужно ничего делать, они меня не интересуют и я ими не пользуюсь.

Запрет неявного сужения типов Добавить новое качество оптимизации (к speed, debug и т.п.). Если это качество включено, то присваивание месту, декларированному как integer, типа number порождает warning или compilation error.

Мне нужен чистый форк и внесение изменений в реализацию, а не просто патчи. Патчами можно сделать далеко не всё. Примут его или нет, как его поддерживать потом - это всё на данном этапе неважно. Нужно решить техническую задачу.

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

★★★★★

Последнее исправление: den73 (всего исправлений: 3)

P.S. и лучше пишите сразу на e-mail, к-рый вы уже знаете.

den73 ★★★★★
() автор топика

20 долларов в час

Я так понимаю, что работа в офисе под твоим зорким глазом? Или как ты поймёшь, что человек отработал час на удалёнке?

azelipupenko
()

Баг в СБЦЛ есть, но Дениска как обычно чушь порет.

CL-USER> (defparameter *g* (cons 1 2))
*G*
CL-USER> *g*
(1 . 2)
CL-USER> (defun f (x)
  (when (typep x '(cons fixnum))
    (g)
    (if (typep x '(cons fixnum fixnum))
      "Still cons fixnum!"
      "Not cons fixnum")))
WARNING: redefining COMMON-LISP-USER::F in DEFUN
F
CL-USER> (f *g*)
"Not cons fixnum"
CL-USER> *g*
(A . 2)
anonymous
()
Ответ на: комментарий от anonymous
CL-USER> (defparameter *g* (cons 1 2))
*G*
CL-USER> (defun g () (setf (car *g*) 'a))
G
CL-USER> (defun f (x)
  (when (typep x '(cons fixnum))
    (g)
    (if (typep x '(cons fixnum))
      "Still cons fixnum!"
      "Not cons fixnum")))
F
CL-USER> (f *g*)
"Still cons fixnum!"
CL-USER> *g*
(A . 2)
CL-USER> (lisp-implementation-type)
"SBCL"
CL-USER> (lisp-implementation-version)
"1.3.20"
CL-USER> 
ados ★★★★★
()
Ответ на: комментарий от ados

Ява изначально проклята. Хотя теперь гады сделали AOT компиляцию. Когда сделают инкрементную АОТ компиляцию, как в лиспе, и пермиссивную лицензию, как в лиспе - появится предмет для разговора.

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

Схема по дизайну рассчитана на статическую компиляцию, а CL - на проращивание. Racket-а вообще не было, когда я выбрал CL. Плюс разница в скорости, плюс лицензия, плюс лучше отладчик. Т.е. масса причин для выбора CL.

den73 ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

Спасибо за ссылку. Если azelipupenko действительно ко мне обратится, я обязательно попробую воспользоваться этой программой :) Я сам год под такой проработал, и ничего. Если ты не обманываешь работодателя, то нет разницы, есть такая программа или нет.

den73 ★★★★★
() автор топика
Ответ на: комментарий от no-such-file
- Каменщик, каменщик в фартуке белом,
Что ты там строишь? кому?

- Эй, не мешай нам, мы заняты делом,
Строим мы, строим тюрьму.

- Каменщик, каменщик с верной лопатой,
Кто же в ней будет рыдать?

- Верно, не ты и не твой брат, богатый.
Незачем вам воровать.

- Каменщик, каменщик, долгие ночи
Кто ж проведет в ней без сна?

- Может быть, сын мой, такой же рабочий.
Тем наша доля полна.

- Каменщик, каменщик, вспомнит, пожалуй,
Тех он, кто нес кирпичи!

- Эй, берегись! под лесами не балуй...
Знаем всё сами, молчи!
    (В.Я.Брюсов)

Кстати, забавная фамилия. Вроде как Брюс был первым российским масоном, если я ничего не путаю.

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

ну понимаешь, разница есть

когда интенсивно работаешь над проектом, то не задумываешься над тем, что у тебя на десктопе

а когда включён трекер, то ещё и думаешь о том, что на скриншотах выйдет и как бы покрасивее бурную деятельность изобразить, в общем, отвлекаешься от основной задачи :D

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

а есть ещё отзывы и репутация, оправдывать доверие более выгодная стратегия в долгосрочной перспективе

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

Кстати, почему ты взял для основы именно общелисп,...

Общались усиливает качества программиста - умных делает умнее, а ... Короче, погляди на Дениска.

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

Чё сказать-то хотел?

Если проблемы с понималкой, подумай над строкой

WARNING: redefining COMMON-LISP-USER::F in DEFUN

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

Общались

Общелисп. Сраный гуглоправшик (

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

а есть ещё отзывы и репутация

Это другое дело. Но, как известно, репутацию легко испортить. Т.е. сегодня репутация есть, а завтра - упс.

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

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

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

Так что доверять можно только себе.

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

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

Без доверия ты бы до сих пор оставался на уровне примитивных социумов и палки-копалки.

Поэтому заканчивай тут ныть и бздеть. Начинай уже работать как все белые люди. И не надо своим тухлым упадническим пониманием тут пованивать.

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

Когда там Racket перейдет на какой-то новый компилятор? Что-то такое слышал месяца 4 назад, но не очень помню чем все там закончилось.

deterok ★★★★★
()
Последнее исправление: deterok (всего исправлений: 1)
Ответ на: комментарий от deterok

Когда там Racket перейдет на какой-то новый компилятор? Что-то такое слышал месяца 4 назад, но не очень помню чем все там закончилось.

На Chez Scheme. В https://github.com/racket/racket7 свежие коммиты идут постоянно - работают.

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

С таким унылым подходом ты никогда ничего стоящего не создашь.

Самое стоящее, что может создать человек - это человека. Всё остальное мало чего стоит.

Будешь только всю жизнь в своей норе сидеть и трястись, как бы тебя не кинули.

Зачем, когда можно просто работать по законам рынка. Для этого существуют контракты, где закрепляется ответственность сторон. Мой стиль - это не сидеть в норе и трястись. Мой стиль - это не доверять, словно лох, кому-то на словах. Мой стиль - работать на контрактной основе. Если какой-то персонаж отказывается заключать контракт, то всё становится на свой места - я имею дело с балаболом, который надеялся снискать доверия, и кинуть в любой момент. С таким персонажем, естественно, никаких дел быть не может.

Современное благополучие фундаментально основано на вере, что завтра будет лучше, чем сегодня.

Пытаться меня баснями накормить - это такое. Я бы не стал возражать, если бы ты упомянут слово «интуиция». Я бы не стал возражать, если бы ты упомянул слово «интеллект». Но утверждать, что фундамент благолополучия - есть вера в завтрашний день - это уже верх ахинеи.

Без доверия ты бы до сих пор оставался на уровне примитивных социумов и палки-копалки.

Ты коммунист что-ли? Во-первых, палка-копалка никуда не делать. Ей пользуются и по сей день. Во вторых, в основе социума лежит не доверие, а иерархии отношений, образующих систему, в которой члены социума вынужденны что-то делать друг для друга «полезное» и «бесполезное». Причём тут доверие, когда всё так или иначе сводится к деньгам, чтобы выжить, мне не ясно.

Поэтому заканчивай тут ныть и бздеть.

Ага, заканчивай летать в облаках. Доверие - это право. Хочешь доверять - доверяй, не хочешь быть лохом - заключай договора.

И не надо своим тухлым упадническим пониманием тут пованивать.

Это не абстрактное понимание, а опыт.

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

такой весь из себя опытный по части контрактов и всего такого, а рейт $20 в час у тебя почему-то нездоровый ажиотаж вызвал :P

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

такой весь из себя опытный по части контрактов и всего такого, а рейт $20 в час у тебя почему-то нездоровый ажиотаж вызвал :P

Это стёб :-) Я готов работать за $20 в час хотя бы один рабочий день и ничего не сделать :-) Можете мне доверять :-) Но деньги вперёд :-) Лол :-)

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

а где можно посмотреть на ваши предыдущие завершённые проекты? :P

В интернете. Но я не могу дать ссылку, потому что здесь я аноним и не преследую цель набрать рейтинги, как-то себя порекламировать и т.д. Возможно, когда-нибудь создам официальный именной аккаунт. Тогда всё будет открыто.

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

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

Доверие - это право. Хочешь доверять - доверяй, не хочешь быть лохом - заключай договора.

А какая практическая польза от заключённого контракта, если скажем заказчик находится за океаном? Ты полетишь к нему за свои деньги судиться и выбивать бабло в случае чего? Или будешь всегда ограничивать себя только локально досягаемыми заказчиками? Так и ты для них тоже юридически досягаем )

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

А какая практическая польза от заключённого контракта, если скажем заказчик находится за океаном? Ты полетишь к нему за свои деньги судиться и выбивать бабло в случае чего?

Заказчик или работник? Тут речь про контракт с работником. В случае кидка со стороны заморского работника, я никуда не полечу, конечно же. Просто придам огласке, что данный персонаж является недобросовестным кадром. Если речь про заказчика, то я без аванса не возьмусь ни за какую работу.

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

Так ты тот самый аноним-смайлодаун или жалкий подражатель?

Кто такой самый аноним-смайлодаун? Первый раз слышу.

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

И что, он догонит тогда SBCL по скорости?

Похоже, для первого пункта есть уже механизм, SB-C::TYPE-NEEDS-CONSERVATION-P и вокруг, т.е. это именно баг, а не ошибка проектирования. Это хорошо.

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

Смайлик-аноним стал первым пользователем ЛОРа, которого я заигнорил дважды :)

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

И что, он догонит тогда SBCL по скорости?

Не знаю. Но, насколько я понял, у тебя в задумках быть убийцей 1С, а не HIGHLOAD с HA делать, возможно небольшие компромисссы по скорости допустимы.

Ским все равно работает быстрее почти всех скриптовых языков.

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

Я бы не стал делать столь общих утверждений про Scheme, их много разных. Что там у 1С со скоростью - никто не знает, вдруг там полный JIT и натив - я никогда не удосуживался померять (тем более, у меня есть только учебный 1С и я с ним никогда интенсивно не работал).

Вообще я хочу скорость чисто из религиозных соображений. Я хочу «быть лучшим», а не просто «убить 1С». SBCL где-то на нижней границе допустимого по скорости. Нынешний Racket - уже нет.

den73 ★★★★★
() автор топика

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

https://github.com/budden/sbclt/tree/safer-type-derivation-kind-of-works

Тест здесь:

https://bitbucket.org/budden/sbcl-strict-type-check/src/8e81344afb62b999f0bfc...

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

Но нужно ещё доделывать.

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