LINUX.ORG.RU

Избранные сообщения alienclaster

Racket - отладчик макросов - жизнеспособен ли?

 ,

Вот читаю в мануале:

Warning: because of limitations in the way macro expansion is selectively hidden, the resulting syntax may not evaluate to the same result as the original syntax

Я воспринимаю данное утверждение как декларацию о негодности данного инструмента. У кого-нибудь есть иные мнения?

den73
()

Самый лучший язык для скриптов: Tcl?

 , , , ,

Кратко: Я немного сравнивал разные языки и выбрал Tcl, при дальнейшем изучении не разочаровался.

А какие языки вы используете для задач средней сложности — тех что не требуют эпохальных тяжеловесных программ, но и не решаются тривиально пайпом из трёх-пяти команд в баше? Средняя сложность — это что-то порядка от 3-5 до 3-5 тысяч строк кода (смотря какой язык). Такие где разбиение программы на отдельные модули, хранимые в разных файлах ещё не требуется.

Длинно. Почему я выбрал Tcl.

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

Но у bash есть проблемы. Основная из которых — многие выражения (в частности пайпы) выполняются в субшелле, а из субшелла почти невозможно передать информацию в материнский иначе через stdout. Ещё одной проблемой является постоянная сериализация-десериализация объектов. Это уже не настолько важно, но всё-таки хотелось бы от этого по возможности избавиться.

То же самое касается других стандартных языков UNIX: dc, bc, sed, m4, awk, ... На последнем, впрочем, наверное, можно писать и нормальные программы, но синтаксис у него не очень красивый и возможностей не так уж много. Это хорошие языки, очень хорошие в своей области, но имеют ограниченную область применения.

Я уже знаю C и несколько других императивных языков, но если нужно что-то быстро посчитать или сделать, эти языки малопригодны — в том же C даже сравнить строки просто так нельзя, нужна специальная функция, кроме того нужно вручную рулить памятью. Pascal крайне беден в экспрессивном плане, а begin / end — это уродливо, так что лучше уж C. Basic уже мёртвый, да к тому же ещё более убог чем паскаль. C++ крайне сложен для изучения, а профита по сравнению с C почти никакого.

Таким образом, стало ясно, что мне нужно изучить какой-то другой язык. Так как язык требуется для того, чтоб быстро решить какую-то задачу, а не писать оптимизированное решение на века, стало ясно, что нужен один из динамических языков общего назначения: Perl, Python, PHP, Ruby, Tcl, Lua или какой-то другой.

Я выбрал Tcl.

1. PHP не подходит сразу, на нём только веб-странички хорошо писать, а всё остальное лучше в Perl (да и про страницы можно поспорить, если нужно чёткое разделение контента, стилей и логики).

1. На Perl, Python и Ruby множество сложных синтаксических конструкций, которые без поллитра не разберёшь, например (python):

_='_=%r;print _%%_';print _%_

2. Lua: простой язык, код на нём быстрый, изучить тоже можно довольно быстро. Но однако на каждый чих нужна либа. Даже работы с юникодом изкоробки нет (в смысле строку можно прочитать и вывести, но нельзя посчитать кол-во символ или заменить подстроку и тд).

3. Tcl: крайне простой синтаксис: 12 правил и man-ы по всем используемым командам достаточно для для понимания любого кода. При этом богатая стандартная библиотека, хорошая интеграция с Tk и кроссплатформенность.

То есть на Tcl можно решить любую задачу почти так же просто как на баше (да в крайнем случае даже пайпы есть), но при этом синтаксис гораздо более предсказуем.

Плюс на Tcl можно писать графические приложения так же легко как и консольные, например вот такой код в 10 строк — это уже целая работающая игра! Правда автор явно экономил строки, и читаемость кода из-за этого несколько страдает. Кроме того, Tcl поддерживает (особенно с 8.6) функциональное программирование и длинные числа изкоробки. Так что переход с bc, который только их и использует будет проще. Ещё мне очень нравится, что ключевых слов в этом языке нет. Вообще. Те же for / if и другие — это просто такие команды, которые берут условие и фрагмент и его исполняют. Можно запросто объявить процедуру for, которая будет использовать другой синтаксис итератора и далее использовать её, если так удобней. Язык динамически типизированный, как и другие скриптовые, но проблем из за этого не возникает. Если переменная используется внутри expr, то она интерпретируется как число. Если в команде string ... на месте строки — строка и тд. Никаких сомнительных x=«10»+10 Работа с переменными похожа на такую в bash, что тоже плюс: при присваивании переменной знак $ не ставится, а при извлечении из неё значения ставится:

set i 10 # i:=10
puts $i ;# будет выведено 10
incr i ;# i теперь 11
puts [expr [set i]+3] ;# set можно использовать вместо $i или ${i}\
так как при отсутствии третьего аргумента он просто возвращает значение.\
Ещё это один из немногих способов двойной подстановки.

4. Что-то другое. А что собственно? Пока только идёт в голову что-то лиспоподобное (например: clisp (scheme (или racket guile))), APL-подобное: J, K (есть свободная Kona), APL и тд или конкатенативное (dc-подобное): forth, factor...

Из 2, 3, 4 выбрал всё-таки Tcl, потому что синтаксис у него хоть и не стандартный для императивных языков, но похож на привычный шелловский и он есть в GNU/Linux изкоробки или в репозитории, так что не придётся заморачиваться ручной сборкой.

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

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

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

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

Xenius
()

Человеческое метапрограммирование

Подскажите кто-нибудь ЯП с развитой метасистемой, только нормальный, а не лисп.

Ndulu
()

Выход mocl

 , ,

Группа Проприетарное ПО

mocl — набор инструментов для разработки на Common Lisp под мобильные платформы iOS и Android. По заверениям разработчиков получаемый код (используется LLVM) по производительности значительно превосходит аналогичный на Java/Dalvik.

В основе mocl лежит идея, заключающаяся в том, что логика приложения должна быть полностью описана на Лиспе, а пользовательский интерфейс — быть «родным» для платформы. Авторы проводят аналогию с Вэбом, когда логика серверного приложения описана на одном языке (например, на Лиспе), а представление — на другом (HTML + JavaScript).

Цена лицензии варьируется от $1299 для серьёзных компаний до $199 для индивидуальных разработчиков. Также предусмотрена «Source code license» для особых энтузиастов, доступ к которой, по-видимому, дают после обращения в службу поддержки.

Пример приложения на Github.

>>> Подробности (wukix.com)

yoghurt
()

Макросы + история успеха

 , , ,

Комрады. Сабж собственно - чем макросы racket лучше/хуже макросов cl и наоборот?

Второе - где, какой диалект и для чего (лиспа) вы применяете?

Всем спасибо.

З.Ы.: интерес к этому так как начали писать с коллегами большую система на racket. Стало интересно. Делаем just for fun

silver-bullet-bfg
()

В чём люди пишут художественные книги/сеттинги/сценарии?

 , ,

Привет всем!

Придумываем в соавторстве фантастический мир в котором будет развиваться сюжет эпичной борьбы добра и зла ну надо же, как это ново!. Завели общий google doc. Совершенно не удобно даже на раннем этапе, а что будет когда доберёмся до объёмов «Войны и мира» и помыслить страшно.

Посему вопрос. А в чём же это нормальные люди творят?

Хотелось бы:
= Визуальной графоподобной структуры всего документа. Т.е. есть нод/сущность (допустим, животное), у неё есть название, описание, есть зависимости от других нодов/сущностей (допустим, еды), между ними связи, другие в свою очередь зависят по цепочке и т.п.
-= Удобное представление, сворачивание связей, масштабирование.
-= Удобная и быстрая навигация между нодами, поиск
-= Поддержание целостности. Т.е. при удалении одного нода, зависимости помечаются как нарушенные.
-= Слои связей. Скажем, между разными нодами могут быть отношения в разных категориях, удаление связей в одной не нарушает целостность связей в другой.

= Переменные. Назвал животное лупоглазиком, потом не понравилось, и поправил сразу во всех местах, где встречается.

= Теги/классы/категории нодов. Нужно для группировки и быстрой выборки нодов между которыми нет прямых связей. Например, группа «растения мира». Зависимости между ними нет, но нужно, чтобы их можно было быстро найти. Конечно, можно создать специальный нод и от него наследовать все растения, но при большом количестве связей такая организация только создаст лишнее захламление документа.

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

= Совместное редактирование.

Ну вот как-то так...

ls-h
()

Поиск клавиатурного сочетания, чтобы биндить свой функционал

 

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

В общем вопрос. Сочетания C-c C-x - это для имакса и плагинов. Ищется сочетание, которое не использует не имакс не плагины, чтобы можно было навесить всё своё туда и начать радоваться жизни

bryak
()

Перемещение между окнами в Emacs?

 ,

Ищу пакет или кусок кода который можно впихнуть в конфиг, который реализует перемещение между окнами расположенными по краям фрейма. Т.е. иметь возможность перейти в крайнее левое\правое\верхнее\нижнее окно.

В данный момент использую:

windmove-left 
windmove-down 
windmove-up
windmove-right

Но мне нужно нечто на подобие:

evil-window-move-far-left
evil-window-move-far-right
evil-window-move-very-bottom
evil-window-move-very-top

но только не перемещая текущее окно, а всего лишь переместить курсор, т.е. переместиться в окно, не перемещая само окно.

ЗЫ. Гугль поиск ничего не дал( либо руки кривые.

lintiay
()

Использование LSP в Emacs'е

 ,

Правильно я понимаю, что идея language server'а в том, чтобы не писать поддержку каждого нового языка для всех редакторов и сред разработки?

Вот вроде бы в Emacs'е есть lsp-mode. Правильно я понимаю, что с этим плагином Emacs выступает клиентом lsp-сервера, информация о подсветке, автодополнении и прочих штуках должна поступать от lsp-сервера, её не должно уже реализовывать в Emacs'е. Так?

Но почему тогда на страние lsp-mode'а написано, что поддерживаются только некоторые языки, а не все поддерживаемые LSP?

Support for programming languages is provided by the following packages:

lsp-rust
lsp-go
lsp-python
lsp-haskell
lsp-java

Как мне через LSP получить CSS, JavaScript, C#?

Camel
()

Выкатили пятую демку лисп ОС Mezzano

 , , ,

https://github.com/froggey/Mezzano/releases/tag/demo5

Можно потыкать палочкой в VirtualBox, QEMU или даже на реальном железе (привет ReactOS!).

Последние изменения:

  • USB stack by fittestbits
  • Improved overall file system support by fittestbits
  • EXT2/3/4 support has been implemented by Bruno Cichon (ebrasca)
  • GMA950 modesetting display driver
  • Hardware accelerated 3D support via qemu’s Virgl device
  • Multicore/SMP support
  • Improved atomic operations
  • Async APIs: wait-for-objects, dispatch, and thread pools
  • Networking improvements: Server support, DHCP, TCP retransmit
  • Source locations are tracked for many kinds of definitions
  • Weak hash tables and other weak objects
  • Cleanup of object representation and unifcation of standard-object/structure-object
  • Unboxed structure slots
  • Short floats implemented using IEEE half floats
  • Unboxed (unsigned-byte 64) arithmetic
  • Stack overflows and memory faults are trapped and can be recovered from
  • Support for building on Windows
  • Major improvements to CLOS and MOP conformance
  • Keymap picker
  • More bug fixes, performance improvements and features

Еще в поставке есть из приложений:

  • IRC
  • Text Editor (Emacs-like)
  • Telnet
  • File manager
  • DOOM
  • Quake I
  • REPL (с доступом ко всем кишкам ОС)
  • Swank
kookoo
()

Racket Scheme. Разделить каждый элемент первого списка на каждый элемент второго списка.

 ,

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

stzky
()

Зачем нужно метапрограммирование?

 ,

Имеются ввиду возможности, встроенные в сам язык. Что имеем:

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

Зачем нужна такая фича, когда можно генерировать код внешней утилитой?

cppsektant
()

C# vs Java в 2020. Что выбрать?

 , , , ,

Приветствую. Учусь на 1 курсе технического вуза. На 1 курсе у нас C. Я на него забил, просто написал программу на C++, предъявил преподу, мол я шарю, и все. Для работы избрал Python/Django. Интересует удаленка, желательно на Европейского или Американского работодателя. Под собственные задачи не хватает нормального языка программирования. Что значит нормального? Python держится на библиотеках. Динамическая типизация просто? Увольте. Я не рискнул бы писать крупный (не веб) проект на Python. Почему? Потому что большинство ошибок вылавливаются во время работы самого кода. Вот вам и динамическая типизация, и интерпретация. Посмотрите, как используется язык. В веб проектах, потому что Django надежен. Как по мне Python+Django много лучше PHP, да хотя бы и из-за Django Rest. Но кроме веба, Big data, машинного обучения и автоматизации, Python нигде не применяется. Игры, крупные приложения, как правило, Python страхует C++. А скорее, он работает внутри него. Ладно, окей, под Windows игру написать можно. Но вдруг пришла идея запрограммировать что-то под Android. Смотрим. Kivy. Пробуем и убеждаемся, что тут и выходит, молотком вкручиваем лампочку, никак иначе. В общем, нужен второй язык. Язык, где якобы больше кода и т.д, но который по факту надежнее, и работать будет производительнее, и ошибки отдавать на компиляции. Понятно, что C++/C#/Java. Иного не дано. Посидев, повздыхав, я выкинул C++ в помойку. Причины:

  1. Когда делал на C++ работу для универа, 6 часов убабахал на это. На установку VS, на подключение QT, на изучение возможностей для написания простого текстового редактора с менюшкой, где открыть, сохранить и выход, потом еще это не компилировалось из-за ошибок, связанных с библиотекой… В общем, 6 часов. Если такое будет каждый раз с новой библиотекой…
  2. Пообщался с C++ разработчиками. Если проект, который на C#/Java пишется за неделю/две, на C++ я буду пилить 3 месяца…
  3. Удовольствие от разработки самого алгоритма программы. Логики программы. Но никак не от работы с памятью и прочими заморочками на низком уровне. Пусть компилятор сделает, как надо, нежели я где-то допущу ошибку, в одном месте, а потом из-за нее будет ошибка на несколько окон, и за ней многочасовой поиск места с ошибкой. В итоге, C# vs Java. Учитывая, что ранее я работал с C#, начал читать всякие статьи «C# vs Java». На форумы тоже писал. Но моя главная цель была заработок. Сейчас же разработка приложений по моим интересам. Почитав понял, что никакого четкого вывода нет. Прошло время, когда C# был лишь под Windows. С одной стороны, C# круче. Развивается, Microsoft кидают туда все, что нужно и не нужно. С другой стороны. Давайте посмотрим правде в глаза. Где сейчас применяется C#? Под Windows. Все сервера на Windows Server. Какие приложения (не игры) разработаны под Android с C#? Я не знаю таковых. Исследуя рынок понимаем, что по Java и вакансий больше, и зарплаты выше. Естественно, зарплаты то у синьоров. У джунов и мидлов примерно одинаково, но Java таки немного выше. А открывая вакансии я понимаю, что меня не ожидает с C# карьера. Ибо не сдался мне ASP.NET, если я уже на Django. Других вакансий нет. У Java тут все, что хочешь. И веб, и сервера, и приложения под Android. Но есть еще 2 момента:
  4. .NET Foundation. Кроме того, планируется объединить .NET и .NET Core. Выстрелит ли это? Возможно. Но я не думаю, что все сразу бросятся переписывать сервера с Java на .NET, а кто сидел на Windows Server будут переписывать под Linux;
  5. Kotlin. Всей душенькой ненавижу этот язык, и не спрашивайте, почему. А сейчас много где его используют наравне с Java, и вместо Java. Открываем сравнения производительности, и понимаем, что по производительностью C# давно обогнал Java. В общем. Уважаемые девелоперы. Желательно те, кто знаком и с той и с той технологией. Озвучьте пожалуйста ваше мнение по вопросу «C# vs Java в 2020. Что выбрать?». Как следует делать выбор? На что ориентироваться? На что обратить внимание? В общем все возможное и не возможное по этой теме. C# и Java очень и очень схожи, но хочется для себя провести между ними различие, дабы выбрать нужный инструмент. Заранее благодарен!
Jonikster
()

Какие ЯП потребляют меньше всего ресурсов при разработке?

 

Если рассматривать большой проект на каком-либо ЯП, то какой ЯП меньше всего ресурсов при разработке будет потреблять? Т. е. учитывая компиляцию, саму разработку, отладку и рефракторинг и т. д.

Вообще какой ПК подойдет в качестве рабочего для программирования и для какого ЯП? Если реально исходить из самого минимального.

chaynik
()

Смитсоновский музей открыл 2.8 миллиона изображений и видео

 , , , ,

Группа Open Source

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

Открытый доступ к оцифрованным материалам музеев - довольно распространённая в наши дни практика, просто Смитсоновский музей отличился огромным количеством выложенных сразу материалов, и они обещают выкладывать ещё. Есть и другие не всем известные места для легального скачивания открытых файлов: например, огромный нотный архив старой музыки https://imslp.org/wiki/Main_Page Говоря о халяве, стоит упомянуть известную коллекцию бесплатных книг проект Гутенберг https://www.gutenberg.org/

>>> Поиск по Смитсоновскому архиву оцифрованных документов (si.edu)

svyatozar
()

Брошенное СПО

 , ,

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

Например, был колоризатор логов ccze, который меня практически всем устраивал, кроме того, что тормозил и без патчей под Арчем уже не собирался. Я пофиксил сборку и оптимизировал всё, что тормозило. Остальное ничего не трогал, т.к. больше в программе под мои задачи дорабатывать было нечего: https://github.com/geekless/ccze-rv/commits/master (Надо будет, кстати, проверить сборку под новыми ОС снова. А то я как собрал бинарник несколько лет назад, так и пользуюсь им без пересборок.)

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

При этом в моём приоритете:

  • Программы либо на gtk2 (просто с этим тулкитом знаком лучше всего), либо чисто консольные.
  • В первую очередь, на чистом Си, а потом уже на всём остальном.
  • В первую очередь, программы, работавшие под GNU/Linux, во вторую - под FreeBSD, в третьих - всё остальное.
  • С небольшой кодовой базой. Форкать xulrunner я ради вас не собираюсь, естественно.
  • Не устаревшие на миллион лет. Вот был такой файловый менеджер deco, еще под фряхой в давние времена я пользовался им. Но «спасать» там уже нечего, пришлось бы всю программу переписывать с жесткой привязки к 8-битным кодировкам на современный utf8.

Также:

  • Предметная область и решаемые программой задачи должны быть мне понятны. Я не смогу вам помочь, если не понимаю, что вообще в вашей программе происходит.
  • Собирать пакеты под ваш любимый дистрибутив я не буду. Могу запустить образ системы в докере, чтобы проверить сборку и корректность работы. Пакет оформляйте сами, если нужно.
  • Конечно, я не буду браться за то, что мне не интересно.

Какой мой интерес в этом:

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

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


P.S.

Также я понемногу пилю форк http://mooedit.sourceforge.net/https://github.com/sde-gui/qk . Автор замахнулся на амбициозную цель переписать всё на C++, но что-то пошло не так, и очередной релиз редактора так и не вышел. Я форкнул код от стабильной версии на чистом Си. Но здесь я не просто исправляю баги, а постепенно хочу переделать существенную часть редактора.


UPD.

Интересное из комментариев:


UPD. 2

https://github.com/software-revive/about/wiki/Status

Deleted
()

Посоветуйте аналог OneNote для Линукс

 ,

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

Нужен софт имеющий следующий функционал:

  • Создание записных книжек, содержащих 2 уровня вложенности: разделы и страницы разделов. Можно структуру дерева, но в OneNote очень удобно и исчерпывающе реализована конфигурация с 3 уровнями.
  • Возможность вставки текста в любую часть часть страницы (не сплошной Rich Text)
  • Удобное использование пера при активации. В OneNote достаточно приложить поднести ручку и соответствующий режим сразу же включится. Таким образом могу нарисовать схему и условную стрелочку и от этой стрелочки написать текст с клавиатуры, отдельный от основных записей.
  • Возможность использования звукозаписи и вставки на страницы из приложения
  • Возможность копипастом или хотя бы выбором из контекстного меню вставки изображений и видео
  • Возможность ставить теги и метки к строкам

В общем-то такого функционала достаточно. Есть что-то подобное нативное под Линукс? Не обязательно опенсорцное и фрисофтварное

intel
()

GHC 8.8.1

 , ,

Группа Open Source

Тихо и незаметно, вышла новая версия известного компилятора языка программирования Haskell.

Среди изменений:

  • Поддержка профилирования на 64-битных системах с Windows.
  • GHC теперь требует LLVM версии 7.
  • Метод fail окончательно вынесен из класса Monad, теперь он находится в классе MonadFail (финальная часть MonadFail Proposal).
  • Явное применение типа (type application) теперь работает и для самих типов, а не только для значений.
  • forall теперь является ключевым словом вне зависимости от контекста, что позволяет использовать его в type families и rewrite rules.
  • Улучшен алгоритм компоновки кода для x86.
  • Множество других изменений.

>>> Полный список изменений

>>> Гайд по миграции кода на новую версию

>>> Скачать (haskell.org)

hateyoufeel
()

Pleroma 1.0

 , , , ,

Pleroma 1.0
Группа Open Source

Спустя чуть менее, чем через полгода активной разработки, после выхода первого версированного выпуска, представлена первая мажорная версия Pleroma — федеративной социальной сети для микроблогинга, написанной на языке Elixir и использующей стандартизированный W3C протокол ActivityPub. Это вторая по численности сеть в Fediverse.

( читать дальше... )

>>> Подробности (pleroma.social)

commagray
()

Вопрос про гигиенические макросы

 , , , ,

Здравствуйте, мои маленькие любители макросов!

Есть такой макрос на CL:

(defun has-tag-p (tag record) ... )

(defmacro select (query records)
  (let ((rec (gensym "record")))
    (labels ((query-helper (q)
               (if (and (listp q)
                        (member (car q) '(and or not)))
                   `(,(car q) ,@(mapcar #'query-helper (cdr q)))
                   `(has-tag-p ,q ,rec))))
      `(remove-if-not (lambda (,rec) ,(query-helper query)) ,records))))

Аналогичный макрос (без гигиены) на guile:

(define (has-tag? tag record) ... )

(define-macro (select query records)
  (define rec (gensym "record"))
  (define (query-helper q)
    (if (and (list? q)
             (memq (car q) '(and or not)))
        `(,(car q) ,@(map query-helper (cdr q)))
        `(has-tag? ,q ,rec)))
  `(filter (lambda (,rec) ,(query-helper query)) ,records))

Вопрос: как написать такое же, но с гигиеной, используя (1) только стандарт R5RS, (2) стандарт R7RS, (3) Racket?

Призываю @monk’а и прочих знатоков Scheme.

Ну и с интересом выслушаю замечания бывалых лисперов по приведённому коду.

aeralahthu
()