LINUX.ORG.RU

Вспомогательный высокоуровневый ЯП

 , , ,


0

1

Уже лет 10 как использую для большинства задач сишку или кресты. Однако время от времени бывает натуральная халтурка типа «перелопатить полтерабайта логов и кое-что посчитать». По природе я очень нетерпелив и ждать, пока awk сделает это, меня не хватает.

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

Первым делом на ум приходит perl, но как-то он мне не очень приятен. python и ruby выглядят неплохо, но до лаконичности perl'а им далековато.

Какие еще есть варианты? Слышал много хорошего про haskell, но так и не понял, можно ли на нем писать быстро и «на коленке».

Ответ на: комментарий от DarkEld3r

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

AFAIK regex.h тоже есть в стандарте, т.ч. это никакой не велосипед.

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

взять буст и использовать их регекспы.

нафиг мне буст ради регекспов?

emulek
()

Common Lisp

Попробуй, еще захочешь.

Такие-то макросы

Такой-то CLOS

Такая-то производительность

Можно хэкать живую систему

Охренительная документация CLHS

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

Я не предлагал костылить регекспы ручками

Да ладно? А писать обёртки кто предлагал?

нафиг мне буст ради регекспов?

Специально для тебя повторю:

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

Потому что он уже используется.

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

Я не предлагал костылить регекспы ручками

Да ладно? А писать обёртки кто предлагал?

т.е. ты не видишь разницы, да?

Потому что он уже используется.

а у меня — не используется. Мне не нравится, что код долго собирается.

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

т.е. ты не видишь разницы, да?

Разницу между «взять буст, а потом просто заменить неймспейс» и писать «обёртки самому, без всякого профита», вижу отлично.

Мне не нравится, что код долго собирается.

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

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

Разницу между «взять буст, а потом просто заменить неймспейс» и писать «обёртки самому, без всякого профита», вижу отлично.

там обёртка на несколько строк получается.

Не собираюсь защищать или нахваливать буст, хотя он, как ни странно, не весь на шаблонах.

ну и что, что «не весь»? Всё равно собирать долго.

Просто полюбопытствую - используешь что-то другое или пишешь необходимое сам?

в данном случае реализация есть в glibc, а glibc есть везде. Не вижу смысла в велосипедах. В т,ч. и в бустовых или новых, STL'ных.

и да, вот реализация

https://github.com/emulek/zz/blob/master/src/zstring.cpp bool ZString::regsub(const ZString &replacement, int eflags)

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

ну и что, что «не весь»? Всё равно собирать долго.

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

Не вижу смысла в велосипедах. В т,ч. и в бустовых или новых, STL'ных.
велосипедах
STL

Ok.

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

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

если библиотека НЕ на шаблонах, то собирать её не нужно. E.g. glibc. Вообще. Даже если это свой код, даже если это не библиотека, то собирать тоже надо лишь один раз, потом требуется только линковка. А вот boost нужно каждый раз собирать, как впрочем и stl шаблоны. Шаблоны в этом смысле как макросы, они встраиваются в твоё код, и становятся его частью.

Вот сравни две программы

$ g++ -E -Wall hello.cpp |wc -l
17573
$ gcc -E -Wall hello.c |wc -l
851
$ cat hello.cpp 
#include <iostream>

int main()
{
	std::cout << "hello\n";
	return 0;
}
$ cat hello.c
#include <stdio.h>

int main()
{
	printf("hello\n");
	return 0;
}
естественно эти 3 строчки собрать без проблем, но сложный реальный проект — замучаешься.

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

если библиотека НЕ на шаблонах, то собирать её не нужно.

О чём я и говорю - в бусте есть библиотеки практически или вообще без шаблонов. Ну а иногда просто нет особой разницы: или ты напишешь этот шаблон или возьмёшь из буста (или любой другой либы).

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

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

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

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

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

зачем тебе вообще шаблоны, если у тебя «нормально на модули разбито»? Сила шаблонов в том и состоит, что у тебя код напрямую генерируется.

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

нет конечно. Но «шаблонная магия» такая штука, что «слишком много» это тоже плохо. Не нужно везде пихать шаблоны.

От проекта тоже сильно зависит

у меня вообще тупо кода почти нет, но g++ 17573 строк таки выдоил. Кстати, почитай эти строки, рваный шаблон гарантируется. И это просто iostream, а в бусте там развернётся вообще в 200К строчек(я как-то проверял).

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

Лучше только у Вольфрама. Хуже например у Явы и Руби.

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

зачем тебе вообще шаблоны, если у тебя «нормально на модули разбито»?

Внешний интерфейс не обязан быть шаблонным. А вот в реализации они могут быть полезны. В итоге либа (модуль) один раз «долго собирается», а дальше проблем нет (естественно, пока не меняется эта либа).

Не нужно везде пихать шаблоны.

Кто же спорит.

а в бусте там развернётся вообще в 200К строчек(я как-то проверял).

Но я вообще-то пытаюсь донести, что если не рассматривать вариант «засунуть буст куда надо и куда не надо», то выбор: или мы пишем этот код сами или берём библиотеку. Можно и что-то более подходящее поискать, но в моём случае, буст себя вполне оправдывает.

почитай эти строки, рваный шаблон гарантируется.

Да ладно?

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

то выбор: или мы пишем этот код сами или берём библиотеку. Можно и что-то более подходящее поискать, но в моём случае, буст себя вполне оправдывает.

я с самого начала предлагал библиотеку, а именно glibc.

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