Я много раз читал в Интернете, что если ваш язык не поддерживает какую-либо концепцию, например, объектную ориентацию или, возможно, вызовы функций, и это считается хорошей практикой в этом другом контексте, вам следует это сделать.
Единственная проблема, которую я вижу сейчас, состоит в том, что другие программисты могут найти ваш код слишком отличным от обычного, что затрудняет их программирование. Какие еще проблемы, по вашему мнению, могут возникнуть из-за этого?
programming-languages
concepts
idioms
Хулио Родригес
источник
источник
Ответы:
Одна из проблем заключается в том, что вы можете написать много кода, чтобы выразить что-то, как вы это делаете на другом языке, в то время как в используемом вами языке есть более простой способ.
Например, в ответе на Stack Overflow я объяснил, как контракты кода, концепция, используемая в .NET Framework, могут частично эмулироваться в PHP, который их не поддерживает. В итоге я написал много кода даром, поскольку то же самое можно было выполнить с простыми массивами.
В целом, у каждого языка есть своя культура, свои лучшие практики, свой стиль.
Если бы я начал писать код на C #, как это было на C, это было бы ужасно.
Если я воспринимаю Haskell как разработчика Java, который был вынужден использовать Haskell, но не хочу понимать его сильные стороны и просто хочу клонировать концепции Java, код, который я напишу, пострадает.
и т.п.
Нет ничего плохого в том, чтобы улучшить язык (например, улучшить C # , введя единицы измерения, как в F #), но если вы делаете это слишком много, вам, возможно, следует выбрать другой язык, который действительно соответствует вашим потребностям.
источник
Снижение читабельности само по себе является достаточной проблемой: оно резко сокращает круг людей, которые могут потенциально поддерживать ваш проект без тщательного обучения с вашей стороны.
К тому же,
источник
Это не такая хорошая идея, как кажется на бумаге.
Пример 1: Если вы достаточно взрослый, вы можете вспомнить дни, когда С был новым ребенком в городе. Программистам на Паскале и Аде не нравились краткие открытые и закрытые скобки Си. Они # определили
begin
иend
открыть скобку и закрыть скобку, и вуаля! Када! Печальный результат был ужасен с точки зрения Ады или Си.Пример 2, личный: Одна из вещей, которые мне действительно понравились в Common Lisp Object System - это методы до, после и вокруг. Они могут очень пригодиться в разных местах. Поэтому я эмулировал эту концепцию в C ++ в нескольких избранных местах. Единственный способ эмулировать эти конструкции в C ++ - это потребовать от разработчика производного класса вызвать метод родительского класса с тем же именем в нужном месте кода. Это накладывало требование на разработчиков, которые унаследовали мои классы, что было немного чуждо программированию на C ++ и, возможно, противоречило программированию на C ++. Независимо от того, насколько хорошо задокументировано это требование, люди просто не следовали рекомендациям, потому что оно не совсем соответствовало парадигме C ++.
источник
Утечка абстракций.
источник
out
параметры в среде, которая на самом деле их не поддерживает; В C # предполагается, что каждая функция всегда записывает все своиout
параметры, но не-C # методы, вызываемые методами C #, не дают такой гарантии.Это может быть слишком сложно. Представьте, что вы пытаетесь внедрить LINQ из C # в ваше Java-приложение. Или как насчет простого добавления лексических замыканий в язык? Вам, скорее всего, придется написать новый компилятор, который в значительной степени дает вам новый язык.
Или, в случаях, когда вам не нужно реализовывать свой собственный язык, просто представьте, что вы пытаетесь реализовать методы сбора, используя функции более высокого порядка (например, map), в языке, который не имеет блоков кода, или лямбда-функций, или замыканий, или функций в первую очередь. Объекты класса. Каждая функция более высокого порядка должна быть объявлена как интерфейс и реализована явно, и все состояния, которые были бы захвачены в замыкании, должны быть явно сохранены в реализующем классе. Это так много лишнего набора текста и так сложно читать, что часто оно того не стоит.
источник