All streams
Search
Write a publication
Pull to refresh
210
0
Андрей @impwx

Программист

Send message

Просто слово "модульность" ни о чем не говорит. Мне так сотовый оператор периодически пытается впарить новый тариф, говоря что он "комплексный". На деле выходит, что в него просто включены ненужные мне функции, за которые я буду переплачивать.


В чем именно заключается преимущество модульности в данном случае?

Кроме возможности работы без root-привелегий больше различий в статье не увидел. Это одно уже позволяет похоронить Docker, или все-таки есть что-то еще?

Удачно подгадали к началу Steam Summer Sale?

Все это можно сделать. Например (листинг из LINQPad):


void Main()
{
    var f = new Foo { A = 1337 };
    var func = Expression.Lambda<Func<int>>(
        Expression.Property(Expression.Constant(f), "B")
    );
    func.Compile()().Dump();
}

class Foo
{
    public int A {get; set;}
    private int B => A * 2;
}

Тут решаются проблемы пунктов 2 и 3 — можно замкнуть произвольное значение "извне" внутри функции с помощью Expression.Constant (это не обязательно должна быть константа времени компиляции, может быть произвольный объект как в примере выше), и к приватному полю также можно обратиться без проблем.


Чтобы рулить потоком исполнения, есть LoopExpression, SwitchExpression, ConditionalExpression и даже GotoExpression.


А вот что, кажется, нельзя сделать — это написать unsafe-код. Сделать type punning тоже нельзя, хотя это имхо скорее плюс — случайные ошибки гораздо вероятнее чем то что это кому-то действительно нужно.

Было бы интересно послушать про кейсы, в которых использование Reflection.Emit предпочтительнее, чем, например, Expression Trees в контексте генерации одного метода.


Ну и листинг кода лучше бы текстом, а не картинкой...

Люди из без ChatGPT публиковали доказательства на сотни/тысячи страниц. Прежде чем доказательство имеет смысл опровергать, нужно чтобы его кто-то признал, а для этого его нужно понять и проверить...

В статье про это написано:


Греки уже знали способ найти квадратуру круга с помощью градуированной линейки или архимедовой спирали

Я не математик, но площадь круга считается по формуле S = pi * r ^ 2. Поэтому обычно S будет трансцендентным, кроме случаев когда пи можно сократить из выражения (например, r = sqrt(1/pi) даст S = 1)

Apple и Samsung теряют лидерство на Российском рынке смартфонов

Судя по 3 фото с конца, планшет можно использовать в качестве дополнительного USB-C-монитора?

Что борщевик, что радиоотходы — настоящее противостояние жабы и гадюки

Одинаковые модельки детей — не баг, а фича

Flipper — словарное слово, его нельзя запатентовать

Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.

Ничего универсального в текстовых потоках нет — наоборот, у каждой программы может быть свой произвольный вывод (таблица, текст, JSON, CSV, или что угодно еще), который нужно прилаживать к входу другой программы с помощью костылей из регулярок. Если программа обновится и будет выводить результаты в ином формате — все развалится.


У некоторых программ есть специальные аргументы, настраивающие формат вывода. Это еще один большой костыль, нарушающий идеологию "одна программа делает одну задачу".


Более перспективным решением, имхо, является взаимодействие между приложениями с помощью объектов или структур, как это делают nushell и powershell: это действительно универсальный интерфейс, форматирование реализовано один раз на уровне системы, можно делать осмысленный автокомплит вместо регулярок. Жаль, что пока они не особо популярны по историческим причинам

Bulk updates должны быть на месте.
Вот описание в доке:
https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-7.0/whatsnew#executeupdate-and-executedelete-bulk-updates
Вот тикет на гитхабе, закрытый 11 августа:
https://github.com/dotnet/efcore/pull/28626

Во-первых, никто не говорит что на си или плюсах невозможно написать безопасное приложение: очень даже можно, но это требует большей дисциплины и внимательности.


Во-вторых, предполагаю что АНБ в первую очередь беспокоится об уязвимостях, позволяющих получать несанкционированный доступ к данным. Баг в компиляторе скорее всего приведет к падению компилятора (вообще не критично), менее вероятно — к созданию некорректной программы (неприятно). Ошибка в компиляторе, которая будет приводить к появлению уязвимости в скомпилированных программах — астрономически маловероятно, возможно только в результате сознательного сабожата со стороны спецслужб с бесконечным бюджетом.


В-третьих, под фразой "язык написан на языке" можно понимать разные вещи. Языки типа C# и Java состоят, условно, из компилятора (обычно написан на самом языке) и рантайма (скорее всего написан на си или плюсах). Ошибки в рантаймах — штука более серьезная, но и уровень работающих над них специалистов выше.

Никакого парадокса: чем больше и сложнее система, тем проще допустить ошибку при ее использовании

Information

Rating
4,866-th
Location
Berlin, Berlin, Германия
Registered
Activity

Specialization

Fullstack Developer
Lead
From 10,000 €
C#
.NET
SQL
TypeScript
Vue.js
Angular