oleg_log – Telegram
oleg_log
1.78K subscribers
1.85K photos
129 videos
9 files
2.76K links
Shelter for antisocial programmers "Oleg"

halp: @olegkovalov
web: https://olegk.dev
fov: @oleg_fov
chat: @oleg_log_blabla
podcast: @generictalks

about: https://news.1rj.ru/str/oleg_log/3200
Download Telegram
Проекту только полгода, а какие планы-то. Все конечно ощущается unsafe костылями, но оно того стоит. Не знаю как вам, а мне идея крайне нравится.

Cosmopolitan makes C a build-once run-anywhere language, similar to Java, except it doesn't require interpreters or virtual machines be installed beforehand.

Cosmo provides the same portability benefits as high-level languages like Go and Rust, but it doesn't invent a new language and you won't need to configure a CI system to build separate binaries for each operating system.

What Cosmopolitan focuses on is fixing C by decoupling it from platforms, so it can be pleasant to use for writing small unix programs that are easily distributed to a much broader audience.

Compared with glibc, you should expect Cosmopolitan to be almost as fast, but with an order of a magnitude tinier code size. Compared with Musl or Newlib, you can expect that Cosmopolitan will generally go much faster, while having roughly the same code size, if not tinier.

https://justine.lol/cosmopolitan/index.html
ахахахахаха
подведу и я "итоги"

@tgstat_bot 2020 <channel name>

и популярный пост https://news.1rj.ru/str/oleg_log/2967
Красивая история о том, как переход на бинарный формат данных, дал приложеню на тел чуть больше воздуха.

Итого:
1. берем жсон на 15мб - декодим 20сек на Galaxy S4 (чтобы там не было внутри)
2. берем FlatBuffers на 4мб с теми же данными - получаем 0.5сек.
3. ...
4. ПРОФИТ

Тут скорее отдельная заслуга FT, что они пряменько лежат в памяти. В любом случае, JSON хоть и везде, но наверное после 100кб файла/запроса/структуры стоит начать думать про что-то более бинарное, как следствие оптимальное.

https://blog.extrawurst.org/gamedev/unity/programming/rust/2020/12/26/unity-flatbuffers.html

Такие посты заставляют задуматься, сколько же в мире неоптимальных решений, сколько потраченных петабайт RAM-а и спаленных деревень cpu-циклов. Так и живём, шо.
ммм, кружечка приехала.
дада, у меня хороший маникюр.
поделитесь какой у вас свэг крутой был?
Любопытный, но довольно бесполезный пример полиморфизма в Go

В гошечке есть несколько способов писать полиморфные функции:

1. интерфейсы;
2. тайп свитчи и тайп кастинг интерфейсов;
3. рефлексия;

Недавно мне понял, что есть чётвёртый подход, который стал возможен с появлением type alias — назовём его апкастингом типов. Работает оно так:

func main() {
printName(Cat{"Whiskey"})
printName(Dog{"Chappie"})
}

type Cat struct { Name string }

type Dog struct { Name string }

type named = struct { Name string }

func printName(n named) {
fmt.Println(n.Name)
}

В спеке Go указано, что присваивание x типа V к переменной типа T валидно в случае, если V и T основаны на одинаковых типах и T — не именованный тип ("x's type V and T have identical underlying types and at least one of V or T is not a defined type."). Псевдонимы типов не считются именованными типами, так что мы можем принимать в аргумент n любую кастуемую структуру.

К сожалению, это не слишком полезно — наверное только если вы не хотите делать пачку геттеров и у вас есть пачка одинаковых структур разных типов.
☕️ Мерлин заваривает τσάι 🐌
Любопытный, но довольно бесполезный пример полиморфизма в Go В гошечке есть несколько способов писать полиморфные функции: 1. интерфейсы; 2. тайп свитчи и тайп кастинг интерфейсов; 3. рефлексия; Недавно мне понял, что есть чётвёртый подход, который стал…
Чуть поясним. Прикол здесь в самом алиасе, для передачи Cat/Dog в printName их не надо явно приводить к named.

И на этом все. Как можете догадаться, если бы у Cat/Dog было еще 1 поле, то ничего бы не вышло, надо чтобы поля совпадали.

https://play.golang.org/p/xpyO7pE6ASv (уберите = и будем вам счастье)
не работа, а мечта
о да, ода уходящего года...
C + плюшки = Zig. Ну простой же как палка.

https://gist.github.com/ityonemo/769532c2017ed9143f3571e5ac104e50

Воодушевлено длиннопастой про Rust https://fasterthanli.me/articles/a-half-hour-to-learn-rust
(A half-hour to learn Rust, Jan 27, 2020 · 51 minute read. Нуда)
Вы ведь знаете, что в го надо аккуратно с переменными из for-range обращаться, да?

Наверное каждый хоть раз обжигался о
for k, v := range foo {
go func() { run(k,v) }()
}

или что-то похожее, где "захватывается" значение в кложуре. Есть даже пропозал, что давайте от этого уйдём (в го2, когдатотам) https://github.com/golang/go/issues/20733

Там забавный комент добавили, может слышали, Let's Encrypt недавно откатили 3М+ сертификатов. Угадайте из-за чего)))

https://github.com/letsencrypt/boulder/pull/4690/files#diff-d02067a9f9a2bed1110fd4e98641c2effcf5d1d5f18461e35d6ac1535f6e2c21L1411-R1414
oleg_log
А по случаю таких массовых гуляний - новый проект: @oleg_log_plus 🎉🎉🎉 Стало интересно вести патреоно-спонсируемый проект, на котором я буду делиться с вами постами, докладами и прочими видами информации, которые на мой взгляд пропускать не стоит, ведь все…
Подведём итоги ~1 месяца.

Все даже хорошо. Есть посты, за которые не стыдно. Есть приятные и критикующей-правильные отзывы. Есть желание продолжать дальше.

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

Для заинтересованных @oleg_log_plus
oleg_log
Вы ведь знаете, что в го надо аккуратно с переменными из for-range обращаться, да? Наверное каждый хоть раз обжигался о for k, v := range foo { go func() { run(k,v) }() } или что-то похожее, где "захватывается" значение в кложуре. Есть даже пропозал…
Внезапно многие не знали этой проблемы (кроме тех кто не пишут на го). Так вот.

Есть даж спец страница на вики про эту особенность (а сколько статей с пеной у рта это совсем другое).

Поэтому советую прочитать https://github.com/golang/go/wiki/CommonMistakes и включить scopelint (хотя мне кажется еще кто-то ругается) в golangci-lint