Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Автор канал по Лиспу
 Аватар для Regrin1
25 / 23 / 2
Регистрация: 10.08.2021
Сообщений: 357

Лисп в качестве встроенного языка

01.02.2022, 23:09. Показов 2672. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые коллеги!
Все мы наверное слышали о встроенных в программу языках программирования. Лисп применяется в таких программах как ИМАКС, АвтоКАД, ещё вроде как в ГИМПе применяют Scheme.
Программа на Лиспе -это ведь по сути полноценная реализация языка обвешанная пользовательскими функциями. Следовательно - теоретически мы можем легко встроить командную строку в программу, что сказочно облегчит написание макросов и плагинов.
У меня появился ряд вопросов.
1) Делал ли так кто-нибудь из вас?
2) Как можно сделать это самому?
3) Как не дать пользователю поломать систему?
4) Известны ли вам примеры уже готовых решений?
5) Как подобное делают в других языках?
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.02.2022, 23:09
Ответы с готовыми решениями:

Лексический анализатор языка лисп
нужно написать лексический анализатор языка лисп

Переполнение стека встроенного языка на сервере
Добрый день, вот такая ошибка Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) ...

Можно ли где то скачать описание встроенного языка 1с 8.3
Описание языка программирования наверно находится в 5 томах, его можно где-то скачать, или оно только в коробках или платно продается?...

32
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
03.02.2022, 16:28
Студворк — интернет-сервис помощи студентам
В той ссылке, если что, написано, что CL - too large, т. е. не очень минималистичен для встраиваемого языка расширений. Это, конечно, так.

В мире Java имена пакетов тоже длинные, но их обычно не выписывают - импортируют, что требуется. В принципе, для лиспа это тоже хорошая идея. Если верить Кенту Питману, пакеты не проектировались с идеей часто использовать двоеточия.

В принципе, пакеты по стандарту можно переименовывать, в том числе добавляя/убирая никнеймы. Впрочем, реализации широко поддерживают нестандартные локальные никнеймы.

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

Но при наличии автодополнения это не проблема.
0
Автор канал по Лиспу
 Аватар для Regrin1
25 / 23 / 2
Регистрация: 10.08.2021
Сообщений: 357
03.02.2022, 16:36  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
В лиспе приходится экспортировать больше символов, чем в языках с "вызовами через точку" - по очевидной причине. Поэтому символам приходится готовиться к тому, что им придётся жить вместе с многими другими символами, имён которых они не знают - поэтому глобальные имена приходится давать более длинные.
А по какой причине приходится экспортировать больше символов?
0
217 / 212 / 8
Регистрация: 09.06.2019
Сообщений: 240
Записей в блоге: 1
03.02.2022, 18:35
Regrin1, с помощью подчеркиваний. так_длинное_имя_кажется_гораздо_короче!
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
03.02.2022, 21:07
Цитата Сообщение от Regrin1 Посмотреть сообщение
А как эта проблема решается в других языках?
Контекстно-зависимым синтаксисом.
Разные подходы можно увидеть в loop, format, квазитировании. Одновременно можно задуматься на тему уникальности изобретенного велосипеда в каждой из них. В scheme есть syntax-rule|syntax-case
CL стандартизировался для переноса существующего коммерческого прикладного кода между изолироваными до него платформами. Поэтому встроенные навороты в нем сделали максимально контекстно-свободными чтобы избегать конфликтов c уникальных синтаксическим сахаром разных продуктов в разных предметных областях. С другой стороны теперь каждый разработчик проекта поменьше максимы сталкивается с дилеммой из крайностей - повторить привычный подход из стандартной библиотеки или написать и самостоятельно поддерживать еще один loop-like.
В рамках полумер можно еще привести стрелки (arrow) характерные тем что проще повторить ставшее стандартом в clojure чем договорится внтури CL
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
03.02.2022, 21:52
Цитата Сообщение от Regrin1 Посмотреть сообщение
А по какой причине приходится экспортировать больше символов?
В языках с точкой импортируешь одно-единственное имя класса, и оно тянет все методы. import C, а потом спокойно пишешь с.foo(), с.bar(), c.baz(), и они не путаются с методами другого класса. Тоже получается разновидность контекстной зависимости. А на лиспе у меня были бы три генеричные функции c-foo, c-bar, c-baz. Префикс не по имени конкретного класса, а по семантике: слова, относящиеся к предметной области "C". Вероятно, им удастся безконфликтно сосуществовать со словами, относящимися к предметной области "D". Так бывает в стандарте: pathname-name - это "имя" в контексте "pathname".
0
Заблокирован
04.02.2022, 09:10
Цитата Сообщение от helter Посмотреть сообщение
C, а потом спокойно пишешь с.foo(), с.bar(), c.baz(), и они не путаются с методами другого класса.
Часто случается так, что нужно импортировать модули для каждого метода, так ка кони могут быть объявлены в разных модулях. Что тоже может порождать путаницу. Для разных типов методы с одинаковым названием могут возвращать разные значения и по-разному принимать входящие аргументы. Нужно запомнить конкретно какие для каждого метода bar() входные параметры и возвращаемое значение. Усложняется это тем, что функция этот метод называется одинаково. То есть, в нём нет уникальности. Допустим вы чаще всего пользуетесь методом bar() для векторов и хорошо знаете как он работает. Такой же метод есть для строк и ещё для нескольких типов. Бьюсь об заклад, что вы всегда будете путать реализацию метода bar() для векторов с реализацией этого же метода для других коллекций.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
04.02.2022, 12:29
Цитата Сообщение от Гай Посмотреть сообщение
Часто случается так, что нужно импортировать модули для каждого метода, так ка кони могут быть объявлены в разных модулях.
Это где? В "обычных языках" класс кусками не импортируется. Если класс импортирован, все его методы сразу доступны.

Цитата Сообщение от Гай Посмотреть сообщение
Бьюсь об заклад, что вы всегда будете путать реализацию метода bar() для векторов с реализацией этого же метода для других коллекций.
Гм. Не могу сказать, что сталкивался с подобной проблемой. В принципе, ясно, что омонимичные методы могут быть никак не связаны друг с другом. Но благодаря статической типизации и одинарной диспетчеризации методов ИДЕ подсказывает и тип объекта, на котором вызывается метод, и справку по методу (хотя бы сигнатуру). (Кстати, поэтому в мейнстримных языках особо ничего запоминать не надо, открыл ИДЕ - и пиши. )
0
Заблокирован
04.02.2022, 13:16
Цитата Сообщение от helter Посмотреть сообщение
Это где? В "обычных языках" класс кусками не импортируется. Если класс импортирован, все его методы сразу доступны.
Rust, например. Абстрактный пример.
Типы String и Vector реализуют метод push. Соответственно для того чтобы конфликтов не возникало нужно писать полный путь, либо импортировать модули и писать что-то типа Satring:ush() и Vector:ush()

Цитата Сообщение от helter Посмотреть сообщение
ИДЕ подсказывает
Я в Vim пишу
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
04.02.2022, 13:25
Раста не знаю. Там что, чтобы написать myVector.push(0), необходимо отдельно явно импортировать push?
0
Заблокирован
04.02.2022, 13:41
Цитата Сообщение от helter Посмотреть сообщение
Раста не знаю. Там что, чтобы написать myVector.push(0), необходимо отдельно явно импортировать push
там нет классов, а есть трейты. да, нужно импортировать трейт, содержащий этот метод
0
Автор канал по Лиспу
 Аватар для Regrin1
25 / 23 / 2
Регистрация: 10.08.2021
Сообщений: 357
04.02.2022, 14:02  [ТС]
helter, Гай, Господа программисты, мы кажется немного отступаем от темы, думаю стоит обсудить этот вопрос отдельно.
0
Заблокирован
04.02.2022, 14:26
Цитата Сообщение от Гай Посмотреть сообщение
там нет классов, а есть трейты. да, нужно импортировать трейт, содержащий этот метод
Вот простой пример.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use std::io::{self, Write} //импортируем трейт Write
 
fn main() {
    
    let mut array = (0..=10).collect::<Vec<u8>>();
    let string = String::from("Привет, Мир");
  
    array.write(&[11,12,13]).unwrap(); //используем метод трейта для записи в вектор
    
    for number in &array {
        print!("{}, ", number);
    }
    
    println!("");
  
    io::stdout().flush().unwrap();
    io::stdout().write(string.as_bytes()).unwrap(); //используем метод для записи в stdout
    
}
0
Автор канал по Лиспу
 Аватар для Regrin1
25 / 23 / 2
Регистрация: 10.08.2021
Сообщений: 357
04.02.2022, 14:34  [ТС]
Внимание! Для обсуждения громоздкости Лиспа создана отдельная тема: Почему говорят, что Common Lisp громоздкий?
Пожалуйста, давайте немного оглянёмся назад и кратко, тезисно повторим в новой теме всё сказанное тут, последовательно и с самых основ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2022, 14:34

Созданеи элементов справочника средствами встроенного языка. 1с 8.1
Как средствами языка создать элемент справочника и заполнить его? нагуглил вот это http://buch77.h12.ru/?id=20 сделал вот так но...

Как Заполнить Таб. Часть В 1с 8 При Помощи Встроенного Языка
Здравствуйте. Очень надеюсь на вашу помощь. В общем задача состоит в следующем: 1 вот примерно такая таблица должна формироваться...

Имеются следующие описания: Язык= (Паскаль, Ява, Бейсик, Фортран, Лисп). По русскому названию языка вывести английский
Имеются следующие описания: Язык= (Паскаль, Ява, Бейсик, Фортран, Лисп). По русскому названию языка вывести английский эквивалент ...

Сохранение встроенного Word документа в Excel в качестве нового документа
Добрый день, уважаемые форумчане! Ниже представлен код, который открывает встроенный Шаблон .docx , вставляет в закладки значения из...

javascript в качестве main языка?
подскажите стоит ли javascript делать в качеств основного языка программирования и можно ли устроиться на хорошо оплачиваемую работу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru