LINUX.ORG.RU

История изменений

Исправление 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, то наверное только писать С-обертку.