- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
В чём прикол "Go"?
Попробовал сделать примитивное апцо - это сущий пиздец. Нельзя просто взять и на лету
сформировать с нуля массив и отобразить его в виде "JSON" - надо под все случаи прописать
какие-то долбоёбские структуры и строго их придерживаться. Нельзя просто так взять и
закомментировать абы какую строку - под это приходится ломать и крушить половину кода
в файле.
Говорят, что это нужно для какой-то дисциплины, но схуяли программист не может распоряжаться
СВОИМ кодом по своему усмотрению? С каких пор компилятор учит программиста стилю кода?
В этом говноязыке чувствуешь себя, как на зоне.
Очень гадостно в этом языке работать с базами данных.
Я было обрадовался, что наконец-то появился язык, официально как будто не дающий возможности
технически реализовать ООП-подход и ломающий стереотип о необходимости влажных фреймворков,
но на деле это оказалось той же пиздой, только в другой обёртке.
Поэтому я за "PHP".
В нём я просто создаю на лету массив произвольной структуры и тут же превращаю его в "JSON".
В нём я просто комментирую ту строку, которая мне в данный момент не нужна. В нём я просто
создаю подключение к "MySQL" и использую его в коде даже без отсылки к переменной подключения.
Наконец, в нём я могу не использовать ООП, если не хочу (а я не хочу).
"PHP" переживает все другие языки для серверной разработки. "Ruby" мёртв, "Python" мёртв, "Java" и
"NodeJS" уже подыхают, на очереди, я так понимаю, как раз "Go". И только "PHP" на коне.
3.14159265 08.09.2020 00:24 # −1
guest8 08.09.2020 00:26 # −999
3.14159265 08.09.2020 12:25 # −1
>it was absurd the time needed to compile compared to something written in C or C++
Притом что кресты раньше обычно считались за днище по скорости компиляции.
bormand 08.09.2020 12:26 # −1
3.14159265 08.09.2020 12:28 # −1
Но в целом, пuтушатня компилится раз в 10 медленее аналогичной сишки.
bormand 08.09.2020 12:33 # −1
CHayT 08.09.2020 12:37 # −1
3.14159265 08.09.2020 12:39 # −1
3.14159265 08.09.2020 12:37 # −1
Смотря что понимать под компилятором.
Крестовый LLVM-бекэнд? Или разбирающий пuтуха фронт для LLVM? Он как я слышал на дrustне.
Так-то замечание верное: без использования unsafe/сишных биндингов пuтушатня работает в разы медленее.
Потому все рассказы про zero cost abstraction — враньё и пропаганда.
bormand 08.09.2020 12:39 # −1
Но почему? Много лишних копирований из-за того, что чекер по ссылке передать не даёт?
3.14159265 08.09.2020 12:43 # −1
>Много лишних копирований
Ещё я слышал что они делают runtime bounds checking.
Звучит конечно смешно и печально.
После сказок о ма-те-ма-ти-че-ски доказанной корректности языка.
Так-то я не знаю. Наверное дело в анскильности.
CHayT 08.09.2020 12:48 # −1
Как они умудрились это-то сломать? Какой прогресс )))
3.14159265 08.09.2020 13:02 # −1
Когда их спрашивают: а чего это у вас runtime проверки?
https://stackoverflow.com/a/28389701
Они отвечают: «а мы нихуя не умеем» и перекладывают ответственность на рантайм и шланг.
Для проверок в compile-time нужно пилить «систему типов с диапазонами». (см. тред: https://govnokod.ru/26515#comment535139)
А раст-отребье слишком анскильно для такой задачи.
bormand 08.09.2020 13:19 # −1
Забавно, что и гцц и шланг умеют доказывать несложные утверждения даже без такой системы. Т.е. в том же алгоритме двоичного поиска, скорее всего, они не будут вставлять проверки в колёса.
guest8 08.09.2020 15:26 # −999
Naf-Naf 08.09.2020 15:35 # −1
Ты про это?
При включенном «range checking» ($R+) сначала компилятор попытается проверить выражения, которые считаются в компилтайме (в вышеуказанном реальном примере он сразу выкинул и не стал дальше компилировать, потому что константа выходит за диапазон), а если в компилтайме ничего криминального нет, то он будет производить проверки в рантайме при каждом присвоении, как в следующем реальном примере:
https://ideone.com/g1ajss
3.14159265 08.09.2020 17:55 # −1
Чем это хуже Пuтушатни — непонятно.
Просто паскалисты не воняют создают дикий хайп вокруг обычных в целом вещей.
Притом скорость компиляции Паскаля огромна, в силу его простоты.
Desktop 08.09.2020 17:56 # −1
guest8 08.09.2020 17:58 # −999
Fike 08.09.2020 18:04 # −1
bormand 08.09.2020 12:48 # −1
3.14159265 08.09.2020 12:51 # 0
In safe Rust bounds checks elimination is left up to LLVM. Iterator’s next() is inlined, so the optimizer can see what actually is checked and doesn’t need to create a literal Some/None wrapper at any point.
For slices there’s also get_unchecked() which you can use when you are sure the check is not needed.
https://users.rust-lang.org/t/iterators-and-eliminating-all-runtime-bounds-checks/13935/3
Царь был прав. Пuтушатня нихуя сама не может. Всё быстрое и хорошее там либо ворованное, либо unsafe.
bormand 08.09.2020 13:00 # −1
Ну а почему нет? Если там эта механика уже запилена и несложные утверждения о значениях вполне доказывает.
> when you are sure
А вот это зашквар, конечно. Если я так в себе уверен, то зачем мне раст? Ладно бы что-то невозможное через unsafe делать. Но тут он на ровном месте ради пирфоманса...
3.14159265 08.09.2020 13:05 # −1
CHayT 08.09.2020 13:42 # −1
Zero-co-co-cost malloc!
Zero-co-co-cost free!
Zero-co-co-cost bounds checking!
bormand 08.09.2020 13:59 # 0
3.14159265 08.09.2020 13:27 # +1
Потому что это нивелирует все заявления о премиуществах пuтушатни.
Если проверки убирает LLVM-бекэнд, то любой llvm-based ЯВУ может быть не менее «безопасным».
gost 08.09.2020 14:04 # −1
bormand 08.09.2020 14:09 # −1
А массивы ведь для произвольного доступа и нужны.
З.Ы. Именно поэтому функцианальщики обычно всё доказывают на каких-нибудь списках или деревьях, а массивы обходят стороной.
CHayT 08.09.2020 15:08 # −1
Последователи функциональной парашдигмы придумали себе Separation logic, так что не всё так печально с массивами уже. Правда пока все имплементации, что я видел, выглядят в лучшем случае как embedded DSL. Но может когда-нибудь это нативно прикрутят.
Если не бояться ебануться наотличненько, то можно установить с опама исследовательский проект "iris" и сказать, что в Coq завезли O(1) векторы.
3.14159265 08.09.2020 18:06 # −1
Кстати Coq — хороший, правильный Петух.
В отличие от Rusta они занимаются нужными вещами, а не просто кукарекают.
Люди не полагаются на шланг, а делают в компайл-тайме пруфы ку-ка-ректности (coq correct) обращений к массивам:
http://adam.chlipala.net/cpdt/html/MoreDep.html
CHayT 08.09.2020 18:11 # +1
j123123 17.08.2021 22:36 # 0
Это потому что он проприетарный
gost 08.09.2020 15:33 # −1
Если компилятор сможет доказать, что ∀i: i + 42 < petuhLen, то ничего. Если сможет доказать, что ∃i: i + 42 < petuhLen (например, у нас цикл «i in 0..petuhLen»), то кидать ошибку. Если не сможет ни того, ни другого — выдавать предупреждение, наверное.
bormand 08.09.2020 15:41 # −1
А с простыми кейсами в духе "я вот только что проверил" или "мне просто циклом пробежаться" конпеляторы и сейчас справляются. Без всяких аннотаций.
gost 08.09.2020 15:43 # +1
Как что-то плохое.
CHayT 08.09.2020 15:48 # −1
Универсального алгоритма нет, но есть довольно мощные эвристики, к примеру Coq умеет довольно автоматически многие системы неравенств решать, включая про +42:
https://coq.inria.fr/refman/addendum/omega.html
https://coq.inria.fr/refman/addendum/micromega.html#coq:tacn.lia
bormand 08.09.2020 15:57 # −1
CHayT 08.09.2020 16:12 # 0
https://softwarefoundations.cis.upenn.edu/current/lf-current/lf.tgz (вся серия тут: https://softwarefoundations.cis.upenn.edu/current/index.html )
Начальных знаний не требует, кроме базовой функцональщины. Крайне советую читать эту книжку через CoqIde или в Emacs, распаковав её исходники куда-нибудь локально, и выполняя код и решая упражнения прямо по ходу чтения, и поглядывая на порядок глав в deps.gif.
bormand 08.09.2020 16:31 # −1
CHayT 08.09.2020 16:54 # 0
guest8 08.09.2020 15:28 # −999
gost 08.09.2020 15:31 # −1
guest8 08.09.2020 18:03 # −999
defecate-plusplus 08.09.2020 18:17 # −1
Тут вам не джэйвэ.
guest8 08.09.2020 18:19 # −999
defecate-plusplus 08.09.2020 19:30 # −1
guest8 08.09.2020 19:33 # −999
defecate-plusplus 08.09.2020 19:43 # −1
прочитай еще раз что тебе гост написал
operator [] как раз не проверяет границы (хотя я бы не исключал, что -Warray-bounds там кое-что будет уметь)
а .at() проверяет
guest8 08.09.2020 19:47 # −999
defecate-plusplus 08.09.2020 19:56 # −1
в чем должна быть магия?
gost 08.09.2020 21:50 # 0
На уровне синтаксиса — да. operator[]() у вектора сделан максимально быстрым и никаких «исключений» не содержит, вышел за перделы массива — сам дурак. В at(), напротив, рантайм-проверки есть.
Магию делает конпелятор, например: https://gcc.godbolt.org/z/v3EMM3.
В get_sum_1() конпелятор догадался, что проверки в at() лишние, и сделал максимально простой цикл без лишних телодвижений. А вот в get_sum_2(), к сожалению, не догадался: туповат-с.
guest8 08.09.2020 21:53 # −999
gost 08.09.2020 21:57 # −1
После инлайна получилось что-то такое (условно, конечно, это же не дефайны, чтобы их так дословно раскрывать):
Ну вот конпелятор и сумел доказать, что if тут лишний.
guest8 08.09.2020 21:59 # −999
defecate-plusplus 08.09.2020 22:01 # −1
gost 08.09.2020 22:02 # −1
Зачем? Ему на это похуй, он просто видит лишние сравнения и течёт.
> что такое "for"
Ну, инвариант сишного фора не особо сложно вывести, он там во второй колонке.
guest8 08.09.2020 22:04 # −999
defecate-plusplus 08.09.2020 22:06 # −1
если нет, то не сможет
guest8 08.09.2020 22:06 # −999
defecate-plusplus 08.09.2020 22:09 # −1
в постгресе такой правильный сорт функции называется stable
которая не портит базу и всегда будет возвращать одно и то же, если передать одни и те же аргументы и сохранять текущее состояние базы
guest8 08.09.2020 22:11 # −999
defecate-plusplus 08.09.2020 22:15 # −1
но самое главное, такую питушню можно использовать как критерий сортировки
gost 08.09.2020 22:08 # −1
gost 08.09.2020 21:53 # −1
3.14159265 08.09.2020 21:55 # 0
Починил, проверь.
Хотя, не. Туповат-с
gost 08.09.2020 21:59 # −1
UPD: А, не, в жирной строчке max_idx просто присвоится vec.size() же. Так не интересно.
3.14159265 08.09.2020 22:04 # 0
Я тоже сначала так подумал. А потом с горечью осознал что ошибся при копипасте:
>UPD: А, не, в жирной строчке max_idx просто присвоится vec.size() же.
3.14159265 08.09.2020 22:11 # 0
Таки туповат.
Причём казалось бы говнище: vec.size() постоянно дрочим внутри цикла. А оказывается оптимальным кодом.
https://gcc.godbolt.org/z/x5rq4j
Короче я понял, там эвристика расчитывает на идиоматичное i<vec.size() в условии или в бряке сверху(что одно и то же).
3.14159265 08.09.2020 22:26 # 0
Меняем местами
И получается хуйня
Аналогично компилятор не в состоянии оптимизировать 2 условия
https://gcc.godbolt.org/z/8hWT3j
bormand 08.09.2020 16:19 # 0
Какая безопасность )))
Ну хоть не UB как в крестах, просто two's complement. Хотя разницы особо и нет, один хер прога выведет фигню.
gost 08.09.2020 16:41 # −1
Desktop 08.09.2020 12:31 # −1
3.14159265 08.09.2020 00:29 # −1
guest8 08.09.2020 00:35 # −999
3.14159265 08.09.2020 00:40 # −1
Я за Царя и няшную.
guest8 08.09.2020 00:44 # −999
nymuH_XyuJlo 08.09.2020 09:50 # −2
3.14159265 08.09.2020 11:56 # −1
bormand 08.09.2020 10:08 # +2
TOPT 08.09.2020 10:11 # −1
defecatinho 08.09.2020 10:15 # −1
Naf-Naf 08.09.2020 10:58 # −1
Fike 08.09.2020 10:28 # −1
bormand 08.09.2020 10:32 # −1
Ну сэкономили на пакетном менеджере. У гугла ж одна репа на все, логично все зависимости там и хранить.
CHayT 08.09.2020 11:01 # −1
Я помню в студии была замечательная прагма, позволяющая локальные(!) пути к либам прямо в сишниках хардкодить. Так что до гения мелкософта го немного не дотягивает.
bormand 08.09.2020 11:14 # −1
Naf-Naf 08.09.2020 11:24 # −1
Desktop 08.09.2020 12:32 # −1
Там же вроде gopath ебанутый, все дела
Fike 08.09.2020 16:21 # −1
Desktop 08.09.2020 16:24 # −1
Fike 08.09.2020 16:59 # −1
один хуй даже сейчас у них есть какое-то подобие центрального репозитория артефактов, который почему-то в первую очередь прокси и только во вторую собственно репозиторий артефактов
ну ничего, в го 2 точно починят
Desktop 08.09.2020 16:30 # −1
- несколько версий одной зависимости емнип не поставить никак
- файла типа Package.json тоже не было, а потому каждая гоблядь должна была зависимости ставить руками (поймал себя на мысли, что в Рэкете такое же говно с этим, ну или я не шарю)
Может, что-то поменялось, конечно
CHayT 08.09.2020 10:49 # −1
defecate-plusplus 08.09.2020 11:00 # 0
тем более, что у крестов сейчас сегмент не "хочу", а "вынужден"
ну, по моим личным ощущениям
CHayT 08.09.2020 11:06 # −1
Даже после новых стандартов? Вроде наконец язык чинить начали после ада C++03.
> вроде, все крестушки давно выросли из этого возраста
Ок, но когда я в крестовых кругах вращался, они ещё не выросли.
defecate-plusplus 08.09.2020 11:14 # −1
я не занимаюсь крестами уже лет 7
кресты это долго, дорого и охуенно
не всегда подходит, мягко говоря
CHayT 08.09.2020 11:27 # −1
Скорее долго и охуенно дорого.
defecate-plusplus 08.09.2020 11:36 # −1
gost?
если писать игоры, то, конечно, ты бы хотел максимум фпс на железе юзера
если упёрся в то, что на жабе тормозит бекенд яндекс карт, то тоже
если у тебя микроэвм с 128МБ рам, а всё ещё надо за микросекунды выполнять операции, то тоже
как-то так
нормальный менеджер смотрит на это, взвешивает все за и против, и вот приходит к выводу, что "охуенно дорого" всё ещё приемлемо, потому что всё остальное будет ещё дороже или тупо не сможет достичь целевых показателй
bormand 08.09.2020 11:32 # −1
Вон даже на ГК вбросы про "кресты говно" уже не вызывают эмоций.
3.14159265 08.09.2020 12:18 # −1
guest8 08.09.2020 15:15 # −999
Naf-Naf 08.09.2020 15:26 # −1
guest8 08.09.2020 15:29 # −999
Naf-Naf 08.09.2020 15:36 # −1
3.14159265 08.09.2020 00:27 # +1
guest8 08.09.2020 00:29 # −999
bormand 08.09.2020 13:51 # 0
CHayT 08.09.2020 15:31 # 0
guest8 08.09.2020 15:33 # −999
bormand 08.09.2020 15:59 # −1
3.14159265 08.09.2020 18:11 # −1
>свои пилить только через боль и унижения.
И мы опять приходим к тому, о чём я говорил...
Именно поэтому единственная вменяемая структура данных — одномерный массив.
bormand 08.09.2020 13:44 # 0
Блин, попробовать что ли по фану пильнуть дерево. Посмотреть хоть своими глазами на этот раст.
CHayT 08.09.2020 13:52 # +1
Currently there is 11 THOUSAND lines of Rust in wlroots-rs. All of this code is just wrapper code, it doesn’t do anything but memory management. This isn’t just repeated code either, I defined a very complicated and ugly macro to try to make it easier.
This wrapper code doesn’t cover even half of the API surface of wlroots. It’s exhausting writing wlroots-rs code, memory management is constantly on my mind because that’s the whole purpose of the library. It’s a very boring problem and it’s always at odds with usability - see the motivation for the escape from callback hell described above.
To do all of this, and then go write Way Cooler, already a big undertaking, is too much for me to commit to. When the benefit at the end of the day is just so I don’t have to write C, that doesn’t really make it worth it. If I got this out of the box by simply linking to the library, like I can in C++, then it would be much more tenable.
I can always just use unsafe bindings to wlroots, just like I would with any other language. However, the entire point of Rust is that it’s safe. Doing that is not an option because at that point you lose the entire benefit of the language.
http://way-cooler.org/blog/2019/04/29/rewriting-way-cooler-in-c.html Стрелочка повернулась!
3.14159265 08.09.2020 19:02 # 0
Какой пиздец )))
Пuтушатня заставляет делать какие-то чудовищные обёртки, для самых тривиальных вещей изворачиваться, выдумывая головоломные абстракции.
Которые в итоге... всё-равно протекают.
>I wish them luck, but I don’t feel interested in rewriting the entire world in Rust
Ахаха.
> Smithay [rust] is very incomplete. Very, very incomplete compared to wlroots. It is no where near usable and the current trajectory doesn’t look like it will be usable very soon either.
> wlroots [C] is a great framework and has a strong backing in the community so I don’t see the need to abandon it just so I can keep using Rust.
> I like Rust, but not enough to reinvent the wheel so it doesn’t have any C in it.
Как там мантра «дак мы же как Сишка»?
Desktop 08.09.2020 19:09 # 0
3.14159265 08.09.2020 19:12 # 0
Только тыкал в это палочкой.
Потому моё мнение вряд ли претендует на объективность.
CHayT 08.09.2020 19:24 # 0
bormand 08.09.2020 11:37 # −2
guest8 08.09.2020 18:21 # −999
Fike 08.09.2020 18:23 # −1
guest8 08.09.2020 18:24 # −999
Fike 08.09.2020 18:26 # −1
guest8 08.09.2020 18:27 # −999
CHayT 08.09.2020 18:46 # −1
guest8 08.09.2020 18:48 # −999
Fike 08.09.2020 20:37 # −1
guest8 08.09.2020 20:43 # −999
urinoterapevt 09.09.2020 00:21 # +1
guest8 09.09.2020 00:27 # −999
urinoterapevt 09.09.2020 00:34 # 0
defecatinho 09.09.2020 00:22 # −2
guest8 09.09.2020 00:26 # −999
urinoterapevt 09.09.2020 00:32 # 0
gost 09.09.2020 00:33 # 0
gost 09.09.2020 00:34 # 0
3.14159265 09.09.2020 00:59 # −1
https://govnokod.ru/26927#comment573150
https://govnokod.xyz/_26927/#comment-557333
Экое коварство. На ГК он чётный, а на хузе нечётный.
И как теперь быть? Отвечать только на хузе? Но он всё-равно ответит и на ГК.
bormand 09.09.2020 01:14 # −1
guest8 09.09.2020 01:35 # −999
bormand 09.09.2020 01:42 # −1
Интереснее исправить коммент на хузе в тот момент, когда он уже получил исправленный тред с ГК но ещё не внёс его в базу. Тогда правка с хуза окажется на ГК, а правка с ГК окажется на хузе.
defecatinho 09.09.2020 00:35 # −2
guest8 09.09.2020 00:36 # −999
defecatinho 09.09.2020 00:41 # −1
> Заделал твой анус, проверь.
> Пенисом.
> Анал, минет, кордебалет.
> Но член мой ты дружески можешь подержать.
> А мой хуец тебе в глаза не бросился?
> Засунул тебе вовнутрь, проверь.
> Поюзал твой анус, проверь.
> Встретил твою мамку с блядок.
> Сунул свой кривой-перекривой хуец тебе в попец, проверь.
> Увидел у тебя промеж ягодиц.
> Дал тебе слизать спермач с моего хуя.
Вот это не стертор?
guest8 09.09.2020 00:43 # −999
defecatinho 09.09.2020 00:50 # −1
guest8 09.09.2020 00:51 # −999
nymuH_XyuJlo 09.09.2020 12:50 # 0
Fike 09.09.2020 01:43 # −1
guest8 11.09.2020 06:02 # −999
guest8 11.09.2020 06:02 # −999
guest8 11.09.2020 06:02 # −999
MEJlOMAH 25.08.2021 21:13 # 0