История изменений
Исправление MOPKOBKA, (текущая версия) :
Они просто реализуются через дополнительный аргумент void *data, учитывая любовь Go-программистов к повторению if err
Ужасно замыкания реализуются, на уровне ручных vtable. В одном ряду с if err даже не стоит.
Да вроде близко, хотя в C есть setjmp/longjmp который позволяет строить исключения, в Golang есть подобный механизм?
int writepng_encode_image(mainprog_info *mainprog_ptr)
{
png_structp png_ptr = (png_structp)mainprog_ptr->png_ptr;
png_infop info_ptr = (png_infop)mainprog_ptr->info_ptr;
if (setjmp(mainprog_ptr->jmpbuf)) {
png_destroy_write_struct(&png_ptr, &info_ptr);
mainprog_ptr->png_ptr = NULL;
mainprog_ptr->info_ptr = NULL;
return 2;
}
png_write_image(png_ptr, mainprog_ptr->row_pointers);
png_write_end(png_ptr, NULL);
return 0;
}
Не, просто синтаксис массивов. Как, например, определить двойной массив?
Двумерный массив определяется просто int massiv[10][20]
, но по моему ты смешиваешь массивы непрерывные, и массивы указателей, тебе какой нужен? Для чего VLA я не понял.
const char* является константой, но не гарантирует неизменяемость
Ну без хаков с преобразованием ты не напишешь s[0] = 0 тоже.
таблицы преобразований
А что это?
Прием с препроцессором. Как в MFC, или Quake.
BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
ON_MESSAGE(WM_MYMESSAGE2, OnMyMessage2)
END_MESSAGE_MAP()
Так же описываются поля структур, строится карта по которой потом можно сериализовать или десериализовать структуры.
А к чему в Go нет доступа? Сисколлы есть, вызов C есть.
Даже если интерфейс простой, то излишне многословно, а если много макросов то еще сложнее, а если setjmp как в libpng, то наверное только писать С-обертку.
Исправление MOPKOBKA, :
Они просто реализуются через дополнительный аргумент void *data, учитывая любовь Go-программистов к повторению if err
Ужасно замыкания реализуются, на уровне ручных vtable. В одном ряду с if err даже не стоит.
Да вроде близко, хотя в C есть setjmp/longjmp который позволяет строить исключения, в Golang есть подобный механизм?
int writepng_encode_image(mainprog_info *mainprog_ptr)
{
png_structp png_ptr = (png_structp)mainprog_ptr->png_ptr;
png_infop info_ptr = (png_infop)mainprog_ptr->info_ptr;
if (setjmp(mainprog_ptr->jmpbuf)) {
png_destroy_write_struct(&png_ptr, &info_ptr);
mainprog_ptr->png_ptr = NULL;
mainprog_ptr->info_ptr = NULL;
return 2;
}
png_write_image(png_ptr, mainprog_ptr->row_pointers);
png_write_end(png_ptr, NULL);
return 0;
}
Не, просто синтаксис массивов. Как, например, определить двойной массив?
Двумерный массив определяется просто int massiv[10][20]
, но по моему ты смешиваешь массивы непрерывные, и массивы указателей, тебе какой нужен? Для чего VLA я не понял.
const char* является константой, но не гарантирует неизменяемость
Ну без хаков с преобразованием ты не напишешь s[0] = 0 тоже.
таблицы преобразований
А что это?
Прием с препроцессором. Как в MFC, или Quake.
BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
ON_MESSAGE(WM_MYMESSAGE2, OnMyMessage2)
END_MESSAGE_MAP()
А к чему в Go нет доступа? Сисколлы есть, вызов C есть.
Даже если интерфейс простой, то излишне многословно, а если много макросов то еще сложнее, а если setjmp как в libpng, то наверное только писать С-обертку.
Исходная версия MOPKOBKA, :
Они просто реализуются через дополнительный аргумент void *data, учитывая любовь Go-программистов к повторению if err
Ужасно замыкания реализуются, на уровне ручных vtable. В одном ряду с if err даже не стоит.
Да вроде близко, хотя в C есть setjmp/longjmp который позволяет строить исключения, в Golang есть подобный механизм?
int writepng_encode_image(mainprog_info *mainprog_ptr)
{
png_structp png_ptr = (png_structp)mainprog_ptr->png_ptr;
png_infop info_ptr = (png_infop)mainprog_ptr->info_ptr;
if (setjmp(mainprog_ptr->jmpbuf)) {
png_destroy_write_struct(&png_ptr, &info_ptr);
mainprog_ptr->png_ptr = NULL;
mainprog_ptr->info_ptr = NULL;
return 2;
}
png_write_image(png_ptr, mainprog_ptr->row_pointers);
png_write_end(png_ptr, NULL);
return 0;
}
Не, просто синтаксис массивов. Как, например, определить двойной массив?
Двумерный массив определяется просто int massiv[10][20]
, но по моему ты смешиваешь массивы непрерывные, и массивы указателей, тебе какой нужен? Для чего VLA я не понял.
const char* является константой, но не гарантирует неизменяемость
Ну без хаков с преобразованием ты не напишешь s[0] = 0 тоже.
таблицы преобразований
А что это?
Прием с препроцессоромю. Как в MFC, или Quake.
BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
ON_MESSAGE(WM_MYMESSAGE2, OnMyMessage2)
END_MESSAGE_MAP()
А к чему в Go нет доступа? Сисколлы есть, вызов C есть.
Даже если интерфейс простой, то излишне многословно, а если много макросов то еще сложнее, а если setjmp как в libpng, то наверное только писать С-обертку.