LINUX.ORG.RU

История изменений

Исправление BruteForce, (текущая версия) :

co_await уже «ждёт», future здесь не нужен. Это кстати о bloatware :)

Ну, то есть, мне надо было написать «Future или корутины»? Или «Future/корутины»?

bloatware(curl)

Да, это правда! Ещё криптографию, кстати, эти либы вообще шиза. Хорошо, что многое можно отключить:

set(CURL_DISABLE_FTP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_FILE ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_RTSP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_DICT ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_TELNET ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_TFTP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_POP3 ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_IMAP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_SMB ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_SMTP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_GOPHER ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_MQTT ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_PROXY ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_COOKIES ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_MIME ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_NETRC ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_ALTSVC ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_HSTS ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_DOH ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_WEBSOCKETS ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_ZLIB ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_BROTLI ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_ZSTD ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_VERBOSE_STRINGS OFF CACHE BOOL "" FORCE)

каким образом ho цпп либа может быть блоат, а вот не хо сошка не блоат.

ho цпп либа может (1) содержать шаблоны, которые долго, со скрипом будут собираться и\или (2) импортировать хедеры, которые долго, со скрипом будут собираться.

Пример для (2).

тут b.cpp это использование самописного, тупого как забор, слайса. Логично, что компилится это оч быстро.

#include <cstdio>
#include <cstring>

struct View {
  size_t size;
  char *data;
};

int main(int argc, char *argv[]) {

  char buf[256];
  memcpy(buf, argv[1], 256);

  View sv{strlen(buf), buf};
  printf("%.*s\n", sv.size, sv.data);
}

А это a.cpp с std::string_view

#include <cstdio>
#include <cstring>
#include <string_view>

int main(int argc, char *argv[]) {

  char buf[256];
  memcpy(buf, argv[1], 256);

  std::string_view sv{buf};
  printf("%.*s\n", sv.size(), sv.data());
}

Компилится в четыре, чтоб его, с половиной раза дольше, 154мс! Какое свинство!

bconv.cpp, который компилится в ДВА раза дольше, это более умный слайс (как в тут) с использованием STL-ной charconv для преобразования чисел в строку. bnconv.cpp это то же самое, но charconv убран (в итоге я запихал его в cpp) — и о чудо! компилится так же быстро, как и тупой слайс из b.cpp

Это может, но, действительно, не обязательно для c++ в общем случае. Но для всего boost* — обязательно.

При этом не хо сошка, даже если она 140+k LOC как libcurl, во первых, не хо (собрал и собрал, причём собрал быстро), а во вторых не содержит шаблонов.

В boost они уже прикручены, в curl нет, очевидно.

Это правда! Но к корутинам буста прикасаться без особой надобности мне не очень хочется, это ИМХО.

Исходная версия BruteForce, :

co_await уже «ждёт», future здесь не нужен. Это кстати о bloatware :)

Ну, то есть, мне надо было написать «Future или корутины»? Или «Future/корутины»?

bloatware(curl)

Да, это правда! Ещё криптографию, кстати, эти либы вообще шиза. Хорошо, что многое можно отключить:

set(CURL_DISABLE_FTP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_FILE ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_RTSP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_DICT ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_TELNET ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_TFTP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_POP3 ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_IMAP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_SMB ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_SMTP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_GOPHER ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_MQTT ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_PROXY ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_COOKIES ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_MIME ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_NETRC ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_ALTSVC ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_HSTS ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_DOH ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_WEBSOCKETS ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_ZLIB ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_BROTLI ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_ZSTD ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_VERBOSE_STRINGS OFF CACHE BOOL "" FORCE)

каким образом ho цпп либа может быть блоат, а вот не хо сошка не блоат.

ho цпп либа может (1) содержать шаблоны, которые долго, со скрипом будут собираться (2) импортировать хедеры, которые долго, со скрипом будут собираться.

Пример для (2).

тут b.cpp это использование самописного, тупого как забор, слайса. Логично, что компилится это оч быстро.

#include <cstdio>
#include <cstring>

struct View {
  size_t size;
  char *data;
};

int main(int argc, char *argv[]) {

  char buf[256];
  memcpy(buf, argv[1], 256);

  View sv{strlen(buf), buf};
  printf("%.*s\n", sv.size, sv.data);
}

А это a.cpp с std::string_view

#include <cstdio>
#include <cstring>
#include <string_view>

int main(int argc, char *argv[]) {

  char buf[256];
  memcpy(buf, argv[1], 256);

  std::string_view sv{buf};
  printf("%.*s\n", sv.size(), sv.data());
}

Компилится в четыре, чтоб его, с половиной раза дольше, 154мс! Какое свинство!

bconv.cpp, который компилится в ДВА раза дольше, это более умный слайс (как в тут) с использованием STL-ной charconv для преобразования чисел в строку. bnconv.cpp это то же самое, но charconv убран (в итоге я запихал его в cpp) — и о чудо! компилится так же быстро, как и тупой слайс из b.cpp

Это может, но, действительно, не обязательно для c++ в общем случае. Но для всего boost* — обязательно.

При этом не хо сошка, даже если она 140+k LOC как libcurl, во первых, не хо (собрал и собрал, причём собрал быстро), а во вторых не содержит шаблонов.

В boost они уже прикручены, в curl нет, очевидно.

Это правда! Но к корутинам буста прикасаться без особой надобности мне не очень хочется, это ИМХО.