Просто слово "модульность" ни о чем не говорит. Мне так сотовый оператор периодически пытается впарить новый тариф, говоря что он "комплексный". На деле выходит, что в него просто включены ненужные мне функции, за которые я буду переплачивать.
В чем именно заключается преимущество модульности в данном случае?
Кроме возможности работы без root-привелегий больше различий в статье не увидел. Это одно уже позволяет похоронить Docker, или все-таки есть что-то еще?
Все это можно сделать. Например (листинг из 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)
Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.
Ничего универсального в текстовых потоках нет — наоборот, у каждой программы может быть свой произвольный вывод (таблица, текст, JSON, CSV, или что угодно еще), который нужно прилаживать к входу другой программы с помощью костылей из регулярок. Если программа обновится и будет выводить результаты в ином формате — все развалится.
У некоторых программ есть специальные аргументы, настраивающие формат вывода. Это еще один большой костыль, нарушающий идеологию "одна программа делает одну задачу".
Более перспективным решением, имхо, является взаимодействие между приложениями с помощью объектов или структур, как это делают nushell и powershell: это действительно универсальный интерфейс, форматирование реализовано один раз на уровне системы, можно делать осмысленный автокомплит вместо регулярок. Жаль, что пока они не особо популярны по историческим причинам
Во-первых, никто не говорит что на си или плюсах невозможно написать безопасное приложение: очень даже можно, но это требует большей дисциплины и внимательности.
Во-вторых, предполагаю что АНБ в первую очередь беспокоится об уязвимостях, позволяющих получать несанкционированный доступ к данным. Баг в компиляторе скорее всего приведет к падению компилятора (вообще не критично), менее вероятно — к созданию некорректной программы (неприятно). Ошибка в компиляторе, которая будет приводить к появлению уязвимости в скомпилированных программах — астрономически маловероятно, возможно только в результате сознательного сабожата со стороны спецслужб с бесконечным бюджетом.
В-третьих, под фразой "язык написан на языке" можно понимать разные вещи. Языки типа C# и Java состоят, условно, из компилятора (обычно написан на самом языке) и рантайма (скорее всего написан на си или плюсах). Ошибки в рантаймах — штука более серьезная, но и уровень работающих над них специалистов выше.
Просто слово "модульность" ни о чем не говорит. Мне так сотовый оператор периодически пытается впарить новый тариф, говоря что он "комплексный". На деле выходит, что в него просто включены ненужные мне функции, за которые я буду переплачивать.
В чем именно заключается преимущество модульности в данном случае?
Кроме возможности работы без root-привелегий больше различий в статье не увидел. Это одно уже позволяет похоронить Docker, или все-таки есть что-то еще?
Удачно подгадали к началу Steam Summer Sale?
И @ единственный символ с таким тонким штрихом
Все это можно сделать. Например (листинг из LINQPad):
Тут решаются проблемы пунктов 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
)Судя по 3 фото с конца, планшет можно использовать в качестве дополнительного USB-C-монитора?
Что борщевик, что радиоотходы — настоящее противостояние жабы и гадюки
Одинаковые модельки детей — не баг, а фича
Не обязательно...
Flipper — словарное слово, его нельзя запатентовать
Yo dawg, we put a bug in your tools so you can bugfix while you bugfix...
Ничего универсального в текстовых потоках нет — наоборот, у каждой программы может быть свой произвольный вывод (таблица, текст, 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 состоят, условно, из компилятора (обычно написан на самом языке) и рантайма (скорее всего написан на си или плюсах). Ошибки в рантаймах — штука более серьезная, но и уровень работающих над них специалистов выше.
Никакого парадокса: чем больше и сложнее система, тем проще допустить ошибку при ее использовании