uk
Feedback
Блог*

Блог*

Відкрити в Telegram

Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here

Показати більше
1 923
Підписники
Немає даних24 години
-47 днів
-830 день
Архів дописів
#meme про теорию заговора

#prog #go #suckassstory Пусть есть вот такая простая программа на Go:
package main

import (
   "fmt"
   "net"
)

func main() {
   func() {
      f, err := net.Dial("tcp", "1.1.1.1:443")
      defer f.Close()

      fmt.Println(err)
   }()
}
Если запустить эту программу при отсутствии сетевого подключения (например, на Go playground), то программа печатает ошибку и... Валится с nil pointer dereference:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x4d0adb]

goroutine 1 [running]:
main.main.func1()
  /tmp/sandbox1770654708/prog.go:11 +0x3b
main.main()
  /tmp/sandbox1770654708/prog.go:14 +0xf
Почему так — в Go же в целом методы обычно не паникуют с nil-ресивером? Функция net.Dial из стандартной библиотеки возвращает (Conn, error), где Conn — не конкретный тип, а интерфейс (почему он включает в себя методы Read и Write вместо включения интерфейсов io.Reader и io.Writer — отдельный вопрос). Так вот, как пояснено в 50 shades of Go, у присваивания интерфейсам nil есть два значения. Если интерфейсу присваивается nil-значение некоего не-интерфейсного типа, который может быть nil (скажем, некий указатель), то значимая часть интерфейса также будет nil, но указатель на таблицу методов будет заполнен от типа присваиваемого значения. Такая переменная будет давать false при тестирование на равенство с nil. Если же значению интерфейсного типа присвоить литерал nil напрямую (или просто не инициализировать явно), то тип нижележащего значения вывести неоткуда, а потому и значимая часть интерфейса, и указатель на таблицу методов будут nil. Такое значение будет давать true при тестировании на равенство с nil. net.Dial, как и большинство функций в Go, возвращают первым значением nil в случае ошибки. В коде выше в конце main после Println срабатывает код в defer, который пытается вызывать метод Close, и так как у nil-интерфейса указатель на таблицу методов является nil, рантайм паникует, так как вытащить метод из ниоткуда, очевидно, нельзя. Да, это значит, что поведение может поменяться, если net.Dial начнёт возвращать первое значение при ошибке иначе. (thanks @HowToGoWrong)

#justrusteceanthings
#justrusteceanthings

Repost from iggisv9t channel
Эта картинка ждала 4 года
Эта картинка ждала 4 года

#bio Репушко пишет про эксперимент, показавший у каракатиц наличие бинокулярного зрения.

А теперь вопрос: каким образом эти действия помогут Украине в войне против России?

🫡 Removal of (mostly Russian) email addresses from MAINTAINERS Posted Oct 21, 2024 13:57 UTC (Mon) by paulbarker (subscriber
🫡
Removal of (mostly Russian) email addresses from MAINTAINERS

Posted Oct 21, 2024 13:57 UTC (Mon) by paulbarker (subscriber, #95785)
Parent article: Kernel prepatch 6.12-rc4

This was merged for v6.12-rc4: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/...
"Remove some entries due to various compliance requirements. They can come
back in the future if sufficient documentation is provided."

I guess this is something to do with sanctions, but I think the folks removed from the MAINTAINERS file deserve a little more informative notice than that!
https://lwn.net/Articles/994868/ Коммит https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e90b675cf942e50c70e8394dfb5862975c3b3b2

А как гетеро вообще занимаются сексом? 😳 Ну типа… кто из них парень и кто другой парень? 🤔

sticker.webp0.16 KB

А тем временем число подписчиков перевалило за 1600. Спасибо, что читаете Блог*!

#prog #menacingopensource git-blame-someone-else (thanks @its200but500)
#prog #menacingopensource git-blame-someone-else (thanks @its200but500)

Repost from Install Wizard

photo content

#prog #rust #article TwoVec: A Very Silly Container Текст о особом контейнере, который позволяет хранить последовательно в памяти значения двух разных типов. To be clear, I don't think this container is very practical. If you find a usecase for it, please do not tell me. Whatever problem you're solving is unbelievably cursed and I don't want it anywhere near me.

#prog #rust Rust to .NET compiler update - f128, f16, and beginnings of SIMD and async В этот раз небольшой апдейт, так что он на реддите. Автор планирует написать ещё о паниках в Rust, но это несколько затруднительно из-за количества тем, которые нужно покрыть для объяснения.

Немного забавного Твиттера. Джонатан Блоу, программист и геймдизайнер Braid, пожаловался, что каждый раз, как ему присылают с
+7
Немного забавного Твиттера. Джонатан Блоу, программист и геймдизайнер Braid, пожаловался, что каждый раз, как ему присылают ссылку на GitHub, то у людей могут быть месяцы или годы без коммитов. После этого Джонатану начали пояснять, что у людей бывает работа, семья и прочие радости жизни, и они не могут 24/7 работать на какими-то неоплачиваемыми проектами, чтобы заливать их на ГитХаб. И данный Твит просто забавен в свете того, что переиздание Braid, Anniversary Edition, было отложено на ТРИ ГОДА после анонса даты выхода, а основная критика переиздания состояла в том, что создатель пообещал отдельный мир с новыми головоломками, и расширенные комментарии, но на деле новые уровни были либо ни о чём, либо вообще ранними версиями уже существующих. Быть может, если не тратить всё своё время на GitHub, то получится успешно заниматься реальной работой.

photo content