- 1
https://plugins.jetbrains.com/plugin/12673-csense--kotlin-checked-exceptions
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
https://plugins.jetbrains.com/plugin/12673-csense--kotlin-checked-exceptions
1. чекдэкспепшены говно
2. но пусть лучше IDE проверяет, что ты их ловишь
[--- вы находитесь здесь -- ]
3. но пусть лучше код не компилируется, если ты их не словишь
Если вы решили первым
Стать в рядах своих сограждан —
Никогда не догоняйте
Устремившихся вперед.
Через пять минут, ругаясь,
Побегут они обратно,
И тогда, толпу возглавив,
Вы помчитесь впереди.
В "PHP" говнокод не компилируется. Именно поэтому я за "PHP".
Вот bat- или sh-файл я могу запустить, если в нём есть синтаксические ошибки. Он выполнится построчно до первой ошибки. А php-файл в известных реализациях интерпретатора я так запустить не могу.
Пхп, наверное, тоже в какую-нибудь питушню преобразуется и висит в памяти.
Интерпретатор с опкешем != конпелятор + интерпретатор.
..если это не шаблоны, не constexpr, не мудификаторы AST из грувей, не аспекты и пр.
Всё это какая-то очень мутная хуйня, если честно
Ну что там мутного то?
Основная цель интерпретатора -- взять код и исполнить его. Внутри ради пирфоманса там может быть хоть джит, хоть опкеш, хоть аот. Но если я там в коде написал форматирование диска, то оно произойдёт сейчас.
Основая цель конпелятора/транслятора -- взять код и получить другой код. Часть кода в духе макросов или темплейтов таки может исполниться (в AST трансформерах, наверное, даже какой-нибудь файл рядом высрать можно). Но если я там в коде написал форматирование диска, то оно сейчас не произойдёт, а будет заложено в выходной файл.
Надо на основную цель смотреть, а не до деталей доёбываться, имхо.
верно?
А вот эту фразу я бы выкинул на помойку. От неё только путаница. Один и тот же язык можно и сразу исполнить и сконпелировать в файл чтобы исполнить потом.
> в студии нажал F5
Ну да, если ты никогда не полезешь смотреть как это устроено и никогда не полезешь за бинарём -- студия для тебя интерпретатор (не с++ и не cl!). В конце-концов там реально может быть интерпретатор крестов, для сишки же есть.
принято.
"интерпретируемый способ запуска кода", идет?
>студия для тебя интерпретатор
охбля, ну ладно
Ну а вдруг там реально интерпретатор крестов запилили чтобы тебе быстрее и удобнее было отлаживаться?
То же edit-and-continue, когда ты на ходу можешь поправить исходный код и продолжить исполнение, на первый взгляд совсем не похоже на фишку конпелятора.
Нет.
C++ - это интерпретируемый язык потому, что код на нём обычно запускают с помощью интерпретатора - CINT или Cling.
https://root.cern.ch/root/html534/guides/users-guide/CINT.html
https://root.cern/cling/
Слухам о компилируемости C++ верить нельзя.
Компилтайм-питушня (шаблоны, констэкспры) в нем действительно интерпретируемая (притом без JIT). Потому это так тормозит.
Является ли компилятором groovy с его CompileStatic? Является ли компилятором jit? можно ли назвать шланг компилятором в llvm?
JIT -- не конпелятор. У него нет выходного файла (ну кроме отладочного дампа). Это просто способ ускорения интерпретатора.
Про груви не знаю. Я могу явно попросить отконпелировать файл и потом отдельно исполнить его на жвм?
Компилятор это разновидность транслятора.
но он же не высирает llvm опкоды (если не попросишь)
>JIT -- не конпелятор.
ust-in-time (JIT) compilation же
> Я могу явно попросить отконпелировать файл и потом отдельно исполнить его на жвм?
угу, groovyc
Если он не высирает ллвм опкоды, то он высирает нативный код. Или асм текстом. В отличие от пхп, который этот код не высирает, а исполняет.
Всё-таки градация на трансляторы и компиляторы выглядит логичнее, если опираться на уровни абстракции и близость к железу.
а если я сделаю "хибернейт"?
>энергонезависимую
а если у меня ramfs?
Значит процессора у неё нет, то есть JVM является интерпретатором байт-кода.
Даже педивикия с этим согласна:
«В Java используется JIT-компиляция для генерации машинного кода, хотя изначально он переводится в интерпретируемую форму»
Что мне мешает его запилить? Ну кроме отсутствия денег и времени.
Кстати, это интересный логический парадокс: является ли конпелируемым язык, если он исполняется на виртуальном процессоре.
Я считаю, что нет, потому что скомпилированная питушня должна выполняться на физическом процессоре, потому что любой виртуальный процессор, либо эмуляция физического – это уже интерпретатор.
В реале, емнип, только arm'ы с аппаратным ускорением некоторых фишек джавы.
А вообще, это всё питушня, завязанная на терминологию, которая пытается как-то поделить все вещи на чёрное и белое, главное разбираться как все эти ЯП устроены и как программы на них выполняются.
Вот тут, кстати, чуваки считают совсем наоборот касательно всего, что мы обсудили, ещё и три противоположных мнения продвигают:
https://ru.stackoverflow.com/questions/930652/jvm-транслятор-или-интерпретатор
тут я согласен сбормандом: язык не может быть интерпретируемый или компилируемый: может быть только реализация
groovy, lua, euphoria: всё это как компилируемые, так и интерпретируемые
В принципе, это логично, если очень постараться, можно и пыхокод скомпилировать.
Я как будто прозрел: сижу сейчас VAHUE от того как моя картина мира перевернулась, в которой до этого всё было просто и понятно )))
Ради eval() придётся в сконпелированный бинарь или рантайм добавлять кусок конпелятора или вспомогательный интерпретатор...
Сначала всё стройно и логично, затем появляются 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 в си.
Нет, хуевое определение
Не беда, надо просто ввести ещё одно определение для этого кейса:
«Транспиляция — преобразование программы, при котором используется исходный код программы, написанной на одном языке программирования в качестве исходных данных, и производится эквивалентный исходный код на другом языке программирования»
А если на этом же? Предлагаю ввести термин гомокомпиляция.
https://forum.uokit.com/smart/index.php?t69438-20.html
Нужно срочно запретить программистам выдумывать новые слоые
Трансляция - отображение из исполняемого кода в исполняемый код (исходный, бинарный - неважная питушня).
Оптимизация - отображение исполняемого кода в более быстрый исполняемый код на том же языке.
...и одной оценки
Житность - асимптотическая оценка времени компиляции по сравнению от времени исполнения.
O(1) - классическая компиляция, O(N) - жит-компиляция
...чтобы все эти ком-, транс- и прочие ляторы-пиляторы упорядочить.
Для 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)
здесь возникает что-то вроде деления на ноль или дифференцирования по константе, поэтому про результат в общем случае известно только то, что это больше линейной питушни.
Ну и правильно сделали. Зачем плодить сущности?
Транслятор это асемблепр, бо между мнемониками и реальными опкодами соответствение 1-в-1- (биективное или как там оно у ма-те-ма-тикаов называется)
И тут ты открываешь интеловскую доку... Или армовскую, где всё ещё хуже.
Примерно такой же по смыслу -- да. Но ты и с сишкой можешь это сделать в общем-то.
ну то такое
сравни с тем, в какой код превращается С++ например
Впрочем и тасм с масмом вроде тоже умели удлинять джампы при необходимости.
Да, выдавать байткод «PHP» в виде бинарных файлов почему-то не принято.
Т.е. основной эффект у PHP -- исполнение кода, а не файл который потом можно исполнить.
лучше чем просто исключения тем, что поток исполнения контроллирует эффект, а не хуй знает что, и все твои асинхронные ресурсы и прочая поебень нормально отменятся/закроются (оопблядки со своим Dispose соснули)
ну а ошибки обрабатываемые ебурить в Either
Елизаров, доречи, не изначальный разраб. Он пилил хайлоад на жабе для devexperts, а котлин делал Бреслав. Елизаров потом там появился
Я пару раз видел его в массах, обычно он чото за многопточность и пифоманс втирал
Я не читаю твиттеров, но вангую, что там будет современный булщит из воды и бессмысленных слов. Угадал?
Also known as “the first 3 years of our life we learn to speak, the rest of life we learn to be silent”»
Хули он не помолчит тогда? Или твиттинг за speaking не считается? Короче пацан не ровный, за базар не отвечает.
волк.jpg
а длинный контент можно тредами хуярить (удобно просто пиздец)
а еще можно тредами хуярить гитлера
Не, ну просто так обозвать конечно можно, но как следует аргументировать уже не выйдет, аргументацию придется разбивать на несколько сообщений, что как раз нихуя не удобно.
ты раскладку забыл поменять вроде
Даже готовые шаблоны есть )))
Да покарает твою жопу святой Tim Berners-Lee.
Имярёк – сраный уважаемый гомосексуалист и выступающий в пассивной роли при минете человек.
Подробности в моём подкасте (или видео на ютюб): ...
ДОРОГИЕ
ЕБАНЫЕ ГАДЫ!
КОНЕЦ
1) подписки на художников, ибо ограничений на длину нарисованных тентаклей там нет
2) Полемики без аргументации и последующей травли. Т.е. назвать оппонента гитлером места хватит, а объяснить почему — уже нет by design.
Когда-то можно было адблоком выпилить 2-e (т.е. recommended, trending) и оставить только 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 ломали
Он пипец противный. У него смарт-тв (который нинужен), да ещё и аккаунт на Ютьюбе (который тоже нинужен). Ужасный человек, в общем.
Вот когда Навальный себе завёл тикток, я сразу в нём разочаровался как в политике и человеке, тут та же фигня.
Ты ещё про Фейсбук спроси (он тоже много где нужен, правда вот нужны ли сервисы, которые его требуют...).
«You cannot become a good writer without a lot of reading;
You cannot learn to write good code without reading a lot of code»
Чувак, видимо, не смог перевести фразу «чукча не читатель, чукча – писатель».
С одной стороны он прав, ведь я прочитал много кода на «РНР» и никогда в жизни не напишу ни единой строчки на этом языке. С другой стороны, просто читать код недостаточно, нужно разбираться с задачами, которые он решает, с алгоритмами и со всякими приёмами. Жаль, что в твите это всё не выразить, да и мышление Романа, скорее всего, уже подстроилось под мышление маленькими несвязными кусочками, вряд ли он смог бы что-то умное развить из изначального изречения.
6042
Кстати, в москву цивилизация с видеодомофонами ещё не дошла? Удобно же, можно из приложухи посмотреть кто пришёл.
Х.з., я приложухой открываю.
А как они могут оказаться не рядом со мной?
https://pikabu.ru/story/doktorkiborgnovosibirskiy_vrach_rasskaza l_kak_zhivet_s_shestyu_chipami_v_rukakh_ 7179393
https://www.youtube.com/watch?v=Oebp4tWll4s
Невозможно стать плохим программистом, не читая код на "PHP"
PHP создан, чтобы писать плохой код, просто под веб писать плохой код более популярно, чем под не веб
А знаете, что ещё сделали в России?!
1С.
Именно поэтому я против «Kotlin».
Исключения должны быть только для ошибок вроде деления на ноль
Обработка ошибок трудна, нет серебряной пули.
>Обработка ошибок трудна,
Это правда. И мало кто её умеет. Я бы добавил её к неймингу и кешингу
зачем? за
ксьати, в жабе старые жабоёбы используют long, бо Date это ад
Традиции, легаси, и пр.
Я стараюсь пилить API, возвращающие Either-подобную питушню, но внутри модуля иногда использую эксепшны.
...Ну и непосредственно в теле event-loop'ов использовать — святое. Супервизор стерпит.
Есть реальные примеры таких языков?
В лиспе даже какой-нибудь параметр обратно в бросившую функцию передать можно было. Удобно для гуйни про retry/continue/abort.
Да это в любом можно запилить, где есть лямды:
Я в своём модел-чекере примерно так делаю, ибо лень было нормальные исключения пилить.
ебанул on error resume next и течешь
Если это был сокет для хартбитов, то чтобы фейловер инициировать, например. Мало ли. А какой у тебя юзкейз?
а так в кейсе "при запросе \"POST\" на создание нового поста васи пупкина на твиттере", коду не нужно обрабатывать, например, ошибки подключения к БД или TimeoutException на какой-нибудь хттп-интеграции
свалилось - написал красивый лог и течешь 500
если есть do-нотация в языке, то этим даже не сильно всрато пользоваться
Тоже мне проблема: https://raw.githubusercontent.com/k32/erlstack-mode/master/pictures/screencap.gif
object SluchilasStrashnayaHuinya1
object SluchilasStrashnayaHuinya2
object SluchilasStrashnayaHuinya3
object SluchilasStrashnayaHuinya4
throw std:: runtime_error("COKET HAE6HYJIC9I!!!!");
И теку. К чему плодить сущности?
"Не удалось установить программу, СОКЕТ НАЕБНУЛСЯ".
А что за сокет? о чем это? Пользователь не ебет
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.
в "JS" кинуть вообще любое говно можно, например, хоть цифру, очень удобно
именно поэтому я за "JS"
В «C++» тоже. Именно поэтому я за «C++».
за это нужно пиздить
вообще идея смешать рантаймы и чекды -- хуйовая.
Это совершенно разные сущности для разных задач изначально сделанные
не считаю что нужно пиздить кого-то только из-за того что жаба говно
а вот пиздить за использование исключений не по делу можно
вот на какой хуй например кидать исключение при парсинге ууида из стринга? кто дохуя умный точно знает что там ууид сделал бы какой-нибудь Either.getOrThrow
дебагер в 60е