История изменений
Исправление 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 есть.