LINUX.ORG.RU

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

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

Форум — Development

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

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?

Форум — Development

Кратко: Я немного сравнивал разные языки и выбрал 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
()

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

Форум — Development

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

Ndulu
()

Выход mocl

Новости — Проприетарное ПО
Группа Проприетарное ПО

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

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

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

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

>>> Подробности

 , ,

yoghurt
()

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

Форум — Development

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

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

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

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

 , , ,

silver-bullet-bfg
()

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

Форум — Talks

Привет всем!

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

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

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

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

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

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

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

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

 , ,

ls-h
()

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

Форум — Desktop

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

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

 

bryak
()

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

Форум — General

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

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

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'е

Форум — Development

Правильно я понимаю, что идея 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

Форум — Development

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. Разделить каждый элемент первого списка на каждый элемент второго списка.

Форум — Development

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

 ,

stzky
()

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

Форум — Development

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

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

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

 ,

cppsektant
()

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

Форум — Development

Приветствую. Учусь на 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
()

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

Форум — Development

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

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

 

chaynik
()

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

Новости — Open Source
Группа Open Source

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

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

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

 , , , ,

svyatozar
()

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

Форум — Development

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

Например, был колоризатор логов 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 для Линукс

Форум — Talks

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

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

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

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

 ,

intel
()

GHC 8.8.1

Новости — Open Source
Группа Open Source

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

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

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

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

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

>>> Скачать

 , ,

hateyoufeel
()

Pleroma 1.0

Новости — Open Source
Pleroma 1.0
Группа Open Source

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

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

>>> Подробности

 , , , ,

commagray
()

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

Форум — Development

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

Есть такой макрос на 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
()