Немного длинная разглагольствования впереди.
Компьютерный язык на самом деле не сильно отличается от человеческого языка. Оба используются для выражения идей и концепций в общепринятых терминах. Между разными человеческими языками есть синтаксические различия, но вы можете выразить одно и то же на каждом языке (это делает человеческие языки завершенными по Тьюрингу? :)). Некоторые языки лучше подходят для выражения определенных вещей, чем другие.
Например, хотя технически не совсем правильно , язык инуитов кажется вполне подходящим для описания различных видов снега. Японский в моем опыте очень подходит для выражения своих чувств и душевного состояния благодаря большому, краткому словарному запасу в этой области. Немецкий язык очень хорош для того, чтобы быть очень точным благодаря в значительной степени однозначной грамматике.
Разные языки программирования также имеют разные специальности, но в основном они отличаются уровнем детализации, необходимой для выражения вещей. Большая разница между человеком и языками программирования состоит в том, что в языках программирования не хватает словарного запаса и очень мало «грамматических» правил. С помощью библиотек вы можете расширить словарный запас языка.
Например:
Сделай мне кофе.
Очень легко понять для человека, но только потому, что мы знаем, что означает каждое из слов.
кофе : напиток, приготовленный из жареных и молотых бобовых семян тропического кустарника
напиток : жидкость, которую можно проглотить
глотать : вызывать или пропускать горло
... и так далее, и так далее
Мы знаем все эти определения наизусть, но в какой-то момент нам пришлось выучить их.
Таким же образом можно «научить» компьютер «понимать» слова.
Coffee::make()->giveTo($me);
Это может быть совершенно верное выражение на компьютерном языке. Если компьютер «знает», что означает Coffee
, make()
и giveTo()
, и если определено $me
. Он выражает ту же идею, что и английское предложение, только с другим, более строгим синтаксисом.
В другой среде вам придется говорить немного разные вещи, чтобы получить тот же результат. Например, на японском вы бы сказали что-то вроде:
コ ー ヒ ー を 作 っ て も ら っ て も 良 い で す か?
Kōhī o tsukuttemoratte mo ii desu ka?
Что бы примерно перевести на:
if ($Person->isAgreeable('Coffee::make()')) {
return $Person->return(Coffee::make());
}
Та же идея, тот же результат, но подразумевается $me
, и если вы сначала не проверите isAgreeable
, вы можете получить ошибку во время выполнения. В компьютерных терминах это было бы несколько аналогично предполагаемому поведению Руби - возвращать результат последнего выражения («грамматическая особенность») и сначала проверять доступную память (необходимость среды).
Если вы говорите с очень медленным человеком с небольшим словарным запасом, вам, вероятно, придется объяснить вещи более подробно:
Иди на кухню.
Возьми горшок.
Наполните горшок водой.
...
Так же, как Ассемблер. : О)
В любом случае, суть в том, что язык программирования на самом деле является языком, подобным человеческому языку. Их синтаксис различен и специализирован для проблемной области (логика / математика) и «слушателя» (компьютеры), но это всего лишь способы передачи идей и концепций.
EDIT:
Еще один момент, касающийся «оптимизации для слушателя», заключается в том, что языки программирования пытаются устранить неоднозначность. Технически, пример «сделай мне кофе» можно понять как «превратить меня в кофе». Человек может понять, что имеется в виду интуитивно, а компьютер - нет. Следовательно, в языках программирования все обычно имеет только одно значение. Там, где это невозможно, вы можете столкнуться с проблемами, оператор "+
" в Javascript является типичным примером.
1 + 1 -> 2
'1' + '1' -> '11'