Говоря о языках программирования, каково определение магии? - PullRequest
5 голосов
/ 28 февраля 2009

Слово «магия» часто встречается здесь в таких контекстах, как «язык X просто имеет слишком много магии» или «платформа Y обычно избегает магии». Однако, кажется, что термин довольно плохо определен, что люди знают, когда видят его. Например, считается, что Java содержит очень мало магии, но сборщик мусора многое скрывает от программиста. Если магия просто означает абстракцию, которая скрывает детали, то почему это считается плохой вещью, учитывая, что никто больше не пишет большие программы на языке ассемблера? Если магия означает нечто большее, то что это значит?

Ответы [ 13 ]

0 голосов
/ 28 февраля 2009

Одним из контекстов, где я использую термин «черная магия», является манипулирование байт-кодом (в Java) - преобразование программного кода во время выполнения так, чтобы он делал что-то отличное от того, что делал бы простой код. Часто манипуляция с байт-кодом очень полезна, но с ней очень легко выстрелить себе в ногу.

Многие фреймворки и промежуточное ПО используют AOP и манипулирование байт-кодом для реализации сквозных задач. Это уменьшает работу программистов, но в некоторых ситуациях это может затруднить отладку поведения системы. И легко иметь некоторые тонкие ошибки в преобразованиях байт-кода.

Я сам провел некоторые манипуляции с байт-кодом, так что в основном я знаю, как можно изменить инструкции для байт-кода, и для меня это не «волшебство» в том смысле, что я не понимаю, как это работает. Но все же я называю это «магией», потому что она меняет способ, которым код обычно работает, и не видна в исходном коде изменяемых классов.

0 голосов
/ 28 февраля 2009

Неизвестное поведение очень часто упоминается как магия . Некоторые вещи происходят без видимой причины.

Но есть неизвестные короли:

  • Отсутствие знаний у разработчиков о том, как все работает. (Например, GC, это не волшебство, просто слишком немногие разработчики действительно удосужились выяснить и понять его подоплеку)

  • Неопределенное поведение магия , где вещи происходят за кулисами, и нет публичных знаний о том, как они на самом деле работают. Это настоящее волшебство в программировании.

Например, Rails - это не магия, а Ruby - не магия, но для некоторых людей это может показаться таковым, если они не удосужились понять внутренности (которые общедоступны и доступны).

0 голосов
/ 28 февраля 2009

для Java

  • GC - ИМХО не магия , это как уборщик дома
  • Автобокс - магия - невидимое превращение предмета во что-то другое
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...