- 1
- 2
- 3
- 4
- 5
- 6
- 7
package main
func main() {
var str = "Hello World"
var length = len([]rune(str))
println("Length of the string is :", length)
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−2
package main
func main() {
var str = "Hello World"
var length = len([]rune(str))
println("Length of the string is :", length)
}
String Length in Golang
To get the length of a String in Go programming, convert the string to array of runes, and pass this array to len() function.
guest6 26.05.2022 18:46 # −1
инь, как тебе го? Выучить советуешь?
У меня есть пара говнотулов на няшной, статически слинкованных. Думаю их на го переписать, а то хипстота в няшную не может. Стоит ли?
guest6 26.05.2022 18:53 # −1
guest6 27.05.2022 18:47 # 0
Крестотул у меня тоже е, но я его пок ане буду трогаць
guest6 27.05.2022 23:36 # 0
guest6 27.05.2022 23:44 # 0
Другая причина это коллекции, и еще деструкторы. Вручную ебаться не очень прикольно, но увы
nyTuH_nugop 28.05.2022 00:19 # 0
guest6 28.05.2022 01:08 # 0
Support 27.05.2022 00:28 # 0
kcalbCube 27.05.2022 06:23 # 0
nyTuH_nugop 27.05.2022 18:42 # −1
Кодопойнты небось, всё не как у сапиенсов.
guest6 28.05.2022 01:08 # +1
guest6 28.05.2022 12:33 # 0
guest6 28.05.2022 15:06 # 0
kcalbCube 28.05.2022 05:11 # 0
nyTuH_nugop 28.05.2022 10:38 # 0
guest6 28.05.2022 01:18 # +1
guest6 28.05.2022 01:25 # −1
Ты тварь тупая, в политоту!
DypHuu_niBEHb 30.09.2022 23:13 # 0
guest6 30.09.2022 23:16 # 0
guest6 30.09.2022 23:21 # 0
>попробуй
Я и твою программу починив
guest6 30.09.2022 23:31 # 0
DypHuu_niBEHb 30.09.2022 23:30 # 0
Это размер в байтах а не буквах рунах
ты совершенно прав
я тебе напиздел понимаешь НАПИЗДЮНЬКАЛ наебал тебя блять ты понимаешь я СОВРАЛ нахуй я сказал тебе неправду
DypHuu_niBEHb 30.09.2022 23:31 # 0
Soul_re@ver 30.09.2022 23:45 # 0
guest6 30.09.2022 23:53 # 0
Руна это просто кодпоинт в юникоде размером кажется что 32 бита же? тоесть количество памяти у массива рун может быть больше чем у строки утф8 (а у массива еще и размер же)
Но вообще Иню прав в том, что функцию len писали горбатые колоеды
Soul_re@ver 01.10.2022 00:01 # 0
guest6 01.10.2022 00:08 # 0
https://unicode.scarfboy.com/?s=U%2B0401 (401 по программячи 1025)
А вообще Ё не нужно
Мы не беларусы
зы: а вот со всякими лигатурами наверное и верно отсосать можно
Soul_re@ver 01.10.2022 00:10 # 0
https://i.imgur.com/8hzdsuV.png
DypHuu_niBEHb 01.10.2022 00:12 # 0
Это руна 1045 (е) плюс руна 776 (диатезис или как-то так)
https://www.compart.com/en/unicode/U+0308
,но руны тут не виноваты: по правилам уняк-кода это ДВА различных кодпоинта
да?
Soul_re@ver 01.10.2022 00:19 # 0
Вообще — юникод нужно обрабатывать функциями для юникода. Потому что есть вообще 3 метрики — code units, code points и знакоместа, которые я не помню как называются. Для нормальных людей интересно обычно последнее.
guest6 01.10.2022 00:24 # 0
я ниибу правда есть ли тамс длина
> Ё и Ü — отдельные буквы а не Е/U с точечками.
Это зависит от языка КМК
В английском ты можешь написать "Cafe" вместо "Café", это не будет ошибкой.
В нидерландском "een" это неопределенный артикль, а "één" это один (число) и скорее всего путать их не нужно
В русском ёжик и ежик ничем не отличаются, а у беларусов нельзя вместо "вёскi" (деревни) написать "вескi" -- это так же будет ошибкой
ps: доречи, кириллическая i (укр и бел) и латинская i -- разные кодпоинты
> знакоместа, которые я не помню как называются. Для нормальных людей интересно обычно последнее.
то есть когда я говорю "в слове хуй три буквы" я говорю о знакоместах?
Soul_re@ver 01.10.2022 00:40 # 0
Да, я имел в виду русский и немецкий. В других языкам могут быть как отдельные элементы для изменения букв, так и отдельные буквы, и свои правила использования этого всего.
> то есть когда я говорю "в слове хуй три буквы" я говорю о знакоместах?
Ну тебе же насрать, что перед "х" вставлен LTR маркер, чтобы арабы правильно слово видели, а между буквами какой-нибудь Joiner, чтобы слово не пидорасилось переносом? Значит о знакоместах.
guest6 01.10.2022 02:49 # 0
вот например немцы "ss" пишут как ẞ (а швеййарцы -- нет)
Это одна буква или две?
У голландцев есть звук "ij" (ай или эй в зависимости от региона) и для него в теории тоже есть отдельная буква но почти не используется
nyTuH_nugop 01.10.2022 04:01 # 0
В далекой России порядок наводил.
Ни один комиссар от него не удрал
Дед к большевикам жалости не знал.
Дед мой был штурмфюрер ẞ,
Дед мой был штурмфюрер ẞ,
Дед мой был штурмфюрер ẞ,
Дед Штурмфюрер, Штурмфюрер ẞ.
guest6 01.10.2022 04:05 # 0
А вот песня про дедушку есть
https://youtu.be/omfaIvqB7U0?t=25
guest6 01.10.2022 00:31 # 0
Жиза: "Ελλάδα это Греция"
Программист: для блядь, ладно. Одна буква -- один кодпоинт размером 4 байта
Жиза: "Ё"
Программист: буду проституткой
guest6 01.10.2022 00:16 # 0
можно тока за O(N)
как называлась та сишная либа которая всё это умела?
Alina_Poksenova 12.11.2022 12:51 # 0
Alina_Poksenova 12.11.2022 13:03 # 0
Подсчёт длины строки в пикселях становится нетривиальной задачей. Это не в ДОСе длину строки умножить на восемь...
guest6 12.11.2022 04:01 # +1
Там строки просто нельзя индексировать, и всё.
То есть они даже не пытаются сделать вид, что существует понятие "пятая буква"
Хочешь индексировать -- ну конвертни в байты (если все символы семибитные) и ебаш массив и слайс
А если хочешь нырнуть в говно, то вот
https://crates.io/crates/unicode-segmentation
Iterators which split strings on Grapheme Cluster or Word boundaries.
Так что рустишкам сразу сказали, что деда мороза не существует.
Все остальные языки едят говно в этом вопросе и лгут пользователю, и между нами -- не далеко ушли от сишки с char[], разве что чар у них побольше
Alina_Poksenova 12.11.2022 05:29 # 0
Удобно, что сразу графемы. Ничего не оторвёт при переносе.
А если всё-таки надо графему разбить на кодпоинты (например, я пишу рендер), то как это лучше сделать?
guest6 15.11.2022 04:03 # 0
Тип char всё таки есть, и это примерно Unicode Scalar (назовём его "буква")
Он занимает 4 байта, но строка не состоит из чаров
Строка состоит из байт
Поскольку невозможно получить в общем случае символ за O(1), а индексация должна работать за O(1), то высосать чары из строки можно только через итератор
Это будет O(N), но от итератора ты другого и не ожидаешь
То есть это как в плюсах: вектор индексируется, а лист -- нет.
Строка поддерживает слайсинг кстати, но если ты попадешь в середину UTF-8 (строки там всегдла UTF-8) то получишь паник
Alina_Poksenova 15.11.2022 04:39 # 0
MAPTbIwKA 30.09.2022 23:43 # 0
guest6 01.10.2022 03:08 # 0
Захватывает кложа что-то по значению или по ссылке? Ответ на этот вопрос должен быть очевиден любому программисту, потому вы без труда скажете, что выведет эта программа
Ответ будет через час
guest6 01.10.2022 07:04 # 0
guest6 01.10.2022 07:10 # 0
Знаешь ответ, или рассказать?
guest6 01.10.2022 07:25 # 0
guest6 01.10.2022 07:32 # 0
Захват кложей свободных переменных происходит по ссылке в данном случае.
Утверждается, что эвристика следующая
https://eli.thegreenplace.net/2019/go-internals-capturing-loop-variables-in-closures/
Поскольку i меняется, то её и хватают по ссылке, и все горутины сидят с одной переменной, которая быстро превращается в 100.
Првильно её скопировать, тогда её захватят по значению, и будет заебс
Еще более правильно наверное никогда не хватать ничего в кложах, и всегда явно передавать переменную так как там ты можешь управлять способом передачи
guest6 01.10.2022 09:15 # 0
guest6 01.10.2022 03:24 # 0
https://twitter.com/i/status/1575831527619203073
guest6 01.10.2022 04:19 # 0
Во всех языках (даже в С++) this это указатель. А в Go это просто аргумент, который можно передать.. по значению
Это не значит, что он скопируется (если ты его не изеняешь -- то компилятор может сделать конст реф) но семантикка такая, что метод получает копию
Это очень смешно))))
Soul_re@ver 01.10.2022 11:07 # 0
А в Крестах планируется добавить возможность указывать this-аргумент. Ему можно быдет указывать разные const/volatile и прочую питушню, как обычному аргументу, а не после закрывающей скобки, как сейчас. А ещё его можно будет сделать не указателем, а ссылкой, чтобы разным указателефобал лучше спалось. А ещё его можно сделать значением, тогда при вызове метода он будет оперировать на копии объекта....
guest6 01.10.2022 15:03 # 0
Так вот собccно говнари могут делать так
Причем передача по значению это еще такой способ сказать "хочу конст".
Казалось бы пидорство -- копировать говно заради чтобы случайно не поменять его, но на этот случай у гавнарей есть во-первых агрессивный инлайнинг
А во-вторых анализ убегателя достаточно жирную пиздень всё равно покладет в кучу, и будет работать с нею по ссылке
Soul_re@ver 01.10.2022 15:39 # 0
Можно радоваться, всего-то годик до С++23 осталось подождать: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html
Можно писать:
Бонус: скоро можно будет в коде писать
guest6 01.10.2022 15:45 # 0
?
>assume
без него не скомпилируется?
Алсо, джендер в 2023 не дикретен
И вообще это социальный коснтрцукт
Soul_re@ver 01.10.2022 16:09 # 0
Потому что авторам этого пропозала надоело ебаться с функциями-членами и их ограничениями, и они захотели сделать свои новые функции — статичными с сахарком, чтобы их можно было вызывать через ".".
> без него не скомпилируется?
Скомпилируется. А если ты напимал одно, а окозалось что в реальности это выражение ложно — получишь UB.
В реальности это нужно для того, чтобы подсказывать кобелятору, как лучше оптимизировать. К примеру, у меня есть код, который реализует правильное деление с остатком, а не интеловскую хуйню. Как результат, там внутре условие, которое для отрицательных чисел делает хитрые манипуляции. Если я знаю, что какая-то функция использует этот код, и что значение будет всегда положительным, я могу написать [[assume( x > 0 )]] и кобелятор выкинет проверку на отрицательность и весь экстра код, оставив тупо один IDIV из всего кода.
guest6 01.10.2022 16:17 # 0
А можно специальным ключом комплятора вставить проверку в рантайме для дебага чтобы там реально вылетала ошибка если вернется не то,что обещано?
Soul_re@ver 01.10.2022 16:19 # 0
guest6 01.10.2022 16:27 # 0
можно assume превратить в assert в дебажной бсорке, шоп вместо UB иметь фаст фейл?
Soul_re@ver 01.10.2022 16:40 # 0
В скобки аргумент заключать (обычный хак для безопасности) нельзя, потому что это слегка меняет поведение assume. Переключателя в компиляторе не будет, потому что assume не вычисляет аргументы: [[assume(++i > 42)]] не изменит значение i, и вообще, компилято имеет право его игнорировать, или спользовать не всю информацию — на -O0 оно скорее всего просто будет отбрасываться, к примеру, или если ты напишешь какую-то слишком замутную хуйню, компилятор скажет "нипанимаю, насяльника" и проигнорирует всё.
Хотя, если assert сделан исключительно средствами языка, и не является чем-то специальным для компилятора, то [[assume]] может заставить копелятор выкинуть код ассерта.
Soul_re@ver 01.10.2022 17:10 # 0
В этом коде копулятор может выкинуть проверку на нуллптр и вызывать кукарек безусловно, потому что если бы указать был нулевой, то предположение позже было бы ложным, чего не может быть.
Поэтому при передаче нулевого указателя ассерт даже не сработает, потому что программу распидорасит при вызове метода по нулевому указателю.
Soul_re@ver 01.10.2022 17:32 # 0
guest6 01.10.2022 23:37 # 0
j123123 01.10.2022 17:28 # 0
https://govnokod.ru/25997#comment510096
Soul_re@ver 01.10.2022 17:34 # 0
* Кроме ГЦЦ. ГЦЦ не умеет в невычисляемые выражения в данном случае. Но в 99% похуй.
j123123 01.10.2022 18:21 # 0
Soul_re@ver 01.10.2022 19:16 # 0
j123123 01.10.2022 19:28 # 0
Например, можно сделать такую хуйню:
Support 01.10.2022 19:42 # 0
Разве в переменная-указатель может быть чем-то иным, кроме как целым числohm?
Soul_re@ver 01.10.2022 20:12 # +1
Например: [[assume(++it != end)]] — мы обрабатываем не последний элемент. Значение it не должно поменяться.
У шланга __builtin_assume(++it != end) работает именно так. У ГЦЦ if(++it != end); else __builtin_unreachable(); инкрементирует it.
TUT_ANKH_AMUN 01.10.2022 20:25 # 0
guest6 01.10.2022 23:40 # 0
assume(it == 44) и выкинуть весь код проврки нахуй?)
Начинаются какие-то тонки игры между выражениями, вычисляемыми компилятором в момент копуляции, и рантайм хуйней
Soul_re@ver 01.10.2022 23:59 # 0
К примеру
В этом коде компилятор уже считает, что i >= 0 и i < 4, потому что инче UB. Писать сюда [[assume(0 <= i && i < 4)]] бессмысленно — компилятор уже это предполагает и может делать любые трансформации с кодом. К примеру, он мог бы оперировать только над младшим байтом i, потому что в остальных всё равно должны быть нули.
DypHuu_niBEHb 02.10.2022 00:04 # 0
Чтобы вместо УБ я видел более внятные ошибки пока их дебажу
Soul_re@ver 02.10.2022 00:10 # 0
Или жди контрактов:
guest6 12.11.2022 18:54 # 0
Структуры в Расте по умолчанию не копируются, а муваются (трейт копирования нужно заказывать явно) потому что раст вообще стсрается всё мувать в отличие от плюсов
В купе с учением об оунершипе это может приводить к смешным баграм.
Этот код (совершенно нормальный в С++ например) не скомпилируется в расте
ISO 12.11.2022 18:55 # 0
Иньо, почини эскейпинг!
guest6 12.11.2022 18:58 # 0
guest6 12.11.2022 19:39 # 0
guest6 12.11.2022 19:59 # 0
3_dar 12.11.2022 22:12 # 0
guest6 12.11.2022 22:16 # 0
Soul_re@ver 12.11.2022 20:05 # +1
МГИМО финишд?
guest6 12.11.2022 20:11 # 0
Area что ли над0?
KJlOYDqpJlAPE 12.11.2022 20:13 # 0
guest6 12.11.2022 21:15 # 0
guest6 01.10.2022 15:08 # 0
Он объяснял это болезнью, которую пережил ещё до своего 18-летия, что сделало его равнодушным к женскому полу. Но Тесла считал, что это даже к лучшему.
«Я сэкономил очень много времени и очень много энергии для научных исследований. Наука — вот моя первая, главная и единственная любовь. Другой мне не надо», — писал он в 80 лет.
guest6 01.10.2022 18:23 # 0
guest6 01.10.2022 18:53 # 0
CHayT 01.10.2022 18:57 # 0
nyTuH_nugop 01.10.2022 22:14 # −1
guest6 01.10.2022 23:44 # 0
Я не знаю, нужна ли реализации NFSа виртуальная память (или там всё невыгружаемо и в ядре) но скорее всего нужна, так что такая мандала даже не запустится.
Мне стало интересно, а бывают-ли такие додики IRL. Разумеется, любые додики бывают
https://social.technet.microsoft.com/Forums/lync/en-US/7424027c-fb9b-4202-a177-2a11581309d0/moving-pagefilesys-to-an-iscsi-device
(iscsi это такой SAN -- конкурент файберченнлов)