LINUX.ORG.RU

Есть строкодробилка на замену Перлу?

 , , ,


1

9

Добрый день, ЛОР.

Шёл 2018 год. И некоторые (в т.ч. на ЛОРе) считают, что Перл мёртв.

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

Upd: может быть, есть альтернативы, сравнимые по лаконичности, но не настолько write-only, как Перл? Ибо в комментариях правильно подметили особенность

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

★★★★★

Последнее исправление: hobbit (всего исправлений: 5)
Ответ на: комментарий от Partisan

Сравнение xs с Go бессмысленно - на xs никто не программирует и не будет

https://metacpan.org/search?p=1&q=::XS&size=500

Так что ты неправ.

Программистам нужно следить за новыми идеями и технологиями в своей области, и Go в этом отношении важен для ознакомления.

И в чем новизна идей и технологий Го?

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

Я вот от picolisp прибалдел. Но одно дело писать что-то, попутно изучая, другое когда нужно надо написать для работы. В ход идут проверенные решения.

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

У меня нет сферы, где раст бы пригодился. Даже с таким наркоманским синтаксисом. Си - для системщины. Перл - как язык общего назначения, плюс Си/XS для узких мест. Все остальное python/ruby/Lua/иногда с++ тока в качестве патчей/чтения кода других проектов. Раста нету. Хотя его включают медленно в проекты, из последнего - тор. Возможно и с ним придётся дело иметь. Но точно не в качестве языка, на котором писать код.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от apmucm

У golang регекспы в разы медленнее чем у перла и даже питона.

Было бы интересно увидеть сравнение с многопоточной go-версией на ссд диске.

ugoday ★★★★★
()
Ответ на: Странно... от Moisha_Liberman

анекдот про огурцы

Этот?

— Почему в огурце много семян?
— Потому что у него нет рук.

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

а на Go - уже 1 миллион человек

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

ashot ★★★★
()

Да какая разница - на чем писать обработку текста?

SuoiCat
()

Cython

tony@lenox:~$ time ./counting.py

134721553

real 0m5,514s

user 0m5,240s

sys 0m0,268s

tony@lenox:~$

#!/usr/bin/python3

from cfunc import cfunc
 
with open('v_i_m_utf8.txt', 'rb') as infile:
    words = 0
    words = cfunc(infile)    
print(words)
cdef extern from "ctype.h":
    int isspace(int x)

def cfunc(fd):
  cdef bytes buf
  cdef int tot = 0, prev = 0, cur
  cdef char c
  while True:
      buf = fd.read(8192)
      if not buf:
        return tot
      for c in buf:
        cur = isspace(c)
        if cur and not prev:
          tot += 1
        prev = cur

Twissel ★★★★★
()

beastie, а на гошечке не хочешь забацать утилитку для сравнения?

P.S. чёйто вспомнилось, и Го захотелось)

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

Тут даже бацать особенно нечего. Практически напрямую пример из документации:

package main

import (
	"bufio"
	"log"
	"os"
	"time"
)

func main() {
	defer func(t time.Time) {
		log.Println("execution time:", time.Since(t))
	}(time.Now())
	f, err := os.Open("v_i_m_utf8.txt")
	if err != nil {
		log.Fatal(err)
	}
	defer f.Close()
	s := bufio.NewScanner(f)
	s.Split(bufio.ScanWords)
	var count int
	for s.Scan() {
		count++
	}
	if err := s.Err(); err != nil {
		log.Fatal(err)
	}
	log.Println("word count:", count)
}
See: https://golang.org/pkg/bufio/#example_Scanner_words

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

Спасибо, проверю у себя для сравнения с Питоном.

А что бы такого почитать по Go для начала.

Хотя все говорят, что там как и в Луа «учить нечего» — берёшь и кодишь :-)

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

Имхо лучше всего начинать со спецификации (благо она коротенькая и грамотно написана). Туториал можно и пропустить. Тут вот всё, что нужно: https://golang.org/doc/

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

Первый запуск

2018/09/20 16:12:34 word count: 134721552
2018/09/20 16:12:34 execution time: 24.356420743s

Получается чуть быстрее классической реализации Python3 (см.выше)

Второй запуск

2018/09/20 16:13:21 word count: 134721552
2018/09/20 16:13:21 execution time: 17.864101086s

Вопрос, где кеширование, оно тут есть?

P.S. Go 1.10.4, Debian 9

Twissel ★★★★★
()
Последнее исправление: Twissel (всего исправлений: 1)
Ответ на: комментарий от Twissel

Вопрос, где кеширование, оно тут есть?

Файловый кэш на уровне ОС?

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

Сбрасывай кеши через троечку перед каждым запуском, не шлангуй. Теперь завайте сравним раст, там нет гц, значит, тормозить не будет как го или джава.

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