lqp

Andrew Tomazos

Nov 27, 2024 13:31

Тут у меня в ленте обсуждают скандальчик в одном из ISO-вских комитетов. Напомню, что я писал про ISO в 2007 году.

Но тут, надо сказать, играет свою роль также своеобразный, я бы сказал жульническим статус ISO как организации. По уставу ISO - только не падайте со стула - является общественной организацией, на равных правах с Amnesty international или какими-нибудь Пен-клубами. Соотвественно, как общественная организация, ISO в целом и ее отдельные функционеры в частности - не ответственны в своих делах и решениях ни перед однним государством мира. При этом по тому же уставу, членами ISO являются исключительно официальные стандартизирующие учреждения различных государств, которые при этом становятся отвественны не только перед воими гражданами - но и перед ISO. По моему, уже одного этого выкрутаса вполне достаточно, чтобы любой здравомыслящий человек держался от ISO так далеко, как это только возможно.

***

[а какой вообще статус может у неё быть?]

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

Другим вариантом мог бы быть статус настоящей общественной организации, допускающей к участию в своих работах всех заинтересованных лиц (за денюжку, возможно), как W3C, IETF, IEEE.

Наконец, третьим честным вариантом мог бы быть статус группы частных лиц, продвигающих определенные принципы|интересы, как OSI, IFPI, Коминтерн.

Но нет.

(x-post)

BTW как я понял всю эту возню с Undefined Behavior в Це. Если кто понимает лучше, поправьте.

Современные компиляторы, - сами по себе огромные неповоротливые монстры, разрабатываемые комитетами, - используют один и тот же кодогенератор для всех поддерживаемых языков. Компиляция программы на Це отличается от компиляции программы на Джаве только тоненькой прослойкой фронтэнда, производящего лишь чуть больше чем собственно синтаксический анализ.

Но если оттранслировать программу на Джаве так как она написана, то выполняться она со скоростью черепахи, может быть даже медленнее чем если бы она была написана на Питоне. Поэтому компилятор свирепо оптимизирует такую программу, фактически пишет свой собственный код "по мотивам" исходного текста. Так он может заменить десять вложенных друг в друга вызовов виртуального метода на noop если обнаружит что все эти вызовы, как это обычно и бывет в Джаве, всего лишь вычурный способ задать константу. Компилятор агрессивно выискивает и уничтожает бесполезный код поскольку такой код в обилии порождается самим синтаксисом Джавы. Вопрос, естественный в Це:"Если программист так написал, то это наверное что-то должно значить?" здесь не имеет смысла - программист ничего не писал, он просто подключил библиотеку которая в ходе своей инициализации запустила несколько миллионов строк кода, большая часть которых не имеет ни малейшего отношения к тем задачам, ради которых программист подключил библиотеку. И тут различные эвристики вида "этого не может быть никогда, а потому соответствующую невозможному событию ветку кода мы даже и компилировать не будем" - вполне уместны.

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

Но в комитетах по стандартизации языков программирования сидит гораздо больше авторов компиляторов чем авторов операционных систем. И авторы компиляторов любят своих бегемотиков, транслирующих одновременно с 50 языков и хотят чтобы им было хорошо и спокойно. При этом понятно что если из, скажем, GNU Compiler Collection исключить компилятор Це, то остальные 15 фронтэндов сраду станут мало кому нужны.

(x-post)
(
Comments
|Comment on this)
Previous post Next post
Up