LINUX.ORG.RU

Зачем нужен стандарт ISO для языков программирования?

 ,


1

3

Привет, ЛОР!

Почти в каждом местном сраче про Rust кто-нибудь пишет, что недостатком Rust в сравнении с C и C++ является отсутствие стандарта ISO. Ради интереса, я взял список самых популярных языков программирования (https://pypl.github.io/PYPL.html) и проверил, для каких из них есть стандарт ISO или стандарт вообще.

Довольно неутешительные для любителей стандартизации результаты я собрал в табличку. C и C++ по ссылке выше идут как один язык, но я разделил их. Для Delphi стандарта нет, но я упомянул стандарт для Pascal.

Language        Standard
--------        --------
Python          No
Java            Partial API only (https://www.iso.org/standard/54004.html)
Javascript      Non ISO, ECMAScript
C#              ISO withdrawn (https://www.iso.org/standard/42926.html)
PHP             No
C               ISO/IEC 9899
C++             ISO/IEC 14882:2017
R               No
Objective-C     No
Swift           No
TypeScript      No
Matlab          No
Kotlin          No
Go              No
VBA             No
Ruby            https://www.iso.org/standard/59579.html
Scala           No
Visual Basic    No
Rust            No
Dart            No
Perl            No
Abap            No
Lua             No
Ada             ISO/IEC 8652
Groovy          No
Julia           No
Cobol           ISO/IEC 1989:2014
Haskell         No
Delphi          No, Pascal ISO 7185:1991

Если не считать C, C++ и Ada, актуальных стандартов ISO нет ни у одного живого языка. Cobol и Pascal практически мертвы. Java и C# пытались стандартизировать, но от этой идеи вроде как все отказались. Плюс у них по сути по одной реализации, так что всем плевать.

В случае же с C и C++ наличие стандарта ISO никак не помогло никому. Более того, на эти стандарты разработчики компиляторов во многом кладут болт и часто реализуют их не полностью (история с export в C++, например). Плюс, наличие стандартов никак не мешает несовместимости между реализациями.

Отдельно хочу добавить про стандарт SQL, который хоть и существует, но он настолько бесполезен и убог, что каждая база данных лепит вагон расширений к языку запросов, и в результате между разными реализациями SQL переносить без изменений можно разве что самый простой и тупой код.

Относительно успешной получилась стандартизация JavaScript, и это единственный популярный язык в списке кроме C и C++, у которого больше одной актуальной реализации. Но у JavaScript новый стандарт выходит каждый год и никак не привязан к адовому бюрократическому комитету.

Скажи, ЛОР, по твоему мнению есть ли вообще смысл в этой бесполезной бюрократической возне? Какие есть вообще преимущества в стандартизации языков? Ну кроме как получать профит от продаж копий стандарта, потому что они стоят несчадных денег.

★★★★★

Последнее исправление: hateyoufeel (всего исправлений: 6)
Ответ на: комментарий от peregrine

Не ну не в крайности. Есть аналог ISO это IETF и оно пишет RFC. Норм же. Только вот тут тоже непонятно, кто это пишет. На какие шиши живут. Кто принимает решения что RFC, а что наколенная поделка васи. Но так или иначе по тысячам конкретных дел есть конкретные описания и это хорошо. ISO могло бы что-то подобное делать. Но если IETF кто такие и что такое непонятно вообще, то ISO подавно. Да и в целом на ISO всем болт давно уже. Разве что в каких отраслях юзающих. А так есть CERT/MISRA и прочие у которых конкретные цели и конкретные стандарты. Можно плюнуть на ISO и сказать что у меня стандарт MISRA и всё. Или у меня GNUC99 это в реальной жизни тоже отдельный стандарт. Нужно только выбрать и объявить что ты используешь. Раньше было проще реализации были именно под ISO сейчас же ISO это база. То есть некий минимал набор и усё. Хотя я в виду своего быдлокодинга для самого себя и всё вообще забыл что стандарт, что нет. И всё такое. =)

А вот на какихнить прям Ъ заводах могут взять и сказать у нас код должен быть ISO/IEC 9899:1999/Cor 3:2007 от 2007-11-15 и ни шагу в лево и в право.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Могут. Но ситуация сама по себе больная. Почти всё что происходит в стандартизации и информационной безопасности это просто юридическое перекладывание вины с плеч начальства на головы подчинённых. Это тоже очень-очень плохо.

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

Из скриптоты можно просмотреть на лиспы и форты

Это сишечка скриптота по сравнению с фортом.

anonymous
()
Ответ на: комментарий от fsb4000

Никаких ifdef не нужно если ты пишешь на стандарте и забиваешь на компиляторы которые не полностью поддерживают стандарт.

То есть в течении порядка 10 лет нужно было забивать на самые массовые компиляторы, очень хорошо.

anonymous
()
Ответ на: комментарий от LINUX-ORG-RU

Почему тебе непонятно, кто пишет rfc? Ты этим вообще интереслаался, как и где?

Любой пишет rfc. Хоть ты можешь.

anonymous
()
Ответ на: комментарий от anonymous

Правами на все RFC обладает IETF и если ты напишешь документацию в нужном формате по своему протоколу то ты обязан передать права на этот документ в IETF и то они ещё подумают принять это или нет и только если примут то застолбят номер выпустят твоё RFC официально.

Конечно ничто не мешает писать свою доку к своим вещам в виде RFC как и было ранее. Но мы то выше по треду не про именно стандарты и доки все эти, а про конторы типа ISO / IETF хератив, полустёбе говорили

LINUX-ORG-RU ★★★★★
()

Почти в каждом местном сраче про Rust кто-нибудь пишет, что недостатком Rust в сравнении с C и C++ является отсутствие стандарта ISO.

Во-первых, это надо ещё доказать, что во всех таких темах указывается именно на стандарт ISO, а не на формальную спецификацию вообще. К тому же, тебе тут уже написали, что первично наличие или очень вероятное появление многих несовместимых реализаций, что будет проблемой и для бизнеса и для государства. В случае со скриптухой на питоне такой проблемы может и не появиться, потому что никто в здравом уме не будет логику с повышенными требованиями к безопасности и интероперабельности (типа низкоуровневого контроллера в каком-нибудь самолете) писать на питоне. А какую-то говносистему на сервачке в вебе можно переписывать с одной реализации питона на другую без особых последствий для конторы разработчика и пользователей, особенно если этих пользователей всего пара-тройка васянов.

Далее, откуда ты знаешь, что «никогда никому не помог стандарт ISO»? Ты в разработке всех компиляторов C++ с 1998г. участвовал? Может они тебе хотя бы телеграфировали «уважаемый хейтюфил пишу вам из калифорнии стандарт ISO не помог тчк Билл»?

Далее, ты приводишь в пример наличие каких-то нестандартных расширений как доказательство ненужности стандарта. У тебя проблемы с логикой? Если P(A), это не значит, что неP(неA).

Какие есть вообще преимущества в стандартизации языков? Ну кроме как получать профит от продаж копий стандарта, потому что они стоят несчадных денег.

Представь себе, каждая работа и бумага, печать, пересылка, все это требует затрат. Кто их будет компенсировать? М.б. из твоих налогов взять, чтобы всем васянам бесплатно рассылать? К тому же, это не проблема вовсе. Если ты васян или мелкая контора, бери бесплатный драфт. Если ты солидная фирма с перспективой прибыли, 200франков - это такая смешная сумма, что даже нищеброд себе позволить может.

Короче, хватит тупить.

seiken ★★★★★
()

На ИСО пофиг, важнее чтобы стандарт был, жабы например сантехники сами проверяли за много денег на соответствие.

ya-betmen ★★★★★
()

есть ли вообще смысл в этой бесполезной бюрократической возне?

Мнение фаната стандартизации и «Дракона» Паронджанова ©.

quickquest ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

зачем писать двухпортовую память на верилоге? Ты же явно не хочешь, чтобы она просинтезировалась из триггеров. Полагаться на то, что синтезатор тебя поймет и поставит блочную память как-то рискованно.

demidrol ★★★★★
()
Ответ на: комментарий от hateyoufeel

Да не лепит каждый своё. Тебе рассказали про аппаратно-специфичные вещи, которые на каждой технологии свои (у Xilinx – один набор примитивов блочной памяти, у Intel – другой, у Lattice – третий, равно как у каждого техпроцесса асиков).

Единственные костыли, которые замечал, относятся к расширению VHDL сишными модулями (для симуляции). Так-то в стандарте описан VHPI, но по факту там реально – кто в лес, кто по дрова (просто он довольно поздно появился).

В верилоге с этим все норм, VPI («старый» стопроцентно работающий метод объявления внешних функций и задач) и DPI-C (это уже в SystemVerilog, и он тоже часть стандарта прям с рождения языка).

demidrol ★★★★★
()

топик читается так:

Мне нравится Раст, а С++ я не люблю, но немного напрягает в Расте нет стандарта. Почти убедил себя, что ничего плохого в этом нет, но поубеждайте теперь и вы меня.

anonymous
()
Ответ на: комментарий от demidrol

Полностью согласен, была целая статья, что хоть двухпортовка у разных вендоров вполне себе на Verilog объявляется, но немного иначе, и это приводит к скатыванию до регистров

Это просто как раз иллюстрация, что вроде стандарты есть, но в каких-то местах они дают не те результаты

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от anonymous

Конечно, не нужен. Там же вот-вот и нормальный ЯП завезут, буквально со следующим стандартом (ну, так всегда говорят, пока новый стандарт не опубликуют, а потом опять начинается :). А опытные разрабы так и вообще проблем не испытывают давным-давно).

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Новые стандарты ни при чём. асинк/аваит даже в c89 не нужен, если уж на то пошло.

А опытные разрабы так и вообще проблем не испытывают давным-давно

Только опытные здесь лишнее

anonymous
()
Ответ на: комментарий от anonymous

А опытные разрабы так и вообще проблем не испытывают давным-давно

Только опытные здесь лишнее

Врунишка.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Ты б хоть аргументировать попытался, для приличия

anonymous
()
Ответ на: комментарий от Virtuos86

async/await – это фигня. Тут модули 10 лет пердолили. Их ещё в C++11 хотели добавить, но что-то пошло не так.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Тут модули 10 лет пердолили. Их ещё в C++11 хотели добавить, но что-то пошло не так.

Так в этом-то и польза от стандарта. Комитетчики хоть как-то останавливают поток гениальных идей от попадания в реализации. А не то было бы сейчас три реализации модулей, пяток вариантов концептов, какое-нибудь асинхронное метапрограммирование на констэкспрах, и везде что-то идёт не так.

Laz ★★★★★
()
Ответ на: комментарий от Laz

Комитетчики хоть как-то останавливают поток гениальных идей от попадания в реализации.

Ни кого они не останавливают.
Реальных разработчиков единицы, остальные - ЭКСШПЕРТЫ.

anonymous
()
Ответ на: комментарий от Laz

Думаю, Страуструп уже 100500 раз проклял тот день, когда у плюсов появился стандарт, и самыми главными людьми стали бюрократы из комитета.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Laz

Всратую срань типа Vector<bool> это никак не остановило.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)

Стандарты конечно бывают и полезны.
Но все часто стандарты становятся - каменными монументами.
Да многие стандарты «заявляют» свои права.
То бишь хорошее не сложно довести до абсурда.

Владимир

anonymous
()
Ответ на: комментарий от anonymous

То бишь хорошее не сложно довести до абсурда.

Стандарты WWW ИМХО полезны.
Они «не претендуют», «не требуют», дружелюбны …

Владимир

anonymous
()
Ответ на: комментарий от LINUX-ORG-RU

На те же что и СЖВ консилиумы

…Которые почему-то гнездятся метастазами на расте и гошечке, а не на C++.

А всё потому что C и C++ — это industry standard, а не пыль из-под левой пятки SJW.

anonymous
()
Ответ на: комментарий от Virtuos86

Просто надо писать на нормальных языках, а не на семидневном lefpad-ориентированном языке:

man 3 setjmp

http://dspace.mit.edu/bitstream/handle/1721.1/5600/AIM-848.pdf , страница 58. Учитывая макросы, он там уже был в куцем (какой сейчас есть в твоём язычке) состоянии.

anonymous
()
Ответ на: комментарий от hateyoufeel

Шёл 2020 год. Поехавшие сишники всё ещё молились на пердолево с setjmp.

А по сути есть что сказать или js головного мозга?

anonymous
()
Ответ на: комментарий от anonymous

чтобы гнездиться на крестах надо быть некромантом, а это надо долго учиться, на «госрастом» гнездиться проще, остается много свободного времени для сжв.

anonymous
()
Ответ на: комментарий от grem

На мой вкус в Си всё это удобнее реализовано, поэтому пусть фортран числодробилит, а сишечка на консоль информацию выводит. Хотя и можно написать иногда PRINT *, blah-blah

luke ★★★★★
()
Ответ на: комментарий от anonymous

А по сути есть что сказать или js головного мозга?

А что сразу JS? Это оскорблением должно быть что ли?

Кстати, в среднем JS-макаки больше сишных господ зарабатывают. Наверное, они продуктивнее, не?

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Да, но у них таланты из совсем другой области. Или ты программируешь на камеру без одежды с дилдой в жопе?

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Да. Пару лет назад я читал про какую-то девочку веб-разработчика из Москвы, которая сделала карьеру на Pornhub.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

программируешь на камеру без одежды с дилдой в жопе

Очень точное описание agile методологии. А еще там чувак с плеткой за кадром периодически тебя дерёт.

anonymous
()
Ответ на: комментарий от anonymous

Только опытные здесь лишнее

Неопытный разраб на С++ это сапер с трясущимися руками на минном поле.

anonymous
()
Ответ на: комментарий от fsb4000

Шёл 2020. @hateyoufeel всё ещё не умеет в корутины без магии компилятора :)

А какой практический смысл в том, чтобы это уметь без магии компилятора? Ну кроме бесконечного бессмысленного пердолева.

Кстати, на том же хацкелле корутины давно написали на самом хацкелле, обернули в библиотеку и всё ок.

-- | Suspending, resumable monadic computations.
newtype Coroutine s m r = Coroutine {
   -- | Run the next step of a `Coroutine` computation. The result of the step execution will be either a suspension or
   -- the final coroutine result.
   resume :: m (Either (s (Coroutine s m r)) r)
   }

type CoroutineStepResult s m r = Either (s (Coroutine s m r)) r

instance (Functor s, Functor m) => Functor (Coroutine s m) where
   fmap f t = Coroutine (fmap (apply f) (resume t))
      where apply fc (Right x) = Right (fc x)
            apply fc (Left s) = Left (fmap (fmap fc) s)

instance (Functor s, Functor m, Monad m) => Applicative (Coroutine s m) where
   pure = return
   (<*>) = ap

instance (Functor s, Monad m) => Monad (Coroutine s m) where
   return x = Coroutine (return (Right x))
   t >>= f = Coroutine (resume t >>= apply f)
      where apply fc (Right x) = resume (fc x)
            apply fc (Left s) = return (Left (fmap (>>= fc) s))
   t >> f = Coroutine (resume t >>= apply f)
      where apply fc (Right _) = resume fc
            apply fc (Left s) = return (Left (fmap (>> fc) s))

А в C так нельзя. В C надо долбиться в longjmp. Или можно?

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.