LINUX.ORG.RU

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

Исправление kaldeon, (текущая версия) :

Связать функцию с типом по единому интерфейсу можно и через _Generic

Честно говоря, сложно сравнить, но ставит под сомнение мой пример. Я вёл к тому, что в Go не нужно вручную делать vtable. Но ведь замена типа возможна и в C без vtable, можно просто обернуть в другую структуру.

Ну тогда только интерфейсы. Я считаю, этого достаточно, чтобы язык считался ОО. На мой взгляд, самый важный принцип ООП — это энкапсуляция, связывание данных и функций. Класс — не единственный подход, объекты в Go есть, наследование вообще не особо-то нужно в ООП.

Они просто реализуются через дополнительный аргумент void *data, учитывая любовь Go-программистов к повторению if err

Ужасно замыкания реализуются, на уровне ручных vtable. В одном ряду с if err даже не стоит.

Не знаю что это, перегрузка оператора []?

Не, просто синтаксис массивов. Как, например, определить двойной массив? Можно int foo[][nconst], но тогда придётся в функции передавать VLA. Или можно передавать привычный int**, но тогда определение массива будет int *foo[] = (int*[]){(int[]){1, 2, 3}}.

В общем, кошмар. Спустя годы мучений становится понятно откуда у этого кошмара ноги растут, но легче от этого не становится.

изменяемые строки

Странное утверждение.

Что странного? Какие бы данные не были в переменной, если это string, их нельзя изменить (кроме хаков).

В Си char* ничего не гарантирует. const char* является константой, но не гарантирует неизменяемость.

таблицы преобразований

А что это?

Этот минус затмевает плюс того, что С имеет доступ ко всей системе

А к чему в Go нет доступа? Сисколлы есть, вызов C есть.

Исправление kaldeon, :

Связать функцию с типом по единому интерфейсу можно и через _Generic

Честно говоря, сложно сравнить, но ставит под сомнение мой пример. Я вёл к тому, что в Go не нужно вручную делать vtable. Но ведь замена типа возможна и в C без vtable, можно просто обернуть в другую структуру.

Ну тогда только интерфейсы. Я считаю, этого достаточно, чтобы язык считался ОО. На мой взгляд, самый важный принцип ООП — это энкапсуляция, связывание данных и функций. Класс — не единственный подход, объекты в Go есть, наследование вообще не особо-то нужно в ООП.

Они просто реализуются через дополнительный аргумент void *data, учитывая любовь Go-программистов к повторению if err

Ужасно замыкания реализуются, на уровне ручных vtable. В одном ряду с if err даже не стоит.

Не знаю что это, перегрузка оператора []?

Не, просто синтаксис массивов. Как, например, определить двойной массив? Можно int foo[][nconst], но тогда придётся в функции передавать VLA. Или можно передавать привычный int**, но тогда определение массива будет int foo[] = (int[]){(int[]){1, 2, 3}}.

В общем, кошмар. Спустя годы мучений становится понятно откуда у этого кошмара ноги растут, но легче от этого не становится.

изменяемые строки

Странное утверждение.

Что странного? Какие бы данные не были в переменной, если это string, их нельзя изменить (кроме хаков).

В Си char* ничего не гарантирует. const char* является константой, но не гарантирует неизменяемость.

таблицы преобразований

А что это?

Этот минус затмевает плюс того, что С имеет доступ ко всей системе

А к чему в Go нет доступа? Сисколлы есть, вызов C есть.

Исходная версия kaldeon, :

Связать функцию с типом по единому интерфейсу можно и через _Generic

Честно говоря, сложно сравнить, но ставит под сомнение мой пример. Я вёл к тому, что в Go не нужно вручную делать vtable. Но ведь замена типа возможна и в C без vtable.

Ну тогда только интерфейсы. Я считаю, этого достаточно, чтобы язык считался ОО. На мой взгляд, самый важный принцип ООП — это энкапсуляция, связывание данных и функций. Класс — не единственный подход, объекты в Go есть, наследование вообще не особо-то нужно в ООП.

Они просто реализуются через дополнительный аргумент void *data, учитывая любовь Go-программистов к повторению if err

Ужасно замыкания реализуются, на уровне ручных vtable. В одном ряду с if err даже не стоит.

Не знаю что это, перегрузка оператора []?

Не, просто синтаксис массивов. Как, например, определить двойной массив? Можно int foo[][nconst], но тогда придётся в функции передавать VLA. Или можно передавать привычный int**, но тогда определение массива будет int foo[] = (int[]){(int[]){1, 2, 3}}.

В общем, кошмар. Спустя годы мучений становится понятно откуда у этого кошмара ноги растут, но легче от этого не становится.

изменяемые строки

Странное утверждение.

Что странного? Какие бы данные не были в переменной, если это string, их нельзя изменить (кроме хаков).

В Си char* ничего не гарантирует. const char* является константой, но не гарантирует неизменяемость.

таблицы преобразований

А что это?

Этот минус затмевает плюс того, что С имеет доступ ко всей системе

А к чему в Go нет доступа? Сисколлы есть, вызов C есть.