Пример кода с СИ getline не корректный, line - указатель, вы передаете туда массив. Массивы != указатели в си, хотя вы и можете использовать адресную арифметику при работе с массивами. Вы делаете sizeof(line) хотя в сигнатура функции у нас ssize_t getline(char **lineptr, size_t *n, FILE *stream). Передача указателя в функцию говорит что он будет изменен. Если попробовать скомпилировать ваш пример то gcc,clang выдаст варнинги о том что не нужно так делать. И так мы имеем, если программист не понимает что он делает и игнорирует предупреждения компилятор разрешает уму вставить патроны и отстрелить себе ногу.
Массивы кастятся к типу указателя от каждого чиха. И это большая проблема на самом деле. Тут согласен. Вызов построен совершенно не правильно. Но неправильный free все равно будет вызван
Отличный доклад, спасибо!
Спасибо за видео, долго думал, надо ли учить Rust. Теперь убедился, что стоит.
Спасибо!
Пример кода с СИ getline не корректный, line - указатель, вы передаете туда массив. Массивы != указатели в си, хотя вы и можете использовать адресную арифметику при работе с массивами. Вы делаете sizeof(line) хотя в сигнатура функции у нас ssize_t getline(char **lineptr, size_t *n, FILE *stream). Передача указателя в функцию говорит что он будет изменен.
Если попробовать скомпилировать ваш пример то gcc,clang выдаст варнинги о том что не нужно так делать. И так мы имеем, если программист не понимает что он делает и игнорирует предупреждения компилятор разрешает уму вставить патроны и отстрелить себе ногу.
Массивы кастятся к типу указателя от каждого чиха. И это большая проблема на самом деле.
Тут согласен. Вызов построен совершенно не правильно. Но неправильный free все равно будет вызван
главное преймущество раста это его компилятор-логи ибо он очень помогает дэбажить код :]
en.wikipedia.org/wiki/Category:Systems_programming_languages
Sanus?