Чтобы добавлять сообщения и комментарии, .

@OCTAGRAM:
OCTAGRAM

Continuation Passing C Руководство
Вот эту бы штуку — да в разрыв между AdaMagic и EmScripten воткнуть, раз уж с Asyncify не заладилось.
ASYNCIFY has a bad worst-case of large code size: If it needs to modify many methods, it can grow code size very significantly (even 10x more was seen).Вот интересно, а в CPC тоже в 10 раз увеличение из-за нескольких точек входа или как-то попроще всё обошлось? Если там смогли, что не так с EmScripten?

Нашёл пока ключевую проблему в CPC — это отсутствие поддержки longjmp, а при компиляции в режиме C AdaMagic использует longjmp. В чём тут проблема, не понятно. Может быть, всё же можно реализовать.

@qnikst:
qnikst

Кто-нить в lmdb шарит?

#if SIZE_MAX > MAXDATASIZE
if (data->mv_size > ((mc->mc_db->md_flags & MDB_DUPSORT) ? ENV_MAXKEY(env) : MAXDATASIZE))
return MDB_BAD_VALSIZE;
#else


вот кусок кода, у меня стоит MDB_DEVEL, поэтому MAX_KEYSIZE=0, поэтому если запрос запускается с MDB_DUPSORT, то получается, что я всегда попадаю в data->mv_size > 0 => MDB_BAD_VALSIZE?

это так и задумано или бага?

@OCTAGRAM:
OCTAGRAM

Был такой компилятор AdaMagic, умел транслировать Ada в C и C++. Там ещё и в Java компиляция была, но это и сейчас есть в GNAT. Потом SofCheck был куплен AdaCore, и этот компилятор пропал из поля зрения. Однако, его продают под другим брендом тут. Его там завернули в какой-то AppCOE на базе Eclipse, но всё это можно развернуть, выкинуть лишнее и докопаться до самых важных файликов, adacgen.exe и adabgen.exe. На них навешена типа защита. Типа — потому что там, во-первых, есть отладочная информация, во-вторых, неиспользуемые функции не выбрасываются. Очень пригодилась мне такая неиспользуемая функция, как write_license_file, например.

Файл license_key.txt генерить научился, зашифрованные DES файлы типа libadartl.a.enc, разшифровал, для PDF пароль нашёл, поставлю qpdf и тоже разшифрую, впрочем, PDF в открытом виде можно и так скачать с сайта. Сейчас пишу инструкции, чтобы мои действия можно было повторить со следующими версиями. Вообще, не похоже, чтобы новый владелец-индиец разбежался развивать этот компилятор, он, скорее, вокруг достраивает всякие OS абстракторы на C, так что смысла большого обновляться не вижу, но тем не менее. Если думать на тему использования вместе со всякими emscripten, то от libadartl.a толку не очень много, но на всякий случай оно есть. С самим компилятором надо ещё разбираться. Он по умолчанию работает в режиме Ada->C->GCC, но в GCC есть GNAT, который гораздо лучше, и если кто-то заинтересовался AdaMagic, как я, то сценарий изпользования у него будет позабористее, и надо читать доки.

Таким образом, теперь есть компилятор Ada->C/C++, с помощью которого можно целиться во всякие дурацкие, но иногда нужные платформы, хостится он либо на Windows, либо на Linux, а через эмуляторы можно потенциально запускать из ещё большего набора OS. По плану выложить на форум только для зарегистрированных пользователей. Раз и навсегда адвокаты языков программирования, для которых на всех платформах есть транслятор, уедят.

@alex0b:
alex0b

Всё же он больше обычный ребенок в свои 13 лет, чем красноглазый слизень шлепающий тентаклями по клавиатуре спектрума, каким был я. Посему осторожничаю, не вываливаю ему в бошку все эти прикольные штуки и страшные слова, чтобы интерес не убить. Все же детям тяжко с абстракциями, им надо визуально воспринимать. Думаю, может из консоли в гуй вылезти? Ну там шарики-квадратики в 2d порисовать, повращать, подвигать. И в таком бэкграунде двигать в сторону структур и алгоритмов. Есть чо такое в этих ваших виндовсах, чтобы быстро и в минимум строк: либа/фреймворк,  рисующая графические примитивы, скрывающая до поры до времени все кишки? GDI?

@Renha:
Renha

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

Я что спросить хотел, как с такого рода ошибками в более других чем C языках дело обстоит? Сразу отмечу что статический анализатор ничто не сказал потому что ошибка алгоритмическая. Что там хаскель? Что теоретически можно придумать чтобы в torth сделать лучше?

@OCTAGRAM:
OCTAGRAM

Микропроцессоры и вычислительные комплексы семейства «Эльбрус»
Искал подробности CHERI-подобных возможностей в Эльбрусе и нашёл в этой книге на странице 200: «Обеспечение защищённого исполнения программ на языках С и С++»

@lurker:
lurker

Бессонная ночь. Компиляю эмскриптен из исходников, т к релизная версия падает при попытке собрать веб ассамблею. Которая, в отличие от асмжс, обещает ложить хуй на выравнивание памяти и, т о, эта сраная сипипишная либа, возможно, будет работать корректно.

@qnikst:
qnikst

какие похожие программы и какие разные результаты.

* paste.pound-python.org
* paste.pound-python.org

опять лезть в RTS :/

@lurker:
lurker

ну и в конце дня: автор (вроде) embind говорил (в 2014) что в const std::string& можно передать ArrayBuffer. оно, конечно, можно, но только при этом если в ArrayBuffer текст, то всё норм, а если нет — не работает.

@lurker:
lurker

получаешь, значит, какой-то мусор вроде implicit declaration of function 'lseek' is invalid in C99, вбиваешь его в гугель, попадаешь в гитхаб багу совершенно левого проекта, и там какой-то перец исправляет это внесением пары строк в gzguts.h разумеется, в апстриме об этом фиксе никто не слышал. и вот что бы я делал без гугеля.

@L29Ah:
L29Ah

long data_len_s = ftell(f);

215 if (data_len_s < 0) {
(gdb)
220

(gdb) p data_len_s
$1 = 9223372036854775807


ШТО

@qnikst:
qnikst

Есть программа (RTS), которая может создавать треды в разные странные моменты обычным pthread_create . Есть специальный superduper_thread_create, который создает нужные мне треды, но взять и перевести на него RTS неполучится (лень). Так же есть так же специальный метод, который позволяет конвертировать обычный posix тред в superduper тред.

Вопрос, есть ли какие-либо средства для автоматизации вызова функции конвертации треда в специальный после вызова pthread_create

@OCTAGRAM:
OCTAGRAM

«Под Куполом» спонсировался Microsoft, и поэтому там у всех виндопланшеты с Windows 8. А в S02E08 хакер ломает комп, и что же на компе? Неужели тоже винды? Да, винды. Седьмые.

Но в восьмёрке–то все сишные и плюсовые компоненты переписали на Аде, такой Windows хакеры бы не сломали, уж конечно

@waterlaz:
waterlaz

Нашел в OpenCV вот такие вот грязные хаки:

return (int)(size_t)(void*)pthread_self();
Ну и, конечно, это не работает со всеми версиями libc //_-

@Strephil:
Strephil

LO в очередной раз dumped core. В логе много про pthread.
Хм, я думал, LO на крестах написан.
Тогда понятно, почему всё время валится, слыханное ли дело, pthread.

@dluciv:
dluciv

pp.vk.me

@L29Ah:
L29Ah

CompCert нынче искаропки может собрать FreeRTOS или ChibiOS?

@RA:
RA

Нужна помощь знающих людей по си. Есть php расширение
github.com
оно преобразует массив в dom-документ. Но иногда вылетает "recursion detected", см строку 196. И я не знаю почему это могло бы происходить.
Тут может ещё скил в php расширениях нужен.

@Strephil:
Strephil

21st Century C, 2nd Edition
C Tips from the New School
Use Autotools, C’s de facto cross-platform package manager
Бля.

@Strephil:
Strephil

У меня две переменные, одна из них какая-то арифметическая переменная long, вторая — счётчик, unsigned long.
Мне нужно поделить одну на другую.
Как правильно это сделать?

@L29Ah:
L29Ah

‰ grep -R '#define MAX(a,' /usr/include | wc -l
18

@rion:
rion

объявил структурку, в которой в самом-присамом худшем случае с учетом всех выравниваний должно быть 36 байт.
добавил к ней __attribute__((__packed__)) чтоб получилось 15 байт.
делаю на неё sizeof. получаю 39 байт.
сижу думаю... долго думаю... всё ещё думаю...

@Strephil:
Strephil

так как предлагаемые банки видеопамяти адресуются с использованием типа "byte(uint8_t )", а обрабатываются как тип "word(uint32_t )".
Це — отличный язык программирования, всем рекомендую.
opennet.ru

@qnikst:
qnikst

Вот есть в rust enum, я делаю repr(C) и надеюсь в сях (на самом деле в хацкелях) получить отображение этой структурки. Т.к. документация зашкаливает или я не умею её искать то беру gdb и смотрю что там вижу:

(gdb) print a
$3 = {{RUST$ENUM$DISR = BCC, __0 = 0, __1 = 4294967295}, {
RUST$ENUM$DISR = BCC, __0 = 18446744073709551615}}
(gdb) ptype a
type = union RustEnum {
struct A;
struct BCC;
}
(gdb) ptype struct A
type = struct A {
enum class RustEnum RUST$ENUM$DISR;
i32 __0;
u32 __1;
}
(gdb) ptype struct BCC
type = struct BCC {
enum class RustEnum RUST$ENUM$DISR;
u64 __0;
}
(gdb) ptype enum RustEnum
type = enum class RustEnum {A, BCC}

вопрос, что за чудо этот enum class и каким образом мне написать сишный typedef, чтобы правильно отображал данную структуру.

Если я правильно понимаю, то enum class это более умный enum и я могу радостно использовать __tag вместо этого, а что с размером? По каким-то докам минимальный достаточный для отображения типов, так ли это? и могу ли я положиться на порядок или нет?

@lolicon:
lolicon

lord-n.narod.ru

@L29Ah:
L29Ah

geektimes.ru

@qnikst:
qnikst

В новом gcc появился -fsanitize, который заменяет пол валгринда и ловит датарейсы, use-after-freeи out-of-bounds доступы (в рантайме конечно). Вопрос, кто из гентушников в CFLAGS добавлял systemwide и как много сломается?

@Renha:
Renha

GUI на чистом Си
linux.org.ru

@SannySanoff:
SannySanoff

Дооптимизился компилятором CN1 (микро-оптимизациями) до усрачки, но дальше уже нужно оптимизировать алгоритмы сверху, и поэтому перестал 8)

Заценил оптимизатор LLVM/CLANG (кстати уперся в его глюк и забил — он дожонглировался регистрами: пишет через один offset register, читает через другой через некоторое время, а смещение-то не сходится!).

На картинке сгенерированный код по симуляции стека и результат его компиляции для ARM. Так эта скотина все SP++ и SP-- вычисляет, и даже не изменяет сам регистр, а только индекс при регистре, когда выполняет последовательность операций. Получается тупа куча mov без inc/dec. Очень было приятно видеть такой уровень оптимизации, я доволен прогрессом в этой сфере. Микро-оптимизировать сишечку в таких условиях становится сложновато.



@SannySanoff:
SannySanoff

Шланг полтора часа уже компилит:

ID COMMAND %CPU TIME #TH #WQ #PORT MEM
10504 clang 97.4 95:07.42 1/1 0 12 137M

Я немного пригрузил егойный регистровый аллокатор. Там есть один метод....

BC_DUP(); / DUP /
PUSH_INT(73);
PUSH_INT(7);
CHECK_ARRAY_ACCESS(3, SP[-2].data.i); / IASTORE / ((JAVA_ARRAY_INT*) ((JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3; BC_DUP(); / DUP */
PUSH_INT(74);
PUSH_INT(17);
CHECK_ARRAY_ACCESS(3, SP[-2].data.i); / IASTORE / ((JAVA_ARRAY_INT*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;
BC_DUP(); / DUP /
PUSH_INT(75);
PUSH_INT(0); / ICONST_0 /
CHECK_ARRAY_ACCESS(3, SP[-2].data.i); / IASTORE /
((JAVA_ARRAY_INT*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;
BC_DUP(); / DUP /

Вот такого добра среднее количество, штук 800, и шланг собирается SP сделать регистровой переменной (я его убедил наконец-то).

Не, ну я, конечно, в таких методах не буду больше на этом настаивать, мне как-то долговато ждать билда.

@OCTAGRAM:
OCTAGRAM

Сегодня смог продолжить разбираться с libipset ( #2826442 ). Из спортивного интереса попытался обойтись без C, заюзать GCC'шные фичи через доступ к фичам GCC из GNAT. Так вот, эта штука успешно заимпортировалась:
procedure VA_Start (Arg_Ptr : in out System.Address; Prev_Param : System.Address);
pragma Import (Intrinsic, VA_Start, "__builtin_va_start");

Однако, при попытке ею воспользоваться из адской процедуры получается error: 'va_start' used in function with fixed args. Пытался полечить, добавив функции GCC'шный аттрибут. Атрибуты в GNAT можно навешивать через pragma Machine_Attribute, а сам список атрибутов можно посмотреть здесь. Там всякая всячина, но вот заставить функцию быть varargs там нету. Так что я в печали. То немногое из C, что недоступно в GNAT, всё–таки добралось до меня. Можно попробовать найти не–built-in версию va_start, в Delphi прокатывало, либо подключать libffi, заодно и трамплин будет, чем сделать.

@L29Ah:
L29Ah

У кого как прикручен gdb к vim?

@waterlaz:
waterlaz

Вчера полчаса не мог понять, почему a[-i] сегфолтится, но с *(a-i) все в порядке.
Оказалось, все дело в том, что unsigned int i;
//_-

@reflechant:
reflechant

Чем больше я узнаю Python, тем больше он мне не нравится. А чем больше узнаю C — тем больше нравится. Хотя, конечно, include это уродство.

@L29Ah:
L29Ah

marc.ttias.be

@L29Ah:
L29Ah

Чёт сломался искаробочный(?) фолдинг для сишных исходников. Кто чо юзает?

@Renha:
Renha

Жуйк, я си-нуб, ругай. Это по задумке реализация буфера для пакетов размером до pc_input_packet байт. Пакеты нельзя бить по кусочкам, поэтому некоторая избыточность в конце буфера кажется неизвестна.

#define pc_input_size 1024
#define pc_input_packet 256
uint16_t pc_input_write_pointer= 0;
uint8_t pc_input_buffers[pc_input_size];
uint16_t pc_input_read_pointer= 0;
uint16_t pc_input_toread()
{//if return is zero, nothing to read, else read from returned address
  if (pc_input_read_pointer > (pc_input_size - pc_input_packet))
    pc_input_read_pointer= 0;
  if (pc_input_read_pointer==pc_input_write_pointer)
    return 0;
  else
    return pc_input_buffers+pc_input_read_pointer;
}
uint16_t pc_input_towrite(uint16_t amount)
{//if return is zero, could not write, else write to returned address
  if (pc_input_write_pointer > (pc_input_size - pc_input_packet))
    pc_input_write_pointer= 0;
  if (pc_input_write_pointer > pc_input_read_pointer)
    return pc_input_buffers+pc_input_write_pointer;
  else if (pc_input_read_pointer - pc_input_write_pointer > pc_input_packet)
    return pc_input_buffers+pc_input_write_pointer;
  else return 0;
}

@L29Ah:
L29Ah

x41-dsec.de

@L29Ah:
L29Ah

Как отловить переполнение стека?

@increaseblog:
increaseblog

Как скачать видео с сайта: increaseblog.ru