Awk Technical Notes (2023)
AWK был спроектирован без сборщика мусора, что делает его реализацию простой, быстрой и предсказуемой по потреблению памяти. Это ограничение запрещает возвращать массивы из функций, разрешая только скалярные значения, хотя массивы можно передавать в функции для модификации. Интересно, что переменные становятся локальными, если добавляются в параметры функции, что также служит механизмом автоматического освобождения ресурсов. Брайан Керниган сожалеет об этом дизайне, но на практике он работает хорошо.
В AWK реализована автовивификация — массивы объявляются простым использованием переменной как массива, а переменные неявно объявляются в зависимости от контекста. Это делает язык идеальным для компактных однострочников. Синтаксис языка содержит любопытные особенности: $ является унарным оператором, который может применяться к выражениям, и единственным оператором, разрешенным слева от присваивания. Для пользовательских функций нельзя ставить пробел перед скобкой, в отличие от встроенных, из-за решения использовать пустой оператор для конкатенации строк.
Комментарии (42)
- Awk часто недооценивают, хотя он может заменять целые пайплайны (cut, grep, sed) и обрабатывать сложные текстовые задачи.
- Его мощь и простота для базовых задач отмечаются, но сложные скрипты могут быть трудны для чтения командой без глубокого знания.
- Ключевые ресурсы для изучения: "More Programming Pearls" и "The AWK Programming Language", а также краткие гайды.
- Практическое применение: от простых one-liners (например, извлечение данных из ls -l) до сложных скриптов (учёт, генераторы сайтов).
- Альтернативы: Python предпочитают за читаемость, а некоторые рекомендуют современные инструменты вместо "wrangling" bytestreams.
Wren: A classy little scripting language
Wren — это маленький, быстрый, объектно-ориентированный скриптовый язык с поддержкой concurrency. Его реализация занимает менее 4000 строк кода, что позволяет изучить весь код за один день. Язык сочетает в себе идеи Smalltalk, Lua и Erlang, предлагая современный и понятный синтаксис. Wren использует быстрые однопроходный компилятор в байт-код и компактное представление объектов, что позволяет ему конкурировать с другими динамическими языками.
Особенностью Wren является акцент на классах как основной парадигме и встроенная поддержка легковесных волокон (fibers) для организации программы в набор взаимодействующих корутин. Язык создан для встраивания в приложения — он не имеет зависимостей, имеет небольшую стандартную библиотеку и простой C API. Wren компилируется как C99, C++98 или более новые версии, доступен для запуска в браузере и открыт на GitHub под руководством Боба Нистрома.
Комментарии (43)
- Wren — язык, который сочетает в себе лаконичность Lua и объектно-ориентированный синтаксис, но при этом остаётся компактным и легко встраиваемым.
- Пользователи отмечают, что Wren легко встраивается в C/C++ проекты, но при этом не требует сложных зависимостей, что делает его привлекательным для встраиваемых скриптовых языков.
- Некоторые участники обсуждения упоминают, что Wren может быть использован как альтернатива Lua, особенно в контексте встраивания в игровые движки и другие приложения.
- Обсуждается также, что Wren имеет активное и дружелюбное сообщество, что способствует его развитию и поддержке.
Scripts I wrote that I use all the time 🔥 Горячее 💬 Длинная дискуссия
—
Комментарии (328)
- Разработчики делятся полезными скриптами и алиасами, которые экономят им время и упрощают работу.
- Скрипты варьируются от простых алиасов до сложных инструментов, таких как
fдля быстрого поиска по истории илиfzfдля интерактивного выбора файлов. - Некоторые участники обсуждения поделились своими собственными инструментами, включая
poshдля сокращения путей иmemoдля кеширования результатов команд. - Обсуждались такие темы как использование
fzfдля поиска по истории команд,trash-cliдля безопасного удаления файлов иtmuxдля управления сессиями. - Участники также обсуждали, как эти инструменты могут быть использованы для упрощения повседневных задач, таких как поиск по истории команд, выбор файлов и управление сессиями.