LINUX.ORG.RU

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

 , , ,


0

1

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

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

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

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

Haskell, конечно же

но так и не понял, можно ли на нем писать быстро и «на коленке».

Конечно можно. И быстрее уже некуда. Только вот для этого сначала надо его в нужной степени осилить

yoghurt ★★★★★
()

ruby между прочем много хорошего взял от перла, в том числе и лаконичность, не понимаю почему ты решил «до лаконичности perl'а им далековато.»

TDrive ★★★★★
()

Пистон.

Deleted
()

Еще я бы в твоей ситуации посмотрел в сторону lua, он вроде как по скорости один из лидеров среди скриптовых яп и создавался именно для интеграции с C/C++.

TDrive ★★★★★
()

По природе я очень нетерпелив и ждать, пока awk сделает это, меня не хватает.

Если важна скорость работы, то никакой из этих вариантов кроме быть может haskell.

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

Java
лаконичность

Я смотрю, у нас пятиминутка имени Евгения Вагановича?

import java.io;

public class Hello {
  public static void main(String[] args) throws IOException {
    System.out.println("Hello world");
  }
}

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

посмотрел в сторону lua

Это лауреат номинации «самый уродливый язык, которым кто-то на полном серьезе пользуется». Батареек опять-таки не завезли.

kawaii_neko ★★★★
() автор топика

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

А кроме перечисленных вариантов есть PHP, гыгы.

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

А как насчет гайдов «пишем наколенные поделки на хаскелле за 15 минут»? Только без пассажей для идиотов о композиции функций и вычислении факториала/числе фибоначчи?

Думаю, что haskell и правда единственный из перечисленных языков, которые могут доставить мне действительно новых ощущений, только рубиперлопитоны понятно как прикладывать к решению практических задач, а из всего хаскеля я слышал только про «выведение типов» и «монады», но сам даже не представляю, как на нем «grep -o» написать.

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

Ты почему-то думаешь, что какой-то из этих языков имеет более быструю реализацию регэксплв?

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

Кстати, в этом месте мог бы быть троллинг на тему «cl-ppcre is faster than libpcre»

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

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

Где всплывает - в awk?

Впрочем, твое требование «такенных здоровых аккумуляторов» исключает все варианты, кроме Perl и Python, и из этих двух я бы точно выбрал Python. Для редких «халтур с полугиговыми логами» у меня собран PyPy.

tailgunner ★★★★★
()

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

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

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

пятиминутка имени Евгения Вагановича?

System.out.println(«Hello world»);

throws IOException {

похоже на ваганыча, да

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

А как насчет гайдов «пишем наколенные поделки на хаскелле за 15 минут»?

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

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

Как альтернатива можно посношаться с различными реализациями с JIT в обмен на огромное потребление памяти.

У Python единственный приличный JIT - PyPy, и он не требует «огромного потребления памяти».

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

Haskell sucks

Полуправда иногда хуже чем ложь

Being a pure functional language offers some advantages but also a set of headaches. You might have noticed that programming with monads was the last part of the last chapter in a book about programming languages, and rightfully so. The concepts are intellectually demanding. But we used monads to do some things that were trivial in other languages, such as write imperative-style programs, process I/O, and even handle list functions that may or may not find a value. I’ve said it before about other languages, but I’ll say it again here. Though Haskell makes some hard things easy, it also makes some easy things hard. Certain styles lend themselves to certain programming paradigms. When you’re building a step-by-step algorithm, imperative languages work well. Heavy I/O and scripting do not lend themselves to functional languages. Purity in one man’s eyes may seem like failure to compromise in another.

Взято из книги «Seven languages in seven weeks»

PS И, кстати, в голове не укладывается, как может смоллтокер изучить хаскель. Он просто не выдержал бы, блевал бы через каждую строчку кода. Абсолютно враждебные парадигмы. Тотальная динамика vs тотальная статика (прямо как в жабе, lol).

anonymous
()

Кто помнит как я тут пару лет назад гадости про python писал - знайте, я полюбил этот язык, в добавок к плюсам и Qt...

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от kawaii_neko

Это лауреат номинации «самый уродливый язык, которым кто-то на полном серьезе пользуется»

-- Сказал синий воротничок

anonymous
()

У эрланга есть встроеный leex и yecc. Для парсинга всякой лабуды подходит идеально. Правда на счёт скорости не очень и мордодел там тоже не сильно.

nanoolinux ★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Кто помнит

А ты кто? И да, третий или второй питон? Потому что во втором у меня постоянный бугурт от неподдержки юникода.

entefeed ☆☆☆
()
Ответ на: комментарий от I-Love-Microsoft

знайте, я полюбил этот язык, в добавок к плюсам и Qt...

Это не удивительно, lol.

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

Я на 2. А что с юникодом в 3? Например имена файлов на одном разделе в одной ОС и другой - это как разные строки видятся, неужели python 3.x решает эту проблему?

I-Love-Microsoft ★★★★★
()

Тебе скалу. Гуйня - есть, довольно минималистично - есть, если приспичит в манатках покопаться - копайся, библиотеки - ну это ясно. Логи в твих объемах можешь перемалывать спарком, если нхочешь очень быстро:

val file = spark.textFile("hdfs://...")
val errors = file.filter(line => line.contains("ERROR"))
// Count all the errors
errors.count()
// Count errors mentioning MySQL
errors.filter(line => line.contains("MySQL")).count()
// Fetch the MySQL errors as an array of strings
errors.filter(line => line.contains("MySQL")).collect()
https://spark.apache.org/examples.html

anonymous
()

python ... выглядят неплохо, но до лаконичности perl'а им далековато.

Куда уж локаничнее?

open(somefile)
seek()/readlines()/read(chunksize)
и все

fang90 ★★★★★
()
Последнее исправление: fang90 (всего исправлений: 1)

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

Можно имея немного опыта использования либ (как и везде).

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

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

anonymous
()

На первый взгляд кажется что хаскель очень крут, но... потом оказывается что ты недостаточно круг для него. Но ты попробуй, все через это должны пройти :).

А вообще, пока сам не попробуешь не поймёшь.

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

В комплекте с лиспом батареек точно нет. Я спрашиваю на полном серьезе, а не ради языкосрача.

Смотря с каким. У ракета, например, батареек достаточно.

Ну а насчёт хаскеля - лично мне так и не стало на нём «комфортно» писать. Может недостаточно осилил, хз.

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

А вообще, пока сам не попробуешь не поймёшь.

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

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

В комплекте с лиспом батареек точно нет. Я спрашиваю на полном серьезе, а не ради языкосрача.

«Quicklisp is a library manager for Common Lisp. It works with your existing Common Lisp implementation to download, install, and load any of over 1,100 libraries with a few simple commands.»

mv ★★★★★
()

В этой задаче всё съедает I/O, поэтому никакого прироста по сравнению с awk ты не получишь.

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

В этой задаче всё съедает I/O, поэтому никакого прироста по сравнению с awk ты не получишь.

Полтерабайта логов может лежать на быстром SAN'е. Да даже на обычной коробке, стоящей под столом, awk со свистом всему вокруг просрёт.

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

any of over 1,100 libraries

Из которых 1000 давным-давно заброшена, а 90 из оставшихся 100 несовместимы с твоим любимым $lispimplementation. Плавали, знаем.

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

недостаточно круг для него

Смелее закругляйся, Товарищ! Иначе будеш недостаточно круг для хаскеля!

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

lua, он вроде как по скорости один из лидеров среди скриптовых яп

ннеа. вообще ннеа.

По сабжу:

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

только perl и python подходят. Сам выбрал perl, т.к. предпочитаю лично выбирать градус магии/словоблудия, свободы/самоограничения. Плата за это: порог вхождения. Однако я не отчаиваюсь, курю кэмелбук, в котором нравится честная самоирония авторов и стиль их беседы с читателем, вроде: вот мы вам говорили что это так... ну немножечко с3.14здели, но не так чтобы уж сильно). Да и сообщество помогает. Думаю всё будет хорошо.

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

В этой задаче всё съедает I/O

Задачи бывают разные. Ах да, чтение логов, как правило, проходит на скорости, приближенной к линейной скорости чтения дисков и далеко не каждый регэксп, оказывается, способен перемалывать 100 мбайт/с.

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

grep -o

Как-то так, именно что на коленке:

import System.Environment
import System.IO
import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import qualified Data.Text.ICU as ICU

grep re fileName = do
  ls <- fmap Text.lines (Text.readFile fileName)
  mapM_ (matchLine re) ls
  
matchLine re line = 
  printMatch (ICU.find re line >>= ICU.group 0)

printMatch Nothing = return ()
printMatch (Just t) = Text.putStrLn t

usage = do
  progName <- getProgName
  hPutStr stderr "Usage: "
  hPutStr stderr progName
  hPutStrLn stderr " regexp filename [filename ...]"

main = do
  args <- getArgs
  if null args
    then usage
    else do
      let re = ICU.regex [ICU.UnicodeWord] (Text.pack $ head args)
      mapM_ (grep re) (tail args)

semantics
()
Ответ на: Haskell sucks от anonymous

Полуправда иногда хуже чем ложь

всегда. ложь еще даёт надежду на прозрение, разочарование, открытие.

P.S. оффтоп. безотносительно хацкеля)

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

Hadoop для красного словца. В статье показано как ускорить awk через xargs.

gh0stwizard ★★★★★
()
Ответ на: grep -o от semantics

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

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