LINUX.ORG.RU

Guile emacs умеет в код на scheme. Тебе нужно либо пилить кросс-ffi меж елиспом и sbcl, либо общаться с sbcl s-выражениями с помощью пайпов или сокетов.

Сорян, в емаксе не силён. Вопрос удваивается.

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

Классы он мне напишет, а какой использовать, дай пример.

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

Во-первых, есть версии EMACS на CL, во-вторых, в Яре есть интерфейс для SLIME и встроенный EMACS на CL с интерфейсом на tcl/tk. До продакшена далеко да и на EMACS не очень похоже. Хотя я не знаю, что такое EMACS Widget и у tcl/tk проблемы с интернационализацией.

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

Не понял, какая рекурсия?

Рекурсия которая ограничена вот этой переменной max-specpdl-size, я её уже на 200000 установил и у меня теперь stack overflow in C code.

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

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

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

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

saufesma
() автор топика

соединить emacs widget с sbcl

что здесь ты понимаешь под «emacs widget» ? откуда и как им управлять, что значит «соединить» ?

например, xwidget-emacs – встроить gtk виджеты в емакс окно через Xembed.

ещё есть emacs widget library: пример GUI, внутри самого емакс. с формой типа диалог, поля, радиокнопки.

пишем интерфейс на emаcs

как выглядит и где работает этот интерфейс? внутри emacs, то есть, писать его надо на elisp типа emacs widget library? или внешним виджетом, типа xwidget-emacs?

писать на elisp или common lisp? внешним приложением на cl, внешним любым другим встраиваемым приложением типа Xembed, или скриптом/модулем на elisp внутри emacs?

а обработчик вызывает код на sbcl и уже там происходит вычисление кода, common lisp кода.

какого кода? как передаётся? как эти модули общаются между собой?

посмотри, например, на SLIME, там где через tcp/ip сокеты передаётся код из SLIME внутри емакса в REPL на стороне sbcl.

или на Emacs org-mode babel (хабр ещё , где можно писать «блоки кода» на elisp/common lisp/чём угодно, и через EIEIEO и переменные на елиспе эти переменные передаются в и из блоков кода.

например, вот здесь через org-mode запускается скрипт на питоне, в духе LitProg

обрати внимание на места вызова «блоков кода» с переменными и параметрами: :var вроде

определение

#+NAME: ___DieGanzeWahrheit
#+BEGIN_SRC emacs-lisp :var wahrheit=___DieWahrheitIst :exports none :eval no-exports
(print wahrheit)
#+END_SRC

и вызов с нужными параметрами:

Die Wahrheit ist src_emacs-lisp[:var wahr=__DieWahrheitIst]{(print wahr)}.

или вот так:

#+CALL: <name>(<Argumente>)
#+CALL: __DieGanzeWahrheit()

ниже пример вызова скрипта из «блока кода», результат – в таблицу:

#+NAME: py4tblformula
#+BEGIN_SRC python -n -r -k :var arg1=0 arg2=0 :exports none :eval no-export
return (arg1 * (arg2**2))**(1/2)
#+END_SRC

| Wert 1 | Wert 2 | Ergebnis |
|--------+--------+----------|
|      1 |      2 |          |
|      2 |      4 |          |
|      3 |      6 |          |
|      4 |      8 |          |
|      5 |     10 |          |
#+TBLFM: $3='(org-sbe "py4tblformula" (arg1 $1) (arg2 $2));%.2f

теперь тебе нужно найти в исходниках org-mode место, которое отвечает за вызов и исполнение «блоков кода» по C-c C-c с подстановкой нужных параметров-переменных этих «блоков кода» :var, окружение

далее можно через сокеты, или через какую-то шину типа 0mq передавать S-выражения, чтобы их исполнить на другой стороне(в sbcl).

потом получить от неё результат, опять же в виде S-выражений и передать их назад в Elisp.

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

в общем:

  1. посмотри в исходники SLIME, Emacs org-mode babel исполнение «блоков кода» по C-c C-c – как сделано взаимодействие между емакс частью и sbcl частью

  2. посмотри на EIEIO (CLOS для Elisp) или ту часть передачи переменных в Emacs org-mode babel между емаксом и прочим.

  3. фактически нужна какая-то шина передачи сообщений, такой Enterprise Server BUS. на S-выражениях и сокетах. через EIEIEO, 0mq или тупо через сокеты текстом.

  4. возьми тот же Emacs org-mode babel (встроен по дефолту в Emacs >26 версии) + настрой туда PlantUML (добавляешь jar, прописываешь пути и конфиги, см. на сайте Emacs org-mode babel c примерами настроек ).

и напиши в *.org файле для PlantUML sequence diagramm, для описания протокола. когда чего куда и как передаётся. если у тебя есть компонента на emacs/elisp, со стороны sbcl и нечто (сокеты или пайпы или 0mq) между ними, и какие-то обёртки для синхронизации данных (типа EIEIEO, или ещё чего).

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

чтобы было понятно чего куда и как именно передаётся и взаимодействует.

примеры похожего кода есть где-то там: SLIME, Emacs org-mode babel выполнение по C-c C-c «блока кода» с переменными-параметрами, Emacs widget library, xwidget-emacs через Xembed, eieieo

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

ещё посмотри у Rigidusкак сделан сайт и исходники сайта – те, которые написаны в org-mode.

там есть довольно занятные примеры метапрограммирования.

когда код в «блоке кода» оригинальном, метапрограммы org-mode отквоченный, отцитированный выполняясь по C-c C-c порождает «правильный» «блок кода», программы, – который исполняя ещё раз – получаем результат.

то есть, код на org-mode блоке кода строит код на org-mode или elisp или любом другом языке, который строит итоговый результат.

блоки кода, написанные на common lisp можно непосредственно выполнять в sbcl.

тебе тут нужно понять на примерах (которые ТЕБЕ надо написать), как должен выглядеть генерируемый для исполнения в sbcl код. и кто, как и где его должен генерировать.

среди презентаций у rigidus – ссылка на презентацию по литературному/грамотному программированию – самое простое его описание, что я видел

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

пишешь на Emacs org-mode babel кучку примеров «блоков кода», которые делают вот это:

пишем интерфейс на emаcs

Emacs widget library? или запускалку через C-c C-c «блоков кода» с параметрами-переменными? или внешнее окно через xwidget-emacs и Xembed? или как должен выглядеть и работать такой «интерфейс на емакс»?

например, в том же PlantUML можно рисовать прототип GUI

поэтому первым делом настрой примеры PlantUML+Emacs org-mode.

и далее нужно понять, какие диаграммы рисовать.

начинай с диаграммы прецедентов, с плящущими человечками (абстрактные пользователи-actors запускают абстрактные фичи твоей программы).

затем переходи к прототипам гуя

затем распиши диаграмму последовательности чтобы понять, откуда куда управление передаётся (протокол клиента-сервера, и заодно, какие данные там передаются для выполнения на стороне SBCL)

затем можно расписывать другие диаграммы UML пока не станет понятно, что с чем и как именно взаимодействует, в каких форматах и протоколах, как синхронизируются состояния.

или переходи сразу к примерами с метапрограммированием на «блоках кода»

а обработчик вызывает код на sbcl

какой обработчик? где? на стороне emacs или ещё где? к какому модулю емакса это относится – SLIME, Emacs org-mode C-c C-c исполнение блоков кода, EIEIEO и некая «шина данных» по которой ходят S-выражения со значениями :var переменных «блоков кода» ?

в общем, распиши на диаграммках в PlantUML поподробнее

и уже там происходит вычисление кода,

где? на стороне sbcl? на стороне SLIME? на стороне клиента или сервера модуля, встраиваемого в Emacs?

common lisp кода.

ну то есть: если в Emacs org-mode по :var метапеременным блоков кода могут ходить произвольные текстовые данные, или S-выражения на elisp-е, например те же почти полноценные объекты на EIEIO-шном аналоге CLOS-а

то у тебя в результате этого «рисования на примерах» должны появиться ответы на вопросы:

  1. как синхронизируется elisp и cl часть? кто и как запускает эти события?

  2. какой физически транспорт, протокол, синхронный или асинхронный? сокеты или шина типа 0mq? или ещё чего?

  3. сами данные в каком виде? S-выражения CL, S-выражения общие для cl и elisp, CLOS, EIEIO, какие-то предопределённые форматы «метаобъектного протокола», рефлексия, интроспекция?

  4. результат вычислений: как передаются в sbcl часть исходные данные, как вычисляются на стороне sbcl, как отсылаются назад в emacs?

SLIME/tramp или C-c C-c в Emacs org-mode babel или что-то ещё, вручную?

в общем – распиши примеры и начни рисовать картинки для наглядности.

неясные места – расписывай подробнее и на других моделях.

потом ищи ясные места в исходниках org-mode, slime, примерах на метавычислении *.org блоков кода, например.

и дорисовывай себе эти картинки в PlantUML (исходный текст для которого запускай через Emacs org-mode babel) пока не закроешь себе все неясности.

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

вот тут, в ob-lisp.el видно, что происходит по C-c C-c : вызов org-babel-execute:lisp запускает swank:eval-and-grab-output с содержимым буфера – «блоком кода», при этом передаёт ему переменные :var через PARAMS. SWANK – это часть SLIME, которая на стороне Emacs (клиент) коннектится с серверной частью (собственно, SWANK и его протокол) на стороне SBCL, через tcp/ip сокеты, говорит туда команду - S-выражение выполняемое, получает выхлоп и шлёт назад.

в итоге выделенный код из буфера емакс через SLIME передаётся через SWANK исполняется на стороне SBCL.

дальше зависит от того, что и как ты хочешь делать. распиши на примерах подробнее. нарисуй наглядные картинки в PlantUML. и опиши это в нормальном лабораторном журнале через Emacs org-mode babel и литературное програмирование, для воспроизводимости и элементарной скриптуемости.

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

Были слухи, что большевики только лишь воплотили реформу языка, которая была задумана до них.

да, вышло как с февральской революцией. не большевики её начали. они постфактум провели свою вторую уже после того как либерасты провели первую (выпустив предательский приказ №1 про то, что команды офицера можно не исполнять, из-за чего в 18 году и получился балаган, в который потом большевики эдак плавно вписались, точно так времечко подгадав).

если коротко: упрощение началось от этих вот либерастов. которые не чувствуя основ языка (корнесловие и смыслословие; есть тетенька-филолог, которая объясняет сложные правила русской грамматики не как талмуд из правил и исключений которые «это нельзя понять, это нужно запомнить» – а логически объясняя. но это объяснение работает только тогда, когда есть «чувство слова», знание и понимание корней и их способов изменения: тогда все эти «исключения» легко и просто проверяются, как с падением редуцированных гласных, по склонениям и спряжениям, например) — так вот, которые не чувствуя основ языка начали чего-то там упрощать и запрещать дабы облегчить «написание», затруднив при этом однозначное «понимание», для точной передачи смысла (семемы).

потом в двадцатые годы предлагали перевести всё на латиницу: «это ж сколько металла в печатающих машинках можно сэкономить» – но Сталин запретил, одной своей резолюцией (в духе Хрущёву: «уймись дурак») – вот эпическая переписка

вот, кстати, ссылка в орфовики на орфография.орг про латиницу.

там же, в орфовики – есть про упрощение, реформы орфографии (и их недостатки), латинизацию.

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

например, конструируют упрощённый плановый русский – конланг aka «конструируемый язык», упрощённый.

кстати, форум по конлангам, где например есть проекты латинизации: наиболее оптимальная русская латиница – там если покопаться, есть и кириллические конланги ; где-то там есть ссылка на сайт и стихи Пушкина, например латиницей

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

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

с «плановым русским» плановый русский – есть хотя бы логика какая-то, зачем он вообще нужен.

я, кстати, наткнулся на этот «плановый русский» и орфовики как подборку интересных исторических материалов когда искал материалы по «УТР», «упрощённому техническому русскому». идея в том, что на УТР можно писать исполняемые спецификации, которые потом распознавать легче будет. и полуавтоматически их транслировать в нечто модельное. типа BDD и Gherkin, cucumber и прочее.

тезис в том, что опять же – через литературное грамотное программирование вполне разумно делать такую вот «исполняемую документацию», «исполняемые спецификации». только нужно взять нечто более функциональное чем просто org-mode – например, erudite на cl, или skribilo в guile – в которых сам single source WEB документ хранится в S-выражениях.

которые потом автомагически можно транслировать в/из такой конланг типа Gellish English, Simple English – только упрощённый, конструируемый, плановый русский.

теми же макросами лиспа – в skribilo например, можно написать свой AST reader/writer на той же схеме, или макросов накрутить. и обрабатывать как угодно – структурно редактируя.

в Emacs org-mode теоретически это тоже возможно. см. например как Rigidus пост-процессинг делает.

но довольно трудоёмко, проще своё litprog средство расширить так, как тебе нужно.

например, на Lua – скриптуется NeoVim и TextAdept (SciTe виджет + синтаксическая раскраска), довольно понятный и простой API буферов (в отличие от емакса). хотя, перечитывая исходники того же org-mode видно что даёт лисп в качестве языка макросов – более простую обработку структурных выражений, всякие там save-excursion и прочее. то есть, лисп тут тупо более удобен, чем императивщина.

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

про полутораграфическую систему прочитай, например. она хотя бы логично устроена.

там кстати, (в орфовики али на лингвофоруме) где-то была ссылка на исторические материалы. латиницу времён великого княжества литовского.

тексты довольно просто читаются. и видно всю чужеродность латиницы-то.

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

например, конструируют упрощённый плановый русский – конланг aka «конструируемый язык», упрощённый

вот ради чего это всё []:

«Простая речь», имея полную однотомную грамматику и высокий уровень совместимости с русским языком (можно даже писать тексты на «простой речи», правильные с точки зрения официального русского языка!), была бы неплохой альтернативой эсперанто (грамматика 1910 года на 352 страницах), а среди славян - и интерлингве (грамматика 1955 года на 118 страницах).

то есть: сделать конструируемый славянский эсперанто.

ради чего нужна твоя форма записи (треды про кирилатиницу и кои-7) – я так толком и не понял. какое-то телеграфное ДКОИ получается же.

а тоже могло бы быть «эсперанто среди языков программирования».

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

Да и были прецеденты. С 60-х годов в союзе пытались сделать русские языки и системы программирования. И ничего из этого не вышло. Во-первых, всё равно всё копировали с запада. А во-вторых, потому что отставание было на десятилетие или больше.

не совсем так. примерно во времена алгола как раз всё нормально было с русским языком в программировании. наверное, потому что из-за двухэтажных W-грамматик Вейнгаардена, на которых описывался алгол-68 (которые позволяли задавать не только синтаксис, но и семантику, например, проверку типов) – двуязычный интерфейс прикручивался элементарно, и даже в европейском стандарте были примеры двуязычности английский/немецкий. логично это расширить ещё и на русский, тем более очевидно как.

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

то есть, возможно было бы сделать гомоиконный алгол. семантика у него кстати, тоже была довольно гибкая. например, call-by-name. или примеры на rosettacode про замыкания, продолжения. или в эль76 реализация компонентной архитектуры и модулей на замыканиях и продолжениях.

так что я не сказал бы, что копировать вообще имело смысл. ну выиграли 10 лет в 70х, дальше что? дальше вместо развития этого вот технологического стека, который было понятно как развивать начали тупо копировать OS/360 ради его математики – который непонятно как развивать.

А во-вторых, потому что отставание было на десятилетие или больше.

именно потому и получилось отставание, что принялись слепо бездумно копировать – без осмысления, как с алголом. в итоге отставание не уменьшилось, а только усилилось. и тех целей, ради которых приняли решение копировать – тоже не добились, в долгосрочной перспективе, лет через 20-30, когда технологический стек OS/360 = ЕС закончился, а нового своего а не содранного взамен – тупо не появилось.

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

Приходи, пожалуйста, на вече.программирование-по-русски.рф. Ты тут анонимус, тебя легко потерять.

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

ради чего нужна твоя форма записи (треды про кирилатиницу и кои-7) – я так толком и не понял. какое-то телеграфное ДКОИ получается же.

Чтобы избежать проблемы расширения знакового набора. Её решают либо через utf-8 (как бы плавный переход, но на самом деле делать внутреннее представление Utf-8 - это вечные грабли), либо через расширение строки (очень жёстко и неплавно), либо через добавление новых строковых типов (усложнение системы, те же грабли, вид сбоку). Хотелось этого избежать, но похоже, что не получается.

Впрочем, тема не та.

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

ссылку на эту тётеньку-филолога?

Рябцева Свѣтлана Леонидовна, подборка на крамоле: и материал по ссылкам как калечили русский язык в XX веке, про ОПГ в филологии, почему не любят в школе русский язык (конечно же: если не чувствовать корни и смыслы, словоформы верные и неверные – то только и остаётся зазубривать исключения безо всякой системы. что есть вкорне неверный подход от ОПГ в филологии).

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

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

среди тех же изобретателей транслита латиницей – есть биективная, а есть не однозначная. есть эргономичная, которая читается легко – и есть такая (условно польская), где нужно делать над собой мозговое усилие, чтобы понять как этот звук передать латинскими буквами, не эргономичная и не удобная для запоминания.

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

какими же?

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

Спасибо за тётеньку.

Нет, я вообще говорю о транслитерации латиницы кириллицей. На яролите я уже и так пишу сейчас в A2. Это ужасно, конечно. А тут речь идёт о том, чтобы репресент латин цшарацтерс ин цыриллиц. Если английский при этом будет уродоваться, то мне его и не жалко. Наоборот, посмеёмся над ним.

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

Я не ожидал таких развёрнутых ответов, спасибо, но на это

именно потому и получилось отставание, что принялись слепо бездумно копировать – без осмысления, как с алголом. в итоге отставание не уменьшилось, а только усилилось. и тех целей, ради которых приняли решение копировать – тоже не добились, в долгосрочной перспективе, лет через 20-30, когда технологический стек OS/360 = ЕС закончился, а нового своего а не содранного взамен – тупо не появилось.

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

Когда появится ваша первая статья на эту тему, кастаните меня, я с большим удовольствием прочту её, даже если я не всё там пойму.

Держу за вас скрещенные пальцы.

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

тоже не добились, в долгосрочной перспективе, лет через 20-30, когда технологический стек OS/360 = ЕС закончился, а нового своего а не содранного взамен – тупо не появилось.

В проекте Буран участвовал академик который отвечал за, ключевые слова автоматизированное управление, электроника, микроэлектроника, его фамилию не помню, но уверен можно найти на просторах интернета. В 90-е он обивал пороги министерств и пытался привлечь к проблеме технологического стека. Он говорил, что существуют тупиковые направления в разработке микропроцессоров, ну и далеко идущие соответственно.

Я вот к чему, навряд ли вы найдёте его статьи в свободном доступе, вам просто необходимо попасть в 1-й читальный зал Российской Государственной Библиотеки, для этого необходимо иметь звание или академика, или профессора, и не совсем уверен про кандидата наук. Он определённо печатался, и не исключено, что разработал методологию определения направлений разработки микропроцессоров. Но и много разных других вкусностей в этой области.

Беритесь за тему не пожалеете.

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 1)
1 августа 2020 г.

обращаемся к sbcl через slime в emacs

Ситуация: запущена slime-сессия, нужно достучаться до sbcl, к которому она подключена:

(require 'cl)
(defun sbcl (sbcl-code)
  (slime-eval `(cl:eval (cl:read-from-string ,sbcl-code)) "CL-USER"))

(sbcl "(+ 1 2)"); будет вычислено с помощью sbcl

Теперь бы ещё понять, как (до)определить org-babel-execute, чтобы можно было стандартным образом вычислять блоки

#+BEGIN_SRC lisp
...
#+END_SRC
shalaev
()
Ответ на: обращаемся к sbcl через slime в emacs от shalaev

всё проще

Если не забыть (lisp . t) в списке аргументов функции org-babel-do-load-languages:

(org-babel-do-load-languages
 'org-babel-load-languages
 '((emacs-lisp . t)
   (lisp . t)
   (sh . t)))

то вышеупомянутые проблемы с org-babel-execute исчезают, и блоки вроде

#+BEGIN_SRC lisp
(some-function-defined-in-sbcl)
#+END_SRC

вычисляются правильно.

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