ну нельзя же библиотеки на все случаи жизни включить в стандарт. он и так очень большой, больше 1,000 страниц если правильно помню. какая разница, какие проблемы слинковать любую понравившуюся библиотеку.
Тем что это массив указателей. И работа с ними небезопасно. Приходиться заниматься контролем над этими данными, чтобы не выйти за пределы. Все это отнимает много времени.
Давным-давно к Тэнь-Пу пришел ученик и спросил его о смысле плоти. Тэнь-Пу долго думал и сказал: есть ум. О плоти поговорим позже. Так вот, ум следует пополнять постоянно, и применять его тоже нужно постоянно. Более того, его нужно применять on demand, причем именно его, а не заменители. То есть ты делашь что-то, - ты должен знать и понимать, что ты при этом делаешь.
Например, как работает двигатель автомобиля ты знаешь. Все шурупы и винты запоминать нет смысла. А теперь надо поменять масло. Для этого вспоминать как устроен весь движок не надо, а лишь схематическое знания хватает.
Итак, ради одного юзкейса (матрицы) ты готов использовать язык негодяев. Вместо того, чтобы взять хороший, в меру мощный и в меру скромный язык с хорошей органичной семантикой (Си), который есть не что иное как любой современный компьютер. Где ты можешь внедрять мощные абстракции, не теряя контроля над вычислительной средой. Неумение организовать код красиво ты стремишься компенсировать фичастостью используемых инструментов.
Итак, ради одного юзкейса (матрицы) ты готов использовать язык негодяев. Вместо того, чтобы взять хороший, в меру мощный и в меру скромный язык с хорошей органичной семантикой (Си), который есть не что иное как любой современный компьютер. Где ты можешь внедрять мощные абстракции, не теряя контроля над вычислительной средой. Неумение организовать код красиво ты стремишься компенсировать фичастостью используемых инструментов.
Вместо того, чтобы взять хороший, в меру мощный и в меру скромный язык с хорошей органичной семантикой (Си), который есть не что иное как любой современный компьютер.
Выдыхай. Мне нужны классы, шаблоны, безопасная работа с указателями. Есть они в Си?
Неумение организовать код красиво ты стремишься компенсировать фичастостью используемых инструментов.
Не столько красота кода важна, сколько простота работы с ним.
>Есть ведь всякие vector, list, queue, map, set. Матрицы того же порядка.
Все вышеперечисленные контейнеры и адапторы я использую каждый день (ну разве что, list и queue — несколько реже). А вот за четыре года работы (domain: compilers, static code analyzers) классическая «прямоугольная» матрица мне так и не понадобилась.
Да, в одном месте у меня используется самописная «разреженная» матрица (которая по сути — хэш-таблица, в которой ключом являются координаты ячейки), но это совсем другая структура данных.
Если человек не любит писать лишний и бесполезный код, без которого вполне можно было бы обойтись (а явный вызов оператора delete обычно таковым и является), то это как раз признак того, что он НЕ говнокодер, а человек разумный.
vector вполне подходит для матриц, тогда delete писать не придётся. всё равно если нужны матрицы, то их наверняка придется передавать во внешние либы (blas, lapack ...), а не использовать напрямую
>vector вполне подходит для матриц, тогда delete писать не придётся.
Не, ну речь была как бе не совсем об этом..
И, к слову, использовать вектор напрямую — тоже не комильфо, все равно нужна какая-то объектная обвертка над ним
Просто люди, которые в ответ на разумные утверждения о небезопасности и неудобстве работы напрямую с динамическим массивом памяти говорят «говнокодер!», несколько умиляют:).
Ладно бы если средства языка это не позволяли — но ведь у нас есть конструкторы/деструкторы, RAII и куча уже готовых механизмов в boost, Loki, C++0x standard library. Но нет же, предпочитают даже не изобретать велосипеды — а просто писать exception-unsafe код с потенциальными мемориликами, дедлоками и прочими проблемами, связанными с «забыванием» освобождения ресурсов.
всё равно если нужны матрицы, то их наверняка придется передавать во внешние либы (blas, lapack ...), а не использовать напрямую
Ну ничто не мешает при разработке класса для матрицы предусмотреть метод, возвращающий C-Style указатель на матрицу для работы с внешними либами.
> Мне нужны классы, шаблоны, безопасная работа с указателями. Есть они в Си?
Классы не нужны, есть структуры (ООП это brain damage). Шаблоны - полезно, но не так чтобы очень, есть void * (и вообще, есть лисп с действительно мощной макросистемой). Указатели - по определению суть адреса в адресном пространстве, чья семантика определяется средой выполнения конкретной реализации C или C++, во всех практических случаях это непосредственно хардварная адресация. То есть вещь по определению небезопасная, говорить о безопасности тут ваще не приходится. Вам трудно написать free()?
Не столько красота кода важна, сколько простота работы с ним.
Ну дык она вытекает из красоты кода. С говнокодом просто работать?