Про новые возможности Windows 11. Решил проверить а что нового в API, может есть что-то новое и интересное в WinAPI? Если коротко - ничего нет.
Снял Dll дампы системных библиотек для Windows 10 и 11 (kernel32, user32, advapi32, wsock32). Разница абсолютно минимальная. Единственное, что меня удивило, так это удаление некоторых функций, но их не много, хотя, как по мне, нарушение обратной совместимости.
Науке мало интересны «истинная сущность» человеческой души или, даже, просто чисел.
Вот и мне кажется, что ученый не задающийся иногда вопросами вида: «В чем смысл чисел?», «Почему появились числа», «Как так получилось, что простое пересчитывание тушек убитых животных, превратилось в отдельный, сложный раздел математики?», много теряет, по сути превращается в инженера от науки. Я уверен, что большинство великих ученых, тот же Хокинг, задавались подобными вопросами.
Запрос это правильно! )
Ну а минусы, да бог с ними.
Вот я все хочу написать пару статей (профильных), а дальше:
Только что-то струна порвалась…
Да сломалось перо…
Вредно, конечно нет, любой разумный человек принимает решения сам.
Про пиар на хайпе — мне так показалось, но я не настаиваю, извиняюсь если у Вас не было таких целей.
Не профильно — 100% процентов.
Дело в том, что это IT ресурс, вряд ли тут достаточное кол-во специалистов, которые в состоянии качественно проанализировать приведенную информацию, т.е. иммунологов, микробиологов и (я как программист) даже не знаю как еще называются профильные специализации. Кроме того, портянка очень длинная, система подбора информации не ясна, по крайней мере мне, интуитивно кажется, что это салат из надерганной где попало информации. А тема актуальная, и для потерявших своих близких, или больных, например, заболеваниями крови.
Собственно отсюда и вывод, ресурс не профильный, доводы не ясны, критериев оценки нет, подача сомнительная (как мне показалось), тема актуальная — в общем, очки на болезненной теме.
Ну и по факту, у меня не так много знакомых умирало раньше, а в этом году уже трое именно, от короны. Можно возразить, что они попали под машину, инфаркт и бог знает что еще, а врачи списывают, но — двое из них семейные пары, жены выжили, а мужья нет. Поймите, это я не страсти пытаюсь навести, это мои личные наблюдения. И да, я мне не платит Спутник, Пфайзер и т.д. и вообще я никого ни к чему не призываю, каждый принимает решения для себя.
Например Result это, в том числе, имя псевдо переменной в функциях, и вообще слишком обобщенное название, если так называть глобальные идентификаторы, будет много путаницы. Поэтому в Паскале обычно используют длинные названия типов, например — TResultMonad. Но лично мне больше нравятся неймспейсы.
Модулей нет, есть Юниты, можно сделать юнит Monad. Но это совершенно не обязывает указывать его в наименовании, т.е. в данном примере Result станет глобальным именем.
Попробовал реализовать подход с монадами, на основе перегрузки операторов. Мне кажется результат лаконичнее чем на основе наследования.
Код на Паскале, но думаю перевести его C# не составит труда.
Определение монады на основе Record (Value type в терминологии .Net):
type
Monad = class sealed
public type
Result<TSuccess, TFailure> = record
private
FIsSuccess: Boolean;
FSuccess: TSuccess;
FFailure: TFailure;
public
class function Success(const Value: TSuccess): Result<TSuccess, TFailure>; static; inline;
class function Failure(const Value: TFailure): Result<TSuccess, TFailure>; static; inline;
public
class operator Implicit(const R: Result<TSuccess, TFailure>): Boolean; static; inline;
class operator Explicit(const R: Result<TSuccess, TFailure>): TSuccess; static; inline;
class operator Explicit(const R: Result<TSuccess, TFailure>): TFailure; static; inline;
end;
end;
Идея в том, что тип Monad.Result реализует неявное преобразование к Boolean в зависимости от успеха операции. И явное преобразование в типы TSuccess и TFailure. Обертка в класс Monad — костыль для красоты именования, т.к. нормальных Namespace в Delphi так и не сделали.
Реализация:
class function Monad.Result<TSuccess, TFailure>.Success(const Value: TSuccess): Result<TSuccess, TFailure>;
begin
Result.FIsSuccess := True;
Result.FSuccess := Value;
end;
class function Monad.Result<TSuccess, TFailure>.Failure(const Value: TFailure): Result<TSuccess, TFailure>;
begin
Result.FIsSuccess := False;
Result.FFailure := Value;
end;
class operator Monad.Result<TSuccess, TFailure>.Explicit(const R: Result<TSuccess, TFailure>): TFailure;
begin
if R.FIsSuccess then
raise Exception.Create('Invalid cast for success');
Result := R.FFailure;
end;
class operator Monad.Result<TSuccess, TFailure>.Explicit(const R: Result<TSuccess, TFailure>): TSuccess;
begin
if not R.FIsSuccess then
raise Exception.Create('Invalid cast for failure');
Result := R.FSuccess;
end;
class operator Monad.Result<TSuccess, TFailure>.Implicit(const R: Result<TSuccess, TFailure>): Boolean;
begin
Result := R.FIsSucces;
end;
Реализация метода:
function GetUser(const Id: string): Monad.Result<TUser, string>;
begin
if UserStorage.DefaultUser.Id = Id then
Result := Monad.Result<TUser, string>.Success(UserStorage.DefaultUser)
else
Result := Monad.Result<TUser, string>.Failure('User no found');
end;
В примере, для описания ошибки используется строка, но можно использовать более сложные типы, содержащие например код ошибки, описание, стек трейс…
Использование:
procedure Test;
var
Result: Monad.Result<TUser, string>;
begin
Result := GetUser(1);
if Result then
WriteLn(TUser(Result).Name)
else
WriteLn(string(Result));
end;
Из недостатков такого подхода – возвращаемые типы для успеха и не успеха не должны совпадать, т.к. результат приведения типа будет не определен. Тоже и для типа Boolean — будет конфликт с неявным приведением.
Про новые возможности Windows 11. Решил проверить а что нового в API, может есть что-то новое и интересное в WinAPI? Если коротко - ничего нет.
Снял Dll дампы системных библиотек для Windows 10 и 11 (kernel32, user32, advapi32, wsock32). Разница абсолютно минимальная. Единственное, что меня удивило, так это удаление некоторых функций, но их не много, хотя, как по мне, нарушение обратной совместимости.
На всякий случай, список экспортированных функций: https://disk.yandex.ru/d/aaF-qgXB1GZqfA
Получается, что кроме интерфейсных изменений, ничего больше и нет.
Вот и мне кажется, что ученый не задающийся иногда вопросами вида: «В чем смысл чисел?», «Почему появились числа», «Как так получилось, что простое пересчитывание тушек убитых животных, превратилось в отдельный, сложный раздел математики?», много теряет, по сути превращается в инженера от науки. Я уверен, что большинство великих ученых, тот же Хокинг, задавались подобными вопросами.
Ну а минусы, да бог с ними.
Вот я все хочу написать пару статей (профильных), а дальше:
Только что-то струна порвалась…
Да сломалось перо…
Про пиар на хайпе — мне так показалось, но я не настаиваю, извиняюсь если у Вас не было таких целей.
Не профильно — 100% процентов.
Собственно отсюда и вывод, ресурс не профильный, доводы не ясны, критериев оценки нет, подача сомнительная (как мне показалось), тема актуальная — в общем, очки на болезненной теме.
Ну и по факту, у меня не так много знакомых умирало раньше, а в этом году уже трое именно, от короны. Можно возразить, что они попали под машину, инфаркт и бог знает что еще, а врачи списывают, но — двое из них семейные пары, жены выжили, а мужья нет. Поймите, это я не страсти пытаюсь навести, это мои личные наблюдения. И да, я мне не платит Спутник, Пфайзер и т.д. и вообще я никого ни к чему не призываю, каждый принимает решения для себя.
Подозрение на спекуляцию на теме.
Код на Паскале, но думаю перевести его C# не составит труда.
Определение монады на основе Record (Value type в терминологии .Net):
Идея в том, что тип Monad.Result реализует неявное преобразование к Boolean в зависимости от успеха операции. И явное преобразование в типы TSuccess и TFailure.
Обертка в класс Monad — костыль для красоты именования, т.к. нормальных Namespace в Delphi так и не сделали.
Реализация:
Реализация метода:
В примере, для описания ошибки используется строка, но можно использовать более сложные типы, содержащие например код ошибки, описание, стек трейс…
Использование:
Из недостатков такого подхода – возвращаемые типы для успеха и не успеха не должны совпадать, т.к. результат приведения типа будет не определен. Тоже и для типа Boolean — будет конфликт с неявным приведением.