| Илья ( @ 2009-04-16 10:32:00 |
Почему мне не нравится C++
Из всех языков программирования я выделяю для себя две группы: действительно низкоуровневые языки - разного рода ассемблеры, С, С--, Паскаль и действительно высокоуровневые - Lisp, Haskell, Smalltalk, Ruby и т.д.
Когда хороший программист пишет на низкоуровневом языке, он понимает, как работает компилятор, какие машинные инструкции выполняются при работе его программы. Можно сказать, что он знает язык своего компьютера.
Когда хороший программист пишет на высокоуровневом языке, он имеет дело не непосредственно с компьютером, с некоторой виртуальной машиной - интерпретатором, он может не знать, как устроена эта машина (так же как программист на языке низкого уровня может не знать, как устроены транзисторы, из которых состоит его компьютер), но он знает язык этой машины. Он хорошо знает относительно небольшой набор однозначных правил, по которым записывается программа для этой машины.
В обоих случаях программист хорошо знает машину (виртуальную или аппаратную), с которой ему приходится работать, он полностью понимает значение всех языковых конструкций.
Но язык С++ нельзя отнести ни к первой ни ко второй группе. Он сложен настолько, что обычный программист не может полностью понять, как работает компилятор С++. Но, в то же время, С++ не является достаточно высокоуровневым языком, чтобы можно было полностью абстрагироваться от устройства компилятора и компьютера. Поэтому, когда используешь С++, сложно поддерживать полную ясность того, как на самом деле работает твоя программа. С++ сочетает в себе черты как высокоуровневых языков, так и низкоуровневых. И именно это сочетание является источником как преимуществ языка С++, так и его недостатков.
Из всех языков программирования я выделяю для себя две группы: действительно низкоуровневые языки - разного рода ассемблеры, С, С--, Паскаль и действительно высокоуровневые - Lisp, Haskell, Smalltalk, Ruby и т.д.
Когда хороший программист пишет на низкоуровневом языке, он понимает, как работает компилятор, какие машинные инструкции выполняются при работе его программы. Можно сказать, что он знает язык своего компьютера.
Когда хороший программист пишет на высокоуровневом языке, он имеет дело не непосредственно с компьютером, с некоторой виртуальной машиной - интерпретатором, он может не знать, как устроена эта машина (так же как программист на языке низкого уровня может не знать, как устроены транзисторы, из которых состоит его компьютер), но он знает язык этой машины. Он хорошо знает относительно небольшой набор однозначных правил, по которым записывается программа для этой машины.
В обоих случаях программист хорошо знает машину (виртуальную или аппаратную), с которой ему приходится работать, он полностью понимает значение всех языковых конструкций.
Но язык С++ нельзя отнести ни к первой ни ко второй группе. Он сложен настолько, что обычный программист не может полностью понять, как работает компилятор С++. Но, в то же время, С++ не является достаточно высокоуровневым языком, чтобы можно было полностью абстрагироваться от устройства компилятора и компьютера. Поэтому, когда используешь С++, сложно поддерживать полную ясность того, как на самом деле работает твоя программа. С++ сочетает в себе черты как высокоуровневых языков, так и низкоуровневых. И именно это сочетание является источником как преимуществ языка С++, так и его недостатков.