LINUX.ORG.RU

Научите, пожалуйста, создавать (проектировать?) программы на основе Boehm GC

 ,


0

1

Как мы только что выяснили, и Gtk+, и Qt - полный застой и болото по сравнению с уровнем разработки на других платформах (таких как JavaScript и lisp).

Поэтому хотелось бы понять, как спроектировать программу на основе Boehm GC.

Сначала, понятное дело, нужно
emerge dev-libs/boehm-gc
[ebuild R ] dev-libs/boehm-gc-7.6.4::gentoo USE=«cxx threads -static-libs» ABI_X86=«32 (64) (-x32)» 1 095 KiB
## [R] [sabayonlinux.org] dev-libs/boehm-gc-7.6.4|0 [7.6.4|0]

equery files boehm-gc
/usr/include/gc.h
/usr/lib64/libgc.so.1.3.2

Читаем про GC_MALLOC и GC_MALLOC_ATOMIC.

затем копипастим из hello world.

// if the collector is also built with --enable-gc-debug 
// #define GC_DEBUG

// let the collector keep track of thread creation
// keep per-thread allocation caches
#define GC_THREADS
#include <gc.h>

int main()
{
    int *q = (int *) GC_MALLOC_ATOMIC(sizeof(int));
    *q = 42;
    return *q;
}

собираем, запускаем, смотрим:
gcc -I/usr/include test.c /usr/lib64/libgc.so -o test
$ ./test
$ echo $?
42

$ GC_PRINT_STATS=true ./test
Grow heap to 64 KiB after 0 bytes allocated
Number of processors = 4
Started 3 mark helper threads
Initiating full world-stop collection!

--> Marking for collection #1 after 0 allocated bytes
GC #1 freed 0 bytes, heap 64 KiB
World-stopped marking took 0 msecs (0 in average)
In-use heap: 0% (0 KiB pointers + 0 KiB other)
0 finalization entries; 0/0 short/long disappearing links alive
0 finalization-ready objects; 0/0 short/long links cleared
Finalize plus initiate sweep took 0 + 0 msecs
Complete collection took 0 msecs
Adding block map for size of 1 granules (16 bytes)

Дальше жалкие потуги на размышления заходят в тупик. Цель - выставить объектную модель для программ на JavaScript/Lisp (там тоже свой другой gc) и Python.

Ответ на: комментарий от shdown

ну я согласен не на Boehm GC, а на какой-нибудь SGen. Что это меняет? Он тоже на C, только пользоваться сложнее, так как документации меньше.

Я не могу просто взять GObject-ы, сделать из них модель и выставить в питон, меня от рефкаунтинга воротит(тошнит/мутит).

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Einstok_Fair

Ты какой-то хернёй страдаешь, правда.

Объясни, что именно тебе нужно сделать.

P.S. У CPython GC основан на рефкаунтинге, лол. Как ты его обходить собрался?

shdown
()
Последнее исправление: shdown (всего исправлений: 1)
Ответ на: комментарий от shdown

У CPython GC основан на рефкаунтинге, лол.

а это уже не мои проблемы, а типовых пользователей моей библиотеки.

Как ты его обходить собрался?

лично я буду использовать мою библиотеку из JavaScript

Объясни, что именно тебе нужно сделать.

Мне нужен туториал, как модно писать объектные библиотеки

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Einstok_Fair

а это уже не мои проблемы, а типовых пользователей моей библиотеки.

Это твои проблемы, если ты собрался взаимодействовать с Python из Си.

Мне нужен туториал, как модно писать объектные библиотеки

Всё ещё непонятно, что ты хочешь.

shdown
()
Ответ на: комментарий от shdown

Это твои проблемы, если ты собрался взаимодействовать с Python из Си.

не-не. Я прочитаю статью
https://docs.python.org/3/extending/extending.html

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

непонятно, что ты хочешь.

почему?

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Einstok_Fair

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

Каких корневых? Для boehm? Он и так не станет с ними ничего делать, потому что не он их аллоцировал вообще.

> непонятно, что ты хочешь.
почему?

Либо потому, что ты плохо объясняешь, либо потому, что ты просто запутался во всей этой хрени.

shdown
()

Цель - выставить объектную модель для программ на JavaScript/Lisp (там тоже свой другой gc) и Python.

вот поэтому и ГТК и QT умерли, никому не нужно писать «стабильный ГУЙ с идеальным кодом который будет работать 1000лет»

нужно писать ГУЙ который работает сегодня

задача «написать рабочий ГУЙ» давно превошла «кодописание ради кодописания»

берешь електрон и любую js либо что окошки рисует(очевидный пример jquery UI)

missxu
()
Ответ на: комментарий от Einstok_Fair

Мне нужен туториал, как модно писать объектные библиотеки

писать код ради того чтобы пистаь код?
как эта болезнь называется

делать рабочее решение лучше

missxu
()
Ответ на: комментарий от missxu

Да :( JS и Electron — отвратительное невменяемое говнище, после работы с которым хочется долго мыться и начать посещать психотерапевта. Но никто другой не предложил способа делать GUI, который будет реально работать с полпинка везде, при этом привычно и не выглядя как говно. Ждём, когда из этого вырастет что-то не только работающее, но и вменяемое, не калечащее умы и души.

anonymous
()
Ответ на: комментарий от shdown

Довольно полезно и занятно. Кстати, полезно было бы распознавать первопричины XY-проблем...

anonymous
()
Ответ на: комментарий от anonymous

Но никто другой не предложил способа делать GUI, который будет реально работать с полпинка везде

LispWorks предложил. Delphi предложил.

anonymous
()
Ответ на: комментарий от hateyoufeel

Delphi работает на макоси?

Вопрос в другом. А кто вообще работает на макоси? 5% работающих? Ну так для этих эксклюзивных пользователей есть эксклюзивный инструментарий, которым не интересуются остальные условные 95%.

anonymous
()

В чём проблема? Берёшь и пользуешься. Всё то же самое, только вместо malloc другая функция и можно забить на free.

Но если ты хочешь ООП без боли, то тебе нужны плюсы. Этот GC его тоже поддерживает.

KivApple ★★★★★
()
Ответ на: комментарий от anonymous

Вопрос в другом. А кто вообще работает на линуксе? 1% работающих? Ну так для этих эксклюзивных пользователей есть эксклюзивный инструментарий, которым не интересуются остальные условные 99%.

Вот поэтому и не взлетело, в отличие от Electron.

anonymous
()

Зачем тебе два GC?

Делаешь просто функцию myobject_destroy(myobject*) и дергаешь её из деструктора соответствующего скриптового объекта.

anonymous
()
Ответ на: комментарий от anonymous

Вопрос в другом. А кто вообще работает на линуксе? 1% работающих?

Ну, таки, да. 5% условных на макоси, 1% условных на линуксе, поэтому все те, кому нужен отзывчивый и надёжный GUI, используют Windows. И пишут GUI-приложения под него же.

Вот поэтому и не взлетело, в отличие от Electron.

Ну так Windows же взлетело. И Delphi там очень даже рулит, вместе с C#.

anonymous
()

Цель - выставить объектную модель для программ на JavaScript/Lisp (там тоже свой другой gc) и Python.

Лучше просто используй GObjectIntrospection.

Автоматически получишь доступ и из JavaScript/Lisp/Python и ещё из полусотни языков.

monk ★★★★★
()
Ответ на: комментарий от hateyoufeel

Я не хочу тебя расстраивать, но сейчас 2018, не 1998.

Я не хочу тебя расстраивать, но сейчас до сих пор нет адекватного общедоступного инструмента для быстрого создания надёжного и отзывчивого GUI. Подобные инструменты стоят приличных денег, и Delphi (в т.ч.), несмотря на всю скептику и ужимки, прекрасно покупаются и используются для нормальной работы, для бизнеса, а не для занятий онанизмом.

anonymous
()
Ответ на: комментарий от anonymous

Ну так Windows же взлетело. И Delphi там очень даже рулит

Рим пал, центурион

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.