Koko / Говнокод #27145 Ссылка на оригинал

0

  1. 1
https://plugins.jetbrains.com/plugin/12673-csense--kotlin-checked-exceptions

1. чекдэкспепшены говно
2. но пусть лучше IDE проверяет, что ты их ловишь
[--- вы находитесь здесь -- ]
3. но пусть лучше код не компилируется, если ты их не словишь

Если вы решили первым
Стать в рядах своих сограждан —
Никогда не догоняйте
Устремившихся вперед.
Через пять минут, ругаясь,
Побегут они обратно,
И тогда, толпу возглавив,
Вы помчитесь впереди.

Запостил: MAPTbIwKA MAPTbIwKA, (Updated )

Комментарии (221) RSS

  • А мне кажется, что в языке с ГЦ все исключения должны быть чекед, и это будет хорошо. Если программис не осилил работу с памятью, то как он осилит исключения? А следующим шагом нужно сделать так, чтобы всякий говнокод не компилироваться.
    Ответить
    • > чтобы всякий говнокод не компилироваться

      В "PHP" говнокод не компилируется. Именно поэтому я за "PHP".
      Ответить
      • там разве нет промежушечного кода? Zend Optimizer что запускае?
        Ответить
        • Деталь реализации конкретного интерпретатора. С точки зрения программиста конпелятора там нет.
          Ответить
            • С точки зрения стороннего наблюдателя -- наверное нету.
              Ответить
          • Код на «PHP» не запустится, пока не сконпелируется целиком.

            Вот bat- или sh-файл я могу запустить, если в нём есть синтаксические ошибки. Он выполнится построчно до первой ошибки. А php-файл в известных реализациях интерпретатора я так запустить не могу.
            Ответить
            • Я не профессор, диплом на помойке нашёл. Но, как мне кажется, конпелятор/транслятор на выходе должен давать какой-то файл, который потом можно запустить или преобразовать во что-то ещё. У "PHP" такого файла на выходе нет. Результатом его работы являются только сайд-эффекты от исходного кода. Т.е. это просто такой интерпретатор, который немного проверяет синтаксис.
              Ответить
              • Так питон же тоже кококонпелируется в байт-код, но файлы никакие не генерирует (генерирует только для модулей, чтобы каждый раз не компилить).

                Пхп, наверное, тоже в какую-нибудь питушню преобразуется и висит в памяти.
                Ответить
                • У питона есть конпелятор. Я могу взять и явно сконпелировать модуль в пик, а потом запустить его. При этом код не исполняется во время конпеляции.

                  Интерпретатор с опкешем != конпелятор + интерпретатор.
                  Ответить
                  • >При этом код не исполняется во время конпеляции.
                    ..если это не шаблоны, не constexpr, не мудификаторы AST из грувей, не аспекты и пр.

                    Всё это какая-то очень мутная хуйня, если честно
                    Ответить
                    • > мутная хуйня

                      Ну что там мутного то?

                      Основная цель интерпретатора -- взять код и исполнить его. Внутри ради пирфоманса там может быть хоть джит, хоть опкеш, хоть аот. Но если я там в коде написал форматирование диска, то оно произойдёт сейчас.

                      Основая цель конпелятора/транслятора -- взять код и получить другой код. Часть кода в духе макросов или темплейтов таки может исполниться (в AST трансформерах, наверное, даже какой-нибудь файл рядом высрать можно). Но если я там в коде написал форматирование диска, то оно сейчас не произойдёт, а будет заложено в выходной файл.

                      Надо на основную цель смотреть, а не до деталей доёбываться, имхо.
                      Ответить
                      • Я в студии нажал F5: код исполнился. То, что он там cl под капотом вызвал -- это деталь реализации. Так что С++ это интерпретируемый язык

                        верно?
                        Ответить
                        • > интерпретируемый язык

                          А вот эту фразу я бы выкинул на помойку. От неё только путаница. Один и тот же язык можно и сразу исполнить и сконпелировать в файл чтобы исполнить потом.

                          > в студии нажал F5

                          Ну да, если ты никогда не полезешь смотреть как это устроено и никогда не полезешь за бинарём -- студия для тебя интерпретатор (не с++ и не cl!). В конце-концов там реально может быть интерпретатор крестов, для сишки же есть.
                          Ответить
                          • >А вот эту фразу я бы выкинул на помойку.
                            принято.
                            "интерпретируемый способ запуска кода", идет?

                            >студия для тебя интерпретатор
                            охбля, ну ладно
                            Ответить
                            • > охбля, ну ладно

                              Ну а вдруг там реально интерпретатор крестов запилили чтобы тебе быстрее и удобнее было отлаживаться?

                              То же edit-and-continue, когда ты на ходу можешь поправить исходный код и продолжить исполнение, на первый взгляд совсем не похоже на фишку конпелятора.
                              Ответить
                              • кстати, как это работает? я могу поправить сишный код, не асмовй же?
                                Ответить
                                • Это фишка линкера вроде, что-то в духе дописывания изменившегося кода в конец бинаря. Возможно ещё какая-то метаинфа и трамплины на входе в функции чтобы вызовы запатчить. Но я могу наврать, никогда не смотрел как это сделано.
                                  Ответить
                                  • Как дописывается я понимаю примерно, мне интересно было как это компилируется:)
                                    Ответить
                                  • на .ru нету стрелочек, так что я не понимаю: спрашиваешь ли ты меня, или броманда
                                    Ответить
                          • > C++ - это интерпретируемый язык

                            Компилтайм-питушня (шаблоны, констэкспры) в нем действительно интерпретируемая (притом без JIT). Потому это так тормозит.
                            Ответить
              • какое-то очень тонкое

                Является ли компилятором groovy с его CompileStatic? Является ли компилятором jit? можно ли назвать шланг компилятором в llvm?
                Ответить
                • Да, шланг -- конпелятор в ллвм. Всякие шарпики, джавы, котлины и т.п. тоже.

                  JIT -- не конпелятор. У него нет выходного файла (ну кроме отладочного дампа). Это просто способ ускорения интерпретатора.

                  Про груви не знаю. Я могу явно попросить отконпелировать файл и потом отдельно исполнить его на жвм?
                  Ответить
                  • Шланг это транслятор С++ кода в коды llvm. А вот уже llvm – это конпелятор кодов llvm в машинные коды.

                    Компилятор это разновидность транслятора.
                    Ответить
                  • >конпелятор в ллвм.
                    но он же не высирает llvm опкоды (если не попросишь)

                    >JIT -- не конпелятор.
                    ust-in-time (JIT) compilation же

                    > Я могу явно попросить отконпелировать файл и потом отдельно исполнить его на жвм?
                    угу, groovyc
                    Ответить
                    • > но он же не высирает llvm опкоды

                      Если он не высирает ллвм опкоды, то он высирает нативный код. Или асм текстом. В отличие от пхп, который этот код не высирает, а исполняет.
                      Ответить
                        • Деталь конкретной реализации же. Большинство интепретаторов сейчас так делает т.к. быстрее и ошибки немного ловит. Ничто не мешает тебе исполнять пхп сразу по AST. Или даже хранить функции текстом как в TCL.
                          Ответить
                        • З.Ы. Ну вот у lua тоже есть и конпелятор (luac) и фаза конпеляции при интерпретации (lua). Имхо, тут luac конпелятором является, а lua -- нет.
                          Ответить
                          • Они же оба делают в сущности одно и то же, просто luac сохраняет опкоды в энергонезависимую память, а lua в энергозависимую.

                            Всё-таки градация на трансляторы и компиляторы выглядит логичнее, если опираться на уровни абстракции и близость к железу.
                            Ответить
                            • >энергозависимую
                              а если я сделаю "хибернейт"?
                              >энергонезависимую
                              а если у меня ramfs?
                              Ответить
                              • Тогда у тебя компилятор станет транслятором, а транслятор компилятором. Но ничего страшного, у смузи странный привкус только первые несколько раз, потом привыкаешь.
                                Ответить
                • Это, кстати, всё не компиляторы, а трансляторы, потому что компилятор используется для перевода кода программы в код, исполняемый процессором. Нам, получается, всё это время врали, а Java это на самом деле транслируемый язык?
                  Ответить
                    • > virtual

                      Значит процессора у неё нет, то есть JVM является интерпретатором байт-кода.

                      Даже педивикия с этим согласна:

                      «В Java используется JIT-компиляция для генерации машинного кода, хотя изначально он переводится в интерпретируемую форму»
                      Ответить
                      • > Значит процессора у неё нет

                        Что мне мешает его запилить? Ну кроме отсутствия денег и времени.
                        Ответить
                        • У Таненбаума читал такую фразу, что вот есть спецификация PicoJava, так что вы можете купить транзисторы, и собрать по ней процессор, но сначала проконсультируйтесь у психиатра
                          Ответить
                        • Если запилишь, то я публично попрошу прощения у всех Java-программистов за то, что обозвал их язык интерпретируемым.

                          Кстати, это интересный логический парадокс: является ли конпелируемым язык, если он исполняется на виртуальном процессоре.

                          Я считаю, что нет, потому что скомпилированная питушня должна выполняться на физическом процессоре, потому что любой виртуальный процессор, либо эмуляция физического – это уже интерпретатор.
                          Ответить
                          • Да его не так уж и сложно запилить. Просто там стековая машинка без регистров, не очень эффективно будет работать. Вот никто и не пилит.

                            В реале, емнип, только arm'ы с аппаратным ускорением некоторых фишек джавы.
                            Ответить
                            • Проблема в том, что и для питоновского байт-кода можно запилить процессор, но при этом питон язык интерпретируемый, а java – компилируемый.

                              А вообще, это всё питушня, завязанная на терминологию, которая пытается как-то поделить все вещи на чёрное и белое, главное разбираться как все эти ЯП устроены и как программы на них выполняются.

                              Вот тут, кстати, чуваки считают совсем наоборот касательно всего, что мы обсудили, ещё и три противоположных мнения продвигают:

                              https://ru.stackoverflow.com/questions/930652/jvm-транслятор-или-интерпретатор
                              Ответить
                              • >питон язык интерпретируемый, а java – компилируемый.

                                тут я согласен сбормандом: язык не может быть интерпретируемый или компилируемый: может быть только реализация


                                groovy, lua, euphoria: всё это как компилируемые, так и интерпретируемые
                                Ответить
                                • Да, тоже сейчас заметил тот коммент.

                                  В принципе, это логично, если очень постараться, можно и пыхокод скомпилировать.

                                  Я как будто прозрел: сижу сейчас VAHUE от того как моя картина мира перевернулась, в которой до этого всё было просто и понятно )))
                                  Ответить
                                  • Так то я согласен, что некоторые языки легче интерпретировать, чем конпелировать.

                                    Ради eval() придётся в сконпелированный бинарь или рантайм добавлять кусок конпелятора или вспомогательный интерпретатор...
                                    Ответить
                                    • Интересно, насколько сложно было впилить eval в .NET, чтобы работал JScript.NET.
                                      Ответить
                                  • В компах часто так бывает.

                                    Сначала всё стройно и логично, затем появляются corner cases и исключения, и через 15-20 лет уже такая каша, что черт ногу сломит..
                                    Ответить
                              • > А вообще, это всё питушня, завязанная на терминологию, которая пытается как-то поделить все вещи на чёрное и белое, главное разбираться как все эти ЯП устроены и как программы на них выполняются.

                                +1
                                Ответить
                                  • За "питушня, которая пытается поделить на чёрное и белое, главное разбираться как ЯП устроены".
                                    Ответить
                                  • Я тоже иногда читаю коммент и ничего не понимаю, сплошные умные слова и аббревиатуры, которые я никогда даже и не видел. И вот, вдруг натыкаюсь на «питушню», и так тепло на душе становится, что сразу ставлю плюс.
                                    Ответить
                      • Компиля́тор – это программа, которая переводит текст, написанный на языке программирования, в набор машинных кодов
                        про процессор придумал ты сам
                        Ответить
                        • Я ещё учусь быть программистом, поэтому сам пока что ничего не придумываю:

                          «Машинный код или машинный язык представляет собой набор инструкций, выполняемых непосредственно центральным процессором компьютера (CPU)»
                          Ответить
                          • ну тогда срочно меняй лживые статейки
                            https://en.wikipedia.org/wiki/Java_compiler

                            пока жавапитухи будут искать лишние 85ГБ оперативной памяти, пройдет достаточно времени, чтобы перестать называть компилятор жабы компилятором
                            Ответить
                            • Оказывается, есть реальный
                              компилятор джавы:

                              «...but there are also compilers that output optimized native machine code for a particular hardware/operating system combination»

                              На английской Вики, кстати, вот такое определение компилятора:

                              «In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language). The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) to create an executable program»

                              Так, а что тогда такое транслятор???

                              «A translator or programming language processor is a generic term that can refer to anything that converts code from one computer language into another.[1][2] A program written in high-level language is called source program. These include translations between high-level and human-readable computer languages such as C++ and Java, intermediate-level languages such as Java bytecode, low-level languages such as the assembly language and machine code, and between similar levels of language on different computing platforms, as well as from any of the above to another»

                              Пиздец!!! Кажется, я понял, почему каждый преподаватель считает Википедию (и интернет в целом) помойкой.

                              Какие-то левые питузы пришли к консенсусу и сломали всю терминологию, теперь компилятор это алиас для транслятора, который высокоуровневый код переводит в низкоуровневый, а не отдельная сущность для описания отдельного явления.

                              Скоро эти либералы вообще сотрут понятие «компилятор» из умов молодёжи, и у нас будет поколение транс-програмитстов в полосатых носочках.
                              Ответить
                              • Интуитивно ощущаю, что компилятор переводит в более низкоуровневый язык. Си -> Асм, например.

                                Транслятор оставляет примерно том же уровне абстракции.

                                Хотя есть компилятор JS в си.

                                Нет, хуевое определение
                                Ответить
                                • > Хотя есть компилятор JS в си.

                                  Не беда, надо просто ввести ещё одно определение для этого кейса:

                                  «Транспиляция — преобразование программы, при котором используется исходный код программы, написанной на одном языке программирования в качестве исходных данных, и производится эквивалентный исходный код на другом языке программирования»
                                  Ответить
                                  • > на другом

                                    А если на этом же? Предлагаю ввести термин гомокомпиляция.
                                    Ответить
                                  • да, именно оно. ДЖсеры любят

                                    Нужно срочно запретить программистам выдумывать новые слоые
                                    Ответить
                                  • Сколько питушни. Достаточно двух операций:

                                    Трансляция - отображение из исполняемого кода в исполняемый код (исходный, бинарный - неважная питушня).

                                    Оптимизация - отображение исполняемого кода в более быстрый исполняемый код на том же языке.

                                    ...и одной оценки

                                    Житность - асимптотическая оценка времени компиляции по сравнению от времени исполнения.
                                    O(1) - классическая компиляция, O(N) - жит-компиляция

                                    ...чтобы все эти ком-, транс- и прочие ляторы-пиляторы упорядочить.
                                    Ответить
                                    • O(N*N) и O(log(N)) тогда что? квадрожитность и логожитность?
                                      Ответить
                                      • O(N*N) и выше - питушня (питушитность). Это случай из серии "пердолился неделю, чтобы создать скрипт, который запустил один раз, а мог бы решить задачу в три клика мыши в проводнике". Или какие-то кобенации на eval'ах.

                                        Для O(log(N)) надо сначала понять физический смысл. А если его нет, то и название придумывать не стоит.
                                        Ответить
                                    • Что такое «асимптотическая оценка времени компиляции по сравнению от времени исполнения»?
                                      Ответить
                                      • Объясню мысль на примерах, поскольку не строгий ма-те-ма-тик.
                                        1. Программа скомпилировалась 1 раз за 10 минут и отработала 1000000 раз по 10 минут.
                                        10000000 - O(N), 10 << 10000000: 10 = O(1)
                                        2. Программа скомпилировалась 1000000 раз за 10 минут при каждом запуске и отработала 1000000 раз по 10 минут.
                                        10000000 - O(N), 10000000 ~ 10000000: 10000000 = O(N)
                                        3. Программа скомпилировалась с 1000000й попытки по минуте и отработала 1 раз 10 минут, затем её выбросили.
                                        10 - const - O(N), 1000000 >> 10: 1000000 > O(N) - O(N^2), O(N^3) или O(e^N)
                                        здесь возникает что-то вроде деления на ноль или дифференцирования по константе, поэтому про результат в общем случае известно только то, что это больше линейной питушни.
                                        Ответить
                                        • А, ты имел в виду асимптотическую оценку отношения времени компиляции к времени исполнения, понятно. В данном случае O-оценку использовать не совсем корректно, лучше просто взять что-то вроде предела. Тогда первый пример будет 0-житным, второй — 1-житным (предел даёт любое конечное число строго больше нуля), третий — ∞-житный.
                                          Ответить
                              • > сломали всю терминологию, теперь компилятор это алиас для транслятора, а не отдельная сущность
                                Ну и правильно сделали. Зачем плодить сущности?
                                Ответить
                                • Когда говоришь, что интересуешься компиляторами, сразу кажешься умнее и привлекательнее. А когда заводишь разговор про интерпретаторы, сразу ассоциируешься с «PHP» и смузи.
                                  Ответить
                  • нет, не процессором, а просто не 1-в-1. Джава сюда подходит, тем более, что есть процессоры, запускающие джаву (все больше в теории) да и x86 запускает не CPU, а микрокод его.

                    Транслятор это асемблепр, бо между мнемониками и реальными опкодами соответствение 1-в-1- (биективное или как там оно у ма-те-ма-тикаов называется)
                    Ответить
                    • > между мнемониками и реальными опкодами соответствение 1-в-1

                      И тут ты открываешь интеловскую доку... Или армовскую, где всё ещё хуже.
                      Ответить
                      • и что? Я не могу восстановить мнемоники из бинарного кода?
                        Ответить
                        • Ма-те-ма-ти-чес-ки 1 к 1 -- нет.

                          Примерно такой же по смыслу -- да. Но ты и с сишкой можешь это сделать в общем-то.
                          Ответить
                              • ты о том, что там есть шорткат ЦЦ, хотя есть и типа нормальная двубайтовая хуита?

                                ну то такое


                                сравни с тем, в какой код превращается С++ например
                                Ответить
                            • А arm'овский асм по-дефолту всякие костыли втыкает. В духе загрузки из константы вместо загрузки иммедиейта если он не влезает.

                              Впрочем и тасм с масмом вроде тоже умели удлинять джампы при необходимости.
                              Ответить
              • У реализации «PHP» компании «Zend» есть байткод. Байткод может кэшироваться расширением «OpCache» (байткод при этом висит в памяти).

                Да, выдавать байткод «PHP» в виде бинарных файлов почему-то не принято.
                Ответить
                • Ну вот раз не выдаёт -- значит не конпелятор. По-моему всё просто.

                  Т.е. основной эффект у PHP -- исполнение кода, а не файл который потом можно исполнить.
                  Ответить
    • пришол к тому, что все исключения, на которые тебе глубоко насрать ибо ты их не обработаешь никогда (потому что на этом слое ты ничего и не сделаешь (я в другом городе, за мат извени)) - хуярить в MonadError и пусть эффект с этим говном разбирается
      лучше чем просто исключения тем, что поток исполнения контроллирует эффект, а не хуй знает что, и все твои асинхронные ресурсы и прочая поебень нормально отменятся/закроются (оопблядки со своим Dispose соснули)
      ну а ошибки обрабатываемые ебурить в Either
      Ответить
      • а котлин говно кстати, и разраб его (елизаров) тоже мудак сраный
        Ответить
        • почему?

          Елизаров, доречи, не изначальный разраб. Он пилил хайлоад на жабе для devexperts, а котлин делал Бреслав. Елизаров потом там появился
          Ответить
          • он светится в массах и высказывает тупейшие изречения. бесит
            Ответить
            • какие, например?

              Я пару раз видел его в массах, обычно он чото за многопточность и пифоманс втирал
              Ответить
                • А инстаграм мне его не посмотреть?:)

                  Я не читаю твиттеров, но вангую, что там будет современный булщит из воды и бессмысленных слов. Угадал?
                  Ответить
                  • не совсем, там современный булщит из воды и бессмысленных слов вперемешку с изречениями в стиле "Нам не нужны абстракции высокого порядка, жаваебы годами учились копипастить, им это не нужно"
                    Ответить
                  • «Knowledge is when you have arguments for any turn of the discussion. Wisdom is knowing when not to say them.
                    Also known as “the first 3 years of our life we learn to speak, the rest of life we learn to be silent”»

                    Хули он не помолчит тогда? Или твиттинг за speaking не считается? Короче пацан не ровный, за базар не отвечает.
                    Ответить
                  • Почти любой твиттор это булщит из всякой хуйни. Куча каких-то типа дохуя остроумных коротких изречений блядь. Нахуя это вообще придумано, специально ограничивать количество вбиваемой хуйни скольки-то там блядь символами? Так-то даже ж нельзя кого-то как следует обложить матом и как следует обозвать сраным хуесосом, никакого пространства для творчества. Это как если б в Си сделали принудительное форматирование под один говностиль, а иначе б чтоб не компилировалось.
                    Ответить
                    • обозвать сраным хуесосом в твиттере очень просто - берешь и обзываешь сраным хуесосом
                      а длинный контент можно тредами хуярить (удобно просто пиздец)
                      а еще можно тредами хуярить гитлера
                      Ответить
                      • > обозвать сраным хуесосом в твиттере очень просто - берешь и обзываешь сраным хуесосом

                        Не, ну просто так обозвать конечно можно, но как следует аргументировать уже не выйдет, аргументацию придется разбивать на несколько сообщений, что как раз нихуя не удобно.
                        Ответить
                    • Шиттер это платформа для

                      1) подписки на художников, ибо ограничений на длину нарисованных тентаклей там нет
                      2) Полемики без аргументации и последующей травли. Т.е. назвать оппонента гитлером места хватит, а объяснить почему — уже нет by design.

                      Когда-то можно было адблоком выпилить 2-e (т.е. recommended, trending) и оставить только 1-е. Потом эту возможность выпилили, и шиттер превратился в эдакий буржуйский аналог просмотра первого канала под водяру с картофанчиком. Нормальных людей там нет, одни зомби.
                      Ответить
                      • > 1) подписки на художников, ибо ограничений на длину нарисованных тентаклей там нет

                        Вот это кстати отдельный багор. Из-за этого, слишком длинную текстушню засовывают в картинку, которая, разумеется, нихуя не индексируется всякими поисковыми системами.
                        Ответить
                    • > Нахуя это вообще придумано, специально ограничивать количество вбиваемой хуйни скольки-то там блядь символами?
                      Видимо, чтобы в базе блобы не распухали. Иногда бесит это ограничение на ГК.

                      А на моднявых сайтах это особый шик. Чем более убогий интерфейс, тем больше налетит нитакихкакфсе питушков, которые будут прославлять своё болото. А там и серьёзные дяди, и питузы с рекламой за десятки тысяч евро в их постиках.

                      Если сайт для написания текста, то ограничить длину. Если для фотографий, то запретить загружать с компьютеров. Если для сообщений, то сделать, чтобы они исчезали по прочтении. Если разрешают поделиться видеоновостью, то без кнопки "пауза", без прогрессбара, видео переключаются автоматически без паузы между ними, а через день исчезают.
                      Ответить
                      • Кстати, снепчат идеально подходит для обсуждения рабочих вопросов. Один раз прочитали и хватит.
                        Ответить
                        • А ещё можно аниме-фильтры накласть и снять стресс перед дедлайном.
                          Ответить
                      • > Видимо, чтобы в базе блобы не распухали. Иногда бесит это ограничение на ГК.

                        Раньше в твиттер срали в основном через древнюю технологию SMS сообщений, и ограничения были обусловлены именно этим. Сейчас это типа фича такая.

                        Можно сравнить это с тем, как если б была кафешка, в которой за один раз можно было бы заказать еды не более чем на сумму в $20, и чтоб заказать еще раз, нужно выключить и включить выйти из кафе и опять зайти по новой, и это типа такая фирменная фича этого кафе, что не надо за один раз много жрать, надо немного пожрать, а если еще хочется то надо слегка пройтись до входа и опять занять место, и куча альтернативно интеллектуальных пропагандирует это кафе как уникальный экспириенс, типа там пропаганда ЗОЖ, чтоб там еда в желудке утряслась, хотя по сути это просто ограничивающая питушня.
                        Ответить
                  • Ещё там есть багры:

                    «Did you know that "int".toUpperCase() in Turkish locale returns "İNT", which is not the same as "INT"? Mind the dots above the "i"! That's a common gotcha and a source of bugs. Now we have a plan to fix it in Kotlin»

                    Какой сюрприз )))

                    Интересный факт #17392961: переменные l10oo и IlOoo на самом деле разные, хотя и выглядят похоже! Это может стать причиной бага.
                    Ответить
                    • классические локалепроблемы, которые еще и в дотнете лопатами кушают и добавки просят

                      хотя в последнее время уже появляется движ сделать все инвариантным к культуре и выкинуть дефолтные культуры нахуй, ибо они всех настолько заебали, что невозможно
                      Ответить
                      • > выкинуть культуры нахуй

                        Я за. Столько проблем решится в прикладном программировании, да и вообще в общении между людьми...

                        Хотя... Вся эта хуйня же рабочие места создаёт, значит она полезна.
                        Ответить
                      • плюсую

                        Культуры нужны в очень редких случаях, а говна они плодят охулио еще с тех пор, как они CSV ломали
                        Ответить
              • «Sometimes my TV fails to login into my YouTube account and the list of recommended videos that I see utterly confuses and puzzles me. Good way to get periodically out of IT/tech bubble though. Reminds me how diverse the world really is»

                Он пипец противный. У него смарт-тв (который нинужен), да ещё и аккаунт на Ютьюбе (который тоже нинужен). Ужасный человек, в общем.

                Вот когда Навальный себе завёл тикток, я сразу в нём разочаровался как в политике и человеке, тут та же фигня.
                Ответить
                • всмысле аккаунт на ютубе не нужен, как на нужные каналы без него подписываться?
                  Ответить
                  • Добавлять в закладки и изредка проверять нужные каналы.

                    Ты ещё про Фейсбук спроси (он тоже много где нужен, правда вот нужны ли сервисы, которые его требуют...).
                    Ответить
                    • делать нехуй чтоли, 50 каналов проверять, если они контент месяцами могут не делать
                      Ответить
              • Вот ещё реальный пример:

                «You cannot become a good writer without a lot of reading;
                You cannot learn to write good code without reading a lot of code»

                Чувак, видимо, не смог перевести фразу «чукча не читатель, чукча – писатель».

                С одной стороны он прав, ведь я прочитал много кода на «РНР» и никогда в жизни не напишу ни единой строчки на этом языке. С другой стороны, просто читать код недостаточно, нужно разбираться с задачами, которые он решает, с алгоритмами и со всякими приёмами. Жаль, что в твите это всё не выразить, да и мышление Романа, скорее всего, уже подстроилось под мышление маленькими несвязными кусочками, вряд ли он смог бы что-то умное развить из изначального изречения.
                Ответить
        • Я с тобой полностью согласен. А ещё его (и Котлин, и Елизарова) сделали в России.

          А знаете, что ещё сделали в России?!

          1С.

          Именно поэтому я против «Kotlin».
          Ответить
      • Either лучше исключений, угу

        Исключения должны быть только для ошибок вроде деления на ноль
        Ответить
        • Дебажил я как-то код с Either, не понравилось. Без стектрейса хрен поймёшь, где он свалился в Left. Поэтому я за `Erlang', написал себе плагин для GNU\Emacs который стектрейсы из логов парсит и теку. MonadError, ящитаю, имеет место быть, но в специфических условиях.

          Обработка ошибок трудна, нет серебряной пули.
          Ответить
          • А можно скретить ужа с ежом, и в Either класть ошибку с трейсом?

            >Обработка ошибок трудна,
            Это правда. И мало кто её умеет. Я бы добавил её к неймингу и кешингу
            Ответить
            • А как же работа с кодировками и датами? Некоторые вон даты в плюсах по-прежнему в строках обрабатывают
              Ответить
              • >в строках?
                зачем? за

                ксьати, в жабе старые жабоёбы используют long, бо Date это ад
                Ответить
                • как получили из MySQL в строке, так и таскаем по всему коду...
                  Традиции, легаси, и пр.
                  Ответить
                    • я тоже так подумал, когда мне это рассказали, но нет, речь про плюсы )))
                      Ответить
                      • Беги оттуда, этих людей уже не спасти, но у тебя еще есть шанс
                        Ответить
                • но в жабе же сто лет есть жодатайм (и то же самое из коробки в java8)
                  Ответить
            • Проблема исключений в том, что они действуют на расстоянии, т.е. это по сути сайд-эффект. А для сайд-эффектов эффективной теории типов пока нет. Если для чистых значений можно запилить интуитивно-понятную denotational semantics и течь, то для эффектов она не работает в принципе.

              Я стараюсь пилить API, возвращающие Either-подобную питушню, но внутри модуля иногда использую эксепшны.
              Ответить
              • > Я стараюсь пилить API, возвращающие Either-подобную питушню, но внутри модуля иногда использую эксепшны.

                ...Ну и непосредственно в теле event-loop'ов использовать
                {ok, FD} = file:open("goatse.jpg")
                — святое. Супервизор стерпит.
                Ответить
              • Лол, хотел шутки ради предложить "использовать продолжения вместо исключений", а кто-то так и вправду так сделал и в прод заделиверил.
                Ответить
                • Вообще, идея имеет право на жизнь, т.к. она гарантирует что кто-то где-то ловит это исключение. С традиционными исключениями ты просто кидаешь какашку в толпу, надеясь, что её кто-то поймает. А с продолжениями ты сначала просишь вызывающую функцию предоставить унитаз.
                  Ответить
                • А было бы клево, кинул исключение, обработал и вернулся

                  Есть реальные примеры таких языков?
                  Ответить
                  • Лисп. Ну и виндовые SEH в сишке. Бросаешь, ловишь, можешь вернуться обратно.

                    В лиспе даже какой-нибудь параметр обратно в бросившую функцию передать можно было. Удобно для гуйни про retry/continue/abort.
                    Ответить
                  • > Есть реальные примеры таких языков?

                    Да это в любом можно запилить, где есть лямды:

                    do_pitushnya success fail =
                      if oshibka then
                        fail "Oshibka!" -- Пробрасываем управление хэндлер исключений
                      else
                        success 42 -- Пробрасываем значение в нормальный путь


                    Я в своём модел-чекере примерно так делаю, ибо лень было нормальные исключения пилить.
                    Ответить
            • лучше всего сделали в "Visual Basic"
              ебанул on error resume next и течешь
              Ответить
          • Ну Either дебажить сложно только если он по вообще всей кодобазе размазывается (привет руст)
            Ответить
            • Если твой код делает I/O, то примерно так оно и будет.
              Ответить
              • если код работает с ио то пусть уебывает в MonadError, зачем обрабатывать всякое дерьмо навроде SocketException
                Ответить
                • > зачем обрабатывать всякое дерьмо навроде SocketException

                  Если это был сокет для хартбитов, то чтобы фейловер инициировать, например. Мало ли. А какой у тебя юзкейз?
                  Ответить
                  • чтобы инициировать фейловер обычно не нужно знать что это SocketException

                    а так в кейсе "при запросе \"POST\" на создание нового поста васи пупкина на твиттере", коду не нужно обрабатывать, например, ошибки подключения к БД или TimeoutException на какой-нибудь хттп-интеграции
                    свалилось - написал красивый лог и течешь 500
                    Ответить
                    • Ну это-то понятно. Я про то, где Either дебажить легко, спрашивал. (Могу представить, что в парсинге какой-нибудь питушни, где есть позиция токена в изначальном тексте)
                      Ответить
                      • а, ну у меня например всякая бизнес-логика мелкая возвращает Either на валидациях или еще всяком говне

                        если есть do-нотация в языке, то этим даже не сильно всрато пользоваться
                        Ответить
                        • Ну если валидация никогда не может возвратить одинаковую ошибку из двух разных мест, то всё будет отлично дебажиться. Проблема в том, что за соблюдением этого условия нужно следить. Иногда это легко (у данных есть уникальный ключ какой-то), иногда — нет.
                          Ответить
                          • а это кстати очень способствует тому, чтобы делать ошибки нормальными, а не throw new Exception(ебись сам, смотри стектрейс)
                            Ответить
                                • Я к тому, что есть тулзы для парсинга именно стектрейсов, которые быстро позволяют найти, где та же валидация наебнулась, а твои кастомные ошибки мне придётся грепом в коде искать. Так что вопрос, какие ошибки более "нормальные".
                                  Ответить
                                  • обычно роль такой тулзы исполняю я, находя стектрейс в логах сервера или в креш-дампе
                                    Ответить
                                  • ну в идейке тоже есть "парсер стектрейсов"тм, но на асинхронном говне пользы от него как от меня в ремонте жигулей
                                    Ответить
                                    • Надо ещё сначала догадаться как логи с прода в идею засунуть, чтобы она их правильно распарсила, лол. Поэтому я за `GNU\Emacs'.
                                      Ответить
                            • осталось решить проблему придумывания имен всем этим ошибкам/исключениям...
                              Ответить

                              • object SluchilasStrashnayaHuinya1
                                object SluchilasStrashnayaHuinya2
                                object SluchilasStrashnayaHuinya3
                                object SluchilasStrashnayaHuinya4
                                Ответить
                                  • В C++ я делаю так:

                                    throw std:: runtime_error("COKET HAE6HYJIC9I!!!!");

                                    И теку. К чему плодить сущности?
                                    Ответить
                                    • а где айдшник или контекст? какой это сокет? их же тыща может быть. Да и стектрейс пригодился бы.
                                      Ответить
                                    • если надо быстро наотъебись спровоцировать ошибку я делаю throw null и теку
                                      Ответить
                                    • а потом твой еррор долетает до верха, и пользователю выводится сообщение:

                                      "Не удалось установить программу, СОКЕТ НАЕБНУЛСЯ".

                                      А что за сокет? о чем это? Пользователь не ебет
                                      Ответить
            • Дебажить сложно, но тут есть несколько стульев.

              Either и checked exceptions явно документируют возможность возвращения ошибки, но засирают код.

              Checked exceptions кроме того требуют явно превращать их в runtime, если ошибку нужно логировать, а не обрабатывать.

              Как ты совершенно верно заметил, нет смысла во view ловить ошибку связи с базой данных "NetworkException: can't resolve domain name baza.hujaza.local". Ее нужно тупо залогировать, чтбы была цепочка:

              Can't render page
              because
              Can't fetch data
              because
              Can't connect to DB
              because
              Can't resolve host..

              Но Either не завезли в котлин, а check exceptions убрали.

              Теперь совсем не понятно, как вернуть ошибку. Можно конечно кинуть runtime, то как узнать какие могут быть виды рантайма?

              Будем честны: документацию никто не пишет, если это не публичное API, которое продают.
              Так что узнать можно только читая код. Причем вглубь, ведь вылететь может откуда угодно.

              В итоге в коде то тут, то туам написано

              catch (SomeException: e) { //I once seen this exception been thrown for some reason, so lets catch it
              }

              Хуйня и говно. Лучше бы был Either.
              Ответить
              • проблема "эксепшенов" скорее в том, что они все наследуются от одного говна и кто угодно может кинуть что угодно, поэтому "чекед эксепшены" помогают до первого умника, который либо неправильно решил понаследовать свой очередной сраный эксепшен, либо просто въебал throws Throwable и течет
                в "JS" кинуть вообще любое говно можно, например, хоть цифру, очень удобно
                именно поэтому я за "JS"
                Ответить
                • > в "JS" кинуть вообще любое говно можно, например, хоть цифру, очень удобно
                  В «C++» тоже. Именно поэтому я за «C++».
                  Ответить
                • >throws Throwable
                  за это нужно пиздить

                  вообще идея смешать рантаймы и чекды -- хуйовая.
                  Это совершенно разные сущности для разных задач изначально сделанные
                  Ответить
                  • > за это нужно пиздить
                    не считаю что нужно пиздить кого-то только из-за того что жаба говно

                    а вот пиздить за использование исключений не по делу можно
                    вот на какой хуй например кидать исключение при парсинге ууида из стринга? кто дохуя умный точно знает что там ууид сделал бы какой-нибудь Either.getOrThrow
                    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8