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)

Смысла ноль. Это просто тролинг тупостью.

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

Соответственно, если нет даже намёка на конкурирующие реализации (gcc-go сложно назвать конкурентоспособным), то какой-либо стандарт на этот язык никому не нужен.

Поаккуратнее с квантором всеобщности. Не нужен он только поставщику эталонной реализации. А общественность очень даже заинтересована в конкуренции и отвязке от поставщика.

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

Поаккуратнее с квантором всеобщности. Не нужен он только поставщику эталонной реализации. А общественность очень даже заинтересована в конкуренции и отвязке от поставщика.

Да нет, я не хочу очередной ситуации «ой а у нас свой компилятор, он не интегрируется с вашей IDE, но мы такие знаете вот UNIX-вей поэтому у нас нет модулей все через GOPATH».

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)

Стандарт === Приговор.

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

Если у него одна распространённая реализация, и нет заинтересованных (обычно это достаточно крупные конторы на рынке компиляторов), то никто не будет настаивать на стандартизации и организовывать работу комитета по разработке этого стандарта.

Преимуществом это может являться только в случае если очень хочется создать свою реализацию с целью получения прибыли. В противном случае придется попотеть, чтобы

  • выдавить своей реализацией исходную или заметно её подвинуть;
  • или вынудить разработчика основной на текущий момент реализации стандартизовать язык.
grem ★★★★★
()
Ответ на: комментарий от kirk_johnson

Без стандартов на каждой платформе были бы свои уникальные кресты. Как оно собственно и было в 90-е. Никто не стал бы делать ни с чем не совместимый llvm. И пришлось бы смузихлебам писать компилятор с нуля, что конечно фантастика.

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

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

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

Без стандартов на каждой платформе были бы свои уникальные кресты. Как оно собственно и было в 90-е. Никто не стал бы делать ни с чем не совместимый llvm. И пришлось бы смузихлебам писать компилятор с нуля, что конечно фантастика.

О, а вот и альтернативная история подъехала. Всегда было интересно, когда появятся попаданцы от мира IT.

kirk_johnson ★☆
()

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

Выберите правильный ответ:

  • нужен как собаке второй хвост;
  • нужен как собаке стоп сигнал;
  • нужен как ежу носовой платок;
  • не нужен;
  • нужен потому что это СТААААААНДАРТ.
anonymous
()
Ответ на: комментарий от hateyoufeel

Интересно, а вендоры поставляют свои расширения? Или у всех абсолютно одинаковые Verilog/VHDL и код без проблем переносится?

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

Вот уже двухпортовую память на Verilog изображать - уже куча ньюансов вылезает сходу, проще враппер написать, увы

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

Да, дарю набросок сценария: kirk_johnson попадает в 1980-й год в тело ребенка сохранив все свои знания. И к началу 90-х выпускает компилятор раста и ОС kirkuх целиком на расте c системд и вейландом. Микрософт разоряется, а наш герой становится самым богатым и известным человеком на планете, изобретает социальные сети, смартфоны, финансирует полеты на Марс. А в 2020 предотвращает эпидемию коронавируса.

anonymous
()

Чёт у рустеров совсем дела плохи. Теперь им уже стандарт на плюсы мешает

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

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

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

Да, дарю набросок сценария: kirk_johnson попадает в 1980-й год в тело ребенка сохранив все свои знания. И к началу 90-х выпускает компилятор раста и ОС kirkuх целиком на расте c системд и вейландом. Микрософт разоряется, а наш герой становится самым богатым и известным человеком на планете, изобретает социальные сети, смартфоны, финансирует полеты на Марс. А в 2020 предотвращает эпидемию коронавируса.

Да, дарю набросок сценария: @metaprog попадает в 1980-й год в тело ребенка сохранив все свои знания.
И к началу 90-х выпускает Метапрог и ОС MetaDOS целиком на Метапрог.  
Микрософт разоряется, а @metaprog становится самым богатым и известным человеком на планете, изобретает МетаТреп, МетаФоны и бесплатное решение квадратных уравнений.  
А в 2020 раскаивается в создании Метапрог.
anonymous
()
Ответ на: комментарий от anonymous

itt анонимус доминирует. руст не нужен

«Собака лает, ветер носит».
Microsoft дала «зеленый свет» русту.
«И это пожалуй, все».

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

Microsoft не скрывала ни когда, что она хочет «закопать» C/C++.
А знает ли кто почему?

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

Метапрог сохранив все свои знания

Дальше можно было не продолжать, уже достаточно годно.

anonymous
()

Однозначно лишь одно.
Стандарты ISO стоят ни как «пригорошня семечек» да еще начинают «властвовать» в предметных областях.
ИМХО - очень плохо.

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

У Python 3 много реализаций, нужна стандартизация?

Да.

Эталонная реализация может заменять собой стандарт?

Только пока не отклоняешься =D то есть нет.

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

Ну, то есть, в 2020 наличие стандарта ISO для языка не является преимуществом вообще никак, правильно?

Наличие стандарта является преимуществом. В ваших комментариях явно видна такая логика: «мой любимый язык (раст, например) не имеет стандарта, что воспринимается как недостаток, значит надо убедить себя/других, что это не отсутствие стандарта не является недостатком».

Вообще-то, все нормальные ответы в теме сводятся к тому, что стандарт является преимуществом.

Касательно растов. Если имеется 1 основная реализация, которая используется для большей части кода, то стандартом во многом де-факто является эта реализация. Однако, стандарт всё равно желателен, так как между версиями одного языка внутри одного reference implementation возникают неопределённости по поводу того, где баг, а где фича. Грубо говоря, какой-нибудь раст v1.1 и раст v1.2 могут по куче разных причин приводить к разному поведению и тогда надо договариваться что правильно, а что нет.

Из своего личного опыта. В 2011-2014 годах я мельком имел отношение к разработке языка D - одного из кандидатов на хоронильщики С++. И отсутствие стандарта часто становилось проблемой, так как разные версии компилятора делали что-то по-разному и хрен поймёшь как надо. А понять из скупой простенькой документации типа как наследовать классы и как объявлять функции ответа не найдёшь. Зачастую, когда пишется pull-request для разруливания неопределённости между версиями, выясняется, что где-то стандартная библиотека зависит от ставшего неправильного поведения и приходится это как-то исправлять. После выхода очередной версии зачастую есть жалобы, что поломался какой-то код (хотя это не смертельно). В перспективе пары лет происходит некое «накопление» нерешённых проблем («мы не можем сделать что-то, потому что оно тянет за собой проблему XYZ»).

Ну и самое главное - когда идёт разработка компилятора, то без стандарта источником ответа на множество вопросов является исходный код, который может меняться и т.п. Острота этой проблемы зависит от сложности языка - чем сложнее, тем больше нужен стандарт (грубо говоря, это второй фактор помимо количества реализаций). Ещё один ньюанс отсутствия стандарта - это то, что за язык решают несколько человек, мнение которых может не совпадать с мнением большинства. В том же комитете по C++ много кого представлено, поэтому пробить какую-то мутную идею гораздно сложнее. Ну и последнее - если есть одна reference implementation, то у неё низкий bus factor. Например, создатель D Walter Bright оценивал bus factor D в 10 человек. Когда язык зависит от карьеры/личной жизни 10 человек - это хуже, чем от 1000.

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

Стандарты безусловно нужны, но иногда они становятся и «тиранами».

Поэтому зачастую достаточно «спецификаций» и иных видов документов.

Владимир

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

Но наиболее благоприятное это конечно аннотации и выдержки.

Владимир

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

Ну так расскажи им!

На самом деле, я взял наиболее адекватный список популярных языков, и Фортрана в нём не оказалось. Возможно, не любит его никто. Лямбд не хватает. И этой, как её, ленивости, вот.

hateyoufeel ★★★★★
() автор топика

Какие есть вообще преимущества в стандартизации языков?

Несколько реализаций и шанс выжить, а не быть очередным leftpad-ориентированной мусоркой что в кодобазе, что в синтаксисе.

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

Лямбд не хватает. И этой, как её, ленивости, вот.

Для этого есть хаскель.

На самом деле, я взял наиболее адекватный список популярных языков

Например, Abap. Он точно популярнее фортрана?

luke ★★★★★
()

Конкретно сишечки сотни компиляторов под разные системы. Сишечка проста и запиливается относительно легко. Я посмотрю, как ты вкорячишь раст на всё, куда залезет сишечка.

Из скриптоты можно просмотреть на лиспы и форты, минимальная стандартизация сделала так, что они есть везде, а отсутствие минимально самоподдерживаемой стандартизации сделало так, что обычно при написании проектов требуется обвязывать и укреплять.

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

Две с половиной — это не много.

anonymous
()

ISO/IEC/ITU/e.t.c. не нужны по определению. Стандарты должны быть свободными и доступными, а остальное ненужно, т.к. нарушает KISS.

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

Ну так расскажи им!

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

Самый большой бич 77 стандарта — IMPLICIT и COMMON.

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

ISO описывает фундаментальный минимум, а расширения это дело уже иное. Если бы и на фундаменте был бы зоопарк было бы гораздо хуже вот и всё.

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

Если бы и на фундаменте был бы зоопарк было бы гораздо хуже вот и всё.

А там и так зоопарк. Разночтения с undefined behaviour, паддингом и вот этим всем.

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

Наличие стандарта является преимуществом.

Citation needed же ну.

Вообще-то, все нормальные ответы в теме сводятся к тому, что стандарт является преимуществом.

Можно ссылки на ответы, которые ты считаешь нормальными?

Касательно растов. Если имеется 1 основная реализация, которая используется для большей части кода, то стандартом во многом де-факто является эта реализация. Однако, стандарт всё равно желателен, так как между версиями одного языка внутри одного reference implementation возникают неопределённости по поводу того, где баг, а где фича. Грубо говоря, какой-нибудь раст v1.1 и раст v1.2 могут по куче разных причин приводить к разному поведению и тогда надо договариваться что правильно, а что нет.

У Rust это есть в виде RFC, например. Но, в отличии от стандарта C++, для того, чтобы поправить RFC, не надо ждать 5 лет и собирать десяток комитетов.

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

У Rust это есть в виде RFC, например. Но, в отличии от стандарта C++, для того, чтобы поправить RFC, не надо ждать 5 лет и собирать десяток комитетов.

ты очевидно вообще не представляешь как работает комитет С++ и что такое стандарт и почему есть ifdef в С++ коде.

У тебя тоже будут ifdef если ты будешь пытаться писать не только для nightly rust, но и например для 1.29 и для stable.

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

Если ты нашёл какую-то неточность в стандарте и разные компиляторы реализуют это по своему, то пишешь issue в Library Working Group или в Core Language Working Group.

https://cplusplus.github.io/LWG/lwg-active.html

http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html

И нет, никаких 3 лет ждать не нужно, проблемы рассматриваются на следующем собрании комитета, и если проблема действительно есть пишутся Defect Report к текущему стандарту. И авторы компиляторов правят эти проблемы.

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

«Наиболее адекватный» список где нет языка, новые версии компиляторов которого на рынке представлены компаниями Intel, NVidia, IBM? Как-то это мало вяжется со словом сдох.

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

Citation needed же ну.

Преимущество наличия стандарта - это не теорема, и не факт типа что Россия - родина слонов, который можно подтвердить ссылкой на википедию. Речь идёт про опыт. Я, как и несколько человек, (в моём случае - D в 2011-2014 годах) объясняем, почему наличие стандарта является преимуществом с конкретными примерами и аргументацией, а не как большинство школьников типа «Оно так и точка». Вообще, СПО - это не democracy, а meritocracy.

У Rust это есть в виде RFC, например. Но, в отличии от стандарта C++, для того, чтобы поправить RFC, не надо ждать 5 лет и собирать десяток комитетов.

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

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

mxfm ★★
()

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

Если есть стандарт, то должны быть и тесты, которые должен проходить компилятор. Для C++ такие тесты тоже пишут. Только скорее всего, у все разработчиков компиляторов С++ они свои.

Там, где одна реализация, то зачем там стандарт? В чем смысл, если стандарт начнет расходиться с фактически единственной реализацией? Писать программы по стандарту, которые нигде нельзя запустить?)

Да, про Фортран ты забыл. У нас тут на ЛОРе есть, как минимум, один пользователь Фортрана. Нехорошо получилось.

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

На те же что и СЖВ консилиумы,коллегии,подразделения и прочие громкие слова при любой отрасли вокруг которой крутятся тонны бабала. В маленьких скромных делах не водятся естественно. Сама по себе комиссия хрен с ней её суть давно перекочевала на плечи конечных разрабов которые сами друг с другом договариваются о ограничениях и правилах самоорганизуясь, а эти коллегии просто устаканившиеся правила на перо берут и типа это они придумали.

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

Поэтому это рак текущего общества и он должен быть истреблён, как и СЖВ. В противном случае он сожрёт это самое общество.

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.