LINUX.ORG.RU

Зачем создатели языков программирования разрешают делать собственные операторы из спецсимволов?

 


0

3

Это последствия передоза или какое-то поражение ЦНС? Нет, серьёзно, если для типичных «+» / "-" / «*», а так же других операторов, встроенных в язык, есть некие интуитивные правила и ожидания, то понять по коду что делает какой-нибудь очередной «>%%%<» вообще невозможно. Особенно если учесть, что это говно принципиально невозможно загуглить.

Deleted

Последнее исправление: Deleted (всего исправлений: 2)

Вообще-то поисковики могли бы сами сериализовать спец. символы в слова, и уже по ним искать.

Например, тот же гугл распознает, что C++ — это именно плюсы, по golang находятся страницы, посвященные Go, но без единого упоминания конкретно строки «golang».

Может, чирканешь трио писем. В гугл: «Будьте мужиками, сделайте поиск по хаскелю!», в яндекс: «А вот опередите гуглей, сделайте поиск по хаскелю, будет киллер-фича,» а в бинг: ну «ну вы же сообразили компилятор хаскеля. А теперь поиск добавьте, вон, берите пример с гугла со его языками.»

anonymous
()

Ты ещё математиков не видел. У них и обычные +, -, * и / часто делают совершенно неожиданные вещи. Поизучай, хотя бы, теорию групп.

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

anonymous
()
Ответ на: комментарий от Deleted

Удобство для тупиц никого не волнует. А не-тупица осваивает любую систему обозначений за секунды.

anonymous
()
Ответ на: комментарий от Deleted

А ты бы ещё посчитал статистику использования теории групп, алгебраической топологии и вариационного исчисления. Это все не для быдла, не для плесени.

И, кстати, по неочевидности обозначений из контекста какашкелю твоему до популярнейшего C++ ещё очень далеко.

anonymous
()
Ответ на: комментарий от Deleted

А, так ты ещё и stackoverflow-copypaste-кодеришка?!?

anonymous
()

Создатели всех языков в мире позволяют делить на 0 и переполнять память машины. Это последствия передоза или какое-то поражение ЦНС?

Как альтернатива, программист может просто не делить на 0 и не переполнять память машины

vertexua ★★★★★
()
Ответ на: комментарий от anonymous

Твоя убогая IDE не умеет прыгнуть на место определения функции или оператора?!?

Так вроде серьёзные пацаны не используют IDE, не?

Deleted
()
Ответ на: комментарий от vertexua

Создатели всех языков в мире позволяют делить на 0 и переполнять память машины. Это последствия передоза или какое-то поражение ЦНС?

Как альтернатива, программист может просто не делить на 0 и не переполнять память машины

То есть ты хочешь сказать, что введение собственных операторов - это ошибка проектирования и никто так делать не должен, я правильно понял?

Deleted
()
Ответ на: комментарий от Deleted

Да, но могу обьяснить почему запрещать саму фичу не нужно. Возьмем например Scala.

"!" - общепризнаная конвенции отправки сообщения актеру. Может я путаю, но это еще с Erlang пришло. Но вместо того чтобы делать это фичей языка, прибивая этот оператор к конкретной реализации, как специальный случай, это просто оператор. Теперь могут существовать разные реализации библиотек актеров. Это пример хорошего использования операторов.

Всякие математические операции в библиотеках работы с матрицами ты уже вроде сам назвал.

Плохой пример использования операторв - Scalaz. Там идиоты засунули все символы юникода, которые могли, включая лямбды и пятиконечные звезды. Потому они идиоты и ни один уважающий себя программист на Scala не будет ковырять то говно, какое они называют библиотекой

vertexua ★★★★★
()
Ответ на: комментарий от Deleted

Серьезные пацаны сидят на кортках и жрут семки. А серьезные разработчики используют серьезные инструменты, такие, как visual studio.

anonymous
()
Ответ на: комментарий от vertexua

Естественно. В Visual Studio, в XCode на крайняк. Какие трудности-то писать на C++ переносимый код?

Под лялих приличных IDE нет и не будет.

anonymous
()
Ответ на: комментарий от Deleted

Если ты ищешь, что означает конкретный оператор, то тема на ЛОРе тебе не нужна. Тебе нужна документация к конкретному модулю, или, при отсутствии таковой, его исходники.

А если у тебя более высокоуровневый вопрос, то почему ты ищешь по оператору?

Miguel ★★★★★
()
Ответ на: комментарий от vertexua

Уникодные символы в исходниках — это, конечно, зло. Если они не в строковых литералах. Но вообще scalaz — вещь нужная.

Miguel ★★★★★
()
Ответ на: комментарий от vertexua

Зачем тогда Visual Studio?

Затем, что она по фичам и по удобству на три головы выше всех остальных, вместе взятых.

Ты хотя бы одну другую IDE знаешь, которая не спотыкается об хотя бы C++11?

anonymous
()
Ответ на: комментарий от anonymous

Ты хотя бы одну другую IDE знаешь, которая не спотыкается об хотя бы C++11?

С++11 пишу в vim. Но если речь идет о IDE, то многие нормально живут с Eclipse, Clion, KDevelop. Студенты вроде всегда любили NetBeans

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Да что там настраивать? Отлаживаешь на симуляторе железки, сборка вся под cmake, ну и continuous integration во все щели, любой коммит под все варианты платформ тут же собирается и тестируется. И при этом IDE человеческая, не марсианская, с фичами.

А скоро и вообще коммунизм наступит, ReSharper C++ выходит. Любителям всяких там еклипсов просто нечем уже будет крыть.

anonymous
()
Ответ на: комментарий от vertexua

С++11 пишу в vim

Ну и как ты в vim найдешь, что у тебя в текущем контексте делает оператор «+»?

Eclipse,

Он в C++11 без сильного пинка вообще не умеет. И потом все равно половину определений не находит, в темплейтах путается.

Clion,

Его, строго говоря, еще не существует. А в публичной альфе глюк на глюке сидит и глюком погоняет. Я им с десяток багрепортов за час тестирования накатал.

KDevelop

Про такое и говорить стыдно.

Есть еще QtCreator, который даже вроде как-то пыжится пользоваться clang-ом для семантики, но, увы, глючный и медленный пока еще. Может, лет через 10 догонит текущую visual studio, но ведь она-то на месте стоять не будет, на пару с resharper-ом.

anonymous
()
Ответ на: комментарий от vertexua

Как зачем? Они ведь испытывают попаболь от зависти к пользователям Visual Studio. И теперь эта попаболь станет просто нестерпимой.

anonymous
()
Ответ на: комментарий от anonymous

Ну и как ты в vim найдешь, что у тебя в текущем контексте делает оператор «+»?

Использую плагин для vim, который превращает его в С++ IDE с настоящим completion посредством libclang

vertexua ★★★★★
()
Ответ на: комментарий от quickquest

Исторически во всём виноваты математики

Математика точно также состоит из говнокода на 95%, только говнокодеров почему-то называют гениями.

anonymous
()
Ответ на: комментарий от vertexua

Ты, походу, вообще не в курсе, о чем говоришь. Нет там никакого юникода, а для подавляющего большинства операторов есть альфанумерические аналоги.

anonymous
()
Ответ на: комментарий от vertexua

Использую плагин для vim, который превращает его в С++ IDE с настоящим completion посредством libclang

Тот, который не работает? Ну-ну. Попробуй это на хотя бы 500kloc. Я не знаю, как можно было так говняно сделать базу для intelisense (сам-то libclang быстрый), но они таки умудрились.

anonymous
()
Ответ на: комментарий от anonymous

Формат базы мне тоже не нравится. Но по сути конфиг ycm - python файл с функцией - дай мне флаги. Так как билд систему я написал себе сам, то я могу спрашивать у нее флаги по DBus. Допишу на выходных

vertexua ★★★★★
()
Ответ на: комментарий от anonymous

У меня дома. Может я дома в женских трусах хожу, какое кому дело?

На работе тоже велосипедная, но там другая ситуация. Нашей компании позволительно

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Нашей компании позволительно

Непозволительно. От ваших убогих велосипедов потом весь мир страдает, в том числе и партнеры, производители железа, и т.д.

Особо лютую ненависть вызывает repo и Android.mk.

anonymous
()
Ответ на: комментарий от vertexua

Тебя не спросили.

И миллионы других разработчиков, которые теперь плюются на андроед и мечтают о времени, когда эту гниду убьет убунта.

А почему нельзя самодельную билд систему внутри компании?

Потому, что оно рано или поздно выходит наружу, и тогда компанию начинают люто ненавидеть. Репутационные риски, так сказать.

anonymous
()
Ответ на: комментарий от vertexua

Это говно тоже когда-то было внутри. Любой внутренний велосипед имеет шансы вывалиться наружу.

anonymous
()
Ответ на: комментарий от Waterlaz

давно уже:

{-# LANGUAGE UnicodeSyntax #-}
import Data.List.Unicode ((∪))
import qualified Data.Map as M
import Data.Map.Unicode ((∆))

main ∷ IO ()
main = do print $ [1, 2, 3] ∪ [1, 3, 5]
          print $ M.fromList [(1, 2), (3, 4)] ∆ M.fromList [(3, 4), (5, 6)]

b0oh
()

Не вижу проблемы.

Когда я вижу fmap, мне нужно знать, что этот fmap означает, точно так же как мне нужно знать что означает его синоним <$>. Когда я вижу ap мне нужно знать, что этот ap означает, точно так же как мне нужно знать что означает его синоним <*>.

А теперь сравни два куска кода.

Без операторов:

parseJSON (Object o) = User `fmap` o .: "name"
                              `ap` o .: "age"
                              `ap` o .: "rating"

С операторами:

parseJSON (Object o) = User <$> o .: "name" 
                            <*> o .: "age"
                            <*> o .: "rating"

И напоследок, вива лисп:

parseJSON (Object o) = ap (ap (fmap Person (o .: "name")) 
                                           (o .: "age"))
                                           (o .: "rating")

Какой вариант удобнее читать? Какой вариант удобнее писать? Какой вариант будет проще понять человеку который ни разу не слышал про Функторы и Аппликативы?

zinfandel ★★
()
Последнее исправление: zinfandel (всего исправлений: 1)
Ответ на: комментарий от zinfandel

Какой вариант будет проще понять человеку который ни разу не слышал про Функторы и Аппликативы?

Никакой.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.