Добрый вечер!
Теперь всё ясно: Common Lisp - это кал. О чём же теперь мечтать перед сном? Об обратимом препроцессоре? Это можно, но как-то мало. Хочется мечтать о большем. Например, о таком:
1. Одно понятие пространства имён. В "обычных" языках есть пространство имён как namespace, а есть виртуальное пространство имён, которое возникает внутри данного scope. Или пр-во тех имён, которые можно писать после точки, если переменная имеет тип. Обобщить до одного понятия, придать средства управления.
2. Паскаль - порядка 10000 строк в секунду. Хороший мальчик. Синтаксис должен быть простым для компьютера и читаемым для человека. При этом должна быть возможность делать быстрый и компактный код. Поэтому - строгая типизация. Есть тип variant (можно назвать его t для краткости) - он делает Паскаль вполне похожим на лисп по гибкости работы с типами, при условии, что в таком стиле написаны библиотеки.
3. Сборку мусора - в мусорное ведро вместе с JIT. Всё это - разводка на бабло, чтобы покупали новое железо. Вместо этого безопасность дадут декларации работы с памятью: function foo(caption:string):fresh(widgets.form); Что-то мне подсказывает, что весьма простым способом можно с помощью таких деклараций и выводов из них построить работу с памятью без сборщика мусора и с высокой степенью автоматизации (хотя могу ошибаться).
4. Язык должен быть сначала императивным, а потом уже можно строить всё остальное. Для функциональщиков покатит декларация pure. Если в функции f вызываются только чистые функции, то и сама эта функция чиста. Значит, декларацию pure легко проверить на этапе сборки. Соответственно же, декларации const тоже можно проверить (это ещё С умеет делать).
5. Встроенный тип variant. Один, а не 10, как в "некоторых других языках".
6. Макросы не хуже лиспа. А иначе - какой смысл.
7. Конечно же, генерация исполняемого кода в рантайме. Можно через .so, как GCL.
8. Встроенный FFI типа CFFI-GROVEL. Конечно, только С.
9. read-print как в лиспе. Ну и eval к ним (т.е., code=data)
10. Вменяемый синтаксис, но простой. Представление code=data - это промежуточное представление. Для человека оно преобразуется по простым, но гибким правилам. Ну и что-то вроде readtable, как в лиспе. А может,что-то более стройное и менее хакерское.
11. Не ОО. функции, примитивные типы и структуры. И хватит. Вместо ОО - функции как объекты первого класса. ОО должно быть маленькой и лёгкой библиоткой (стиля JavaScript, наверное). CLOS - это пример как делать не надо. Про С++ лучше вообще не говорите.
12. Замыкания... Наверное, состояние в них должно быть явным.
13. Встроенный codewalker.
14. Наверное,кроссплатформенность. Причём, в определении платформы должны содержаться и базовые элементы работы с GUI. Платформа может быть в чём-то неполной (например, не иметь примитивов для работы с файловой системой, eval или compile) и это не должно влиять на общую работоспособность - пусть работает то, что может работать.
Эх, мечты-мечты... Ладно, спокойной ночи.