LINUX.ORG.RU

Emacs 31.1

 ,


0

4

В этом выпуске детище RMS порадовало нас следующим:

  • поддержка управления мышью в терминале (хотя по мнению автора новости, лучше терминал запускать в Emacs, а не наоборот);
  • изменение порядка загрузки конфигурации: теперь сначала site-start.el потом early-init.el;
  • обновление Org до версии 9.8;
  • обновление стандарта Unicode до версии 17;
  • поддержка su-rs и sudo-rs в Tramp;
  • огромное множество изменений и улучшений во встроенных пакетах, языке Emacs Lisp и доступных режимах.

Для тех кто пока не в курсе, Emacs это программная реализация LISP-машины (диалект Emacs Lisp) с поддержкой нативной компиляции на лету и невероятный разнообразием модулей и пакетов, на ней реализованных (клиента ЛОР пока нет :) – в том числе и один из лучших текстовых редакторов.

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

>>> подробнее

★★★☆☆

Проверено: hobbit ()
Последнее исправление: unfo (всего исправлений: 2)
Ответ на: комментарий от monk

Это не системщина. Системщина - это либо ядра ОС с драйверами, либо средства разработки типа компиляторов. Спорный вопрос, можно ли отнести СУБД к системщине. Ну, пусть будет.

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

А я где-то утверждал, что на лиспе пишут системщину?

Впрочем, системщину тоже пишут: ОС Mezzano.

А на сишке системщину пишут только там, где на других языках код не принимают. В любых других местах обычно или Си++ или Раст.

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

Куда уж больше выразительности? Лисп - это почти единственный язык, в который ООП изначально добавили не переписывая компилятор.

И сейчас ООП Лиспа на голову выше, чем используемое массово. Потому что можно написать функцию, тело которой зависит от класса не только первого аргумента. Можно изменить класс объекта. Можно легко добавить для любого класса код, который будет вызваться перед или после исходного кода.

Замыкания в Лиспе были с рождения, до популярных языков доползли только пару десятков лет назад.

Может и нормальное ООП через ещё десяток лет из Лиспа до остальных языков дойдёт.

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

Да-да, конечно. И обьектно-ориентированное программирование в лиспе лучшее, и функциональное, и логическое, и какое угодно другое. Только сам Лисп остался разве что в имаксе и в поделках.

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

Я слышал, через этот редактор можно даже в battletoads поиграть.

Зато из этого редактора невозможно выйти по ESC.

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

Лисп - это почти единственный язык, в который ООП изначально добавили не переписывая компилятор.

Перл ещё.

Но Перл — это в некотором роде противоположность лиспа; в то время как у первого минимальный синтаксис, у перла он просто максимально кудрявый.

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

Перл ещё.

Я же пишу «почти». Ещё Форт есть.

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

Так именно из-за выразительности. На Лиспе очень сложно писать проекты большими коллективами. Поэтому для больших проектов будут брать Яву с километрами бойлерплейта или ещё более куцый Го. Или 1С. Чтобы открыв любой файл, можно было сразу понять, что там написано.

А на Лиспе каждый может сделать себе язык под задачу практически с любым синтаксисом. И вот это Лисп:

(with-html-output (*http-stream*)
  (:h4 "Look at the character entities generated by this example")
   (loop for i from 0
         for string in '("Fête" "Sørensen" "naïve" "Hühner" "Straße")
         do (htm
             (:p :style (conc "background-color:" (case (mod i 3)
                                                    ((0) "red")
                                                    ((1) "orange")
                                                    ((2) "blue")))
              (htm (esc string))))))

И вот это тоже Common Lisp:

defun factorial (x)
  if {x < 1}
    1
    {x * factorial{x - 1}}
monk ★★★★★
()
Ответ на: комментарий от monk
(ecase (tcp-connection-state connection)
        (:syn-sent
         ;; Active open
         (cond ((and (logtest flags +tcp4-flag-ack+)
                     (logtest flags +tcp4-flag-syn+)
                     (eql ack (tcp-connection-snd.nxt connection)))
                ;; Remote has sent SYN+ACK and waiting for ACK
                (initial-rtt-measurement connection)
                (setf (tcp-connection-state connection) :established)
                (setf (tcp-connection-rcv.nxt connection) (+u32 seq 1))
                (setf (tcp-connection-snd.una connection) ack)
                (when (not *netmangler-force-local-retransmit*)
                  (tcp4-send-packet connection ack (tcp-connection-rcv.nxt connection) nil))
                ;; Cancel retransmit
                (disarm-retransmit-timer connection)
                (disarm-timeout-timer connection))
               ((logtest flags +tcp4-flag-syn+)
                ;; Simultaneous open
                (setf (tcp-connection-state connection) :syn-received
                      (tcp-connection-rcv.nxt connection) (+u32 seq 1))
                (when (not *netmangler-force-local-retransmit*)
                  (tcp4-send-packet connection ack (tcp-connection-rcv.nxt connection) nil
                                    :ack-p t :syn-p t))
                ;; Cancel retransmit
                (disarm-retransmit-timer connection)
                (disarm-timeout-timer connection))

это разве можно читать?

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

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

bread ☆
()
Ответ на: комментарий от monk

Яву с километрами бойлерплейта
сразу понять, что там написано

1С. Чтобы открыв любой файл, можно было сразу понять, что там написано

А можно сразу понять открыв какой-нибудь файл БСП?

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

А можно сразу понять открыв какой-нибудь файл БСП?

Да. Там единственное, что раздражает — явовский стиль наследования/делегирования, когда чтобы найти, что делает Объект.Метод надо сначала по коду выяснить какой тип у Объект, а потом продраться через несколько уровней наследования, чтобы найти исполняемое тело метода.

Когда был 1С 7.7 с процедурным стилем, было проще.

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

Пытаюсь понять, чем это от явы отличается.

Тем, что можно писать нормальные макросы. И тем, что есть объектная система, для которой не надо писать фабрики, синглтоны и визиторы, так как эти действия делаются тривиально штатными средствами.

Ещё нормальной арифметикой (рациональные числа рациональные, а не округлённые до двоичной дроби с заданной точностью). И возможностью в обработке исключения продолжить выполнение работы (например, при получении IOException можно продолжить работу с файлом после устранения того, что помешало).

А скобки… Можно прикрутить любой интерфейс: хоть отступы вместо скобок как в https://github.com/rebcabin/readable-lisp/blob/master/factorial.lisp хоть явовские конструкции. Беда в том, что когда можешь это сделать, уже привык к скобкам и оно уже не надо. Я сейчас написал Лисп с альтернативным синтаксисом:

english()
doors = make-vector 100 #f

for
  $ step
    in-range 1 101
  for
    $ number
      in-range (step - 1) 100 step
    doors[number] := not doors[number]

for
  $ number 100
  displayln
    format "Door ~a ~a"
      number + 1
      if doors[number] "open" "closed"

(https://rosettacode.org/wiki/100_doors#Adina)

Так всё равно никому кроме меня не нужен.

Вот про преимущества Лиспа: https://habr.com/ru/articles/143490/

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

Но Перл — это в некотором роде противоположность лиспа; в то время как у первого минимальный синтаксис, у перла он просто максимально кудрявый.

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

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

Вот как получается – минимальный синтаксис = слишком многа букф, максимальный синтаксис = слишком мало букф. Люди выбирают нечто среднее.

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

Вот как получается – минимальный синтаксис = слишком многа букф … Люди выбирают нечто среднее.

APL и J популярны в своей нише.

Java с минимальным синтаксисом, из-за которого многа букф, и отсутствием возможности его расширения в своей.

В минимальном синтаксисе проблема, если есть возможность его в любую сторону расширять. Тогда получается зоопарк. Как с графическими интерфейсами: X Window минимальный и расширяемый, получили зоопарк из Qt, Gtk и ещё пары дюжин интерфейсов. Там где минимальный нерасширяемый (как на смартфоне) или не минимальный (как на Windows и MacOS) такой проблемы нет.

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

минимальный синтаксис = слишком многа букф

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

Вот скажем на ассемблере ты можешь подробно описать процессору что и как конкретно ему надо сделать, намного более подробно чем это возможно в Си.

С лиспом такая же ситуация, ты можешь очень подробно задать AST своей программы.
Никто тебя не заставляет этого делать. Все подробности могуть быть скрыты за DSL.

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

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

Признаться, я считаю этот вопрос не важным. Арифметические выражения (в моём случае, перекладывание json’ов, облачная оркестрация и прочая девопс-скриптота) занимают ничтожный процент от всего кода, так что это просто слишком пустячная проблема, чтобы её правильное или неправильное решение на что-то влияло. А если там ещё и функции есть, то и вовсе всё сводится к (sin x) vs sin(x), что даже тупее спора остро и тупо-конечников.

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

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

Я видел даже как программу переписали с Си++ на 1С и она стала в несколько раз быстрее работать.

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

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

это разве можно читать?

Пардон, но этож тупой императивный код

Если условие
  делай раз
  делай два
  делай три
…

Я понимю, если б там edsl какой ввернули с нестандартной (а зачем ещё edsl нужен?) семантикой ввернули, или с reading macros’ами над синтаксисом поиздевались. Но тут-то чего?

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

Хозяин-барин.

P.S. Так и к английскому языку можно прикопаться: буквы — непонятные, а звуки вообще жопа, хрен выговоришь.

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

Сложную программу на любом языке будет сложно понять.

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

bread ☆
()
Ответ на: комментарий от ugoday

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

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

все люди одинаковые и обладают одинаковыми способностями

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

В английском по сути такая же структура предложений

Хрена се. Давно в английские предложения свободный порядок слов, и падежи с деепричастными оборотами завезли?

Лисп это что-то вроде иврита

Вы антесемит?

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

У меня есть предположение, что у людей как-то мозги различно устроены. Вот, одним, очевидно, что между x = 1 и (setf x 1) нет никакой разницы, а другим — ДАПОШЛИВЫВЖОПУСОСВОИМИСКОБКАМИ!!!!!11!!! Поэтому диалога не получается.

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

Вот и лисп этот ваш, где мозг ломается уже на элементарных предикатах и арифметике.

Н-да… Начинающие ломают мозг на простейшем Паскале, путая read и write, считая, что оператор write – это команда пользователю ввести данные в программу.

это насилие над собой

Изучение чего угодно и научение чему угодно ВСЕГДА насилие над собой. Думать – это очень энергозатратная деятельность для организма.

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

Какая-то ж...а, даже с ИИ требует дикого количество времени. Увы. Не успеваю. Приходится на VSCode сидеть.

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

падежи с деепричастными оборотами

Чо? Ну интуитивно понятно, что английский попроще. Но в целом те же яйца.

bread ☆
()
Ответ на: комментарий от ugoday

между x = 1 и (setf x 1) нет никакой разницы

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

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

Угу. Максимально синтетический и максимально аналитический языки это «в целом те же яйца», а чуть разная форма записи одного и того же выражения — ужас-ужас-ужас-невозможно-читать.

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

Разница тут в том, что в x := 1, x — это переменная. А во втором случае — generalized reference. Но люди, натурально, спотыкаются о синтаксис и дальше скобок разговор не идёт.

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

Между флексивным русским и аналитическим ангельским принципиальная грамматическая разница.

Есть единственный способ написать на ангельском «Книга лежит на столе» (временнЫе извраты не учитываем) и 3!=6 способов на русском.

Целые закрома Родины способов словообразования в русском даже смешно сравнивать с ангельским чуланчиком.

mister_VA ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.