>Просто тупо аллокейтить памяти для данных в си - это совсем не сложно. Ни для кого.
Ну да :) Не сложно. malloc, calloc, free... И большинство ошибок в программах на C и C++ связанны с указателями, с такой простой вещью. Потому что одно дело "знать об адресе" и о malloc/free, а другое дело управлять всем зоопарком указателей, который к алгоритму никакого отношения не имеет. И ладно еще, если ошибка приводит к немедленному сваливанию программы (что бывает далеко не всегда). Нередко все приводит к тому, что вы сталкиваетесь с неожиданными данными в неожиданном месте всего лишь потому, что где-то (как вариант) ошиблись с индексом, скажем, в двухмерном массиве (а такая структура данных вполне обычна для расчетных задач, и не нужно никаких списков). И на стеке вы сможете задать лишь массивы фиксированной размерности, и если они вас не устроили - добро пожаловать в мир указателей со всеми его прелестями. Которые не сложные (особенно если вы уже собаку съели на расшифровке определений типов в C), но на грабли которых все налево и направо наступают. А найти более менее сложную программу (даже коммерческую), которая написана на C и при этом не страдает от утечек памяти хотя бы... Ну может это и возможно, но это не типично для таких программ.
По этому C нормально использовать там, где указатели именно требуются, а если есть возможность обойтись и без них - что угодно, только не C/С++.
До той же CUDA можно и на Java достучаться, к примеру. Но при этом прийдется вылавливать только ошибки, связанные с алгоритмом, и не тратить время на лозоходство по программе в поисках ошибок в работе с памятью.
no subject
Date: 2015-01-11 06:19 pm (UTC)Ну да :) Не сложно. malloc, calloc, free...
И большинство ошибок в программах на C и C++ связанны с указателями, с такой простой вещью.
Потому что одно дело "знать об адресе" и о malloc/free, а другое дело управлять всем зоопарком указателей, который к алгоритму никакого отношения не имеет.
И ладно еще, если ошибка приводит к немедленному сваливанию программы (что бывает далеко не всегда). Нередко все приводит к тому, что вы сталкиваетесь с неожиданными данными в неожиданном месте всего лишь потому, что где-то (как вариант) ошиблись с индексом, скажем, в двухмерном массиве (а такая структура данных вполне обычна для расчетных задач, и не нужно никаких списков). И на стеке вы сможете задать лишь массивы фиксированной размерности, и если они вас не устроили - добро пожаловать в мир указателей со всеми его прелестями.
Которые не сложные (особенно если вы уже собаку съели на расшифровке определений типов в C), но на грабли которых все налево и направо наступают.
А найти более менее сложную программу (даже коммерческую), которая написана на C и при этом не страдает от утечек памяти хотя бы... Ну может это и возможно, но это не типично для таких программ.
По этому C нормально использовать там, где указатели именно требуются, а если есть возможность обойтись и без них - что угодно, только не C/С++.
До той же CUDA можно и на Java достучаться, к примеру. Но при этом прийдется вылавливать только ошибки, связанные с алгоритмом, и не тратить время на лозоходство по программе в поисках ошибок в работе с памятью.