dimrub: (Default)
[personal profile] dimrub
Нет, вы не знаете С++. Вы знаете С++ с хорошей стороны, но вы еще узнаете С++ с плохой стороны!

Я в последние годы как-то остерегаюсь высказывать категоричные мнения по таким темам, как будущее языков программирования, но мне кажется, что будет интересно.

on 2009-03-08 01:13 pm (UTC)
Posted by [identity profile] yba.livejournal.com
Где-то полгода назад читал об изменениях в C+0x. Честно говоря кроме парочки улучшающих синтаксис изменений, остальные мне кажутся наоборот вредными и бессмысленными. Имхо имело бы смысл опциональное добавление интроспекции и вычистка синтаксиса. Вообще мне кажется огромный смысл имело бы наличие действительно хорошей, разнообразной и переносимой стандартной библиотеки, аналогичной Java SE API. Существующие ACE, boost и прочие не вполне удовлетворяют этим требованиям

on 2009-03-08 01:32 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
Имхо имело бы смысл опциональное добавление интроспекции и вычистка синтаксиса.

фактически главным reason d'etre C++ является обратная совместимость с метрическими говнокилотоннами существующего кода, так что ---.

on 2009-03-08 01:42 pm (UTC)
Posted by [identity profile] yba.livejournal.com
Думаю это время уже прошло. Совместость с С по-моему уже мало кого волнует. Под "вычисткой синтаксиса" я имею в виду прежде всего не наследие Кернигана, а именно ++ синтаксис - f.e. определение абстрактных классов, темплейтов и подобное.
Интроспекцию (конечно ограниченную) вполне можно сделать на основе type_info

on 2009-03-08 01:45 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
Под "вычисткой синтаксиса" я имею в виду прежде всего не наследие Кернигана, а именно ++ синтаксис - f.e. определение абстрактных классов, темплейтов и подобное.

я тоже.
с C и так полной совместимости нет, собственно.

on 2009-03-08 01:45 pm (UTC)
Posted by [identity profile] yba.livejournal.com
Кстати я еще помню время когда вместо определения new в классе нузно было писать this=new... в конструкторе :)
Сейхас такое компилироваться не будет и это мало кого волнует

on 2009-03-08 01:49 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
основная масса крестового кода в дикой природе написана на диалектах VC 6 и позднее либо gcc 2.7 и позднее.  причём я подозреваю что масса этого кода существенно больше даже чем даже масса всего существующего кода на всех разновидностях пре-C++'ного C вместе взятых.  а на CFRONT'е много написать не успели.

on 2009-03-08 02:11 pm (UTC)
Posted by [identity profile] yba.livejournal.com
Ок, ну тогда может просто нужно остановиться и заняться стандартной библиотекой в полный рост, попутно причесывая синтаксис минимально нарушаюший обратную совместимость или вообще не нарушающий. Вообще-то разработка хороших интерфейсов хорошей библиотеки - сама по себе нетривиальная задача, имеющая огромную трудоемкость, вот туда бы и направить силы кучи народа из комитета. На самом деле в куче мест я использую Python и Java только из-за отсуствия вменяемых библиотек для Ц++

on 2009-03-08 02:20 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
примочки типа auto и concepts вполне разумны, как по мне, в деле сокращения объёма задоприкрывающего говнокода и получения более понятных сообщений об ошибках.  да и лямбды тоже, собственно, хотя предложенный синтаксис и вызывает некоторую оторопь.

будем надеятся, что на основе этого народ сумеет и более нормальную библиотеку соорудить — сегодняшние оставляют желать лучшего, подозреваю, в немалой степени потому что у библиотекописателей в какой-то момент просто отваливаются кисти рук, поскольку для реализации пуленепробиваемой и юзабельной библиотечной функциональности на сегодняшнем C++ надо банально написать Очень-Очень Много Кода.

on 2009-03-08 10:25 pm (UTC)
Posted by [identity profile] gianthare.livejournal.com
auto это вообще прелесть - так и представляю себе - все переменные в программе auto - типа, хули, пусть у компилятора голова болит. Да, [livejournal.com profile] code_wtf можно будет зачитаться.
Еще пара итераций и будем иметь ML++, кстати, стрелочки уже появились. О! я понял это заговор - типа, как приучить стадо массы, а главное, management к нормальному языку - а мы что, а мы ничего, мы на C++ пишем, с использованием Best industry practices

on 2009-03-09 05:08 am (UTC)
Posted by [identity profile] cmm.livejournal.com
я писал на одном проприетарном синтаксически условно C-образном языке, имеющем аналог этого самого auto.  ничего страшного, как минимум.

on 2009-03-09 05:44 am (UTC)
Posted by [identity profile] gianthare.livejournal.com
А кто сказал, что это абсолютное зло - вон в JavaScript все переменные объявляются с помощью var, а в Python вообще не объявляются, и ничего. Просто это абсолютно противно идее и духу C++

on 2009-03-09 06:26 am (UTC)
Posted by [identity profile] cmm.livejournal.com
а под "идеей и духом C++" следует понимать чистый неразбавленный мазохизм, что ли?

хотя, на самом деле есть два основных типа ситуаций, в которых auto может облегчить жизнь:

1. Alexandresku-style шаблонные мета-извращения, когда тип переменной либо умаешься выписывать, либо надо передавать по всему каскаду нудными typedef'ами.  по поводу этих ситуаций можно сказать, что в психически здоровой кодобазе такого ужоса просто не должно быть.

2. объявления итераторов (ну реально же задалбывает писать все эти "std::vector<МойДлинныйТип>::iterator i"!).  по поводу этих ситуаций можно сказать, что в психически здоровом языке должна быть родная конструкция типа for_each, на практике устраняющая практически полностью надобность пользоваться итераторами как класс.

но про идею и дух всё равно хотелось бы поподробнее. :)

on 2009-03-09 08:56 am (UTC)
Posted by [identity profile] gianthare.livejournal.com
Ага.
2. Ну так, там добавили foreach под маской for
С идеей и духом сложно, точнее неоднозначно - есть унаследованная из C идея, что программисто жестко все задает, зато знает, что происходит, и это естественно, включает типы переменных, и есть над этим надстройка C++, которая якобы экономит explicit typecasts, а на самом деле вносит subtle bugs и полностью лишает возможности узнать, какая функция вызвалась, не проверив все overloads функции и определения всех типов, чтобы занть что там во что неявно конвертировалось (я по крайненй мере дважды по ошибке передал стринг и эта сука компилятор построил мне из него полупустой объект класс, так что я потом обысклася, кто же мне поля стирает - да-да, я уже объявил этот конструктор explicit). Так вот, auto уводит нас еще радикальней по второму пути - теперь, чтобы понять, что происходит, надо будет еще посмотреть, а что же там возвращает функция - я говорю не о том, кто пишет код, а о том, кто его читает (как все мы знаем это может быть одно и то же лицо с перерывом в пару месяцев).
Ты пойми, я не говорю, что C++ хорош, а эти изменения его портят - я говорю, что он ужасен и все это как мертвому припарки.

on 2009-03-09 09:22 am (UTC)
Posted by [identity profile] cmm.livejournal.com
он ужасен и все это как мертвому припарки.

ужасен, да, но какая польза бедному практику от подобного максимализьма?

(no subject)

Posted by [identity profile] gianthare.livejournal.com - on 2009-03-09 09:47 am (UTC) - Expand

more rope

Posted by [identity profile] cmm.livejournal.com - on 2009-03-09 09:50 am (UTC) - Expand

on 2009-03-09 08:58 am (UTC)
Posted by [identity profile] dimrub.livejournal.com
По поводу №2 тут надо заметить, что, во-первых, в новом стандарте добавили for_each, а во-вторых, что идеология STL подразумевает использование std::for_each где только можно вместо использования итераторов, и что судя по всему, изменения языка теперь предпочтительно идут через stdlib, а не через внесение изменений в core.

on 2009-03-09 09:05 am (UTC)
Posted by [identity profile] cmm.livejournal.com
идеология STL подразумевает использование std::for_each где только можно вместо использования итераторов

без лямбд это было, гм, не очень практично.  а с лямбдами посмотрим.

(no subject)

Posted by [identity profile] dimrub.livejournal.com - on 2009-03-09 09:07 am (UTC) - Expand

(no subject)

Posted by [identity profile] cmm.livejournal.com - on 2009-03-09 09:18 am (UTC) - Expand

(no subject)

Posted by [identity profile] dimrub.livejournal.com - on 2009-03-09 09:22 am (UTC) - Expand

(no subject)

Posted by [identity profile] ionial.livejournal.com - on 2009-03-09 02:19 pm (UTC) - Expand

on 2009-03-08 03:50 pm (UTC)
Posted by [identity profile] nice-beaver.livejournal.com
А вы какой язык любите, из тех, у которых минимальный runtime overhead? Я не для холивора спрашиваю, для информации. .

on 2009-03-08 05:09 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
не имею совершенно ничего против C, например.

on 2009-03-08 05:15 pm (UTC)
Posted by [identity profile] nice-beaver.livejournal.com
Ага-ага, понятно

on 2009-03-08 05:19 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
ну а что делать. :)

on 2009-03-08 05:34 pm (UTC)
Posted by [identity profile] nice-beaver.livejournal.com
Даже если не говорить об ООП/ООД, в С++ сделано довольно много, чтобы сделать использование таких дебильных примочек С как макросы. К сожалению, остались инклюды, запятая и многое другое дерьмо, несомое исключительно из-за обратной совместимости.
ПМСМ, если ограничивать себя - писать на подмножестве С++ - можно жить, и неплохо.

on 2009-03-08 05:42 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
Даже если не говорить об ООП/ООД

вот да, лучше мы не будем об этом говорить.

если ограничивать себя - писать на подмножестве С++ - можно жить, и неплохо.

теоретически — безусловно.  на практике, видимо, не бывает.  рано или поздно приходит какой-нибудь архитектурный астронавт, и пошла писать губерния.

таких дебильных примочек С как макросы.

макросы гораздо лучше тех же шаблонов (в пересекающейся функциональности, натурально).  прогнать файл через препроцессор и поглядеть что получилось — гораздо проще, чем расшифровывать сообщения компилятора в 150 строк, к тому же относящиеся почему-то к библиотечному инклуду.  плюс никаких непоняток с инстанциацией.

on 2009-03-08 06:45 pm (UTC)
Posted by [identity profile] nice-beaver.livejournal.com
От астронавтов защиты вообще нет. Тем более в С, где нет-нет, да и воид пойнтер передашь.

Если вам макросы приятнее отлаживать, чем темплейты - могу только пожать вашу мужественную руку, и пожелать приятной отладки.

А ООП/ООД, если без "заставь дурака богу молиться" - вешь настолько ценная для больших систем, что за поддержку ее можно простить С++ многое.

on 2009-03-08 07:01 pm (UTC)
Posted by [identity profile] cmm.livejournal.com
От астронавтов защиты вообще нет. Тем более в С, где нет-нет, да и воид пойнтер передашь.

единственная защита от астронавтов (точнее, смягчающее средство) — это изначальная ограниченность возможностей для их кипучей абстрактной мастурбациидизайнерской фантазии.

А ООП/ООД, если без "заставь дурака богу молиться"

ну вот опять вы про сферических коней в вакууме...

on 2009-03-08 07:03 pm (UTC)
Posted by [identity profile] nice-beaver.livejournal.com
Пользуйтесь Oberon-2 - и будет вам крайняя ограниченность в средствах. А так да, сферические кони, жизнь ужаснее и отвратительнее, согласен.

(no subject)

Posted by [identity profile] mr-aleph.livejournal.com - on 2009-03-10 05:11 pm (UTC) - Expand

(no subject)

Posted by [identity profile] nice-beaver.livejournal.com - on 2009-03-10 05:22 pm (UTC) - Expand

(no subject)

Posted by [identity profile] mr-aleph.livejournal.com - on 2009-03-10 05:48 pm (UTC) - Expand

Profile

dimrub: (Default)
Adventures of a somewhat curious character

September 2013

S M T W T F S
12 345 67
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 22nd, 2026 05:11 pm
Powered by Dreamwidth Studios