Size: a a a

2021 January 28

VO

Vyacheslav Olkhovche... in Modern::Perl
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
источник

AP

Anton Petrusevich in Modern::Perl
ускорилось:
tr            504/s        8713%       4524%       3362%          --        -46%
inlinec       931/s       16186%       8445%       6298%         85%          --
источник

AP

Anton Petrusevich in Modern::Perl
use Inline C => <<'END_OF_C_CODE';
#define haszero(v) (((v) - 0x01010101UL) & ~(v) & 0x80808080UL)
#define hasvalue(x,n) (haszero((x) ^ (~0UL/255 * (n))))

SV* lines_in_string(SV* sv) {
   int i, lines = 0;
   STRLEN len;
   char *ptr;
   ptr = SvPV(sv, len);
   if(len > 0) {
       for(i = 0; i + 4 <= len; i += 4) {
           int v = *(int*)(ptr + i);
           if(hasvalue(v,'\n')) ++lines;
       }
       for(; i < len; ++i) {
           if(ptr[i] == '\n') ++lines;
       }
       if(ptr[len - 1] != '\n') ++lines;
   }
   return newSViv(lines);
}

END_OF_C_CODE
источник

AP

Anton Petrusevich in Modern::Perl
для верности напечатал результат: 1048576
источник

AP

Anton Petrusevich in Modern::Perl
как и должно быть
источник

AP

Anton Petrusevich in Modern::Perl
только не всегда правильно работает...
источник

AP

Anton Petrusevich in Modern::Perl
подозреваю от того, что у меня лонг слишком длинный
источник

AP

Anton Petrusevich in Modern::Perl
а, всё понял. выражение отвечает на вопрос "есть ли байт" но не отвечает сколько их там...
источник

AP

Anton Petrusevich in Modern::Perl
короче, вот так вот у меня в итоге вышло: https://gist.github.com/jef-sure/dc87eade381c58e6e1ba9bdeea597c47
источник

AP

Anton Petrusevich in Modern::Perl
tr            206/s       10586%       5603%       4010%          --        -11%
inlinec       230/s       11846%       6275%       4495%         12%          --
источник

AP

Anton Petrusevich in Modern::Perl
могло бы и быстрее работать, если бы в тесте \n пореже шли... а так... my $str = "ab\nc\ndefg\n" x 1048576;
источник

SZ

Sergey Zhmylove in Modern::Perl
А оно правильно работает?
источник

AP

Anton Petrusevich in Modern::Perl
3145728
3145728
источник

SZ

Sergey Zhmylove in Modern::Perl
А, да
источник

AP

Anton Petrusevich in Modern::Perl
значения совпали
источник

AP

Anton Petrusevich in Modern::Perl
оно очевидно правильно работает
источник

AP

Anton Petrusevich in Modern::Perl
можно теоретически ещё поди как то ускорить
источник

VG

Vadim Goncharov in Modern::Perl
Denis F
А что это за прикол с пустым массивом?
никогда goatse оператор не видел? :)
источник