LINUX.ORG.RU

В Си предложили добавить switch-case для строк

 , ,


0

3

Привет, чат!

Спустя много лет, в язык Си наконец предложено добавить возможность использовать выражение switch-case для строк. Например, можно будет писать вот такое:

const char *s = get_some_string();

switch(s) {
case "this":
  handle_this();
  break;
case "that":
  handle_that();
  break;
default:
  handle_other();
  break;
}

Таким образом, в Си будет чуть меньше способов отстрелить себе ноги.

Ссылка на предложение: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3895.pdf



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

Просто мне интересно - а где и как могут пригодиться такие знания. Для какой задачи?

Если прям комплексно, то будет полезно при создании рантайма языка программирования :)

А если по мелочам, то такие детали просто помогают понимать в каком окружении мы живём. Система становится прозрачнее. Иногда это может пригодиться. Скажем, можно ли гарантировать непрерывное вычисление числа Пи в произвольной горутине на одном треде (спойлер: нельзя). Знания о сборке мусора (green tea) помогут лучше интерпретировать метрики пропускной способности и задержки (традиционный GC совершенно по-другому на них влияет).

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

Это не безграмотность - это сопосбность поиска паттернов. Проведения аналогий. Обобщения явлений.

Короче - это то самое уникальное свойство разума почему он вообще разум.

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

Встречается повсеместно.

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

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

Разве что только strcat. Всё остальное - один хрен должно строку по байтику перебрать чтобы что-то с ними сделать - сравнить там, скопировать или изменить.

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

В итоге в Plan 9 используются length-based строки.

И где этот Plan 9? :)

В общем-то самые близкие к «правильным» строки в Паскале. Там вроде даже для codepage поле есть и они монолитные в том смысле, что это линейный кусок памяти, где сначала несколько байт длины, пара байт кодировки, несколько байт счётчика ссылок, может ещё что-то, потом собственно текст, и, внезапно, завершающий нуль. :) И например строковая константа 'Hello world!' в паскале - это тоже такая строка, с длиной, кодировкой и пр.

Строки где в первых байтах указана длина, а потом идёт текст много где используются до сих пор, и они старше чем null-terminated.

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

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

Логика появляется после аксиом/догм стандарта. Допустим, в IEEE754 NaN != Nan и NaN != Число. А PostgresSQL NaN == NaN и NaN > Число. И всё логично.

Если в стандарте Си напишут, что NULL-указатель — это строка, не совпадающая с никакой строкой, то будет логично switch case default. А если там напишут, что NULL — строка, совпадающая с любой строкой?

Непонятно, почему вы игнорите что я писал про embedded, видимо не понимаете как по факту вывернули NULL-указатель, -fno-delete-null-pointer-checks...

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

Как у такой строки взять подстроку, но так чтобы не копировать. Допустим строка 10 гб а подстрока 4 гб и копировать совсем не хочется.

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

А если там напишут, что NULL — строка, совпадающая с любой строкой?

То следует выбрать первую ветку case. Очевидно же.

Непонятно, почему вы игнорите что я писал про embedded,

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

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

Сишка опасна для мозга адептов. Люди путаются в вопросе «Null и «мама» это одно и то же или разное?». Столяров был прав во всём. :-(

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

А нахрена им конкретно внутренняя реализация планировщика?

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

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

Во-вторых, так делают в фейсбуке. Не хотите же вы сказать, что ВК чем-то хуже Фейсбука?

нарушние правил форума, ведущее к -20 скора и временному бану

В-третьих, никто не знает как правильно нанимать и собеседовать. Этому нигде не учат.

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

А когда начинают спрашивать лютую херню, меня всегда это удивляло. «Почему канализационные люки круглые?»

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

В-третьих, никто не знает как правильно нанимать и собеседовать. Этому нигде не учат. Ваш собеседник собеседует так, как собеседовали его самого.

Это грустно. Значит, как минимум, что в конторе мало кто задаётся вопросом «а не полную х%;№ю ли мы тут делаем».

yorshka
() автор топика

А смысл? И от целочисленного switch толку мало - оптимизация с прыжком по таблице адресов возможна только на больших непрерывных массивах значений case.

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

Во-первых, в энтерпрайзе это не так. Т.е. если вы к нам со стороны придёте, то заведомо понятно, что нашими внутренними инструментами вы не владеете. Значит нужно как-то понять сможете ли вы быстро разобраться в новой области. А как? Я не знаю.

Не думаю, что такая уж сложность - просто определить компетентность в определенных сферах.

Любая работа легка, когда её делает кто-нибудь другой. Вот, дорастёте до позиции, когда вас будут привлекать оценивать кандидатов, тогда ваше мнение может перемениться.

P.S. Но если вдруг вы и есть тот самый, избранный, обещанный легендами мессия которая выведет индустрию из тьмы круглолюкового рабства в обетованное царство осмысленных интервью — я ж только рад буду.

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

«а не полную х%;№ю ли мы тут делаем»

Мы и так знаем ответ на этот вопрос. Но озвучить его я не могу. Пусть это останется нашим маленьким секретом.

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

Опция комплиятора показывает, что фактически программе не запрещено работать с NULL указателем. Не запрещено на уровне комплиятора, на уровне стандарта. И этот switch case default ломается в таких программах, которые по NULL что-то хранят.

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

И этот switch case default ломается в таких программах, которые по NULL что-то хранят.

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

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

Люди путаются в вопросе «Null и «мама» это одно и то же или разное?»

Вам ведь уже написали, что NULL — указатель, а «мама» строка. И в общем случае по указателю NULL может лежать строка «мама». Не запрещено на уровне стандарта.

NULL не является значением «мама».

Кажись, я понял, вы упорно пытаетесть доказать, что 0x000000 != «мама», дак и не NULL-указатель не равен, допустим 0x123456 != «мама». Походу, вам уже поздно преживать за своё душевное здоровье. Не сравнивают указатель и строку, сравнивают строки, на которые указывают указатели.

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

Давайте определимся с более простым вопросом: «NULL и «мама» это одно и то же или разное?». А потом уже пойдём разбираться с продвинутыми темами.

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

Если у тебя строка 10Гб и подстрока 4Гб значит ты явно делаешь что-то совсем не так.

Да нет, в вебговняшечке сейчас JSON на пару сотен метров – вполне стандартная ситуация. Кстати, это одна из причин, почему вебговняшечка так много жрёт: там каждый токен из входного JSON вычленяется в отдельную строку вместо того, чтобы хранить указатель и длину.

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

И в общем случае по указателю NULL может лежать строка «мама». Не запрещено на уровне стандарта.

Запрещено. Это потребует разыменования NULL.

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

Ещё раз, NULL — это указатель и «мама» — строка. Приведите пример, что указатель == «мама». Чтобы у вас printf(%p) для этого указателя вывел «мама».

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

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

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

Вопрос подразумевал простой ответ. Или «да, это одно и то же», или «нет, это разное». Но вы, отчего-то не в состоянии его предоставить. Печально.

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

Си не запрещает разыменование NULL, это на уровне ОС придумали. Не знаю, перешло ли ядро на C11, грозились с версии 5.18, но оно всё собрано с опцией -fno-delete-null-pointer-checks. Это опция как раз про это.

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

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

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

Т.е. если вы к нам со стороны придёте, то заведомо понятно, что нашими внутренними инструментами вы не владеете.

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

тот самый, избранный, обещанный легендами мессия которая выведет индустрию

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

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

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

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

Си не запрещает разыменование NULL

Дяденька, а вы точно программист?

The unary * operator denotes indirection. If the operand points to a function, the result is a function designator; if it points to an object, the result is an lvalue designating the object. If the operand has type «pointer to type», the result has type «type». If an invalid value has been assigned to the pointer, the behavior of the unary * operator is undefined.

Among the invalid values for dereferencing a pointer by the unary * operator are >>>>>a null pointer<<<<<, an address inappropriately aligned for the type of object pointed to, and the address of an object after the end of its lifetime.

Стандарт ISO C24. Страница 82.

https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf

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

Вы уже перестали пить коньяк по утрам?

Не дождётесь!

Я вам и даю простой ответ

Вы даёте пространные рассуждения вместо ответа. Даже не знаю, что бы я услышал в ответ на «сколько будет два плюс два». Лекцию по теории категорий или ограничитесь аксиоматикой Пеано?

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

Когда задумывали NULL, считали, что это будет такой указатель, который никогда в программе не будет указывать на хранимые данные или функцию. То есть можно в адресном пространстве заранее найти/определить никогда не используемый адрес. И какие-то компиляторы делали 0xFFFF, 0x800000, 0xdeadbeef (если верить что пришут про манфремы IBM, я там не работал). А потом забили и сделали, что NULL просто 0x000000 и всё. И, фактически, NULL стал просто значением, которое не может вернуть malloc() при удачном выполнении. Но данные по 0x000000 могут лежать, обычно в embedded, но и в Intel 8086 программа можеть лезть к вектору прерываний, и ядро линукс работает с адресом 0x000000.

А далее, так как UB, то можно сделать оптимизацию — если программа удачно разыменовала NULL-указатель, а потом делает проверку этого укзаателя, что он NULL, то эту проверку можно выкинуть. Опция -fno-delete-null-pointer-checks именно про это, не про встраиваемые компилятором проверки на NULL, а про сохранение проверок от программиста. Тупо скопипащу пример из инета:

static unsigned int tun_chr_poll(struct file *file, poll_table * wait)
    {
             struct tun_file *tfile = file->private_data;
             struct tun_struct *tun = __tun_get(tfile);
             struct sock *sk = tun->sk;
             unsigned int mask = 0;
             if (!tun)
                 return POLLERR;
Так как в коде использован «tun->sk», то без этой опции, компилятор при оптимизации выкинет «if (!tun)» При этом здесь проверка не на NULL, а на 0x000000, но для компилятора это одно и тоже.

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

Опыт овладевания разными инструментами возникает во время обучения программированию как раз

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

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

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

Но проверка профессиональных качество это самое простое, что может быть.

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

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

the behavior of the unary * operator is undefined.

UB — не запрет. Когда до вас это дойдёт. Я вам привёл опцию компилятора, гуглите, смотрите код, когда эту опцию применяют.

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

Да нет, в вебговняшечке

Я же говорю - делаешь что-то совсем не так.

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

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

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

UB — не запрет. Когда до вас это дойдёт.

Это он самый и есть. С позиции стандарта Си, валидная программа на Си не содержит UB. Если в твоём коде оно есть, твой код некорректен.

Я вам привёл опцию компилятора, гуглите, смотрите код, когда эту опцию применяют.

Я видел и пользовался. Это не значит, что эта программа соответствует стандарту. Это не значит, что эта опция будет у всех компиляторов (скорее всего нет). В общем случае, это отличный способ выстрелить себе в ногу через какое-то время (вдруг компилятор придётся сменить) и задуматься о том, а нахрена нужен вообще Си с такими-то выкрутасами.

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

Я же говорю - делаешь что-то совсем не так.

К моему счастью, я этого не делаю.

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

Есть. Не надо парсить данные до того, как они были отвалидированы. Другими словами, использовать для JSON и подобных форматов однопроходные парсеры – достаточно паршивая идея.

При этом, для хранения «указателей и длин» запросто может понадобится памяти больше чем занимал исходный JSON.

Вряд ли. Особенно если вместо указателей использовать смещение в оригинальном массиве. На 64-битных платформах экономия будет в два раза.

С другой стороны, если тебе пришлют текст в UTF-16 или UTF-32, то ASCIIZ сразу нагибается раком. Ну или если там ‘\0’ просто как часть строки.

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

Не надо парсить данные до того, как они были отвалидированы.

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

Особенно если вместо указателей использовать смещение в оригинальном массиве.

Всё это уже проходили. А потом приходится кучу всего переписывать, потому что 640к не хватило всем.

С другой стороны, если тебе пришлют текст в UTF-16 или UTF-32, то ASCIIZ сразу нагибается раком. Ну или если там ‘\0’ просто как часть строки.

Вот в том числе поэтому информация о кодировке является неотъемлемым параметром «правильной» строки.

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

Нет, это убогое «изобретение» рекламщиков-маркетологов.

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

Не надо писать и использовать софт который может выдавать невалидный результат в любом виде, даже в JSON.

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

Чо? Чувак, JSON в 98% случаев приходит извне от другой софтины. Ты не валидируешь данные, полученные снаружи, перед парсингом?

Всё это уже проходили. А потом приходится кучу всего переписывать, потому что 640к не хватило всем.

Да не, не особо. Succinct data structures используются весьма широко как раз из-за экономии памяти. У меня вполне была такая херня, когда мы заменили классическое префиксное дерево на указателях на вот такую хероту со смещениями и битовыми масками, и потребление памяти упало в 15 раз.

Но сишникам насрать на оптимизацию, как я заметил. Поэтому лялекс такой тормозной.

Вот в том числе поэтому информация о кодировке является неотъемлемым параметром «правильной» строки.

Информация о кодировке у тебя будет после парсинга. До парсинга её не будет.

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

UB — не запрет, это у вас самозапрет.

Я видел и пользовался.

И зачем тогда запрашивали примеры?

эта программа

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

вдруг компилятор придётся сменить

Только helloworld'ы гарантированно безболезнено переносят смену компилятора. Даже с фортрановскими компиляторами (старными, Фортран-77) были проблемы при переходе, хотя там вобще нет указателей и т.д. Каждый компилятор как попало трактует стандарт. Чем больше букв напишут в стандарт, тем он станет сложнее для понимания, но возможность разных трактовок не исчезнет.

а нахрена нужен вообще Си

Вас насильно заставили писать на Си? И продолжают заставлять? Или вы его покинули, теперь вам холодно и одиноко и вы зовёте других, доказывая что Си плохой? :)

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

Речь про Си а не про ISO Cxx.

Мы это с тобой уже проходили много раз. Я знаю, что у каждого сишника есть своя версия языка Си в голове, и у всех сишников они различаются иногда весьма радикально. Поэтому я отказываюсь играть в эту тупую игру. Когда мы говорим про Си, мы говорим про стандарт ISO C и его реализацию в существующих компиляторах, а не про некую абстрактную хероту.

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

Если у тебя строка 10Гб и подстрока 4Гб значит ты явно делаешь что-то совсем не так.

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

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

Даже с фортрановскими компиляторами (старными, Фортран-77) были проблемы при переходе, хотя там вобще нет указателей

Типичная ошибка человека, знающего общие принципы Фортрана, но не писавшего на нём серьёзные коды. В Фортране есть все основные концепции указателей в виде вызова функций, COMMON блока, EQUIVALENCE, но нет явных адресов и адресной арифметики, появление которых в Си собственно и сделало Си Сями.

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

Чо? Чувак, JSON в 98% случаев приходит извне от другой софтины. Ты не валидируешь данные, полученные снаружи, перед парсингом?

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

А за «error at line 1:4328793» после отдельного валидатора надо бить канделябром по морде, долго и качественно, пока до недоумка, который такие сообщения об ошибках выводит не дойдёт что так делать не надо.

Но сишникам насрать на оптимизацию, как я заметил. Поэтому лялекс такой тормозной.

У меня вот ни разу не тормозной. На порядки быстрее какой-нибудь сраной венды и тем более гейос. Тормозной он только у рукожопов.

Информация о кодировке у тебя будет после парсинга. До парсинга её не будет.

Вот только что-то парсинг не сильно помогает против кракозябр в mp3 тегах.

Мда. Сделать всё неправильно, а потом придумывать костыли - это такая мода у антисишников, или проявления альтернативного интеллекта?

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

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

Возьмите любой дистрибутив Линукс, сделайте ls -lR /lib /usr/lib и получите достаточное представление о том, что такое результат работы экосистемы Си.

Я не могу представить такого же простого теста демонстрации результатов работы экосистемы Forth.

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

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

Смешно, конечно, вместо того, чтобы разбираться как именно кодонами программируются те или иные белки или прочая хрень, что за что отвечает и как это всё связано т.е. разбираться в структуре этого языка программирования, чтобы понять структуру кода и из каких структурных компонентов он состоит, генетики зачем-то упорно продолжают тыкаться вслепую рассматривая геном как строку. :) Это абсолютно то же самое, что пытаться разобраться и поменять что-то в ядре линукса рассматривая его код как одну неимоверно длинную строку. Гениально, чо. Прямая дорога к какому-нибудь глобальному звездецу с зомбями и мутантами.

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

ls -lR /lib /usr/lib

Вижу свалку. Кучи разнозненных проектов без структуры, системы. Засрана большая часть рута этим, непонятно нахерена и чем.

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

Я понимаю, что раньше си был монополистом и все было написано по большей части на нем. И многие стандарты перешли от него. Но это именно была заря технологии и сделано по большей части все было через жопу. Это не значит, что это не нужно улучшать.

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

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

Вас вобще не в ту степь понесло. Вы сами придумали, что проблемы были у меня, с моим кодом, и что я ничего не писал на фортране. Когда я писал, что нет указателей, я подчёркивал, что это не раздутый фортран-90+, а достаточно простой фортран-77, и то там фигня была при смене компилятора (БЭСМ-6 -> ЕС -> микрософт 8086 -> NDP 80386 ...).

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

Никуда меня не несло. Никаких проблем с вашим кодом я не видел и не комментировал. Я комментировал ваше утверждение «в Фортране нет указателей». Я сказал, что в Фортране всё, что именовано есть указатель. Просто явно это так не называется.

VIT ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.