|
|
  |
Си |
|
|
|
Mar 26 2013, 08:36
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
честно говоря, я уже начал уставать... Цитата(XVR @ Mar 26 2013, 11:51)  А вот это странно. Если меняется только вызов, то разницы в размере вообще быть не должно, т.к. соглашения о вызовах функций не зависит от их содержимого. ... А вот это непонятно, почему тогда конечный результат получился прямо противоположный?
У функций одинаковый прототип, почему тогда отличаются 'подготовительные действия по вызову функций'? отвечу вашими же словами: Цитата один gcc знает Цитата(XVR @ Mar 26 2013, 11:51)  Это огромный минус - вы придумали себе идеальную модель мира и пытаетесь запихнуть в нее идеологию языка С, а она туда не лезет. Вместо того, что бы прочувствовать эту идеологию, вы заявляете, что все, что противоречит вашей модели мира является неправильным и противоречащим здравому смыслу, и объявляете это вне закона. снова вынужден повторить: не подгоняю я, не объявляю вне закона. это вы подгоняете реальность под рамки Си, а я как раз предлагаю этого не делать, оставив все в более простом и естественном виде. тем более что даже вы доказали, что по сути разницы в размере кода нет: Цитата(XVR @ Mar 26 2013, 11:51)  Помещение всех функций в один файл и добавление static к var1/var2 дала 8876 для обоих вариантов. то есть, как я и догадывался, компилятор оказался умнее Цитата(XVR @ Mar 26 2013, 11:51)  Хотя я кажется догадываюсь откуда он взялся. Вы тут упоминали о том, что писали на Pascal'е. Ваша реакция типична для программиста недавно перешедшего с Pascal на С. да, только не недавно, а довольно давно. и естественно, что я могу видеть то, чего не видят те, кто кроме Си ничего знать не желает - проблемные места. раз уж мы снова прибегаем к красочным примерам, я приведу тоже пример. вот абориген австралийский - он ничуть не смущаясь выковыривает из муравейника личинок и ест их. а цивилизованный человек как минимум перед этим принимает пол-литра виски  но скорее он ест хорошо прожаренный бифштекс - а ведь для приготовления бифштекса надо гораздо больше усилий и стредств... при этом их цель - насытиться - одинакова, обоим их поведение кажется наиболее естественным. НО!!! обратите внимание: абориген гораздо ближе к природе - он не делает ничего, что не укладывается в примитивные рамки выживания. Си, как тут меня пытались просветить, язык, приближенный к архитектуре, и позволяет программисту вести себя, как абориген в сельве: не делть ничего, кроме самого примитивно-необходимого. о каких приличиях тут можно говорить? чтобы не сдохнуть, надо есть, а что именно и в каком виде, тем более, как это выглядит со стороны - это вторично. я предлагаю быть цивилизованным, и совершать чуть больше действий, чтобы получить тот же конечный результат, что и дикарь. и все это только для того, чтобы чувствовать себя цивилизованным человеком. я предлагаю усложнять внешне (хотя и не совсем это верно - усложнять, но пусть так), сохраняя суть и результат, а не следовать неписанным правилам. ведь нигде в стандарте Си не сказано, что надо писать именно !a ^ !b вместо чего-тоиного. это кое-кто считает это лучшим, без каких-то существенных доказательств. P.S. прошу всех оппонентов: не делайте равенства между ИНЫМ МНЕНИЕМ и ГЛУПОСТЬЮ или НЕЗНАНИЕМ. это несколько утомляет при чтении. P.P.S. блин, я ж совсем забыл, что по стандарту Си нет многих иных мнений: отрицание одного мнения соответствует наличию только одного альтернативного варианта - негативного, ложного мнения...
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 26 2013, 08:40
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(igorle @ Mar 26 2013, 12:28)  Видите, какие умные компиляторы стали? А Вы код компилятора видели? Я пытался понять один кусочек кода GCC (подозревал, что там есть баг) и не понял ничего  Уровень абстракции в том месте куда я сунулся был не сравнить с тем, что здесь подавалось как высший пилотаж. Досадно что ничего не поняли. Не с того места начали изучение... Цитата Так вот, вместо того, чтобы тратить свои душевные силы на нас, недалеких, идите на форумы, где тусуются авторы GCC и откройте глаза им на то, как правильно писать код. Перефразирую: Не говорите мне куда идти и я не скажу кто вы. А здесь и "тусуются", по крайней мере несколько человек точно. И я, если честно, не понял вашего сарказма совсем... Вам что-то не понравилось в моём высказывании? Или не в силах принять такой укол судьбы, что кто-то дал более развёрнутый ответ чем ваш? Вы становитесь похожи на ARV в своём "стремлении" познать новое...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Mar 26 2013, 09:30
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(igorle @ Mar 26 2013, 12:28)  Будьте последовательны. Стандарт предусматривает запись типа x = x + 10 С математической точки зрения это полная ерунда, так как не может быть верно ни при каких значениях x Добейтесь признания сообщества, что так писать нельзя. вы опять пытаетесь мне приписать попытку свергнуть стандарт. что МОЖНО и НЕЛЬЗЯ по стандарту - я знаю, принимаю, и не протестую. заметьте, я лишь говорю, что НЕ ВСЕ и НЕ ВСЕГДА из того, что МОЖНО, СЛЕДУЕТ применять. причем кое-что не следует (в моем понимании) применять именно с целью приближения к тому самому идеалу - совпадению с логикой. вы же считаете, что если я говорю "не делай так", то это равносильно "это неверно". я такое не утверждаю. смотрите, вас уже подводит привычка отказываться от математической логики в пользу Сишного стандарта! дано: Вася говорит, что дважды два - пять. я говорю: Вася не прав. вы говорите: Вася глуп (вариант: не умеет считать) если сказанное записать на языке Си - получится как раз то, что говорите вы, но на самом-то деле верно то, что говорю я! поясню. прав - это истина, не прав - это отрицание правоты. умен - это истина, не умен - это отрицание ума. любое отрицание истины в Си - это однозначно ложь. если два выражения поотдельности равны третьему, то они равны между собой. значит, не прав - это не умен. такая вот загогулина.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 26 2013, 09:58
|

Гуру
     
Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287

|
Цитата(demiurg_spb @ Mar 26 2013, 07:48)  Абсолютно честно никакого абсурда. Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Повторюсь - никакого абсурда. Если честно, то тогда это недоразумение. Мы говорили о записи, в которой используется остаток от деления. Именно эту запись я предлагал Вам произнести. Цитата(igorle @ Mar 26 2013, 10:28)  Вот смотрите, Herz пришел в эту ветку недавно. И хотя он позиционирует себя как электронщик, а не как программист, он прошел путь от возмущения до восхищения двумя восклицательными знаками всего за один день. 25-го он назвал это абсурдом, 26-го сказал, что примет на вооружение. Это обычный путь думающих и развивающихся людей. Э... Вы тоже невнимательны, к сожалению. Вернитесь чуть назад и проверьте, что именно я назвал абсурдом. Запись с двойным восклицательным знаком мне действительно понравилась. И на вооружение, при случае, возьму, хоть пока ума не приложу, где бы мне это могло пригодиться. Потому и сделал соответствующую оговорку, кстати. Но за думающего человека спасибо.
|
|
|
|
|
Mar 26 2013, 10:07
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Цитата(demiurg_spb @ Mar 26 2013, 12:40)  Досадно что ничего не поняли. Не с того места начали изучение...
Перефразирую: Не говорите мне куда идти и я не скажу кто вы.
А здесь и "тусуются", по крайней мере несколько человек точно. И я, если честно, не понял вашего сарказма совсем... Вам что-то не понравилось в моём высказывании? Или не в силах принять такой укол судьбы, что кто-то дал более развёрнутый ответ чем ваш? Вы становитесь похожи на ARV в своём "стремлении" познать новое... Что не понял - действительно достадно. Если бы рядом был человек, который бы помог сделать первые шаги - было бы хорошо. А одному с наскока не получилсоь. По поводу всего остального - это я не Вам писал. Это было обращение к AVRу. Я сослался на Ваши слова, чтобы показать AVRу что GCC - очень хороший продукт, но при этом написан на высоком уровне абстракции. Ваше высказывание мне понравилось. Мне комфортнее читать a&0x7, вы напомнили, что компилятор выдаст для a%8 тот же результат. Я Вас понял и принял замечание. Более того, а знаю, что Вы, как раз, общаетесь с разработчиками GCC и пытаетесь улучшить компилятор. Так что прошу прощения за то, что неклюже вставил цитату на Вас в своем диалоге с ARV. Насколько я помню, у нас с Вами разногласий до сих пор не возникало. Пора, пора закрывать эту ветку....
|
|
|
|
|
Mar 26 2013, 10:09
|

Гуру
     
Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287

|
Цитата(Буратино @ Mar 26 2013, 11:38)  Я прошу прощения, но эту ветку могут закрыть (особенно если учесть с каким трепетом ко мне относится некоторая часть мод. корпуса форума), а мне это совершенно не нравится. Обращаю ваше внимание на то, что по большей части обсуждается отношение участников к языку программирования Си, а собственно сам язык, его сила и красота остались в стороне. Отвечу, как часть мод. корпуса. Вы совершенно справедливо беспокоитесь о судьбе ветки. В этом свете особо хотел бы попросить уважаемого demiurg_spb сдерживать эмоции и не переходить на личности. А вот по поводу некоего особо трепетного отношения именно к Вам "некоторой части мод. корпуса" - уверен, Вы заблуждаетесь. И мне очень жаль, что Вами были сделаны столь "персональные" выводы. Был бы рад, если бы Вы смогли спокойно пересмотреть суть претензий к Вам.
|
|
|
|
|
Mar 26 2013, 11:17
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Herz @ Mar 26 2013, 13:58)  Если честно, то тогда это недоразумение. Мы говорили о записи, в которой используется остаток от деления. Именно эту запись я предлагал Вам произнести. Хорошо. Мы поговорим о Код с = (!a + !b) % 2; Тут я виду солжение двух булов по модулю 2. ИМХО, написано самым выразительным образом из всех возможных.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Mar 26 2013, 13:19
|

Гуру
     
Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287

|
Цитата(demiurg_spb @ Mar 26 2013, 13:17)  Хорошо. Мы поговорим о ..... Нет, видимо, не получится. Мы с Вами на слишком разных языках говорим, как оказывается. Цитата Тут я виду солжение двух булов по модулю 2. ИМХО, написано самым выразительным образом из всех возможных. Ну, если это - самый выразительный...  А я тут вижу присваивание переменной с остатка от деления (что, кстати, не является логической операцией!) на два суммы двух аргументов, в данном случае приведенных к булам. О том, что результат является логическим и что он соответствует "исключающему ИЛИ", можно догадаться, лишь расшифровав эту запись и поняв, что же происходит в ходе выполнения последовательности, описанной столь причудливо. Не пойму, для чего Вы привели ссылку, ибо там как раз говорится противоположное тому, что Вы доказываете: Цитата В естественном языке операция «сложение по модулю» эквивалентна двум выражениям:
«результат истинен (равен 1), если A не равно B (A≠B)»; «если A не равно B (A≠B), то истина (1)».
Часто указывают на сходство между сложением по модулю 2 и конструкцией «либо … либо …» в естественном языке. Как по-Вашему, можно таким, естественным языком прочесть обсуждаемую запись? Впрочем, вопрос риторический. Я, кажется, Вашу позицию хорошо понял. Тоже не стану больше спорить.
|
|
|
|
|
Mar 26 2013, 14:22
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Herz @ Mar 26 2013, 17:19)  Просто когда знешь термин сложение по модулю два то это читается очень просто (видишь сложение и видишь взятие модуля 2). Если этого не знаешь никто не мешает написать так как предлагаете вы. Код с = (!a != !b); Никакой принципиальной разницы тут нет. Лично я, да и многие другие программисты, стараются минимизировать количество условных операций в своих программах. Т.к. линейный код (без ветвлений) зачастую выполняется быстрее и ложиться оптимальнее на большинство платформ (особенно старых). Поэтому я на автомате уже пишу конструкции подобные Код с = !a ^ !b; Также, как следствие применения максимально линейного кода уменьшается джиттер и программа становится более детерминированная, что иногда бывает критически важным. Поймите, есть разные подходы к программированию и разные задачи. У меня за более чем 15-ти летний стаж фактически ежедневного программирования было много различных задач: от промышленных приборов и автоматики, до комплексов искробезопасных ПЛК для горнорудной промышленности и приборов для военных применений на флоте и в авиации. Как это не пафосно звучит, но когда от твоего софта зависят жизни людей привычки писать надёжный и детерминированный код вырабатываются сами-собой.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Mar 27 2013, 04:45
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Напишу еще немного.  Во первых, я хочу сказать, что несмотря на бурную дискуссию с ARV я согласен с почти всеми его высказываниями. Различие я вижу лишь в том, что считать 'естественным, логичным и интуитивно понятным', а что таковым не является. Disclamer: Все нижеслдующее никоим образом не связанно ни с какими участниками этой дискуссииЧто же такое 'естественое и огичное'? Давайте споросим у бубульки возле подъезда - нужно ли разделять логические и арифметические операции? Как думаете, что она вам ответит?  Ладно, согласен - не та целевая аудитория. Давайте спросим у программиста, но тут есть загвоздка - у какого именно? Не бывает 'сферического программиста в ваккуме'. Каждый язык програмирования построен вокруг некоторого набора принципов и правил, и наборы эти разные. И не надо аппелировать к математической логике - она напрямую не применима к языкам програмирования, т.к. они строились не для доказательства математических теорем, а для написания программ. Как вы думаете, эти коды согласуются с 'здравым смыслом и математической логикой'? Код fibs = 0 : 1 : zipWith (+) fibs (tail fibs) Код select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollection Код gcd2(A, 0, A). gcd2(A, B, G) :- A>0, B>0, N is mod(A, B), gcd2(B, N, G). gcdn(A, [], A). gcdn(A, [B|Bs], G) :- gcd2(A, B, N), gcdn(N, Bs, G). gcdn([A|As], G) :- gcdn(A, As, G). :- initialization(main). str2int([], []). str2int([S|St], [N|Nt]) :- number_atom(N, S), str2int(St, Nt). main :- argument_list(Args), str2int(Args, Numbers), gcdn(Numbers, G), write(G), nl. Код (~R∊R∘.×R)/R←1↓⍳R На возможный ответ 'что это за бред' сразу отвечу - вполне законные куски программ на разных языках, а именно - Haskel, Smalltalk, Prolog, APL Давайте возмем более близкие языки - С и Pascal. Несмотря на их внешнюю схожесть (по сравнению с вышеизложенными кусками кода), они очень разные. И как это пародоксально не звучит, С более простой язык. В С уменьшено количество сущностей языка и практически убраны какие либо ограничения на использование конкретных конструкций в конкретных местах. Все описывается именно на уровне сущностей. Например - в Pascal'е операция сравнения, присваивание и арифметика это разные сущности и используются они в разных, строго определенных контекстах. В С это все выражения, и использоваться они могут везде, где ожидается выражение. В Pascal'е все очень строго оговорено и определено. Шаг влево, шаг вправо - расстрел  Поэтому запись на С Код int a=b==c; вызывает у Pascal'иста взрыв мозга - как так, тут же сравнение, значит должен быть if! И не надо аппелировать к логике и здравому смыслу - у програмистов на С и Pascal'е они будут разными. Более того, они и должны быть разными - языки же разные! Так же становится понятными жалобы со стороны Pascal'истов на сложность С. На самом деле они жалуются не на сложность, а на то, что способы применения вроде бы понятных и тривиальных конструкций порой оказываются совершенно другими. Так же понятно, почему с Pascal'я неохотно переходят на С - не хочется вылезать из песочницы, там все так просто и безопасно  И понятно, почему все же перейдя на С обратно уже не возвращаются - мир интереснее, чем песочница. На самом деле есть гораздо более опасная связка - переход с С на С++. Несмотря на их внешнюю практически идентичность, эти языки отличаются горадо больше, чем С и Pascal. А если неофиту еще скажут, что в настоящей ООП программе все должно быть в виде классов, то получаются жуткие классовые монстры, такие, что не в сказке сказать не вслух произнести
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|