Людей, на полном серьезе не понимающих, почему многообразие и свобода хорошо, надо принудительно сажать писать на COBOL, где, например, символ комментария можно поставить только в определенной колонке строки и нигде иначе (6-й штоле, забываю уже), строки длиннее 72 символов синтаксическая ошибка, и надо внимательно смотреть, где расставлять точки (вместо точек с запятыми там) в случае вложенных IF. Вспоминая, как из-за подобной ошибки (только в Фортране) в свое время упала ракета.
Вообще, конечно, тут вспоминается великий психиатр Эрих Фромм, книга “Бегство от свободы”…
Ну вообще-то нет, не висит. В этом легко можно убедится, попробовав открыть эти .so на запись и получить странную ошибку Text file busy. Это значит, что подсистема виртуальной памяти рассматривает их как этакий “своп”, и неиспользуемые страницы просто выкидывает из памяти, при необходимости загружая вновь из файла. При этом будет экономия на том, что используемые части у разных программ всё же пересекаются, а в случае статической линковки у каждого будет таки своя копия.
Это не говоря уже о том, что в цифры 20 раз при -flto я не верю - 2-3 раза куда ни шло.
Но самое главное, конечно, как раз обновления: в случае согласованного дистрибутива достаточно обновить одну библиотеку для всех уязвимых программ, а не ждать выхода обновлений от каждого и потом их все тянуть.
Что особенно будет актуально в свете грядущих ограничений на зарубежный трафик, бгг.
Я толсто намекал, что для разных людей понятие интуитивности - разное. Нет, для человека, совсем ничего не видевшего, как & и && будут разными, либо наоборот, так и or и || совсем не одинаковы. Тем более, что, например, в криптографической литературе || часто используется для конкатенации и вообще к or отношения не имеет. Происхождение же разницы очевидно, опять же, для человека с правильным бэкграундом: в шелле && и || используются для управления выполнением, имея низкий приоритет, Ларри нужны были как они, так и сишные операторы, и сишные видимо чаще, поэтому для управления он и дал им другие названия.
Насчет серьезности Ларри, не знаю, полностью прочитаю текст через несколько дней, однако абзац про постмодернизм по крайней мере забавен. И да, использование философских причин вполне нормально, потому что это, кхм, правильно (pun в контексте постмодернизма intended), а какие такие причины в программировании будут естественными, если опять же не философские? Нет, пример с интуитивностью выше уж точно не относится к “естественным для программирования”. Пакости тут тем более не в кассу (я вновь подозреваю взгляд из ограниченной картины мира).
И нет, пакости с Perl6 он не совершал - это совершенно обычная, естественная для программистов ошибка “сейчас всё возьмем и перепишем с нуля”. Её совершают очень многие, Netscape так вообще из бизнеса вылетел, прекратив существование как компания. Против неё целые эссе мне попадались… так что нет, злого умысла у Ларри здесь не было.
“Единственной интуитивно понятной вещью является материнская сиська, всему остальному надо учиться” (с)
У меня, например, нет такого интуитивного понимания. Более того, из опыта Си с разными & и && интуиция говорит, что и тут должно отличаться (зачем-то же их сделали разными).
Не, мне не проще. Особенно когда разным людям выдает разное, один и тот же промпт в разное время может давать разное, и т.д. Могу открыть ссылку, если дадут, но вообще по правилам хорошего тона это должно быть зафиксированной версией в самой ветке комментариев, а еще лучше таки вменямое изложение мнения вместо “самовывода из примеров”.
Да, это единственное место в прототипах “без запятых”, которое любят и широко применяют. В каком-нибудь try {} catch {} очень органично ложится, например.
Тут хитрость в том, что парсер без скобок трактует это как вызов метода myprint для STDERR который одновременно является и typeglob и объектом класса IO::File, наследником IO::Handle.
А, это то самое место, где new Class::Name @args по той же причине работает, и это место из языка лучше было бы выкинуть (современный стиль жестко не рекомендует), хотя конкретно для принта трюк получился хороший.
У данной (print) прототип нестандартный. Но есть встроенные и со стандартными прототипами которые без прототипа работать не будут. Вот, скажем, у push стандартный прототип (\@@)
Нет, он нестандартный, не в том плане, что не описан в манах, а в том, что “обычно так не делают” (не рекомендуется).
Вы цифры-то посмотрели? Он таки грузит .so на двести метров, примерно своего же размера то есть. Если бы каждое qt-приложение тащило бы его еще внутрь себя статиком, я бы на своих 16 гигах уже совсем помер (а так просто рестартую Файрфокс раз в несколько дней, когда своп засрётся). В том числе за это и не люблю все эти снапы-флатпаки (к счастью, у меня их и нет).
И на работе при портировании того же Кобола руководство хотело докеры с кубернетесами - идею сильно отложили, поприкинув, сколько наши статические бинари (так-то небольшие, порядка ста метров) начнут жрать лишней памяти в десятках контейнеров.
Статика нормально работает для типового случая применения Go - единственное приложение на (виртуальной) машине (во всяком случае с другими не пересекающееся в принципе), какой-нибудь микросервис или впн/прокси - да, в этом случае простота деплоя перевешивает. В нормальных же случаях - нет.
Это специфика конкретно мозгов Риделя, на него в перловых сообществах постоянно жаловались за такое нехарактерное для перла поведение. Неудивительно, что он в итоге свалил на JS.
Я нейронками принципиально не пользуюсь, пока не заставляют (т.е. вне работы). Опишите человеческим языком сей странный тейк. А также, много ли вообще сигнатур встречается в больших проектах в проде (я работал во многих разных местах и не видел ни разу).
По-моему он и так с -flto собирается, во всяком случае, когда я собирал его себе в позапрошлом году, из 3 часов сборки линковка занимала минут сорок. Но памяти он жрёт не так много, в те годы меньше гигабайта свежий, сейчас же гига два:
Так он уже stripped! И не статический, в том-то и мой поинт - если б ЭТО еще и статическим было, при критикуемом мной подходе Go/Rust, размеры были бы вообще невообразимые! Полный readelf не покажу, он по размерам сюда не влезет просто. Да, часть его размеров - это встроенные картинки, но они особо не менялись со времен, когда он менее 100 Мб занимал. Сейчас же в нём еще и браузер есть на webkit-gtk (правда мне лень рыться в выводе ниже, влинкован или как .so)/
Да, это не проблема языка, а проблема психологии. Многие предпочитают BDSM вместо свободы. Ну и да, большое количество свободы подразумевает внутреннюю самодисциплину, иначе начинается “ох, а еще и так можно, а давайте попробуем всё”, что и послужило причиной большого количества немайнтенабельного кода 90-х, сделавшего Перлу дурную славу - потом-то “наигрались”, а осадочек остался…
Там хитрость в том, что у данной конкретной функции прототип нестандартный: обычно в бесскобочной записи все аргументы являются просто списком через запятую, только без самих скобок: funcname "arg1", "arg2", "arg3"; А у print там может опционально появляться хэндл:
Обратите внимание, что после STDERR нет запятой, он как бы “не совсем” аргумент, а делает вызов похожим на “конструкцию языка”, как это было бы в “обычном языке”.
Хах, я вот могу сказать, что “как обычный програмист на Перле”, не знаю почему так без рыться в документации, потому что “обычно так не делают”, применение прототипов ограничено. “Доктор, когда я вот делаю, мне больно! - А вы так не делайте” (с)
Не целиком legacy, скажем так (пример с конкретно \$ “не очень”, а с простыми вполне). Вот, скажем, автор AnyEvent определил функцию дефолтного логгера так, чтоб можно было писать вот в таком бесскобочном стиле:
$ grep log cborlog.pl | head -5
AE::log fatal => "flag exists on start with $pid contents\n" if $pid;
AE::log info => "starting process for layer $layer on %s", $decoders{$layer}->{inc};
on_destroy => sub { AE::log trace => "layer $layer exited"; $cond->end },
on_error => sub { save_cbor(1); AE::log fatal => "RPCFORK $layer ERROR: $_[0]"; },
$AnyEvent::Log::LOG->log_to_path($opts->logfile) if $opts->{logfile}; # XXX path vs file
Синтаксис прототипов стоило объяснить для новичков, которые скорее всего в этих комментариях, тем более что обычно передачу по ссылке ВОТ ТАК не делают - в вызове сделают setter(\$x, 42) чтоб явно показать, что передана ссылка, а не просто параметр.
А про проверку синтаксиса объяснение для новичков хорошее, лайк.
Ну здесь же то же самое сказали - можно без них, по большому счету они нужны, если мы назвали свою именем встроенной функции - но зачем так делать? Когда такое может быть необходимо в случае развера проекта, в нём тогда будут модули, нэймспэйсы, объекты, так что MyModule::chomp() или $object->chomp() снова не потребует амперсанда.
Так это Windows, там просто системный компонент берут, как и на мобилах, кстати. А webkit-gtk для тех ОС, где “штатного” браузера из коробки нет.
Людей, на полном серьезе не понимающих, почему многообразие и свобода хорошо, надо принудительно сажать писать на COBOL, где, например, символ комментария можно поставить только в определенной колонке строки и нигде иначе (6-й штоле, забываю уже), строки длиннее 72 символов синтаксическая ошибка, и надо внимательно смотреть, где расставлять точки (вместо точек с запятыми там) в случае вложенных IF. Вспоминая, как из-за подобной ошибки (только в Фортране) в свое время упала ракета.
Вообще, конечно, тут вспоминается великий психиатр Эрих Фромм, книга “Бегство от свободы”…
Ну вообще-то нет, не висит. В этом легко можно убедится, попробовав открыть эти .so на запись и получить странную ошибку Text file busy. Это значит, что подсистема виртуальной памяти рассматривает их как этакий “своп”, и неиспользуемые страницы просто выкидывает из памяти, при необходимости загружая вновь из файла. При этом будет экономия на том, что используемые части у разных программ всё же пересекаются, а в случае статической линковки у каждого будет таки своя копия.
Это не говоря уже о том, что в цифры 20 раз при -flto я не верю - 2-3 раза куда ни шло.
Но самое главное, конечно, как раз обновления: в случае согласованного дистрибутива достаточно обновить одну библиотеку для всех уязвимых программ, а не ждать выхода обновлений от каждого и потом их все тянуть.
Что особенно будет актуально в свете грядущих ограничений на зарубежный трафик, бгг.
Я толсто намекал, что для разных людей понятие интуитивности - разное. Нет, для человека, совсем ничего не видевшего, как & и && будут разными, либо наоборот, так и or и
||совсем не одинаковы. Тем более, что, например, в криптографической литературе||часто используется для конкатенации и вообще к or отношения не имеет. Происхождение же разницы очевидно, опять же, для человека с правильным бэкграундом: в шелле && и||используются для управления выполнением, имея низкий приоритет, Ларри нужны были как они, так и сишные операторы, и сишные видимо чаще, поэтому для управления он и дал им другие названия.Насчет серьезности Ларри, не знаю, полностью прочитаю текст через несколько дней, однако абзац про постмодернизм по крайней мере забавен. И да, использование философских причин вполне нормально, потому что это, кхм, правильно (pun в контексте постмодернизма intended), а какие такие причины в программировании будут естественными, если опять же не философские? Нет, пример с интуитивностью выше уж точно не относится к “естественным для программирования”. Пакости тут тем более не в кассу (я вновь подозреваю взгляд из ограниченной картины мира).
И нет, пакости с Perl6 он не совершал - это совершенно обычная, естественная для программистов ошибка “сейчас всё возьмем и перепишем с нуля”. Её совершают очень многие, Netscape так вообще из бизнеса вылетел, прекратив существование как компания. Против неё целые эссе мне попадались… так что нет, злого умысла у Ларри здесь не было.
“Единственной интуитивно понятной вещью является материнская сиська, всему остальному надо учиться” (с)
У меня, например, нет такого интуитивного понимания. Более того, из опыта Си с разными & и && интуиция говорит, что и тут должно отличаться (зачем-то же их сделали разными).
Не, мне не проще. Особенно когда разным людям выдает разное, один и тот же промпт в разное время может давать разное, и т.д. Могу открыть ссылку, если дадут, но вообще по правилам хорошего тона это должно быть зафиксированной версией в самой ветке комментариев, а еще лучше таки вменямое изложение мнения вместо “самовывода из примеров”.
Что там сложного? Табличка приоритетов в самом начале man perlop, при сомнениях открыть глянуть очень быстро, не читая весь.
Да, это единственное место в прототипах “без запятых”, которое любят и широко применяют. В каком-нибудь try {} catch {} очень органично ложится, например.
А, это то самое место, где
new Class::Name @argsпо той же причине работает, и это место из языка лучше было бы выкинуть (современный стиль жестко не рекомендует), хотя конкретно для принта трюк получился хороший.Нет, он нестандартный, не в том плане, что не описан в манах, а в том, что “обычно так не делают” (не рекомендуется).
Вы цифры-то посмотрели? Он таки грузит .so на двести метров, примерно своего же размера то есть. Если бы каждое qt-приложение тащило бы его еще внутрь себя статиком, я бы на своих 16 гигах уже совсем помер (а так просто рестартую Файрфокс раз в несколько дней, когда своп засрётся). В том числе за это и не люблю все эти снапы-флатпаки (к счастью, у меня их и нет).
И на работе при портировании того же Кобола руководство хотело докеры с кубернетесами - идею сильно отложили, поприкинув, сколько наши статические бинари (так-то небольшие, порядка ста метров) начнут жрать лишней памяти в десятках контейнеров.
Статика нормально работает для типового случая применения Go - единственное приложение на (виртуальной) машине (во всяком случае с другими не пересекающееся в принципе), какой-нибудь микросервис или впн/прокси - да, в этом случае простота деплоя перевешивает. В нормальных же случаях - нет.
Это специфика конкретно мозгов Риделя, на него в перловых сообществах постоянно жаловались за такое нехарактерное для перла поведение. Неудивительно, что он в итоге свалил на JS.
Я нейронками принципиально не пользуюсь, пока не заставляют (т.е. вне работы). Опишите человеческим языком сей странный тейк. А также, много ли вообще сигнатур встречается в больших проектах в проде (я работал во многих разных местах и не видел ни разу).
По-моему он и так с -flto собирается, во всяком случае, когда я собирал его себе в позапрошлом году, из 3 часов сборки линковка занимала минут сорок. Но памяти он жрёт не так много, в те годы меньше гигабайта свежий, сейчас же гига два:
Нет, браузеры по-прежнему жрут больше, Хромой вообще сотни гиг мапит.
Пишите как посмотреть, я не настолько сварщик :)
Так он уже stripped! И не статический, в том-то и мой поинт - если б ЭТО еще и статическим было, при критикуемом мной подходе Go/Rust, размеры были бы вообще невообразимые! Полный readelf не покажу, он по размерам сюда не влезет просто. Да, часть его размеров - это встроенные картинки, но они особо не менялись со времен, когда он менее 100 Мб занимал. Сейчас же в нём еще и браузер есть на webkit-gtk (правда мне лень рыться в выводе ниже, влинкован или как .so)/
Да, это не проблема языка, а проблема психологии. Многие предпочитают BDSM вместо свободы. Ну и да, большое количество свободы подразумевает внутреннюю самодисциплину, иначе начинается “ох, а еще и так можно, а давайте попробуем всё”, что и послужило причиной большого количества немайнтенабельного кода 90-х, сделавшего Перлу дурную славу - потом-то “наигрались”, а осадочек остался…
Там хитрость в том, что у данной конкретной функции прототип нестандартный: обычно в бесскобочной записи все аргументы являются просто списком через запятую, только без самих скобок:
funcname "arg1", "arg2", "arg3";А у print там может опционально появляться хэндл:Обратите внимание, что после STDERR нет запятой, он как бы “не совсем” аргумент, а делает вызов похожим на “конструкцию языка”, как это было бы в “обычном языке”.
Хах, я вот могу сказать, что “как обычный програмист на Перле”, не знаю почему так без рыться в документации, потому что “обычно так не делают”, применение прототипов ограничено. “Доктор, когда я вот делаю, мне больно! - А вы так не делайте” (с)
Не целиком legacy, скажем так (пример с конкретно
\$“не очень”, а с простыми вполне). Вот, скажем, автор AnyEvent определил функцию дефолтного логгера так, чтоб можно было писать вот в таком бесскобочном стиле:Синтаксис прототипов стоило объяснить для новичков, которые скорее всего в этих комментариях, тем более что обычно передачу по ссылке ВОТ ТАК не делают - в вызове сделают
setter(\$x, 42)чтоб явно показать, что передана ссылка, а не просто параметр.А про проверку синтаксиса объяснение для новичков хорошее, лайк.
Ну здесь же то же самое сказали - можно без них, по большому счету они нужны, если мы назвали свою именем встроенной функции - но зачем так делать? Когда такое может быть необходимо в случае развера проекта, в нём тогда будут модули, нэймспэйсы, объекты, так что
MyModule::chomp()или$object->chomp()снова не потребует амперсанда.