Вообще, блоки — это расширение языка Obj-C. И пришли они оттуда же откуда пришли все остальные «расширения» этого языка (и даже называются так же как в оригинале).
захватом окружения блоками все просто и очевидно — копируются POD типы
Если бы я хотел «расширений C», я бы взял OpenMP. А в случае C++ надеяться на то, что все переменные будут POD — уже нельзя.
Вообще весь GCD выглядит как то коряво, ограниченно и нормально вписывается только в Obj-C (который лично мне не нравится именно своей эклектичностью).
GCD мало того, что не «предоставляется самой ОС» (это библиотека), так еще и не умеет кучу вещей (например нельзя строить dataflow сети для процессинга сообщений) и зависит от собственного синтаксиса для лямбд (блоки), который опять таки более ограниченный, чем родной плюсовый (весьма неочевидный контроль захвата по ссылке/значению и при этом не такой гибкий, чем у плюсовых лямбд).
Если хочется многопоточного message passing-а, то лучше пользоваться или Intel TBB или (если речь только о винде) — родной Visual Studio-йной Concurrency Runtime.
Преимущество перед самописными костылями хотя бы в том, что
1. Не нужно поддерживать самому
2. Реализация гораздо эффективнее (lock free work stealing очереди, агрессивный инлайнинг и пр)
Но есть нюанс, ага. Гугл защищает право собирать «запрещающие» пошлины с FRAND (standard essential) патентов которые ПРИНЦИПИАЛЬНО нельзя сделать по другому (иначе устройство не будет поддерживать «стандартный» WiFi, например) и в то же время выступает за «бесплатное» распространение чужих патентов — на пользовательские интерфейсы, на проприетарные протоколы синхронизации, на способы обработки данных и пр…
Ога, видео из 2005-го, ссылающееся на данную проблему, как известную еще КАК МИНИМУМ с 1997-года (но скорее всего известную и ранее). Где принимают ставки на то, что эта проблема (немного модифицированная, естественно) еще всплывет?
Хотя да, я сейчас подумал и понял, почему эксплорер не поддерживает длинные имена. У shell интерфейсов есть куча методов, которые возвращают путь, который традиционно имел максимальную длину в MAX_PATH. Из-за этих методов сам эксплорер не может иметь путь длиннее, чем MAX_PATH: к примеру, программа спрашивает текущий путь, а shell не может его вернуть.
Тивоизация — это из оперы «поставил в железку и запретил чего либо менять хотя и открыл все исходники». OEM-ам дело до GRUB-а такое, что надо бы Линукс как то грузить (ну это, конечно, если кто нибудь из OEM-ов все еще хочет связываться с Линуксом).
> Но запускать BIOS-у что-то или не запускать на основании GPL-ности загрузчика? Это сильно :).
Straw-man. Перечитайте еще раз. Проблемы с GPL и GRUB возникнут у любого OEM, который решит выпускать компьютер с предустановленным Линуксом и включенным SecureBoot. Да, этих проблем в «реальном мире» не возникнет, потому что в «реальном мире» OEM-ы просто не будут выпускать компьютеры с предустановленным Линуксом и SecureBoot.
> По-вашему, все в мире обязаны грузить лишь линукс на грубе, ибо он GPL, посему обязателен к загрузке
А ну да, есть еще устаревший LILO с тьмой никому не известных модификаций. Я так сходу даже и не вспомню дистрибутив который по умолчанию грузится не GRUB-ом. Но они есть, да, и могут быть использованы для обхода проблемы с GPLv3, что в общем то противоречит утверждению, что никаких проблем нет вообще.
> Ключи для подписи — это данные.
Очень глубокое замечание.
> Если вы подписали свой GRUB личным ключом и распространяете GRUB с подписью «42» это совершенно не обязывает вас открывать приватный ключ.
Утверждать чего либо без решения суда не могут даже настоящие юристы, но лично для меня вполне очевидно, что данное требование GRUB-а вполне недвусмысленно требует открытия приватных ключей, чтоб можно было подписать видоизмененный GRUB: именно для борьбы с аппаратными проверками подписей «прошивок» (тивоизацией) это требование и было введено в последнюю редакцию GPL (если его можно обойти какими нибудь хитрыми юридическими ухищрениями — это не значит, что у GPL нет ничего общего с ключами).
Ну extended attributes в ReFS тоже пока не поддерживаются. В общем фраза «no longer supported» меня несколько смущает, но я СИЛЬНО удивлюсь, если к моменту «then ultimately as a boot volume» все недостающие фичи (кроме, пожалуй, коротких имен) не будут реализованы.
Да речь о ней — там фактически одни хардлинки и лежат. Сервисинг (Windows Update) использует еще и KTM (те самые транзакции, которые тоже «выбросили»):
That leaves two more goals. As for platform stability, this is achieved by some of the ways that Microsoft is using TxF in its own technologies. There are three core features in Windows Vista and Windows Server «Longhorn» that now make use of Transactional NTFS: Windows Update, System Restore, and Task Scheduler. All of these use TxF to write files to the file system within the scope of a transaction in order to handle rollback/commit in case of any exceptions, such as a system reboot due to a loss of power. If you’ve ever experienced a loss of power right in the middle of Windows Update, you know this can leave your system dead and in need of a fresh installation. But now that Windows Update uses TxF, if this same situation occurs on your Windows Vista system, the computer can recover by rolling back the transaction when the system reboots. By adopting TxF internally, Microsoft has helped make its own operating system more stable.
Собственно на все эти «выброшенные» возможности ФС завязано столько возможностей самой винды, что последняя стадия в «first as a storage system for Windows Server, then as storage for clients, and then ultimately as a boot volume» означает поддержку в ReFS всех фич NTFS. Более того, есть серьезные основания предполагать, что именно из-за их отсутствия загрузка с ReFS и не поддерживается: не думаю, что прилинковать к winload еще и ReFS это такая уж сложная задача, а после winload уже будет полноценный драйвер и никому уже не нужно знать какая там файловая система.
Это именно они. Причем требования введены в GPLv3 как раз для «борьбы» с тивоизацией: «The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.»
Другими словами, OEM-ы не могут продавать машины со включенным SecureBoot и GRUB и при этом не предоставлять закрытых ключей для подписи перекомпилированного GRUB-а (иначе код перестанет работать исключительно из-за факта модификации, что напрямую запрещено). Наверное настоящие юристы могут найти способ обойти это (если кто-то вообще захочет с этим связываться), но и говорить, что GPL вообще никак не связана с ключами не совсем верно
> Причем здесь GPL к ключам?
«Installation Information» for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
Хотите запускать подписанный GRUB — распространяйте приватные ключи для того, чтобы было возможно запускать модифицированный GRUB
1. Secure Boot обязателен только для OEM-ов для установки на компьютер OEM-ной же винды
2. «Активаторы» для OEM-ной винды и так не нужны, а самосбору на коленке вообще по фигу на требования к OEM-ам — могут поддерживать SecureBoot, но оставить его выключенным по дефолту, а могут и не поддерживать вообще
3. ??????
4. ??????
В винде ЕСТЬ полная поддержка длинных путей (>260). Изменять контракт на размер буфера, который раньше был фиксированным — это не просто ломать совместимость, это напрашиваться на срывы буферов с последующим исполнением кода
Альтернативные потоки используются, к примеру, Internet Explorer-ом при сохранении файлов из интернета (и Windows Explorer отказывается напрямую запускать такие файлы).
Хардлинки нужны и самой винде (весь сервисинг и компонентизация на них завязаны). Вот только меня поражает сколько людей (в том числе и в комментариях к исходному посту на b8) не понимают разницы между «выбросили» и «еще не реализовали, но собираемся». Точно так же как поиск файлов по object id, альтернативные файловые потоки и многое другое.
Ну а пока не реализовали, NTFS никуда не делась (и да, по элегантности с этим старичком может соперничать разве что ZFS — в посте Чена вообще ничего про «неэлегантность» нет): если нужны возможности NTFS (те, которые еще не реализованы в ReFS) и не нужны НОВЫЕ возможности ReFS — никто не заставляет пользоваться новой ФС только потому что она новая (об этом тоже есть в оригинальном посте).
Что конкретно Вы не поняли из слов «любая информация» и «распространяться бесплатно». При чем здесь открытость/закрытость?
Но давайте на секунду отвлечемся от баша и вернемся к копимизму. Учитывая что «обмен информацией является священным и что ценность информации умножается, когда она распространяется», не могли бы Вы сказать какими уникальными атрибутами обладает информация «номер Вашей кредитной карты», что для нее в этом религиозном учении делается исключение?
Возвращается ж всегда и так rvalue — зачем здесь std::move?
Вообще, блоки — это расширение языка Obj-C. И пришли они оттуда же откуда пришли все остальные «расширения» этого языка (и даже называются так же как в оригинале).
Если бы я хотел «расширений C», я бы взял OpenMP. А в случае C++ надеяться на то, что все переменные будут POD — уже нельзя.
Все не так «просто и очевидно». Ctrl+F "__block" в официальном описании
Вообще весь GCD выглядит как то коряво, ограниченно и нормально вписывается только в Obj-C (который лично мне не нравится именно своей эклектичностью).
Если хочется многопоточного message passing-а, то лучше пользоваться или Intel TBB или (если речь только о винде) — родной Visual Studio-йной Concurrency Runtime.
Преимущество перед самописными костылями хотя бы в том, что
1. Не нужно поддерживать самому
2. Реализация гораздо эффективнее (lock free work stealing очереди, агрессивный инлайнинг и пр)
Картинка для привлечения внимания:
> Но запускать BIOS-у что-то или не запускать на основании GPL-ности загрузчика? Это сильно :).
Straw-man. Перечитайте еще раз. Проблемы с GPL и GRUB возникнут у любого OEM, который решит выпускать компьютер с предустановленным Линуксом и включенным SecureBoot. Да, этих проблем в «реальном мире» не возникнет, потому что в «реальном мире» OEM-ы просто не будут выпускать компьютеры с предустановленным Линуксом и SecureBoot.
> По-вашему, все в мире обязаны грузить лишь линукс на грубе, ибо он GPL, посему обязателен к загрузке
А ну да, есть еще устаревший LILO с тьмой никому не известных модификаций. Я так сходу даже и не вспомню дистрибутив который по умолчанию грузится не GRUB-ом. Но они есть, да, и могут быть использованы для обхода проблемы с GPLv3, что в общем то противоречит утверждению, что никаких проблем нет вообще.
> Ключи для подписи — это данные.
Очень глубокое замечание.
> Если вы подписали свой GRUB личным ключом и распространяете GRUB с подписью «42» это совершенно не обязывает вас открывать приватный ключ.
Утверждать чего либо без решения суда не могут даже настоящие юристы, но лично для меня вполне очевидно, что данное требование GRUB-а вполне недвусмысленно требует открытия приватных ключей, чтоб можно было подписать видоизмененный GRUB: именно для борьбы с аппаратными проверками подписей «прошивок» (тивоизацией) это требование и было введено в последнюю редакцию GPL (если его можно обойти какими нибудь хитрыми юридическими ухищрениями — это не значит, что у GPL нет ничего общего с ключами).
Собственно на все эти «выброшенные» возможности ФС завязано столько возможностей самой винды, что последняя стадия в «first as a storage system for Windows Server, then as storage for clients, and then ultimately as a boot volume» означает поддержку в ReFS всех фич NTFS. Более того, есть серьезные основания предполагать, что именно из-за их отсутствия загрузка с ReFS и не поддерживается: не думаю, что прилинковать к winload еще и ReFS это такая уж сложная задача, а после winload уже будет полноценный драйвер и никому уже не нужно знать какая там файловая система.
Другими словами, OEM-ы не могут продавать машины со включенным SecureBoot и GRUB и при этом не предоставлять закрытых ключей для подписи перекомпилированного GRUB-а (иначе код перестанет работать исключительно из-за факта модификации, что напрямую запрещено). Наверное настоящие юристы могут найти способ обойти это (если кто-то вообще захочет с этим связываться), но и говорить, что GPL вообще никак не связана с ключами не совсем верно
«Installation Information» for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
Хотите запускать подписанный GRUB — распространяйте приватные ключи для того, чтобы было возможно запускать модифицированный GRUB
2. «Активаторы» для OEM-ной винды и так не нужны, а самосбору на коленке вообще по фигу на требования к OEM-ам — могут поддерживать SecureBoot, но оставить его выключенным по дефолту, а могут и не поддерживать вообще
3. ??????
4. ??????
Ну а пока не реализовали, NTFS никуда не делась (и да, по элегантности с этим старичком может соперничать разве что ZFS — в посте Чена вообще ничего про «неэлегантность» нет): если нужны возможности NTFS (те, которые еще не реализованы в ReFS) и не нужны НОВЫЕ возможности ReFS — никто не заставляет пользоваться новой ФС только потому что она новая (об этом тоже есть в оригинальном посте).
Но давайте на секунду отвлечемся от баша и вернемся к копимизму. Учитывая что «обмен информацией является священным и что ценность информации умножается, когда она распространяется», не могли бы Вы сказать какими уникальными атрибутами обладает информация «номер Вашей кредитной карты», что для нее в этом религиозном учении делается исключение?