Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-11-22

Язык

Как же все-таки приятно послушать неравнодушного профессионала, толкующего о своем (и твоем):

Страуструп поступил очень мудро, обеспечив практически полную совместимость своего детища со сверх популярным и тогда, и что более удивительно -- сейчас, Си. Если бы не этот шаг, вряд ли бы плюсы стали бы тем, чем они стали. Но это достоинство языка с каждым днем становится все большим и большим его недостатком, добавляя множество дыр и низкоуровневых проблем в язык вроде как высокоуровневый и современный. Многие до сих пор так толком и не понимаю, что С и C++ это два совершенно разных языка, на которых нужно писать совершенно по-разному. И расхожее сочетание "C/C++" это просто какой-то root of all evil. Мне сплошь и рядом попадаются люди, которые худо-бедно программировали на Си, потом за день выучили ключевое слово "class" и стали считать себя большими гуру в плюсах (к примеру, такой случай). "Специалист" подобного рода узнается слету -- у него в коде вы обязательно найдете любимый printf... Плюсы очень мощный и одновременно довольно сложный инструмент, на овладение и глубокое понимание которого требуется много времени. Без полной перестройки мозгов начать программировать на C++ после С никак не получится, и те, кто этого не понимает, серьезно портят репутацию языка. Когда Линус Торвальдс, ни черта на смыслящий в C++, начинает поучать других на тему, почему плюсы это зло, выглядит это чертовски комично.
...
Лично я не считаю, в отличии от многих, что новый стандарт это революция, и C++11 это совершенно новый язык. Дело в том, что C++98 несет в себе просто нереальное количество недодуманностей, ограничений и откровенных недоработок, поэтому я бы сказал, что новый стандарт разрабатывал Капитан Очевидность и главная задача, которая стояла перед ним -- латание старых дыр и огрех, затянувшееся на непростительные 10+ лет.
Я отношу себя к той категории людей, которым не нужно читать умные толстые книжки о том, чем может быть вам полезно то или иное новшество в языке. Я из тех, кто много много лет в нетерпении ерзал на стуле, ожидая, когда же наконец комитет закроет все эти бесчисленные проблемы в дизайне моего любимого языка...

cdriper-rss.livejournal.com/30406

Сто лет я не писал на С/С++. Но еще помню как радовался обьектности, перейдя с простого С. И как же мне хорошо сейчас, когда я пишу на Python и прочей динамике :)

Что поделать, C'est la vie. Недостатки C++ обусловлены его достоинствами. Это инструмент из разряда тех, которые нельзя давать в руки недоучкам без присмотра. Я имею в виду большие проекты, для мелких поделок неважно чем винтики крутить, толковой отверткой или мультитулом. Вообще, нынче представляется разумным большие проекты писать не на C++ а на чем-нибудь более безопасном. Вроде Java или C#. И не надо сразу кричать про производительность получаемого кода, если очень надо, торомозной код можно и на ассемблере изложить.


А я тут, кстати, декораторами побаловался:
def testDecorators():
 print 'testDecorators...'

 class decorBeforeAfter(object):
  def __init__(self, f):
   print 'decorBeforeAfter init...'
   self.f = f
  def __call__(self, *args, **kws):
   print "before", self.f.__name__
   res = self.f(*args, **kws)
   print "after", self.f.__name__
   return res

 def checkReg(fn, *args, **kwargs):
  print 'checkReg [%s]...' % fn.__name__
  def crFunc(*args, **kwargs):
   print 'crFunc [%s]...' % fn.__name__
   for a in args:
    print '  arg=[%s]' % a
   for k in kwargs:
    print '  kvarg[%s]=[%s]' % (k, kwargs[k])
   res = fn(*args, **kwargs)
   print 'crFunc done'
   return res
  print 'checkReg done'
  return crFunc

 print 'define doWork...'
 # @decorBeforeAfter
 @checkReg
 def doWork(a, b, c='baz', d=''):
  print 'doWork a=[%s], b=[%s], c=[%s], d=[%s]' % (a,b,c,d)
  return 'qux'

 print 'invoke doWork...'
 res = doWork('foo', 'bar', d='oops')
 print 'res = [%s]' % res
#def testDecorators():

Понравилось, но не очень. Код перестает быть прозрачным и безопасным — IMHO, ясен пончик. Хотя если не вдаваться в детали реализации, код читать заметно легче.

artima.com/weblogs/viewpost.jsp?thread=240808
ibm.com/developerworks/linux/library/l-cpdecor
wiki.python.org/moin/PythonDecorators
wiki.python.org/moin/PythonDecoratorLibrary#Singleton
saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)