TGViewer
Channel Public Channel
Гепардово гнездо

Гепардово гнездо

@gepardchan

El nido del guepardo.

@gepardius тащит в гнездо всякое интересное из мира программирования (и не только).

Etaoin shrdlu cmfwyp!

Еще один мой канал: @sofcheck.
Subscribers
617
Photos
41
Videos
0
Links
81

Showing posts older than #13 · Back to latest

Older Posts 10 shown
Post #12 498
Рассказваю, как залипнуть на N часов и не пожалеть об этом:
https://www.decisionproblem.com/paperclips/index2.html

Игра основана на статье шведского философа Ника Бострома про ИИ, который максимизирует число сделанных скрепок (можно еще почитать тут на русском или коротко на английской Вики). (Предупреждаю, статьи могут стать спойлером для самой игры!)

В самой игре вам предстоит играть за такой ИИ и превратить всю Вселенную в скрепки.

С компьютера можно играть прямо из браузера, а с телефона сайт предлагает скачать приложение; лучше смотреть с компьютера.

(Кстати, ссылку на игру я честно подсмотрел в канале у @markysha)
Post #11 517
  • 👍 6
Post #10 563
Всем, кто утверждает, что компилятор Go быстро компилирует, покажите вот этот код:
https://pastebin.com/vzp5ha1y
и попросите дождаться, пока он скомпилируется.

Конечно, это очень вырожденный случай. Компилятору здесь как минимум нужно выписать тип в виде строки (чтобы использовать reflect). При этом для любого типа T верно, что func(a, b T) перепишется в func(a T, b T). Таким образом, количество раз, которое мы выписали T, удвоилось. Вкладывая так func(a, b T) друг в друга много раз, мы получаем, что строка с записью типа растет экспоненциально быстро, и компилятор не осиливает.
  • 🥱 5
  • 😁 3
  • 😈 1
Post #9 495
Самый необычный тип в C++ (с расширениями GCC)

Пусть вам дана функция
template <class T>
void foo(const T &) {}

Как вы думаете, какие типы возможно передать в foo()? Любые? Любые, кроме void? А вот и нет!

Если мы воспользуемся variable-length array (в Cтандарте C++ его нет, зато есть в расширениях GCC) и попробуем передать в foo():
int n = 42;
int a[n];
foo(a);

то получим эпичную ошибку:
main.cpp:34:28: note: variable-sized array type ‘int [n]’ is not a valid template argument

А еще variable-length array интересен тем, что sizeof() от него вычисляется в рантайме. Во время компиляции это невозможно, поскольку мы не знаем размер массива.
  • 🤔 2
  • 👍 1
Post #8 422
Маппинг памяти на нулевой адрес в Linux

Вопрос обсуждался на Stack Overflow здесь

Если коротко, то мапить странцы по нулевому адресу можно (если делать это с флагом MAP_FIXED). Правда, это может сделать только root (или процесс с нужными capabilities). Почему это не может сделать процесс обычного пользователя? Чтобы пользователь не мог эксплуатировать уязвимости ядра, связанные с чтением по нулевому указателю. А он это мог бы сделать, поскольку ядро «видит» маппинги памяти пользовательского процесса. И если пользователь замапил нулевую страницу, то она будет доступна и в ядре, тоже по нулевому адресу.

Пример (со Stack Overflow):
#include <sys/mman.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

int main() {
void *p = mmap(0, sysconf(_SC_PAGE_SIZE),
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
printf("mmap result %p (errno %s)\n", p, strerror(errno));
return 0;
}
  • 👍 2
Post #7 388
На случай важных переговоров
  • 😁 2
  • 😈 1
Post #6 318
Разработчики ядра применили изменение, в результате которого у меня сломалась работа с Secure Boot:
https://bugzilla.kernel.org/show_bug.cgi?id=216642

Ответ на баг-репорт убил:
In that sense, your use case is exactly what we intended to fix with that patch.
  • 😁 3
Post #5 300
В Си есть функция с мемным названием memmem(). Работает она похоже на strstr(), т.е. ищет подстроку в строке. Только вместо null-terminated строки на вход подается указатель на начало строки и ее размер.
Post #2
Channel photo updated
Post #1
Channel created
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →