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)
Ответ на: комментарий от fsb4000

И ты в каждом проекте, где тебе это может понадобиться, пишешь с нуля генераторы? Или ты просто выучил наизусть, чтобы хвастаться перед посонами, а в реальной жизни это нигде не используешь, потому что в C чтобы сделать это thread-safe нужно жопу порвать? Покажи свои генераторы, мы поржём.

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

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

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

Зато основной и единственный компилятор эту новую версию сразу реализует, а не догоняет несколько лет.

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

Чтобы пропихнуть язык программирования в прод. Как это сделал Страуструп с препроцессором GNU cpp.

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

основной и единственный компилятор

Ну ты понял. Кроме того, стандарт языка и компилер - это вовсе не то, что должно обновляться раз в шесть недель. Вообще не то.

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

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

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

Потому что это тот софт, с помощью которого ты делаешь другой софт. И не что-то на отмахнись, как в веб-деве иногда, а такие вещи, которые могут быть очень ответственными по характеру своей работы. Тут как раз нужна стабильность и предсказуемость инструмента на уровне Ады, Фортрана и т.д.

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

на уровне Ады, Фортрана

И где ваши Ады и Фортраны? Правильно - в заду.

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

Тут как раз нужна стабильность и предсказуемость инструмента на уровне Ады

Посмеялся! Где стабильность и предсказуемость поставщиков инструмента?! Ась?

Глупость же пишите.

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

Зачем мне что-то показывать если у «вас» цель поржать?

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

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

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

Постойте-постойте…

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

Ржунимагу. Приходите через 30 лет.

На промежутке в 30 лет даже C сам с собой не совместим, если это код сложнее хелловорлда. Не так давно какие-то чуваки обновляли ведро 0.0.1, чтобы оно на последних версиях GCC собиралось.

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

Поскольку тебе это вообще не нужно и ты лишь хочешь поржать над убогой сишкой, то покажу лишь использование.

begin_context(simple_generator)
int val;
end_context(simple_generator)

static int next(simple_generator* gen)
{
    begin(gen);
    while(gen->val > 0) 
    {
        yield(gen, gen->val);
        --gen->val;
    }
    end(gen);
    return 0;
}

int main(void)
{
    int i;
    simple_generator gen_iter = {5};
    while((void)(i = next(&gen_iter)), 
        errno != STOP_ITERATION)
    {
        printf("%d\n", i);
    }
    errno = 0;
}

begin_context создаёт структуру, которая используется как context для генератора, никаких проблем с многопоточностью нет, так как текущее состояние хранится в структуре.

yield может быть сколько угодно между begin и end.

макрос end также устанавливает errno в STOP_ITERATION.

Работает на С89: https://imgur.com/a/tf4tnsG

Вот и всё. Обычная простая вещь из 5 макросов, которая может быть удобной.

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

Если хочешь стабильности и уверенности в завтрашнем дне, то выбор невелик: C, C++ и Fortran. Кто с этим будет спорить?)

Но если честно, то есть языки и по-красивее, и по-интереснее, но там и риск велик.

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

Осталось только реализацию этих макросов увидеть.

Ладно, ок. Ничего там нет: https://gcc.godbolt.org/z/zcF_qB

Ты тогда хоть какие-то замечания сделай, а не только ржи, чтобы мне хоть какая-то польза была…

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

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

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

anonymous
()

По моему мнению стандартизация как «обязательное следование некоторой спецификации» - это плохо, спецификации в целом нужны, но многие языки успешно обходятся и без них.

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

мозг в целом нужен, но многие успешно обходятся и без него

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

Над формулировкой не думал, но что-то мне в нем не нравится

dave ★★★★★
()

В случае же с C и C++ наличие стандарта ISO никак не помогло никому.

Бред

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

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

Приветики, голый Кирк Джонсон - самый красивый гей на лоре ;)

Владимир

anonymous
()
23 апреля 2021 г.
Ответ на: комментарий от anonymous

Это проблема проектов закладывающихся на нестандартные расширения «компилятора», а не стандартизации.

Напомни пожалуйста, есть ли в C стандарт на выравнивание структур данных в памяти?

А это зачастую надо.

В С11 появился выровненное выделение памяти, а для глобальных структур по прежнему вроде как и нет стандарта

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

Чувак, предыдущий коммент был оставлен почти год назад.

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