- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
// https://govnokod.ru/26890#comment571155
// bormand 2 часа назад #
// Можно брейнфак запилить на операторах. Как раз вроде унарных хватает.
// & * - ~ ! -- + ++ --
#include <array>
#include <vector>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <limits>
struct Brainfuck {
public:
using IPType = uint16_t;
constexpr static size_t MAX_MEMORY = std::numeric_limits<IPType>::max();
std::array<uint8_t, MAX_MEMORY> memory{};
std::vector<char> app{};
IPType ip = 0;
IPType cell = 0;
IPType find_matching_tag(IPType cur_ip, char open, char close, int ip_direction)
{
size_t stack_size = 0;
do {
if (app[cur_ip] == close) {
--stack_size;
}
if (app[cur_ip] == open) {
++stack_size;
}
cur_ip += ip_direction;
} while (stack_size > 0);
return cur_ip - ip_direction;
}
IPType find_matching_close_tag(IPType cur_ip)
{
return find_matching_tag(cur_ip, '[', ']', 1);
}
IPType find_matching_open_tag(IPType cur_ip)
{
return find_matching_tag(cur_ip, ']', '[', -1);
}
void loop_open()
{
if (memory[cell] == 0) {
ip = find_matching_close_tag(ip);
} else {
++ip;
}
}
void loop_close()
{
if (memory[cell] != 0) {
ip = find_matching_open_tag(ip);
} else {
++ip;
}
}
void exec(char op)
{
switch (op) {
case '>': ++cell; break;
case '<': --cell; break;
case '+': ++memory[cell]; break;
case '-': --memory[cell]; break;
case '.': std::putchar(memory[cell]); break;
case ',': memory[cell] = static_cast<uint8_t>(std::getchar()); break;
case '[': loop_open(); return; // no ip advancing
case ']': loop_close(); return; // no ip advancing
}
ip++;
}
void run()
{
while (ip < app.size()) {
exec(app[ip]);
}
}
public:
Brainfuck & operator++() { app.push_back('>'); return *this; }
Brainfuck & operator--() { app.push_back('<'); return *this; }
Brainfuck & operator+() { app.push_back('+'); return *this; }
Brainfuck & operator-() { app.push_back('-'); return *this; }
Brainfuck & operator*() { app.push_back('.'); return *this; }
Brainfuck & operator&() { app.push_back(','); return *this; }
Brainfuck & operator!() { app.push_back('['); return *this; }
Brainfuck & operator~() { app.push_back(']'); return *this; }
Brainfuck & operator>>(const Brainfuck &) { run(); return *this; }
};
gost 03.09.2020 00:51 # +1
Перевод из классического «Брайнфака» в крестовый DSL:
bormand 03.09.2020 00:52 # 0
gost 03.09.2020 00:54 # +1
bormand 03.09.2020 00:55 # 0
MAKAKA 03.09.2020 00:56 # 0
Какой еще язык можно так быстро реализовать?
а гост ебанутый малость, это уже очевидно
gost 03.09.2020 00:58 # 0
> Его спецификация настолько проста, что ты написал его реализацию за два часа.
И бо́льшая часть времени заняла реализация циклов (только под самый конец осознал, что [ может сразу же переместиться к ], поэтому просто последовательно по одному символу проходить не получится).
bormand 03.09.2020 01:02 # 0
bormand 03.09.2020 01:14 # 0
Закрывающая скобка цикла "пушит" правую часть в отдельное поле и начинает новую пустую цепочку. Открывающая скобка заворачивает эту цепочку в цикл и пристегивает к запушенному куску.
Ну и у всего этого есть невиртуальный оператор (). Должно неплохо оптимизироваться если в глубину инлайнов не упрется.
bormand 03.09.2020 01:18 # 0
S<Plus, Plus, Plus, Loop<Plus, Right, Minus, Left>, Out>
S::operator() { dummy(args()...); } где dummy ничего не делает.
Это вроде лучше инлайниться должно.
bormand 03.09.2020 01:52 # 0
bormand 03.09.2020 01:28 # 0
Fike 03.09.2020 01:39 # 0
MAKAKA 03.09.2020 01:50 # 0
bormand 03.09.2020 03:24 # 0
TOPT 03.09.2020 04:06 # 0
defecatinho 03.09.2020 10:17 # 0
TOPT 03.09.2020 11:02 # 0
MAKAKA 03.09.2020 01:02 # 0
bormand 03.09.2020 01:56 # 0
Осталось в операторы обмазать.
bormand 03.09.2020 02:11 # 0
bormand 03.09.2020 02:59 # 0
Всё, заебало, будет без украшательств. Работает и ладно.
Кстати в компайлтайме проверяет баланс циклов.
bormand 03.09.2020 03:19 # +2
gost 03.09.2020 08:04 # +1
YpaHeLI_ 20.09.2020 09:53 # 0
Для рынка этот язык никчемный.
rotoeb 20.09.2020 09:54 # 0
YpaHeLI_ 20.09.2020 09:56 # 0
bormand 20.09.2020 10:13 # 0
guest8 03.09.2020 01:05 # −999
bormand 03.09.2020 01:06 # 0
guest8 03.09.2020 01:08 # −999
bormand 04.09.2020 01:15 # 0
З.Ы. Ну в CSM ещё фрагменты есть для общения с 16-битной хуйнёй. Но тут явно не этот случай.
guest8 04.09.2020 01:17 # −999
bormand 04.09.2020 01:19 # 0
MAKAKA 04.09.2020 01:22 # 0
у меня почти все проги под реальный режим вообще были tiny, это я помню.
Но хуйню, которая грузится с загрузочной дискеты и выводит ":)" я тоже делал когда mbr изучал, а вот про uefi я знаю только в теории(
bormand 04.09.2020 01:25 # 0
Да там ничего особо интересного. Гуиды да интерфейсы. Получаешь интерфейс по гуиду да зовёшь методы. Той магии, что была на биосе, там уже нет.
guest8 04.09.2020 01:26 # −999
bormand 04.09.2020 01:29 # 0
32-битный уефи ты в природе хер найдёшь. Вроде больше не выпускают девайсов с ним.
guest8 04.09.2020 01:35 # −999
bormand 04.09.2020 01:40 # 0
В железо тебе там лезть не надо, там всё очень высокоуровневое. Даже к pci лазить будешь через интерфейс а не напрямую.
В прерывания тоже лезть не надо, там все на таймерах да ивентах. Да там кроме таймерного их и нет, лол.
Это по сути простенькая однозадачная ось.
MAKAKA 04.09.2020 01:45 # 0
>Даже к pci лазить будешь через интерфейс.
Там прямо сишные функции "энумирейт бас", "считать доступные адреса из спейса" и "настроить девайс"?
> на таймерах да ивентах.
Колбеки типа?
bormand 04.09.2020 01:47 # 0
Ну вот разве что у дисплея ты можешь захотеть напрямую порисовать. Там интерфейс тормознутый (адрес, разрешение и формат пикселя он тебе расскажет).
MAKAKA 04.09.2020 01:49 # 0
Это может быть важно, чтобы игрушки писать. А для загрузочного экрана наверное пофиг. Тащемто биосный API для видео тоже тормозил.
А для USB? SATA? Для этого говна тоже есть API, или там напрямую не нужно?
bormand 04.09.2020 01:53 # 0
Есть интерфейсы для дисков. Рид да врайт.
Есть интерфейс для файлухи. Но изкоробки только фат да исо. Разделы и т.п. само подхватывает и публикует.
В принципе там плуг энд плей даже.
MAKAKA 04.09.2020 02:01 # 0
Так прошивка сама всё конфигурит (это ведь и есть плуг энд плей), но ты можешь потом переконфигурить под себя?
А вот ты говоришь, что там си, да? А там надо статически рунтайм весь в себя линковать?
bormand 04.09.2020 02:05 # 0
Да, прошивка сама все что может распознает и конфигурит. Лоу-левел интерфейсы это если ты свои дрова собрался писать.
MAKAKA 04.09.2020 02:07 # 0
типа
?
Я просто не понял, а откуда я возьму printf?
> Лоу-левел интерфейсы это если ты свои дрова собрался писать.
Кстати, а что случилось с биосами устройств?
Если я сделаю карточку, и хочу чтобы uefi мог с нее грузиться, я могу в карточке разместить какой-то код под efi, который сэмулирует из нее например диск или mass storage usb?
bormand 04.09.2020 02:09 # 0
Аллокаторы, сосноль, всё через те таблички.
MAKAKA 04.09.2020 02:10 # 0
то есть ответ на мой вопрос про рантайм -- хуй. Ну ок, тоже ничего.
Остался вопрос про биосы устройств
bormand 04.09.2020 02:13 # 0
А для всяких usb все и на дженерик дровах взлетает. Мышки, клавы, флешки и т.п.
MAKAKA 04.09.2020 02:21 # 0
Спасибо)
bormand 04.09.2020 01:33 # 0
guest8 04.09.2020 01:36 # −999
bormand 04.09.2020 01:50 # 0
MAKAKA 04.09.2020 01:50 # 0
bormand 04.09.2020 02:06 # 0
MAKAKA 04.09.2020 02:11 # 0
или у виртуалок есть интерфейсы для дебага uefi?
bormand 04.09.2020 02:15 # 0
MAKAKA 04.09.2020 02:21 # 0
MAKAKA 04.09.2020 02:36 # 0
куему может
bormand 04.09.2020 01:22 # 0
MAKAKA 04.09.2020 01:25 # 0
мои первым кодом было мигание лампочками на клаве.. там был io порт вроде, и туда надо было писать
bormand 04.09.2020 01:27 # 0
guest8 04.09.2020 01:28 # −999
HoBorogHuu_nemyx 04.09.2020 11:47 # 0
AHCKujlbHblu_netyx 04.09.2020 11:51 # 0
guest8 04.09.2020 14:54 # −999
bormand 04.09.2020 19:11 # 0
guest8 04.09.2020 19:21 # −999
bormand 04.09.2020 19:31 # 0
guest8 04.09.2020 19:33 # −999
bormand 04.09.2020 19:44 # 0
guest8 04.09.2020 19:57 # −999
bormand 04.09.2020 20:11 # 0
А фиг знает, возможно в старых бекапах есть. Я давно туда не заглядывал. Может быть уже и проебал.
HoBorogHuu_nemyx 04.09.2020 19:56 # 0
guest8 04.09.2020 19:58 # −999
HoBorogHuu_nemyx 04.09.2020 20:24 # 0
guest8 04.09.2020 20:29 # −999
defecatinho 06.09.2020 22:11 # 0
OCETuHCKuu_nemyx 03.09.2020 10:13 # 0
nymuH_XyuJlo 03.09.2020 17:54 # 0
3.14159265 19.09.2020 19:18 # 0
Pig 20.09.2020 00:48 # 0
bormand 20.09.2020 00:49 # 0
guest8 20.09.2020 00:52 # −999
Pig 20.09.2020 00:54 # 0
guest8 20.09.2020 00:59 # −999
bormand 20.09.2020 01:05 # 0
Нет. Чтение неинициализированных данных - UB. Вплоть до полного разрушения логики и true = false в других местах программы.
Не надо так делать.
guest8 20.09.2020 01:08 # −999
bormand 20.09.2020 01:10 # 0
Ну с int или char, скорее всего, ничего особо страшного не случится.
guest8 20.09.2020 01:11 # −999
bormand 20.09.2020 01:12 # 0
А флоат просто крашнуть процесс может. Хотя это обычно отключено.
guest8 20.09.2020 01:13 # −999
bormand 20.09.2020 01:14 # 0
guest8 20.09.2020 01:15 # −999
guest8 20.09.2020 01:17 # −999
guest8 20.09.2020 01:18 # −999
bormand 20.09.2020 01:22 # 0
Там вроде только при нормальном касте в инт гарантируется единичка. А в самом буле запросто может лежать FF.
guest8 20.09.2020 01:23 # −999
bormand 20.09.2020 01:24 # 0
guest8 20.09.2020 01:26 # −999
guest8 20.09.2020 01:28 # −999
guest8 20.09.2020 01:30 # −999
guest8 20.09.2020 01:31 # −999
guest8 20.09.2020 01:34 # −999
bormand 20.09.2020 01:30 # 0
Ну и ты забиваешь его единичками а не true.
guest8 20.09.2020 01:31 # −999
guest8 20.09.2020 01:32 # −999
guest8 20.09.2020 01:32 # −999
guest8 20.09.2020 01:35 # −999
guest8 20.09.2020 01:36 # −999
guest8 20.09.2020 01:37 # −999
bormand 20.09.2020 01:38 # 0
Каст була в инт возвращает 0 или 1. Независимо от внутренного представления була.
Каст инта в бул возвращает false для 0 и true для остального. Независимо от внутренного представления була.
guest8 20.09.2020 01:39 # −999
guest8 20.09.2020 01:39 # −999
guest8 20.09.2020 01:39 # −999
bormand 20.09.2020 01:40 # 0
Ну он чарами заполняет. Просто исторически сложилось, что он в интерфейсе инт принимает.
guest8 20.09.2020 01:41 # −999
guest8 20.09.2020 01:43 # −999
bormand 20.09.2020 01:36 # 0
Нельзя. Ты заполняешь единичками а не true ибо memset принимает int, а (int)true это 1. Он не шаблон.
std::fill(std::begin(bools), std::end(bools), true) и не еби мозг.
guest8 20.09.2020 01:38 # −999
guest8 20.09.2020 01:31 # −999
bormand 20.09.2020 01:31 # 0
Но memset принимает int. А (int)(bool)1 это 1. А true это не обязательно 1. И вообще бул может быть больше байта (хотя я такого идиотизма нигде не видел).
bormand 20.09.2020 01:34 # 0
guest8 20.09.2020 01:35 # −999
bormand 20.09.2020 01:39 # 0
guest8 20.09.2020 01:40 # −999
bormand 20.09.2020 01:45 # 0
Ну, по крайней мере, там будет false а не UB.
guest8 20.09.2020 01:46 # −999
bormand 20.09.2020 01:46 # 0
З.Ы. А, это MS так позиксовые функции уродует.
guest8 20.09.2020 01:49 # −999
bormand 20.09.2020 01:50 # 0
Имхо, лучше уж явно проверить в начале, возможно даже static_assert'ом. А потом и обычный memcpy сойдёт.
guest8 20.09.2020 01:52 # −999
bormand 20.09.2020 01:54 # 0
guest8 20.09.2020 01:55 # −999
bormand 20.09.2020 01:54 # 0
guest8 20.09.2020 02:02 # −999
bormand 20.09.2020 02:04 # 0
Только одного типа и размера можно присваивать друг другу.
guest8 20.09.2020 02:07 # −999
bormand 20.09.2020 02:08 # 0
guest8 20.09.2020 02:10 # −999
guest8 20.09.2020 02:13 # −999
bormand 20.09.2020 02:19 # 0
Ну вектора и мапы всякие с кучей работают.
guest8 20.09.2020 02:20 # −999
bormand 20.09.2020 02:20 # 0
Ну как ваш ArrayList.
guest8 20.09.2020 02:23 # −999
bormand 20.09.2020 02:28 # 0
И даже вообще без стандартной либы. Но это уже просто няшная с RAII и шаблонами.
guest8 20.09.2020 02:45 # −999
bormand 20.09.2020 09:30 # 0
И исключения тоже, по крайней мере в gcc. Там чуть-чуть аллокатор зовётся при старте. Возможно и потом при каких-то условиях (слишком жирное исключение или второе подряд?) Я сильно не изучал.
Придётся на них тоже забить если кучи нету.
guest8 20.09.2020 01:53 # −999
bormand 20.09.2020 01:28 # 0
sizeof(bool) is not required to be 1
guest8 20.09.2020 01:23 # −999
MAKAKA 11.11.2020 10:29 # 0
кроме чара и байта вроде, это довольно логично
вероятно, и массив байтов можно читнуть
gost 11.11.2020 12:41 # 0
MAPTbIwKA 11.11.2020 14:03 # 0
if an indeterminate value of type unsigned char or std::byte (since C++17) is assigned to another variable of type (possibly cv-qualified) unsigned char or std::byte (since C++17)(the value of the variable becomes indeterminate, but the behavior is not undefined);
https://en.cppreference.com/w/cpp/language/default_initialization
Если я верно понимаю, то написано так:
Да, ты можешь считать любое значение. Но компьютер не сгорит. А если ты считаешь его из булена, например, то у тебя может нарушиться true != false или еще что-то такое
gost 11.11.2020 15:27 # 0
Ты можешь присвоить indeterminate value из одного байта только другому байту. Если ты потом попытаешься получить доступ к этому indeterminate value (например, попробуешь его вывести на экран) — всё равно получишь UB.
bormand 11.11.2020 15:30 # 0
gost 11.11.2020 15:35 # 0
bormand 11.11.2020 15:43 # 0
Хотя, с другой стороны, они обычно volatile поэтому конпелятор не выёбывается.
guest6 11.11.2020 15:37 # 0
MAPTbIwKA 11.11.2020 15:49 # 0
Ну ведь это же логично: один байт всегда валиден, какое бы говно ты туда ни пихнул.
А int совсем нет.
Допустим, на какой-то системе старший бит инта обязан быть единицией. Или обязан быть чексуммой. Если это не так, то процессор взрывается.
А ты сунул туда говно, и всё сломалось.
> Если ты потом попытаешься получить доступ
хм.
А вот тут я не уверен: является ли UB вывод этого байта в cout?
bormand 11.11.2020 15:50 # 0
Хотя... если он прям сразу в буфер с байтами пишется...
MAPTbIwKA 11.11.2020 15:53 # 0
char a;
char b[1];
b[0] = a;
так можно?
C++ стоит учить именно ради того, чтобы вести такие беседы,лол
bormand 11.11.2020 15:55 # 0
Хотя, емнип, примеры в стандарте не являются нормативными и на них нельзя строить пруфы.
MAPTbIwKA 11.11.2020 15:59 # 0
А взять любые 4 байта и сказать "вот инт" я не могу: это может быть не правдой.
Так я трактую cppref, но надо читат стандарт
gost 11.11.2020 17:02 # 0
§ 6.7.4/2
bormand 11.11.2020 15:54 # 0
MAPTbIwKA 11.11.2020 15:56 # 0
пускай я хочу чтобы там был любой мусор в зависимости от желания компилятора
зачем мне тратить инструкцию на заплнение инта чем-то?
bormand 11.11.2020 15:56 # 0
MAPTbIwKA 11.11.2020 15:57 # 0
bormand 11.11.2020 15:59 # 0
З.Ы. Но по стандарту там и на входе и на выходе конечно же байты.
gost 11.11.2020 17:00 # 0
Все выводящие байт функции (put, putchar, fputc, etc.) принимают int, поэтому вывод через них — является. Аргументы всех функций форматированного вывода (fprintf, printf, etc.) сначала integer promotятся, поэтому через них тоже вывести не получится. А поведение basic_ostream::operator<<(..., unsigned char) по Стандарту я сейчас подробно изучаю.
MAPTbIwKA 11.11.2020 17:07 # 0
интресно про стрим
Pig 20.09.2020 00:56 # 0
gost 20.09.2020 07:27 # 0
Pig 20.09.2020 00:49 # 0
Скобки нахуя?
gost 20.09.2020 07:30 # 0
MAKAKA 11.11.2020 10:50 # 0
Так понимаю, что до 11 у тебя вообще выбора не было: фигурные скобочки писать было нельзя, а круглые (благодаря Most vexing parse) -- тоже.
gost 11.11.2020 12:39 # 0
Pig 20.09.2020 00:50 # 0
gost 20.09.2020 07:31 # 0
Pig 20.09.2020 00:52 # 0
Так вот зачем лалки придумали «cstdio» вместо «stdio.h».
gost 20.09.2020 07:34 # 0
Pig 20.09.2020 00:54 # 0
bormand 20.09.2020 00:56 # +1
Ибо массив на 65535 элементов вместо 65536.
gost 20.09.2020 07:34 # +1
bormand 20.09.2020 09:10 # 0
gost 20.09.2020 09:14 # 0
Да это-то похуй, несбалансированные циклы — это UB. А вот память задумывалась полноценно циклической.
bormand 20.09.2020 09:16 # +1
Слова не мальчика, но крестостандартизатора.
YpaHeLI_ 20.09.2020 09:50 # 0
Что-то гугл мне не помог по этому понятию, где о них почитать?
У Кнута?
bormand 20.09.2020 10:09 # +1
bootcamp_dropout 20.09.2020 10:23 # +2
Pig 20.09.2020 00:55 # 0
gost 20.09.2020 07:34 # 0
guest8 20.09.2020 00:55 # −999
bootcamp_dropout 20.09.2020 01:01 # 0
guest8 20.09.2020 01:04 # −999
bootcamp_dropout 20.09.2020 01:12 # 0
Получается что php получилось довести до совершенства только за 7 версий,
а с++ и за 20 не смогли
guest8 20.09.2020 01:19 # −999
bootcamp_dropout 20.09.2020 01:23 # +1
наверное сишники опять проебались и случилось переполнение численного типа
guest8 20.09.2020 01:30 # −999
bootcamp_dropout 20.09.2020 01:33 # 0
guest8 20.09.2020 14:53 # −999
Myxa 20.09.2020 15:15 # 0
https://bellard.org/jslinux/
Да, тот самый Фабрис.
rotoeb 20.09.2020 15:19 # +2
Myxa 20.09.2020 12:12 # 0
Pig 20.09.2020 00:58 # 0
> public:
Структура и так public. И по смыслу здесь не структура, а класс.
guest8 20.09.2020 01:00 # −999
Pig 20.09.2020 01:03 # 0
gost 20.09.2020 07:35 # 0
Pig 20.09.2020 00:59 # 0
Просто охуенное название переменной.
Pig 20.09.2020 01:00 # 0
Первое о чём подумал, нахуя здесь тип айпишника, и при чем он в brainfuck.
gost 20.09.2020 07:37 # 0
Pig 20.09.2020 11:56 # 0
bootcamp_dropout 20.09.2020 12:02 # 0
guest8 20.09.2020 14:52 # −999
Pig 20.09.2020 01:02 # 0
Pig 20.09.2020 01:27 # 0
std::string
Программа по смыслу - это строка.
gost 20.09.2020 07:38 # 0
Ну и по-хорошему там вообще должен быть std::deque<char> и push_front() в операторах.
bormand 20.09.2020 08:58 # 0
Ну видимо потому что вектор позже появился. А хреновых строк уже понаписали.
Pig 20.09.2020 11:54 # 0
bormand 20.09.2020 12:06 # 0
guest8 20.09.2020 12:29 # −999
bormand 20.09.2020 12:37 # 0
В первых крестах даже контейнеров и алгоритмов то не было, стринг да иострим.
guest8 20.09.2020 12:39 # −999
bormand 20.09.2020 12:43 # 0
А вот для вектора он явно требует амортизированное О(1).
guest8 20.09.2020 12:46 # −999
bormand 20.09.2020 12:47 # 0
guest8 20.09.2020 12:47 # −999
bormand 20.09.2020 12:51 # 0
guest8 20.09.2020 13:15 # −999
bormand 20.09.2020 13:24 # 0
И комитет всегда реально ссыт кому-то что-то сломать.
Там до смешного доходит, когда новые классы добавляют вместо того, чтобы пофиксить старые. И теперь у тебя есть выбор между scoped_lock, unique_lock и lock_guard.
guest8 20.09.2020 13:29 # −999
bormand 20.09.2020 13:30 # 0
guest8 20.09.2020 13:32 # −999
bormand 20.09.2020 13:34 # 0
Oh, my sweet summer child...
bormand 20.09.2020 13:09 # 0
Надо глянуть, может там добавили пункт про О(1) у строки.
defecate-plusplus 20.09.2020 12:42 # +1
bormand 20.09.2020 12:52 # 0
bormand 20.09.2020 09:13 # +2
Или код длиннее 65к - тоже UB?
Pig 20.09.2020 11:53 # 0
bormand 20.09.2020 12:05 # +1
Pig 21.09.2020 22:18 # 0
gost 21.09.2020 22:14 # +1
Подтверждаю, инженерный отдел напутал cell и app.
> Или код длиннее 65к - тоже UB?
А и то правда!
Pig 21.09.2020 22:18 # 0