?
 

uCLisp

About Уничтожить всех уродов

Previous Entry uCLisp 12 июл, 2015 @ 20:29 Next Entry
В общем, если вам нужны списки переменной длины, содержащие данные заранее неопределённого типа (скажем, могут быть вперемешку строки и интегеры), то старый добрый Си скажем вам - "фиг тебе, это невозможно". А Лисп скажет - "да легко ваще".

Хочу тут автоматизировать одну процидурку инициализации некоего устройства, и пришёл к выводу, что лучше уж я допишу "Лисп внутри Си" и переложу самую занудную часть задачи на могучие плечи самодельного процессора списков :) Думаю, он мне ещё не раз пригодится.

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

Два дня разбегаться, чтоб потом за 5 минут долететь!
Оставить комментарий
[User Picture Icon]
From:psilogic
Date:Июль, 12, 2015 18:30 (UTC)
(Link)
если все равно надо дописывать, то с таким же успехом можно дописать в си++ какой-нибудь свой список или наполовину свой - без подражания лиспу
[User Picture Icon]
From:kincajou
Date:Июль, 12, 2015 18:47 (UTC)
(Link)
во-первых, это не ++
во-вторых, подражание не от хорошей жизни, а потому, что лисповый подход мне реально нравится. А вот STL - как-то "не пошло"
[User Picture Icon]
From:psilogic
Date:Июль, 12, 2015 18:49 (UTC)
(Link)
ну если не ++ то stl отпадает автоматом

а что из лиспового подхода ценно например?
[User Picture Icon]
From:kincajou
Date:Июль, 12, 2015 19:01 (UTC)
(Link)
"плоский" синтаксис, например. Один и тот же подход для всего, за очень редкими неизбежными исключениями
[User Picture Icon]
From:kincajou
Date:Июль, 12, 2015 20:07 (UTC)
(Link)
кстати, сам факт того, что в С/С++ надо ДОПИСЫВАТЬ СВОЮ РЕАЛИЗАЦИЮ списков, когда в Лиспе она была изначально (потому что сам язык такой), уже кое-что интересное говорит :) А списки - это такая банальщина
[User Picture Icon]
From:psilogic
Date:Июль, 12, 2015 22:52 (UTC)
(Link)
реализацию списков как раз не надо, поскольку есть std::list.

затык в том, что тебе понадобился специфический тип, который станет элементом списка: то-ли-целый-то-ли-строка - но такой тип можно реализовать миллионом способов, соответственно как может кто-то заранее знать, какой вариант нужен тебе?

учитывая, что даже свой список пишется средствами чистого C часа за два и средствами С++ - за час - тащить туда целую идеологию (LISP или чего еще) - это как из пушки по воробьям лупить :)
[User Picture Icon]
From:kincajou
Date:Июль, 13, 2015 03:54 (UTC)
(Link)
соответственно как может кто-то заранее знать, какой вариант нужен тебе?

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

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

Вместо того, чтобы взять инструмент и решать с его помощью прикладную задачу, надо сначала "доработать напильником", чтобы обойти встроенные ограничения - то есть, не воспользоваться встроенными возможностями, а обойти ограничения! Это ли не странно?

Но у всего есть своя ниша, я не спорю. На Лиспе, например, неудобно работать с бинарными данными - битовые поля и т.п. реализовать можно, но через изврат (особенно если хочется аппаратно-независимой переносимости -- но и на Си в таких условиях могут быть проблемы, просто не такие). Поэтому я и сочиняю гибрид. Чтобы не терять возможность выстрелить себе точно в ногу из динамически определённого пистолета.
[User Picture Icon]
From:kincajou
Date:Июль, 12, 2015 21:04 (UTC)
(Link)
именно так!
[User Picture Icon]
From:ping_ving
Date:Июль, 13, 2015 15:38 (UTC)
(Link)
> если вам нужны списки переменной длины, содержащие данные заранее неопределённого типа
То у вас в дизайне, скорее всего, дыра.
[User Picture Icon]
From:kincajou
Date:Июль, 14, 2015 00:20 (UTC)
(Link)
Вовсе нет. Обычная ситуация из реального мира.
[User Picture Icon]
From:ping_ving
Date:Июль, 14, 2015 05:51 (UTC)
(Link)
Что-то не придумывается.
Причём это ведь мало запихать, с этим потом ещё и работать придётся.
[User Picture Icon]
From:kincajou
Date:Июль, 14, 2015 07:47 (UTC)
(Link)
при разборе данных, например, с консоли. На этапе компиляции мало что известно про то, что там напечатают очумелые ручки пользователя.
[User Picture Icon]
From:ping_ving
Date:Июль, 14, 2015 10:50 (UTC)
(Link)
Пользователь херачит руками по телетайпу.
От этого получаются беспорядочные символы.
Можно потом это, конечно, разбирать и нарезать на лексемы (возможно, неявные).
Но это один хрен будет типом "лексема".
(Оставить комментарий)
Top of Page Разработано LiveJournal.com