1. Pascal / Говнокод #13162

    +99

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    Я в 2006 году учился работать на Дельфи.
    
    var
      Form1: TForm1; f:file of byte; rb,re:array[0..6,0..10] of byte;
            rb1,re1:array[1..6] of byte;h:shortint;go:boolean;
            tm:array[0..6,0..1,0..10] of record
                    h,m:byte;
                    end;
    ...
    
    procedure prnt1;
    var t:string;
    begin
    {Вывод времени уроков и перемен на форму. Начало 0,1. 11 уроков 2-23}
    str(rb1[h],t);
    form1.edit1.text:=t;
    str(re1[h],t);
    form1.edit2.text:=t;
    str(rb[h,0],t);
    form1.edit3.text:=t;
    str(re[h,0],t);
    form1.edit4.text:=t;
    str(rb[h,1],t);
    form1.edit5.text:=t;
    ...
    form1.edit21.text:=t;
    str(re[h,9],t);
    form1.edit22.text:=t;
    str(rb[h,10],t);
    form1.edit23.text:=t;
    end;
    
    ...
    procedure prnt2;
    var t1,t2,t3,t4:string;a1,a2,b1,b2,c,d:integer;
    begin
    {Вывод списка уроков из текстового файла на форму}
    val(form1.edit1.text,a1,c);
    val(form1.edit2.text,a2,c);
    rb1[h]:=a1;
    re1[h]:=a2;
    
    {1 урок}
    b1:=a1;
    b2:=a2;
    val(form1.edit3.text,d,c);
    rb[h,0]:=d;
    b2:=b2+d;
    if b2>=60 then
            begin
            b1:=b1+1;
            b2:=b2-60;
            end;
    str(a1,t1);
    str(a2,t2);
    if a2<10 then t2:='0'+t2;
    str(b1,t3);
    str(b2,t4);
    if b2<10 then t4:='0'+t4;
    tm[h,0,0].h:=a1;
    tm[h,0,0].m:=a2;
    tm[h,1,0].h:=b1;
    tm[h,1,0].m:=b2;
    form1.label15.Caption:=t1+':'+t2+' - '+t3+':'+t4;
    val(form1.edit4.text,d,c);
    re[h,0]:=d;
    b2:=b2+d;
    if b2>=60 then
            begin
            b1:=b1+1;
            b2:=b2-60;
            end;
    
    {2 урок}
    a1:=b1;
    a2:=b2;
    val(form1.edit5.text,d,c);
    rb[h,1]:=d;
    b2:=b2+d;
    if b2>=60 then
            begin
            b1:=b1+1;
            b2:=b2-60;
            end;
    str(a1,t1);
    str(a2,t2);
    и т.д. (так 11 уроков и перемен по 30 строк)
    
    {Сохранение в базу данных под названием zvonok.ini :-) }
    val(form1.edit1.text,rb1[h],d);
    val(form1.edit2.text,re1[h],d);
    val(form1.edit3.text,rb[h,0],d);
    val(form1.edit4.text,re[h,0],d);
    val(form1.edit5.text,rb[h,1],d);
    val(form1.edit6.text,re[h,1],d);
    val(form1.edit7.text,rb[h,2],d);
    val(form1.edit8.text,re[h,2],d);
    val(form1.edit9.text,rb[h,3],d);
    val(form1.edit10.text,re[h,3],d);
    и так до 11-го урока

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

    Запостил: sbs, 12 Июня 2013

    Комментарии (476) RSS

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

        P.S. Больше всего, конечно, вырубают классические дельфийские имена - form1, edit1, prnt1, a1, t1.
        Ответить
        • не забывайте префикс T для типа. ПС. борландские скорей, а не дельфятные
          Ответить
          • > борландские скорей, а не дельфятные
            Ну те, кто осилил Си для сибилдера обычно все-таки уже умеют называть переменные поадекватней :) Процентов 80% кода с form1 это все-таки именно делфя. Хотя, конечно, этим изредка отличаются и билдерцы, и шарпеи.
            Ответить
        • Ну кто как, я бы например одним классом обошелся и 3мя методами. :)

          А про имена да, помню как-то писал на дельфях программу, для преподавателя бух учета, она сверяла бух. баланс. А ведь там показателей куча. Я конечно все переменные переименовал, в программе, но вот как я их именовал на форме. В общем я когда открыл свой код, мне стало стыдно перед самим собой и я удалил его, что бы никто его больше никогда не нашел и не показывал на меня пальцем. :)
          Ответить
          • Достаточно удалить отметку авторства.
            Ответить
            • Смысл был не в том, что для меня так важно чье-то чужое мнение. Это было сказано немножко в шутку.
              Смысл был в том, что я не хотел копить у себя свои поделки старые.
              Ответить
              • у кого-то узкие мониторы, у кого-то маленькие винты ...
                Ответить
                • наброс ок
                  но если честно, собирать всё барахло с школьных лет...
                  это как некоторые свои лекции прошлых семестров бережно подшивают и кладут на полочку
                  иногда проще выкинуть старые винты, чем тратить время, сортировать и переносить с них то, что уже никогда более не понадобится
                  Ответить
                  • хотя бы один винт нужно разобрать и достать оттуда магниты
                    Ответить
                    • один сломать, второй проебать
                      Ответить
                      • я чуть пальцы этими магнитами не сломал кстати, но потом всё-таки проебал (магниты).
                        Ответить
                  • Пф, прошлых семестров. У меня 15 лет лежат тетрадки ещё со школы. Там же есть чистые листы, зачем выкидывать? Пригодятся вдруг. Если наше образование будет идти в том же направлении, то по этим тетрадкам профессоров учить можно будет.
                    Ответить
                    • > Пригодятся вдруг.
                      Плюшкин. Хотя у самого есть такой грешок: жалко выкинуть нельзя оставить.
                      Ответить
          • > она сверяла бух. баланс
            В твоей вселенной не изобрели эксель?
            Без сарказма.
            Ответить
            • Когда я ее(программу) писал, я воображал себя великим программистом, создающим сложную программу, решающую супер сложные задачи, я принципиально не хотел делать какой-то там экселевский файлик, мне нравилось чувство того, что я создаю что-то с нуля.
              Ответить
    • показать все, что скрытоТак не учатся. Так человек с мозгами, будучи даже полной зеленью не напишет. Так же, человек с мозгами никогда не заюзает паскаль. Так же, только тотальняа анскильность в термальной стадии не осилит форматирование. Ну а делфи, делфи - это когда уже некуда падать. Это дно дна, днище бездонного донного дна.


      Знатоки, к вам вопрос - почему в этой породии на ЯП надо писать var t1:string;, почему не string t1;? В чём мистический смысл, либо есть какой-то вменяемый вариант?


      А так же, в этой породии на ЯП реально нету икриментов и +=, либо автор не осилил? := - почему пиписька, а не нормально равно? Скобок тоже нет?


      procedure - это типа чтобы пацаны не путались? Зачем оно?
      Ответить
      • Очень интересно наблюдать за пациентами, которые ниосилили что то, при этом пытающиеся доказать что это не нужно.
        >Знатоки, к вам вопрос - почему в этой породии на ЯП надо писать var t1:string;, почему не string t1;? В чём мистический смысл, либо есть какой-то вменяемый вариант?

        А какой вариант писать int i; Вместо читаемого var i:integer; которое легко читается переменная i типа integer

        Ещё умник расскажи как ты ниослил мануал и не встретил функции inc и dec. Использование которых не вызывает вывих мозга.

        := - почему пиписька, а не нормально равно?

        Ты мне расскажи почему присваивание = а равно == Си язык для не уверенных в себе ??

        это что бездари не тыкали void и попутно пытались что то вернуть из функции. + к этому судорожно пытались получить результат вызова.

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


          int - "тип", а тим и есть переменная. Зачем ты дублируешь? Ну да, яп для мужиков - пиши integer вместо int, сверху нафичачиай ещё var, а потом ещё и ':'.


          Упоролсячтоли. Почему автор их не юзает? Вывих мозга вызвает что-то только у анскилледа.


          Для лаконичность.


          Реально - от я тыкал воид и получал результат из функции - я волшебник?


          Паскаль для 9-го б, плюсы для 11-а.



          Вобще нихрена не ответи, ах да, напиши мне подёргивание на паскале - я поржу хоть.
          Ответить
          • Учительница русского языка 11а очень долго болела.
            Ответить
          • Известны 10 преимуществ Паскаля перед Си :) Я приведу только одно, но самое важное: На Си Вы можете написать: for(;P("\n").R-;P("\ "))for(e=3DC;e-;P("_ "+(*u++/8)%2))P("| "+ (*u/4)%2); На Паскале Вы НЕ МОЖЕТЕ такого написать. (с)
            Ответить
            • DO NOT FEED THE TROLL!
              Ответить
            • В нем нельзя написать
              i = i++;
              И потом день думать как оно работает.
              Это к вопросу "реально нету икриментов"
              Ответить
          • > пиши integer вместо int

            type int = integer;

            That's all folks!
            Ответить
      • >А так же, в этой породии на ЯП реально нету икриментов
        >икриментов
        Нам очень важно Ваше малограмотное мнение.
        Ответить
      • > Знатоки, к вам вопрос - почему в этой породии на ЯП надо писать var t1:string;, почему не string t1;?

        А почему в убогй сишке надо писать string t1 вместо нормального var t1: string?

        > А так же, в этой породии на ЯП реально нету икриментов и +=, либо автор не осилил?

        Есть.

        > := - почему пиписька, а не нормально равно?

        Потому что так пишется "присвоить". А просто = - это проверка на равенство. Это в математике так. Но идиоты, придумавшие сишку, пошли своим путём.

        А вообще зачёт, и ник со словами "хакер" и "киллер", и год 1997, ох потроллил ты меня)
        Ответить
        • > Есть.
          > b2:=b2-60;
          ?
          Ответить
          • В ФПЦ есть, Дельфи тоже в 2009 добавила всякие модные штуки, а что, нету?
            Ответить
            • как он выглядит хоть?
              -:=
              Ответить
              • Так же, как и в сишке. Зачем двоеточие-то, если путаницы и так нет?
                Ответить
                • Минус или равно!
                  Ответить
                • В FPC такой оператор выглядит, как в сишке (-=), а в TMT почему-то был знак, как в комментарии Дефекейта (-:=).

                  Кстати, статью про TMT Pascal почему-то выпилили из русской Википедии с формулировкой, что такого компилятора не существует, хотя пруфы были приложены. ВЛАСТИ ПЫТАЮТСЯ ОТ НАС ЧТО-ТО СКРЫТЬ!!!11

                  P.S. Мне удалось добыть только tmtp390d.zip вот отсюда: http://pascal.sources.ru/tmt/. Сайт же frameworkpascal.com похож на фишинговый: ни одна ссылка с примерами не работает.
                  Ответить
            • Пацаны пишут Dec(b2, 60);
              Ответить
        • Кстати, насчёт присвоения. В советском ЯП Рапира писали так:
          2 + 3 -> x
          Сразу было видно, что сначала нужно посчитать 2 + 3, а потом засунуть результат в x. В другие языки это не проникло по политическим мотивам.

          На самом деле не во всех реализациях. Чаще писали всё же x := 2 + 3, как в Паскале.
          Ответить
          • mov x,2+3
            Все же классическая алгебраическая запись имеет определенный вес. Так что спорно.
            Ответить
          • В R так пишут
            Ответить
        • А еще идиоты, которые придумали C++, c#, Java, js, php, Python, .. короче почти все кроме паскаля
          Ответить
        • Почему пиписька?
          Да чтобы школьники понимали в какую сторону присваивание
          Ответить
      • > := - почему пиписька, а не нормально равно?

        Присвоение — асимметричная операция, потому что она сначала вычисляет RValue, а потом заносит результат в LValue. Вполне логично, что знак такой операции в Паскале и в его диалектах выглядит асимметрично.

        > почему в этой породии на ЯП надо писать var t1:string;, почему не string t1;?

        Слово var намекает, что дальше будет декларативная часть, а не императивная. Это помогает визуально отделять разные части кода. Порядок идентификаторов переменной и её типа — дело вкуса, но по-моему логичнее сначала указать идентификатор, а потом его тип. Это становится очевиднее, если приходится менять тип какой-нибудь переменной, например, чтобы увеличить разрядность, или писать сложные типы.

        В Си есть ловушка: int *p1, p2; В этом примере p2 будет иметь тип int, а не int *, как ожидает новичок. В Паскале же p1, p2: ^Integer означает, что обе переменные типа ^Integer.

        > procedure - это типа чтобы пацаны не путались?

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

        Зачем писать явно слова function/procedure? А чтобы не гадать, что это, разбирая нагромождения скобок. В сраной сишке в объявлении переменной для хранения ссылки на функцию, Ктулху глаза сломает. Где там имя переменной, где типы, где аргументы?
        Ответить
        • А ещё меня в крестах бесит, что когда я по привычке сначала придумываю имя для новой сущности, а потом уже в голове уточняю, какого типа её сделать, то я должен отматывать курсор назад.
          Впрочем, кулхацкерам 1997 года это нравится, как настоящие кулхацкеры, они сначала заводят новые байты, а потом думают, а нахрена они их завели.
          Ответить
          • Так Си же разрабатывали в эпоху байтоёбства, когда нужен был быстрый компилятор, который в один проход должен был понять, сколько памяти выделить под переменные. Сначала заполнить табличку переменных, а потом одним махом выделить подо все переменные память Кернигану и Ритчи религия не позволяла.
            Ответить
          • пиши так:
            int f( i, d )
              int i;
              double d;
            {
                printf( "%d : %lf", i, d );
            }

            https://ideone.com/1ahG4r
            Ответить
            • Кресты так не умеют, это сишко-атавизм.
              Ответить
              • тогда вот:
                auto i = int(42);

                только не надо говорить, что это сишко-футуризм
                Ответить
        • > Присвоение — асимметричная операция
          т.е. дельфисты просто так не отличают право от лево, ориентируясь только по двоеточиям?
          неплохо бы заиметь тогда и операцию =:
          у :=, что бы не говорил Тарас и сколько бы он не называл идиотами людей, благодаря которым он сейчас сидит и строчит свой коммент, есть еще несколько недостатков:
          1) двоеточие в английской раскладке приходится набирать с шифтом, и
          2) присвоений в коде обычно примерно на порядок больше сравнений, поэтому очень даже логично, что в убогой сишке частое присвоение занимает один знак, а более редкое сравнение - два

          > var
          слабые набросы у какир-киллера
          более существенным минусом является то, что декларации переменных приходится запихивать в начало функции, а не там, где они на самом деле начинают быть нужными

          > переменной для хранения ссылки на функцию
          result (* name)(arguments)
          нереально сложный синтаксис
          в дельфе то хоть можно без объявления type сразу объявить переменную - указатель на функцию нужной сигнатуры?
          Ответить
          • > 1) двоеточие в английской раскладке приходится набирать с шифтом, и
            это большая проблема для Ритчи, который всю жизнь скрывал страшную болезнь пальцев, которая проявлялась лишь при изобретении им его недоязыка.

            > 2) присвоений в коде обычно примерно на порядок больше сравнений, поэтому очень даже логично, что в убогой сишке частое присвоение занимает один знак, а более редкое сравнение - два
            Опять же, логика экономии символов при разработке яп вредна.

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

            Не используйте длинные функции. Локальные функции вам помогут.

            > нереально сложный синтаксис

            Ябсказал, нереально ебанутый.

            > в дельфе то хоть можно без объявления type сразу объявить переменную - указатель на функцию нужной сигнатуры?

            Нет, слава богу.
            Ответить
            • > которая проявлялась лишь при изобретении им его недоязыка
              о чем можно говорить с человеком, у которого на клавиатуре даже не все клавиши рабочие
              но тем не менее - для тебя будет открытием, но твоей йцукен-раскладкой пользуется еще 95% остальных пользователей компьютера, и нажать одну клавишу или нажать три клавиши - две большие разницы

              просто ты как всегда начинаешь отрицать тот банальный факт, что паскаль - язык для обучения школьников азам программирования, и всегда им будет
              Ответить
              • Я нихуя не понял, к чему ты эти штампы сказал и что это доказывает.
                Ответить
                • > всю жизнь скрывал страшную болезнь пальцев
                  от тебя всю жизнь скрывали, что декларация систем уравнений и операция mov - разные вещи
                  как ты думаешь, почему в математике := именно такое?
                  возьми учебник по любому матану, посчитай сколько в одной книге ты встретишь = и сколько :=
                  Ответить
                  • '=', как минимум, не меньше, чем ":="
                    Ответить
                    • не меньше?
                      уверен, что = там намного больше, чем :=
                      Ответить
                      • просто := включает в себя =
                        Ответить
                      • В книжках по матану присвоение обозначается не как = и даже не как :=, а несколько иначе:
                        Пусть x = 42
                        То есть почти как в старом Бейсике:
                        10 LET x = 42

                        Либо в другом виде:
                        <уравнение>, где x = 42
                        Последнее даже не присвоение, а вызов функции с параметрами.

                        В любом случае присвоение отличимо от уравнений, но == никогда не используется.
                        Ответить
                        • >То есть почти как в старом Бейсике:
                          Хотел я его помянуть

                          >старом Бейсике
                          Оно никуда не делось и 2012 студии, но там больше для ололо-LINQшных нужд.
                          http://msdn.microsoft.com/en-us/library/bb531379.aspx
                          Ответить
                        • > но == никогда не используется
                          кто-то сомневался?

                          я не знаю, может я неясно выразил свою мысль, что уже второй коммент не о том, что я написал
                          матан и императивные языки программирования (особенно, ассемблер, как ярчайший пример оного) - разные вещи
                          операция mov в ассемблере - самая используемая, примерно 25-40% всех инструкций - это mov (пруф)
                          нельзя требовать от императивного языка, где всё строится на mov, того же синтаксиса, как и в матане
                          в матане как раз нечто, разделяющее две части уравнения, или последовательность преобразований - самое популярное, поэтому очень даже логично, что именно "=" используется в математике для этой семантики

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

                              у тебя такая же аргументация
                              "меня в институте полгода учили паскалю, когда я написал на сишке хеллоу круел ворлд, мой компьютер распидорасило"

                              а еще мне привычно ∀, ∃, :, => и всякое такое
                              вот в питоне есть :, а в паскале вместо него сраный then
                              Ответить
                              • > язык, в котором строки не подлежат обязательной нумерации, содержат в себе сплошные неочевидные грабли

                                А разве не так? Если в коде есть повторяющиеся строки, то patch может пропатчить не те строки, которые нужно.

                                P.S. А двоеточие и без того перегружено, поэтому then очевиднее.
                                Ответить
                            • >>Привычность обозначения и отсутствие граблей важнее, чем короткая запись
                              Ага и не позднее как вчера, кое-кто в обсуждении And и And Then предлагал поменять их местами - And, в ущерб логике, потому что And Than используется чаще.
                              Ответить
                              • Потому что вычисление обоих операндов там, где этого делать не надо - потенциально опасно.
                                В то же время невычисление второго операнда, когда это надо делать - это крайне редкая ситуация и потенциальной опасности не несёт, если только автор не большой любитель побочных эффектов.
                                Ответить
                                • Потенциально опасно — полагаться на то, что второй операнд у теоретически коммутативной операции не будет вычислен.

                                  Давайте тогда уж так писать:
                                  x = 0 * (100500 + 1 / 0)
                                  А что, первый множитель ноль, значит, второй вычислять не нужно и деления на ноль не будет.
                                  Ответить
                                  • ноль на бесконечность это нан, так что плохой пример, тут нужны как раз оба операнда
                                    Ответить
                                    • > ноль на бесконечность это нан, так что плохой пример, тут нужны как раз оба операнда
                                      Ты не поверишь, Тарас, но он как раз приводил этот пример, как тот, в котором нужны как раз оба операнда ;)
                                      Ответить
                          • Тут я на стороне крестосударей.

                            Ведь питон, бейсик, скуль, да и практически всё что _реально_ используется в промышленности использует равно. И даже то что сделано математиками и чаще всего используется для срачей (хацкель).
                            Ответить
                            • > И даже то что сделано математиками

                              И тут я в очередной раз вспомню Дональда Эрвина Кнута. Да, я в очередной раз баяню: в языке METAFONT знак присвоения :=, а обычный знак равенства используется в уравнениях. Т. е., например, x = y + z означает решить уравнение относительно той переменной, значение которой в настоящий момент не установлено. Т. е. если y = undefined, то оно будет преобразовано в y := x - z. Если же в уравнении есть ещё неопределённые переменные, то оно вместе с предыдущими уравнениями будет решено как система.

                              Так что неимперативные языки придётся вычеркнуть из списка.
                              Ответить
                            • Да только вот в бейсике нету потенциальной опасности, если написать = вместо ==
                              Ответить
                              • > Да только вот в бейсике нету потенциальной опасности, если написать = вместо ==
                                В нормальных кресто-сишкокомпиляторах, если читать крестоворнинги, этой опасности уже давным-давно нет.
                                Ответить
                                • Крестоворнинги заставляют вместо
                                  if (x == 0)
                                  писать нелогичное
                                  if (0 == x)
                                  А всё можно было бы сделать проще, если запретить использовать присвоение внутри выражений.
                                  Ответить
                                  • > Крестоворнинги заставляют
                                    ЧТО!? Пруф в студию. Тот же gcc ругается на использование = внутри условий (в контекстах отличных от if(int x = func())) (если так и надо - ворнинг давится путем оборачивания в скобки). И на использование == в контекстах, где результат сравнения не используется (не давится никак, ибо бессмысленная операция).

                                    Так каким же образом оно заставляет меня юзать устаревший йода-стайл?

                                    Йода-стайл юзали как раз тогда, когда компиляторы тупо молчали по поводу сравнений и присваиваний. Да и то только те, кто ссали и перестраховывались. В основном бывшие паскалисты.
                                    Ответить
                              • Есть. Если постараться.
                                true приводится к -1, а false к 0.
                                Помню использовал хак (a=0)*-42, для эмуляции тернарника, не догадываясь при этом что умножение скушает все такты.

                                Потому с давних пор юзаю yoda-style.
                                Оно везде помогает, и в крестах, и в жс, и в жабе когда equals делаешь.
                                Ответить
                                • Не понял что тут хакерского.
                                  По-паскальному это что-то типа
                                  if a=0 then -42 else 0

                                  по-сишному это будет
                                  (a=0, 0)
                                  Ответить
                              • > в бейсике нету потенциальной опасности, если написать =
                                http://ideone.com/gIW912
                                Хе-хе. Даже в новомодном строготипизированном .NETе они это не пофиксили. По-прежнему неявно приводится.
                                Ответить
                                • Ох ёпт, в натуре булень извращённый кокойта.
                                  Ответить
                                  • >булень извращённый кокойта
                                    Да он довольно логичен.
                                    Т.к. минимально адресуемая единица байт, а в .NET полагаю сперто с жабы и бул занимает все 4, то хранится оно в числе.
                                    Если применить побитовое отрицание к 0, то бишь false получим все единицы. Так как в бейсике отродясь не было беззнакового уродства, то и получается что это -1.
                                    Ответить
                                • Это не опасность, ибо не портит значение переменной, в отличие от сишного if (n = 0)
                                  Ответить
              • >и всегда им будет
                т.е. паскаль вечен?
                Ответить
            • > Нет, слава богу.
              ЩИТО? http://ideone.com/DkQZKO

              В 10-й строке фпц-шная фича, остальное совпадает с Дельфи.
              Ответить
              • Это какой-то совсем фпцизм.
                Ответить
                • Собака не нравится? Да, в ТП и в Дельфи пишется без собаки. Зато в ФПЦ ясно, что тут не вызов функции, а передача адреса и не нужно гадать, что будет, если функция не имеет аргументов.

                  Конструирование же типа прямо в var, а не в type, обычное явление. Правда, в ТП нельзя было написать ^array[something], для указателя предварительно требовалось описать этот массив в type, но оно, как правило, лишним не было.
                  Ответить
                • P.S. И даже так можно: http://ideone.com/WQ0pwN

                  А то сишники набегут и скажут, что в диалектах Паскаля нельзя объявлять и инициализировать одной строкой.
                  Ответить
          • > неплохо бы заиметь тогда и операцию =:
            http://govnokod.ru/7746

            > двоеточие в английской раскладке приходится набирать с шифтом
            А в популярной русской раскладке приходится запятую набирать с шифтом, потому что буржуйская клавиатура на два ряда у́же, чем должна быть. Да даже в английской знаки препинания, кроме запятой, точки, точки с запятой и апострофа почему-то набираются с шифтом. Разве это повод от них отказываться?

            > декларации переменных приходится запихивать в начало функции
            На самом деле логично, ибо их так легче искать. Если всё дело в экономии памяти, то динамические объекты всё равно выделяются через new/malloc/etc, а не через декларацию.

            Если же в локальности, то у Алгола объявлять переменные можно было в начале любых операторных скобок. Сразу было понятно, какова область видимости у переменных. Жаль, что это не было унаследовано другими языками...

            А вообще же функции на несколько экранов не нужны, поэтому ограничение локальности областью, меньшей, чем функция, обычно не требуется.

            > result (* name)(arguments)

            А теперь представим себе, что функция должна возвращать указатель на функцию.
            Ответить
            • > у Алгола объявлять переменные можно было в начале любых операторных скобок. Сразу было понятно, какова область видимости у переменных. Жаль, что это не было унаследовано другими языками...
              в сишке из коробки

              > поэтому ограничение локальности областью, меньшей, чем функция, обычно не требуется
              когда я пишу код, я не хочу возвращать курсор на строки выше, это вообще неудобно
              я его пишу нередко начисто, меняю строки энтером, а не стрелками вверх-вниз-вверх-вниз, он хорошо читаем, в т.ч. из-за локальности переменных
              но хорошо, я приму аргумент "ну так же школьникам будет понятней - это тип, это декларации, а это императивный код, нарисуйте блок-схему, звонок для учителя"
              Ответить
              • > в сишке из коробки
                Но сишка позволяет писать нечитаемое говно типа такого:
                if (int i = f(y) == z)
                Ответить
                • то, что она это позволяет писать, не значит, что она это заставляет писать
                  ср. с разделом деклараций в паскале

                  насчет операторных скобок -
                  if (expr) {
                      int a = 0;
                      double b = 1;
                      ...
                  }
                  работало даже в C89 (более ранние версии я тупо не застал и их камней не знаю)

                  больше всего в сишке выбешивало то, что для классического for (...) надо заводить i, j... в ближайшем начале блока - и если меня это в сишке выбешивало, в паскале я бы вообще познал дзен
                  Ответить
                • > сишка позволяет писать нечитаемое говно
                  А паскаль позволяет весь код написать между главных begin и end, не прибегая к функциям. Значит паскаль говно.
                  Ответить
                  • А в скриптовых языках даже на главном уровне операторные скобки не нужны. Следовательно...
                    Ответить
            • > двоеточие в английской раскладке приходится набирать с шифтом
              >А в популярной русской раскладке приходится запятую набирать с шифтом, потому что буржуйская клавиатура на два ряда у́же, чем должна быть.
              Ты немецкой не видел. Там все скобки с AltGr, волосы и крышка набираются только по 2, капс лок действует и на цифры.
              Ответить
        • И только поэтому мне надо через попец каждый раз писать :=?

          Ну да, я настолько идиот, что не догадаюсь сам, что это декларативная часть, да даже если не догадасю - мне это ничего не даст.

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

          Мне похрен на твоего ущербечка. Я никогда не путал int * p1, * p2; Если тв настолько анскиллед - typedef int * INTEGER_PTR_T; - тебе в помощь.

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

          Естественнее - да, паскалисты любят писать 70% синтаксиса и 30% кода.

          Зафигачь мне это на паскале - я поржу хоть:
          #include <stdio.h>
          
          typedef enum {tarasB = 0, superhackkiller1997, other_shit} users_t;
          
          char * users[] = {"tarasB", "superhackkiller1997", "other_shit"};
          
          typedef void(*say_ptr_t)(char *);
          
          say_ptr_t bind(users_t usr) {
            void say(char * str) {
              fprintf(stderr, "%s: %s\n", users[usr], str);
            }
            say_ptr_t volatile p = say;
            return p;
          }
          
          int main(void) {
            bind(tarasB)("shit");
            bind(superhackkiller1997)("i'm god");
            bind(other_shit)("ko-ko-ko");
            return 0;
          }
          Ответить
          • gcc-only.
            Ответить
            • всегда вымораживали гении, не научившиеся отличать char * и char const *
              Ответить
              • показать все, что скрытоОчередной плюсоанскильник? В сишке нет разницы и профита от конст. Плюсы ты можешь засунуть себе в одно место, а по существу естьчё, а?
                Ответить
                • дурачок, разницу и профит от конст будешь потом выскребать в core dump вместо ошибок компилятора, пока я буду проебывать новогоднюю премию на мальдивах
                  Ответить
                  • показать все, что скрытоРеально? Ты ходячая анскильность будет меня учить писать? Уйди в свои детсадовские плюсы и не лезь. Если ты ущербан и не можешь следить за кодом - это твои проблемы.


                    На мальдивах, максимум горячая путёвка в турцию. Примия. Меня аргументы породии на людей не интересуют.
                    Ответить
                    • лолд
                      откуда ты такой взялся, мальчик?
                      2013 - 1997 = 16
                      Ответить
                      • показать все, что скрытоТ.е. пробалаболился как детё. Молодец, больше не спорь с маличиками, коли будучи эталлоной анскильностью.


                        Т.е. ты признал, что ты зафейлился на 16летнем детёнке?
                        Ответить
                        • что ты не понял из того, что я тебе сказал? ты правда не видишь разницы между константным и неконстантным объектом?
                          Ответить
                          • показать все, что скрытоАнскильность ходячая, нет никаких константых и неконстантных, а уж темболее каких-то объектов. Иди прими волерьяночку, а не упорин.

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

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


                            А теперь, анскилябра, я жду от тебя разбора на тему "на что в сишке влияет const".
                            Ответить
                            • дам подсказку, секция rodata

                              где хранится твой char * hukkir = "so gay"? что случится, если ++*hukkir?
                              Ответить
                              • показать все, что скрытоАнскильность тотальная, и?

                                Где ты у меня видишь char * hukkir = "so gay"? Что случится, если ты анскильность осилишь [].


                                И да, причем тут конст - если ты не понимаешь особенностей "" - ты ущербан. Я жду объяснений на что влияет в сишке const, пока ты только глубже загнал себя в лужу.
                                Ответить
                                • что ты заладил, лексикон в 30 слов чтоли?
                                  почитал про .rodata уже? char * loh = "" выдает в тебе человека с 0 опытом, в программе техникума паскаль прошли, сишку проходят, до крестов доберутся через год

                                  как раз из-за таких красноглазых уебанов при подключении говна мамонта редко, но метко приходится делать const_cast там, где прыщавый ублюдок пожалел const - ну он же не меняет аргумент в своей говнофункции, просто поверьте! что такое контракт? зачем нужна типизация? зачем, лучше лишний раз всем доказать, что сишка типизирована мягче, чем воскресный понос

                                  просто заигнорим ворнинги, да и преподу насрать

                                  ты не переживай, на сишке я пишу поболе твоего, что такое константный сегмент на флеше в девайсе в поле отлично знаю, а вот такие кретины как ты только позорят нишевый язык своими кривыми ручонками
                                  Ответить
                                  • показать все, что скрыто> почитал про .rodata уже? char * loh = "" выдает в тебе человека с 0 опытом, в программе техникума паскаль прошли, сишку проходят, до крестов доберутся через год
                                    Причем тут твоя .rodata, анскильная заедушная анскилябра. Если функция по семанике должна изменять твою строку, только ущербан типа тебя передаст в неё "", а вменяемый человек заюзает char[]. Но куда таебе.

                                    >как раз из-за таких красноглазых уебанов при подключении говна мамонта редко, но метко приходится делать const_cast там, где прыщавый ублюдок пожалел const - ну он же не меняет аргумент в своей говнофункции, просто поверьте! что такое контракт? зачем нужна типизация? зачем, лучше лишний раз всем доказать, что сишка типизирована мягче, чем воскресный понос
                                    Это выдаёт в тебе животное, которое не знает семантики функций, которые юзает. Вас, упоротых животных, стало слишком много в моём мире.


                                    >просто заигнорим ворнинги, да и преподу насрать
                                    Какие ворнинги? Удиви меня, анскилябра.

                                    >ты не переживай, на сишке я пишу поболе твоего, что такое константный сегмент на флеше в девайсе в поле отлично знаю, а вот такие кретины как ты только позорят нишевый язык своими кривыми ручонками
                                    А причем тут константная память и const, животное? То, что ты МКашный говнарь, который продался в анольное рабство С++ интерпрайза и ваяешь гуйню за еду - я знаю. Мне это не интересно.


                                    В отличии от тебя, животного, я знаю семантику своих функций и знаю что и почему я туда передаю.


                                    Ты животное, которое нихрена о сишке не знает, а максимум, что ты осилил - это 1-2курса+говняканье на какой-нибудь аврке в маздайке. Кто делал что-то до аврки не будут такими животными.


                                    Дак вот, ты либо валяй что-то по существу, либо не неси херню. Меня твои аргументы "я ущербан, я пишу в ro и мне нужен для того, чтобы я туда не писал конст, чтобы конпелятор мне говорил - я же ущербан, я не могу запомнить". Да, мне твои аргументы очень интересны.
                                    Ответить
                                    • > только ущербан типа тебя
                                      заявит контракт на получение неконстантной строки там, где достаточно константной

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

                                      > какие ворнинги
                                      видишь, ты даже "свой" инструмент толком не знаешь, сразу видно осилятора, собирающего свое одноразовое однофайловое говно без ключей прямиком в a.out
                                      -Wwrite-strings, ублюдок

                                      > гуйню
                                      телл ми моар ;)

                                      > своих функций
                                      я это уже выше отписал - твои функции никому кроме тебя нахуй не всрались, можешь развлекаться дальше, только к взрослым не лезь
                                      Ответить
                                      • Балаболка тотально силилась, так не аргументировав свой предыдущий балаболизм.

                                        > видишь, ты даже "свой" инструмент толком не знаешь, сразу видно осилятора, собирающего свое одноразовое однофайловое говно без ключей прямиком в a.out
                                        Ты это к чему, ущербан? Причем тут твой ворнинг? По твоей ущербанской логике я должен кастит что-то на конст? В чём смысл?


                                        > телл ми моар ;)
                                        От как я в точку про гуйню.

                                        > я это уже выше отписал - твои функции никому кроме тебя нахуй не всрались, можешь развлекаться дальше, только к взрослым не лезь
                                        Очередная анскильная обезъянка со стадом преданных макакёночек-минусяторов. Тотальна слилась на консте, rodata, так и не сказала какая семантика у const в сишке. Детсад.
                                        Ответить
                                        • тебе всё мало хуйцов, всё никак накушаться не можешь?
                                          зачем кастить, школьник? сразу объяви корректный тип

                                          char * foo = "const literal"; - это уже сто лет в обед как deprecated
                                          верно - char const * foo = "const literal";

                                          6.4.5/4
                                          The same considerations apply to each element of the sequence in a string literal as if it were in an integer character constant (for a character or UTF−8 string literal) or a wide character constant (for a wide string literal)


                                          тут и далее в п.6 четко сказано, что "..." - это array of const characters - т.е. char const [N] - если вдруг для тебя это секрет
                                          /7
                                          If the program attempts to modify such an array, the behavior is undefined.


                                          на еще - к вопросу зачем нужен const
                                          6.7.3/6
                                          If an attempt is made to modify an object defined with a const-qualified type through use of an lvalue with non-const-qualified type, the behavior is undefined.

                                          The implementation may place a const object that is not volatile in a read-only region of storage. Moreover, the implementation need not allocate storage for such an object if its address is never used.


                                          если бы ты на самом деле пользовался gcc, а не пиздел об этом фальшивым голоском, то знал бы, что однажды в 4.х они запилили эту проверку, сделав её неотключаемой, чем вызвали тонны жопного жжения таких же каккиров как ты, которым на const насрать
                                          в итоге, мало того, что гццшники вывели этот ворнинг в настройки, так еще и в -Wall он не включен - потому что школьные убер-гентушники вообще не в состоянии что-либо пропатчить или понять, какого хуя это происходит в их жизни
                                          они только бездумно запускают emerge, а потом плачутся мамке в передник, что их любимое дерьмо теперь невозбранно срёт непонятными ворнингами!!11одинодин
                                          Ответить
                                          • всё что тебе стоит знать - с char * так писали 30 лет назад, и уже лет 20 все нормальные библиотеки (в т.ч. stdlib) переписаны на человеческие const *, особенно в приеме аргументов
                                            и только ты, нихуя не разобравшись в предмете, до сих пор гадишь под себя

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


                                              Ну да, С++ петушки они такие.
                                              Ответить
                                              • либц в глаза не видел? на тебе, ткнул первое попавшееся
                                                http://bit.ly/16lSsdw

                                                что я вижу? char const * в аргументе??
                                                и снова слив, ну как так можно, ты бы хоть проверял свой текст перед отправкой, а то как всегда всё пиздишь и пиздишь
                                                Ответить
                                                • показать все, что скрытоПитушок - они там чисто чтобы поржать. В аргументе она там, ибо по стандарту положено, а если в половине функций она есть( и то в ущербанских, ибо это сишные заглушки, которые glibc никогда тебе не даст). В реальных функциях там никакого конста нет, да и в этих небыло никогда - просто, когда грепали по c99 аргументы - прогрепали все заглушки для эстики.


                                                  А так да, ущербаном это не ведомо.
                                                  Ответить
                                          • показать все, что скрытоПоследние петушиные стандарт ничего, кроме копипасты gnuрасширений и питушарни из С++ не принесли.

                                            libc обязана быть по стандарту, вернее все сигнатуры.


                                            Петушарня из С++ мне не нужна.


                                            Патамучто нормальный человек инак понимает, что есть "str" и где он лежит по дефолту. Ему не нужен петушарский конст.


                                            Да, да, я знаю, маздайский питушок.
                                            Ответить
                                            • дурачок, я тебе привел цитаты из стандарта C
                                              ISO/IEC 9899:2011
                                              не переживай так, первое сентября еще далеко
                                              Ответить
                                              • показать все, что скрытоУ сишников есть мозг, а у петушков нет. Все клали на конст, ибо в Си он не имеет семантики. Тупо для проверки типов, которая не упёрлась ни мне, ни любому вменяемому сишнику.
                                                Ответить
                                                • ты еще не устал сливаться?
                                                  мыши кололись и плакали, но продолжали жрать кактус
                                                  успокойся уже, все всё поняли давно, тебе уже ничего не исправить
                                                  Ответить
                                                  • Ты животное мне описало семантику const'а в сишке? А животное? Ты можешь сколько угодно кукарекать для общества питушков - мне похрен.
                                                    Ответить
                                                • > не упёрлась ни мне, ни любому вменяемому сишнику.

                                                  Чтож тогда Линус sparse запилил? Или Линус перестал быть вменяемым сишником?
                                                  Ответить
                                                  • > Линус sparse
                                                    Он решил написать свой статический анализатор? Но зачем?
                                                    Ответить
                                                    • > Он решил написать
                                                      Он не решил, он давно уже написал.

                                                      > Но зачем
                                                      Проверять kernel-specific баги.
                                                      Ответить
                                        • >Очередная анскильная обезъянка со стадом преданных макакёночек-минусяторов

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

                                          Словарный запас невероятно скуден, словно мозг писавшего не больше оного у питекантропа.
                                          Ответить
                            • >Это выдаёт в тебе животное,
                              >Вас, упоротых животных
                              >А причем тут константная память и const, животное?
                              >В отличии от тебя, животного
                              >Ты животное
                              >не будут такими животными.

                              >Запомни анскильность
                              >Анскильность ходячая,
                              >Если ты обычный плюсовой анскильный говнарь
                              >Запомни анскильность

                              >Последние петушиные стандарт
                              >питушарни из С++
                              >Петушарня из С++
                              >маздайский питушок.
                              >не нужен петушарский конст.
                              >маздайский питушок.

                              Любой мало-мальски грамотный программист знает о принципе DRY.
                              Ответить
                          • Хотя, уже начинает таки походить на школоло.
                            Not sure if a fat troll or just a school hero...
                            Ответить
                            • показать все, что скрытоТы мне так и не ответил на пару вопросов: Чем плох гцц и есть ли конпеляторы лучше. Чем плохи гццизмы, когда гцц задаёт стандарт сишке - он основа сишки, он и есть сишка.


                              Я жду, жалкая анскилябра-минусятор. Хотя я не дождусь - это не ведомо заедушных говнорям.
                              Ответить
                              • В GCC нет ничего плохого, я использую его практически каждый день. Плох непортируемый код. Если ты на секунду оторвёшся от обсуждения своей скильности и посмотришь в добротные гнушные проекты, ты врядли найдёшь там код, не компилирующийся другими компиляторами.
                                Ответить
                                • показать все, что скрытоРеально? Не портируемый? Это куда он не портируемый? На щитмсвс? Мне это не надо. Остальные конпеляторы умеют gnu99.


                                  Нету гнушных проектов - есть говнокод, который написали до гцц(всякие кореутился и прочее), а есть код, который изабилует гццизмами. Любой вменяемый код изобилует гццизмами.


                                  Компилируется он благодаря ифдефам чисто ради поржать.
                                  Ответить
                                • показать все, что скрытоАх да, забыл. Если у меня есть гцц, который объективно лучше всех конпеляторов, ибо он самый быстрый, самая лучшая кодогинерация, спо, с ним можно делать всё, что угодно - он полностью настраиваемый и т.п. Он собирает подовсё и лучше всех. Самый фичастый и мощный.


                                  Зачем мне другой конпелятор? Объясни - форфан? Мб мне и c99 не юзать, ибо 99% конпеляторов его не могут? Я знавал таких днищ.
                                  Ответить
                                  • > объективно лучше всех конпеляторов, ибо он самый быстрый, самая лучшая кодогинерация
                                    > он полностью настраиваемый

                                    Без пруфов это всё голый школьный трёп. Ты лично проводил тесты производительности и потребления памяти компиляторов на единицах компиляции различного уровня сложности? Ты лично анализировал объектный код, генерируемый компиляторами на различных уровнях оптимизации со всевозможными комбинациями опций?
                                    Ты пробовал изменить компилятор, добавить в него новые возможности, статические проверки? Или, быть может, у тебя легко получилось встроить его в интегрированную среду разработки в качестве сервиса компиляции?
                                    Подозреваю, что ответы на все вопросы - нет.
                                    Ответить
                                    • показать все, что скрытоАнскильная балаболка.

                                      > Ты лично проводил тесты производительности и потребления памяти компиляторов на единицах компиляции различного уровня сложности?
                                      Если ты про скорость конпеляции и потреблении памяти - это для Си не принципиально, а на плюсы я клал.

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


                                      > Ты лично анализировал объектный код, генерируемый компиляторами на различных уровнях оптимизации со всевозможными комбинациями опций?
                                      Анскильность тотальная, я пишу на Си и я всегда должен знать что конпелятор гинерит из моего кода. Покачто gcc самый вменяемый.


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

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


                                      Пока такие ущербаны как ты населяют мой мир - мне хренова. Эти животные нихрена не знают, нихрена не видели, но они спорят. Эти животные спорят. И будут спорить.


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

                                        В общем, ни цифр, ни пруфов, доказывающих твои громкия заявления. Только рассуждения о себе любимом. Nuff said.
                                        emerge --unmerge superhackkiller1997
                                        Ответить
                                        • показать все, что скрытоУщербаночка, да последний яркий перл линуса гцц собирает в полтара раза лучше icc, а уж про шланг я вообще молчу. Гугли унскилябра sha1.


                                          Какие тебе пруфы? Не былбы ты животным анскильным - ты бы говорил вменяемо, а пока ты жалкая( тут все такие же) балаболка, которая работает за плюсики.


                                          Даже загуглить нормально не смог.
                                          Ответить
                                      • >Если ты про качество гинерируемого кода, то я гентушнег с дохренуа летним стажем,
                                        крутой программист-линускоид? В каких проектах участвовал?

                                        >и когда ты под стол пешком ходил я юзал все вменяемые конпеляторы и бенчил код.
                                        Результаты в студию.
                                        И раз тебе сейчас заняться нечем сравни нынешние gcc и clang

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

                                          >Результаты в студию.
                                          Я питушок привёл тебе пример. gcc наровне с icc, кодоген и умность(у icc есть ущербанская умность, которая никому не упёрлась) у обоих примерно на одном уровне - icc лучше понимает код всяких питушков с породией на числодробилку. У гцц лучше рапределение инструкци, он лучше раскидывает те же интринсики. У гцц есть поцанские билдины. gcc для сишки гинерит почти идеальный код в 80% случаев.



                                          >И раз тебе сейчас заняться нечем сравни нынешние gcc и clang
                                          Питушрня сливает гцц по всем параметрам и мне не интересна.


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

                                          В сишке const ничего не значит, кроме бесполезной проверки, которая мне не нужна, ибо профита от неё нет.
                                          Ответить
                            • Нет, уважаемый, это к нам с двачей гости пожаловали.
                              Причем именно с двачей, нульчаном тут даже и не пахнет.
                              Ответить
                              • > с двачей гости пожаловали
                                Да тут полно людей с двача ;) И большинство из них вполне адекватные сЭры, не то, что эта истекающая жиром голубая коняшка.
                                Ответить
                                • Мне кажется, что это /b/ или /i/, может быть рак из /pr/, но в /i/ я вроде бы просматривал не был гк в списке целей на поражение.
                                  Ответить
                                • >Да тут полно людей с двача
                                  Заметьте с двача, нульчана, откуда угодно: геймдева, хабра, но не сосача.
                                  Ответить
                                  • Ну если это так понимать, то анонимb84тудасюдаобратно и superhackkiller1997 как раз таки оттуда.
                                    Ответить
                                    • Гумно еще было. Прошлым летом.
                                      Ответить
                                      • LispGovno?
                                        Не, лиспговно не такой, он классный.
                                        А этот уныл.
                                        Ответить
                                        • > LispGovno
                                          > классный
                                          comment#180856:2:28 Division by zero
                                          Ответить
                                        • >Не, лиспговно не такой
                                          Это он просто посидел годик-другой на гкоде, изначально было такое же: вайпы, боты, уныльство, сосач.
                                          Ответить
                                          • Гк интеллигентный, гк образовательный.
                                            Вот кто-то уже русский благодаря борманду подучил.
                                            Ответить
                                            • > Вот кто-то уже русский благодаря борманду подучил.
                                              Борманд общается со знаками препинания только на этой борде, при этом пытаясь не забыть как это делается.
                                              Ответить
                      • Не нужно забывать, что в интернете наш собеседник может быть кем угодно. Первые части ника вполне могут намекать, что цифирь в конце - фейк.
                        Ну и грамматические ошибки выглядят уж слишком стилистическими...

                        Хотя школоло, прогуливающее университетские курсы, тоже исключать нельзя. Эх, молодежь пошла... Я полгода перед поступлением по 2-3 часа в день математические упражнения долбил, а не на форумах зависал.
                        Ответить
                        • показать все, что скрытоМинуснул, балабольнул и слился - молодец.


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


                          Яб понимаю - ты бы понимал что-то в этой жизни, но я не вижу этого и на фоне этого твои выхлопы про "смотри как надо" выглядят так сишно, что попец болит.
                          Ответить
                        • показать все, что скрытов жопу ты долбился по два-три часа в день. Ты вуз закончил только 3 года назад, как профессионал ты полный 0, тебе еще самому еще учиться и учиться
                          Ответить
                        • Кстати, поциент немного напоминает мне товарища @o2n3e (http://govnokod.ru/user/6525):
                          http://govnokod.ru/12635
                          Ответить
                          • Да, кстати, если заметить, что основные нападки на дефекейта, на вас и на борманда, думаю вероятность больше 80%(учитывая сленг).
                            Ответить
                            • Эм, где вы тут нападки на Борманда увидели? Деанонить мну никто не пытается, личных оскорблений не наносит. Мы с новым гостем просто ведем спокойную светскую беседу ;)
                              Ответить
                              • Куда уж дальше деанонить. Все знают, что Вы Никлаус Вирт. Выучили русский и зарегистрировались на Говнокоде. Stimmt das?
                                Ответить
                              • >>Шел бы ты отсюда кулхацкир-петушок со своим говном.
                                >>Ты совсем попутал, петушок?

                                Да ну?
                                Ответить
                          • как ты их запоминаешь?
                            Ответить
                            • Я просто запоминаю сам факт их наличия, а потом просто использую гугл.
                              Ответить
            • показать все, что скрытоВ мире есть ещё какие-то вменяемые конпеляторы? icc - проприетарщина, msvs - щит подзаборный.


              icc не особо лучше, а в 50% случаях хуже на вменяемом коде. Про msvs я вооще молчу - там тотальный щитстизм.


              Удиви меня, какие есть ещё нормальные конпеляторы? Причем не забывай, что на гцц я могу собрать подовсём, а со своей маздайкой ты будешь сам обниматься.
              Ответить
              • спили мушку, ковбой
                много суеты

                шланг забыл

                всегда знал, что роман - фанат мсвс
                Ответить
                • показать все, что скрытоБла-бла.


                  Шланг говно, а к сишке отношение имеет такое же, как и ты.


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


                  А уж msvs и сишка, они хоть c99 осилили? Нет, ну что же? Я должен юзать говно, которое за 15лет не осилило c99?
                  Ответить
                • показать все, что скрытоИ да, животное, я не вижу, чтобы ты мне ответил в этой ветке.
                  Ответить
            • показать все, что скрытоИ да, анскилябра, я жду от тебя похожего кода. Напомимаю, что функция должна возвращать указатель на функцию.
              Ответить
          • Шел бы ты отсюда кулхацкир-петушок со своим говном. Вложенные функции это тебе, анскилледу, не лямбды. Захватывать значения переменных они не умеют (вернее это работает только пока жив родительский контекст). Этот быдлокод работает чисто на везении, связанном с тем, что ты юзаешь функцию сразу же после ее возврата, и в неиспользуемую часть стека, в которой валялся usr еще никто не не успел насрать (включая ее саму).

            Вот такой код уже распидорасит с сегфолтом из-за того что вызов первого printf'а похерит "неиспользуемый" кусок стека:
            void say(char * str) {
                fprintf(stderr, "%s: %s\n", users[usr], str);
                fprintf(stderr, "%s: %s\n", users[usr], str);
              }
            Ответить
            • показать все, что скрытоТы совсем попутал, петушок? Да мне похрен, хоть хренямбы. Этот код работает потому, что я знаю как он работает и почему. Ты можешь сколько угодно кукарекать - этот код будет работать, а если там выпилить ущербанский fprintf() - будет работать ещё лучше.


              Петушок, в твоём курятнике кроме 486-го о чем-то слышали? Мне похрен на курятники анскильных петушков. На нормальном call abi это будет работать хоть мильён фринтфов туда засунь.
              Ответить
              • Сударь по моему вы въебали говна. Остудите свой пыл (подрочите хуй) и идите делать уроки. Вы так же уныл как и тот понос который вы извергаете.
                Ответить
                • Если ты неспособен понять то, о чём я говорю - остуди свой пыл и не лезь туда, где ты не шаришь. Не бери пример с ущербанов выше. Одна жаба-обезъянка, которая о сишке знает по курсу в недовузе, другая авр-макака, который кроме какого-то там с89 в ущербном маздайском недоконпиляторе ничего не видела, да и щас не видим, ибо заедушное животное.


                  Я понимаю, что тут не модно думать, а сишки из вас знает полтора человека, но всё же - не играйте на публику. Будь человеком, причем не в глазах этих макак, а в глазах людей. Человек в данном контексте это тот, кто осилил сишку на уровне, чтобы мочь спорить.
                  Ответить
                  • То есть не Ты. Ну так в чём проблема? Иди учи, как будешь а теме приходи.
                    Про паскаль ака Дельфи ты уже слил. Ну судя по постам и Си с крестами сливаешь чего бычишся ? Ну видно же что юниор. У нас в студии таких кочергой по ебалу бьют. ;) иди иди учи уроки не чего с взрослыми дядьками спорить не до рос ты еще.
                    Ответить
                    • Тудии, слил. Как я люблю этих заедушных анскильных петушков. В чём я слил - поясни, а я поржу.
                      Ответить
                      • ты в что конец упоротый ?
                        http://govnokod.ru/13162#comment180508
                        или ты без фразы слив засчитан не понимешь где слился ? Так вот персонально для хакакилера гомосека. Слив засчитан. Можешь быть свободен.
                        Ответить
                        • А почему я слит? Потомучто петушку петушки больше плюсов поставили?
                          Ответить
              • Этот код работает лишь потому, что тебе дико повезло, но после пары бессонных ночей в отладчике ты научишься не писать такое.
                Ответить
                • Нет, он работает потому, что я его написал и я знал, что писал. А рассказы петушков, которые не понимают того, что они пишут мне не интересны.
                  Ответить
                  • Мне кажется, не знал. И практического применения этой херне нет, потому что на практике все мутные конструкции очень быстро валятся. Но так как практики у тебя ноль, то тебе пока трудно это понять.
                    Ответить
                    • Как это нет - есть. Они не завалится никогда, единственная её проблема - она умрёт после выхода за область видимости. Но мне не нужно её передавать за область видимости - она идеальна.
                      Ответить
                      • Лямбда, которую не нужно передавать за область видимости - бесполезна, никаких преимуществ перед вызово функции от 2 параметров.
                        Ответить
                        • Причем тут лябда, петушок. Суть в том, что это функция с 2-мя параметрами, только которая возвращает указатель на функцию, как положено по контексту( читайт ред выше).


                          А то, что вы петушки придумали - ваша фантазия.
                          Ответить
                          • Ну и нахуй оно надо, где это можно использовать, чем это хуже честного вызова простой функции с 2 параметрами?
                            Ответить
                            • патамучто - это пример как писать указатели на функции в Сишке. По контексту я не мог привести код, который не возвращает указатель на функцию.


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

                                А когда у бабушки вырастет пиписька, то она станет дедушкой.
                                Ответить
                                • Ущербан, он умеет это делать - но по религиозным соображения не может.


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


                                  Поэтому ущербан ты написал тотальную херню, а макаки заплюсовали, даже не понимая того, о чём я вообще написал.
                                  Ответить
                                  • Это который вариант? Где функцию можно вызывать только один раз, и то только непосредственно после бинда, иначе комп будет извергать цунами?
                                    Ответить
                                    • Питушок - эту функцию можно вызывать откуда угодно, и сколько угодно раз.


                                      Если ты питушарня не понимаешь то, о чём пишут пацаны - не неси херню. В этом суть вас, питушков, ибо вы увидели коммент bormand - и несёте херню даже не осилив понять о чём он, а bormand ваш написал херню. Вот такие вот дила. Только он это понял, и больше не писал, а вы питушки нет.
                                      Ответить
                                      • > эту функцию можно вызывать откуда угодно, и сколько угодно раз
                                        Эту функцию можно вызывать откуда угодно, и сколько угодно раз*.

                                        * Если компилятор умудрится заинлайнить say для каждой из констант.
                                        Ответить
                                        • Упоролся чтоли? Ты 486 питушок мне тут не воняй, инлайн say тут непричём. Когда осилишь вменяемое call abi, тогда приходи, питушок.
                                          Ответить
                      • К сожалению, в своем примере, ты уже передал ее за область видимости, которая кончилась на последней скобке bind'а ;)
                        Ответить
                        • Нет. Она не локальная функция, а глобальная, которая ничем не отличается от глобальных. Проблема в том, что конпелятор пишуток и раб питушарного стандарта и юзать этого не может. Поэтомуо ни ваяет говно, у которого область видимости - за пределами бинда.
                          Ответить
              • > На нормальном call abi это будет работать хоть мильён фринтфов туда засунь.
                > Петушок, в твоём курятнике кроме 486-го о чем-то слышали?
                Так расскажи нам, о великий знаток соглашений о вызове, где должен лежать сгенеренный трамплин, чтобы его адрес можно было использовать после возврата из функции, в которой он был создан, а не до затирания куска стека, в котором ему посчастливилось остаться, и при этом не создавалась утечка памяти. Слив засчитан, детка?
                Ответить
                • показать все, что скрытоТ.е. ты слился, петушок, так и запишем. Ломается он только на твоём 486-м курятнике.


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


                  Если тебе, питушок, понадобится ещё раз функция, возвращемая биндом - заюзай бинд. Зачем биндить и не юзать сразу? Объясни свою логику, питушок.


                  Слился на том, о чём начал балаболить. Съехал на другю тему, которую я даже не поднимал. Пришел с этой темой в тупик. Слив засчитал, питушок?
                  Ответить
                  • биндить нужно чтобы сразу вызвать?
                    ха-ха, вот ведь долбоёб
                    уходи, сколько можно позориться
                    Ответить
                    • показать все, что скрытоВ моём случае да, питушок. Какая там семантика в твоих плюсах - меня не интересует( судя по плюсам - тут одни плюсовые петушки, которые даже не понимают о чем речь).


                      Животное, зачем мне сохранять бинд, если мне проще его забиндить уже на месте? Для питушка поясню - бинд в моей семантики - это аля самомодифицирующая функция.


                      И да, питушок, ты либо отвечай на весь коммент нормально, либо не смеши мои тапки. Я понимаю - это для тебя сложно, но хоть попытайся.
                      Ответить
                      • Нахуй нужны самомодифицирующиеся функции, когда никакой оптимизации под конкретное значение тут не больше, чем в случае честного вызова от двух параметров?
                        Ответить
                        • Патамучто это пример, питушок, "В сраной сишке в объявлении переменной для хранения ссылки на функцию, Ктулху глаза сломает. Где там имя переменной, где типы, где аргументы?".

                          Оптимизации тут нету, ибо гцц не асилил. Возможнно даже можно найти способ подсказать ему.
                          Ответить
                          • Сравним понятную конструкцию
                            type say_ptr_t = procedure(str: PChar);
                            и нагромождение скобок
                            typedef void(*say_ptr_t)(char *);
                            Что проще запомнить и разобрать?
                            Ответить
                            • Второе. Меньше читать. понятнее. С чего там взялось какое-то равно, которое как кто-то из вас говорил - есть сравнение(==)? Ты сравниваешь тип и процудуру?

                              Скобок столько же, непонятно вообще - что это, больше похоже на say_ptr_t p = f;


                              А в сишке всё понятно - тип, скобка - это экран, указатель - это и есть указатель. Имя - этоимя указателя, последняя скобка - это скобка как в твоей функции. Зачем тут писать именя аргументов?
                              Ответить
                              • Насчёт имён аргументов согласен, они тут не нужны.

                                Со всем остальным не соглашусь. В Си сходу не видно, где имя определяемого типа. В Паскале say_ptr_t слева, сразу видно, что его определяем, а в Си — где-то посередине.

                                Почему знак равенства, а не присвоения? А потому что это определение навечно. Мы не можем динамически сменить тип. Оператор же := предназначен для изменения значения в текущий момент.

                                P.S. много лишних скобок, да и typedef длиннее, чем type.
                                Ответить
                                • Оно не посередине, а там, где для функции указывает указатель. Вы такие балаболы.

                                  var str:string; - где-то посередине, а в си string str; - нормально права. Аргимент очередно говно.


                                  А с чего ты к типу что-то там присваиваешь? Зачем? Как можно что-то к типу присвоить.

                                  В гнуси было что-то, аля typedef p = f;

                                  Щас что-то аля:
                                  void say(users_t usr, char * str) {
                                      fprintf(stderr, "%s: %s\n", users[usr], str);
                                  }
                                  typeof(say) * p = say;



                                  Тайпдеф длинне type на 3 символа, а процедуре 9 лишних символов - о5 аргументы говно.


                                  Паскаль сливает по всем параметрам.
                                  Ответить
                                  • > var str:string; - где-то посередине
                                    Не посередине, ибо var — это заголовок блока, а не определения:
                                    var
                                        str:string;
                                        i1, i2, i3: integer;
                                        foo: pointer;

                                    > Как можно что-то к типу присвоить.
                                    А я и не присваиваю, потому и = вместо :=

                                    > Тайпдеф длинне type на 3 символа, а процедуре 9 лишних символов - о5 аргументы говно.
                                    Это было упомянуто ради шутки, потому что кто-то жаловался, что integer длиннее, чем int.
                                    Ответить
                                    • Воид тоже не определение, а заголовок блока:
                                      void
                                      (*say_ptr_t) (char *);


                                      >А я и не присваиваю, потому и = вместо :=
                                      А что ты делаешь? Сравниваешь?


                                      > Это было упомянуто ради шутки, потому что кто-то жаловался, что integer длиннее, чем int.
                                      Моя жалоба была к месту, а ты ущербан тупорылый. Если я жаловался - моё выражение БЫЛО КОРОЧЕ. Твоё же длинне.


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

                                        > Сравниваешь?
                                        Жаль, но третьего знака, кроме = и :=, нет. Пришлось использовать имеющийся =, потому что перепутать его со сравнением в данном контексте нельзя.

                                        > Твоё же длинне.
                                        Экономия на спичках.

                                        Слился тут ты. Моя программа работает даже после модификации: многократного использования функции, использования функции далеко после бинда и т. п. Твоя программа после таких модификаций упадёт. Условием спора была работа с указателями на функции, если я правильно понял.
                                        Ответить
                                        • void
                                          * ptr, * ptr2, * ptr3;

                                          Мордой питушка.

                                          > Жаль, но третьего знака, кроме = и :=, нет. Пришлось использовать имеющийся =, потому что перепутать его со сравнением в данном контексте нельзя.
                                          Т.е. ты, питушок, сам не знаешь что делает твой знак '='? Занятно.

                                          >Экономия на спичках.
                                          А то я вижу, что строка в 2раза длиннее.

                                          > Слился тут ты. Моя программа работает даже после модификации: многократного использования функции, использования функции далеко после бинда и т. п. Твоя программа после таких модификаций упадёт. Условием спора была работа с указателями на функции, если я правильно понял.

                                          Моя тоже будет работать, питушок. Только моя в 10раз короче, питушок.
                                          Ответить
                                          • > void
                                            * ptr, * ptr2, * ptr3;
                                            А теперь повтори то же самое, но не для тупых указателей на воид, а для указателей на функции.

                                            > Т.е. ты, питушок, сам не знаешь что делает твой знак '='?
                                            Откуда это следует? Я функции этого знака объяснил, но ты читаешь комментарии только наполовину.
                                            Ответить
                                            • > для указателей на функции
                                              void (*f1)(...), (*f2)(...) ...;

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

                                              нашёл: /12064
                                              Ответить
                                              • В Си так нельзя: void(* p1, * p2)(int);
                                                А в Паскале так можно: var p1, p2: procedure(x: integer);
                                                Ответить
                                          • Боже, Царя храни!
                                            Сишный, не джавный,
                                            Царствуй на славу, на славу намъ!
                                            Царствуй на страхъ скрiптухамъ,
                                            Царь ультрасишный!
                                            Боже, Царя храни!
                                            
                                            Боже, Царя храни!
                                            Славному долги дни
                                            Писать на Си!
                                            
                                            Лалокъ смирителю,
                                            Сишки хранителю,
                                            Пuтушни укротителю,
                                            Отрѣбья воителю,
                                            Все ниспошли!
                                            Ответить
                                • Даже одни из самых трушных сишников из оставшихся на планете - Томпсон и Пайк - в запиленном ими с нуля языке Go сделали типы справа, а не слева (возможно, как раз ради оптимизации компилятора) и упростили синтаксис массивов и указателей.
                                  var x int[]
                                  var y, z *int
                                  var f func(double, int)
                                  Ответить
                                  • Го - говно. Сишник никогда такое говно не запилит. Компелятору класть где там у тебя тип стоит, хоть в попце.


                                    Как всегда у любого ущербана получается смесь паскаля и Си. Лучше я буду юзать жабу, чем говно. Хотя та тоже смесь паскаля и Си.
                                    Ответить
                                    • >жабу
                                      >та тоже смесь паскаля и Си.
                                      Дело говоришь! А java script - это та же уродская жаба только нетипизированная, и для web. Существуют всего джва языка - пасцаль - говно и сци - идеал, остальные - их смеси.
                                      Ответить
                                      • Все современные императивные ЯП — внебрачные дети Алгола. Следовательно, Жаба — плод инцеста, ибо Паскаль и Си — дети Алгола.
                                        Ответить
                                        • И с границ вселенной на всё это смотрят два маргинала - форт и лисп.
                                          Ответить
                                          • > И с границ вселенной на всё это смотрят два маргинала - форт и лисп.
                                            А божественному хацкилю на всех пофиг.
                                            Ответить
                                            • ага в универе все учат си, хаскель и прожат на ПОХАПЕ. (адский хохот за кадром)
                                              Ответить
                                          • >Все современные императивные ЯП - внебрачные дети Алгола.

                                            Императивные Бейсик, Питон и всякое скриптовое произошло от фортрана.
                                            Ответить
                            • >Сравним понятную конструкцию
                              >type say_ptr_t = procedure(str: PChar);

                              >и нагромождение скобок
                              >typedef void(*say_ptr_t)(char *);

                              >Что проще запомнить и разобрать?

                              std::function<void(char *)>
                              Ответить
                              • Хоть я и не люблю крестошаблоны, но вынужден признать, то эта схема легко запоминается и легко разбирается. Но голубой лошадке она не понравится: уж больно на Паскаль похоже.
                                Ответить
                                • >typeof(say) * p = say;
                                  Вот тебе конструкция, питушок, которая уделает любую, питушок.
                                  Ответить
                                  • Приведение типа, как (int) что ли? В Дельфи так же можно:
                                    say_ptr_t(p) := say;
                                    Ответить
                                    • P.S. Понял, что глупость написал.

                                      typeof из имени переменной получает её тип? Ну так в Дельфи даже RTTI есть, только это приводит к лишней обвеске кода. А кому может понадобиться в трезвом уме и в здравой памяти объявлять переменную «по образцу», не зная её типа, ума не приложу.

                                      Странный ты человек. Массивы с ненулевой базой для тебя ненормально, мол, сами базу вычитайте, а typeof нормально.
                                      Ответить
                                      • > А кому может понадобиться в трезвом уме и в здравой памяти объявлять переменную «по образцу», не зная её типа, ума не приложу.

                                        Тип переменной и так известен по правой части присваивания, зачем писать его еще раз слева? В сишке это конечно не так актуально, т.к. типы там не такие уж и страшные. А вот крестоблядские братья typeof'а - decltype и auto неплохо выручают.
                                        Ответить
                                      • >typeof из имени переменной получает её тип? Ну так в Дельфи даже RTTI есть, только это приводит к лишней обвеске кода. А кому может понадобиться в трезвом уме и в здравой памяти объявлять переменную «по образцу», не зная её типа, ума не приложу.
                                        Мне похрен что там есть в твоём языке. Какого типа - какая тебе разница какой тип - тебе надо запилить указатель на функцию - передал её в тайпоф - получил тип.


                                        Тайпоф нужен, а твоя петушрня для неосиляторов нет. Никакого вменяемому человеку не понадобятся индексы не с нуля.
                                        Ответить
                                        • > Никакого вменяемому человеку не понадобятся индексы не с нуля.

                                          Инерция мышления. Штамп, вызванный языками, в которых нет диапазонов.

                                          > Тайпоф нужен.

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


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

                                            >Получи то, не знаю, что. Пользоваться типом, не видя его декларации, опасно, а иногда и невозможно. Всё равно же потребуется уточнить, какие аргументы передавать в эту функцию, а для этого придётся искать декларацию. Не проще ли оттуда и тип скопировать для ясности?
                                            Ты что несёшь, питушок. Ты не видешь функцию, которую ты объявил выше на строчку?

                                            Зачем мне что-то уточнать, питух. Я писал функцию к которой я сделал тайпоф - я знаю её аргументы. А если ты их забыл, то над тайпдефом - есть определение твоей функции.
                                            Ответить
                                            • > Глупому питуху говорить мне про инерцию мышления? Питух, если бы мне они были нужны - я бы запилил их, но они мне не нужны.
                                              > питух питух
                                              А я ТарасБ, приятно познакомиться.
                                              Нет, у тебя именно что инерция мышления, массивы, идущие не с нуля, всё время где-нибудь, да встречаются, просто сишники привыкли в голове делать сдвиги и вычеты и уже не замечают, как делают лишнюю работу.
                                              Ответить
                                              • Такое возможно только в выхлопе питуха. Никому не упёрся индекс массива не с нуля - я жажду примеров.


                                                Только в говнокоде питухов, который не могут нормальное енум написать.
                                                Ответить
                                                • > Такое возможно только в выхлопе питуха. Никому не упёрся индекс массива не с нуля - я жажду примеров.

                                                  Когда у тебя будет побольше практики, кроме полутора примеров говна, не падающего благодаря чуду, то ты сам всё поймёшь.
                                                  Ответить
                                          • > Не проще ли оттуда и тип скопировать для ясности?
                                            Так эти decltype/typeof юзают в основном не в ручном коде, а в макросах/шаблонах, там, где вручную подставлять противно или вообще невозможно.
                                            Ответить
                              • >typeof(say) * p = say;

                                Это к тебе, питушок, тоже относится.
                                Ответить
                      • бинд нужен для того, чтобы из f(args) сделать g(reduced args)
                        в твоем случае - из f(user, string) сделать g(string), причем так, чтобы при вызове g(that-string) на самом деле происходил вызов f(bound user, that-string)

                        вызывать бинд прямо в месте его создания никому не нужно
                        всем нужно передавать свою функцию со своим набором аргументов (f) туда, где ждут g
                        и т.к. обычно это нужно для коллбеков, это означает, что забинденный функтор будут вызывать много позже (если вообще будут), чем он был создан

                        на тебе, просвещайся: http://en.wikipedia.org/wiki/Partial_application
                        Ответить
                  • > Зачем биндить и не юзать сразу
                    Ааа, так вот оно че, т.е. ты придумал одноразовый бинд, который надо вызывать сразу же... Ну да, так оно будет работать. Только нахуй кому-то сдался такой бинд? С тем же успехом можно было передать в функцию два аргумента и не ебать мозг.

                    > Зачем биндить и не юзать сразу
                    Чтобы поюзать как колбек, например.

                    > Съехал на другю тему, которую я даже не поднимал.
                    Ты поднимал тему, что на паскале так нельзя. Ниже Тарас показал как это сделать на делфи 2009 через замыкание. Т.е. слился тут ты.
                    Ответить
                    • показать все, что скрыто>Ааа, так вот оно че, т.е. ты придумал одноразовый бинд, который надо вызывать сразу же... Ну да, так оно будет работать. Только нахуй кому-то сдался такой бинд? С тем же успехом можно было передать в функцию два аргумента и не ебать мозг.
                      Это был вброс-пример - он должен был возвращать указатель на функцию по контексту.


                      >Чтобы поюзать как колбек, например.
                      Чтобы юзать как калбек - я напишу на свиче, либо тупо пару функций.
                      Ответить
                      • > вброс-пример
                        Ну как вброс этот пример просто идеален ;) Но, к сожалению, на практике (не ради вбросов) такой код никому не нужен.
                        Ответить
                        • А теперь скажи - где на практике я тебе советывал его применять? Удиви меня, питушок.
                          Ответить
                          • Значит, ты признался в том, что пишешь код, который не рекомендуешь применять? Нахрена тогда ты его пишешь?
                            Ответить
                            • > Нахрена тогда ты его пишешь?
                              Пример же.
                              Ответить
              • >Ты совсем попутал, петушок? Да мне похрен, хоть хренямбы. Этот код работает потому, что я знаю как он работает и почему. Ты можешь сколько угодно кукарекать - этот код будет работать, а если там выпилить ущербанский fprintf() - будет работать ещё лучше.

                макаки из adobe также полагались на memcpy. И оно работало до обновления glibc.
                Поведение компилятора/библиотек может измениться, но оно будет соотвествовать стандарту. Положил МПХ на стандарты - будь готов, что разрабы компилера/библиотек положат МПХ на тебя с твоими лабами
                Ответить
                • Питушок, какие стандарты? Ты что несёшь? Как я люблю питушков, которые ничего не понимают, но пытаются схватит плюсики своими ущербанскими примерами.

                  Эта функция работает не потому, что она пологается на что-то она полагается на call abi( которое никто менять не будет) для вызова принтф"а и say стек не юзается - он юзается только для бинд - т.е. констекст бинд - там, где ты её вызвал.

                  call abi никогда не поменяют - оно соответствует стандарту. Этот код полагается на стандарты, основанн на них. Только он не работает на петушрском 486-м, но это проблемы петушков, ибо 486 давно нет в природе.
                  Ответить
            • Все таки захватывают значения кложи, а не лямбды.
              Лямбда не обязана быть кложей.

              Вложенные функции так же часто бывают кложами в скриптовых языках, но, конечно, не в твоем примере
              Ответить
              • Главное свойство кложи — захватывать контекст.
                Главное свойство лямбды — анонимная функция.

                Верно?

                Лямбда, но не кложа — анонимная функция, не захватывающая ни одной переменной извне.

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

                Ничего не напутал?
                Ответить
          • {$APPTYPE CONSOLE}
            type
                users_t = (tarasB, superhackkiller1997, other_shit);
                say_ptr_t = procedure(str: PChar);
            const
                users: array[users_t] of PChar = ('tarasB', 'superhackkiller1997', 'other_shit');
            
                procedure say(str: PChar; usr: users_t);
                    begin
            	    Writeln(ErrOutput, users[usr] + ': ' + str)
                    end;
                procedure say_tarasB(str: PChar);
                    begin
                        say(str, tarasB)
                    end;
                procedure say_superhackkiller1997(str: PChar);
                    begin
                        say(str, superhackkiller1997)
                    end;
                procedure say_other_shit(str: PChar);
                    begin
                        say(str, other_shit)
                    end;
            
            function bind(usr: users_t): say_ptr_t;
                begin
                    case usr of
                    tarasB: 
                        bind := say_tarasB;
                    superhackkiller1997: 
                        bind := say_superhackkiller1997;
                    other_shit: 
                        bind := say_other_shit;
                    else
                        bind := say_other_shit;
                    end;
                end;
            
            var
              p: say_ptr_t; 
            begin
              p := bind(tarasB);
              p('shit');
              p := bind(superhackkiller1997);
              p('i''m god');
              p := bind(other_shit);
              p('ko-ko-ko');
              halt(0)
            end.


            http://ideone.com/hvsQUc
            Ответить
            • Не айс. Для каждого значения енума надо добавлять еще одну подфункцию. Но это, по крайней мере, не юзает UB'ы, в отличие от кода голубой коняшки ;)

              P.S. Все-таки настоящих лямбд нет ни в старом паскале ни в сишке. Есть только вложенные функции, которые адекватно пашут только если они чистые (pure), либо если родительский контекст еще жив.

              P.P.S. Может быть в последних делфях и сделали настоящие лямбды...
              Ответить
              • По условию голубой коняшки функция должна возвращать указатель на функцию, т. е. для каждого значения второго параметра должна создаваться функция с уникальным адресом, доступным в любой момент. А создаёт эту функцию компилятор или программист, не велика разница: можно же и генератор написать.
                Ответить
                • > А создаёт эту функцию компилятор или программист, не велика разница: можно же и генератор написать.
                  Не ну можно немного побайтоёбить - выделить платформозависимыми средствами RWX сегмент и ложить в него трамплинчики с защелкнутыми значениями переменных, а потом юзать их как адреса функций.
                  Ответить
                  • А ведь я давно предлагал добавить эту фишку в какой-нибудь язык в нормальном виде. Да, при этом в екзешник вшивается компилятор, скорее всего.
                    Ответить
                    • Ну замыкания, на самом деле, легко мутятся и без такой поддержки. Просто вместо указателя нужно передавать структурку, в которой лежат замкнутые переменные и указатель на функцию. Так это и запилено почти во всех языках, где есть лямбды.
                      Ответить
                      • Да, но то, что предлагаю я, позволяет не только биндить функцию, но и оптимизировать её под биндиваемые параметры.
                        Ответить
                        • А вот кстати, большинство JIT'ов умеющих в инлайн, наверное умеют подобную оптимизацию.
                          Ответить
                          • Это первое, о чём я подумал, но потом я вспомнил о "любви" Тараса к виртуальным машинам.
                            Ответить
                        • Кстати, еще многие интерпретаторы Лиспа примерно так работают.
                          Ответить
                          • Ага, и скомпонованный исполняемый файл, который отображает окошечко с одной кнопкой, начинает весить 40 мб.
                            Ответить
                  • Можно немного поасмоманьячить со сращиваниями хвостов:
                    say_other_shit: XOR EBX, EBX
                        JMP local_say_other_shit
                    say_superhackkiller1997: XOR EBX, EBX
                        JMP local_say_superhackkiller1997
                    say_tarasB: XOR EBX, EBX
                        JMP local_say_tarasB
                    local_say_other_shit: INC EBX
                    local_say_superhackkiller1997: INC EBX
                    local_say_tarasB:
                    ; здесь EBX будет содержать значение второго аргумента
                    Или даже вычислять второй аргумент как разность адресов данного входа и say_tarasB, а в заглушки ставить нопы.
                    Ответить
                    • Можно делать херню типа "меняет значение в какой-то адресе, а потом вызываем функцию", только это уже потоконебезопасно.
                      А вообще я так делал, только проще: моя "лямдба" обращалась к глобальным переменным, предназначенным чисто для неё. Перед подстановкой "лямбды" я менял эти глобальные переменные.
                      Ответить
                      • С «меняем значение» на современных операционках да на современных процессорах можно на DEP нарваться, если у страницы стоит флаг «non-executable».

                        А супротив глобальных переменных есть костыль: ООП. Те же «глобальные» переменные, но только спрятаны в классе/объекте.
                        Ответить
                        • DEP не к месту упомянул, а меня никто не поправил. DEP вызывает проблемы, если строить трамплины из секции данных. А тут с разрешением на запись придётся возиться.

                          В любом случае байтомагия приведёт к необходимости на ходу менять права доступа к странице и всё равно придётся ограничить код одним потоком.

                          Итого: под каждый поток придётся заводить массив «глобальных» переменных.
                          Ответить
                          • > под каждый поток придётся заводить массив «глобальных» переменных
                            TLS.
                            Ответить
            • Дельфи-2009-стиль, синтаксис точно не помню:
              {$APPTYPE CONSOLE}
              type
                  users_t = (tarasB, superhackkiller1997, other_shit);
                  say_ptr_t = reference to procedure(str: PChar);
              const
                  users: array[users_t] of PChar = ('tarasB', 'superhackkiller1997', 'other_shit');
              
                  
              function bind(usr: users_t): say_ptr_t;
              begin
                result := procedure (str: PChar);
                begin    
              	Writeln(ErrOutput, users[usr] + ': ' + str);
                end;
              end;
              
              var
                p: say_ptr_t;
              begin
                p := bind(tarasB);
                p('shit');
                p := bind(superhackkiller1997);
                p('i''m god');
                p := bind(other_shit);
                p('ko-ko-ko');
                halt(0)
              end.
              Ответить
              • Ну вот, спасибо, Тарас. Как видим - в Делфи есть настоящие замыкания. А голубая лошадка продолжает дрочить на ломающийся при любой модификации сишкоблядский быдлокод, основанный на UB'е, который и компилируется то только одним конпелятором.
                Ответить
                • В дельфи тоже можно передать наружу указатель на локальную функцию (не в лямбду, а в указатель на просто процедуру). Ну, просто взять и принудительно кастануть один указатель в другой XD. Будет сразу же вылетать, конечно.
                  Ответить
                • Вообще-то он не ломается, да и не в этом дело. Конпелятор не осиливает это развернуть по религиозным причинам, а мог бы развернуть.


                  На гцц уже столет в обед можно делать на оптимизаторе и на builtin'ах то, что не осилят даже плюсовые шаблоны, причем это компилирует в 100раз быстрее, да и вообще 90% фичей ваших любимых лиспов.


                  Пока сишные конпеляторы держит анальный ущербанский стандарт, который вменяемо не переписывали уже 20лет, а 90% уб которого уже давно не актуальны, да небыли актуальны никогда.


                  И да, icc я не навижу за то, что он слишком умный, а профита от него нет. Шланг говно. Назови мне другие конпиляторы? Только не надо мертворожденцев, аля сановские или ещё чего.


                  Реально в мире для сишки есть один конпелятор и имя ему гцц.
                  Ответить
                  • > а мог бы развернуть
                    Ну да, тут всего 3 вызова bind'а с заранее известным аргументом. В теории можно и сгенерить на каждый по функции, и тогда все будет норм. Но в общем случае, когда в аргумент bind'у попадет не литерал, а какая-нибудь переменная, компилятор ниче раскрыть не сможет, и код распидорасит ;)
                    Ответить
                    • Я тебе уже объяснил - на твоей 486-й он падает не из-за моего кода, а из-за ущербанского call abi.


                      Гцц по царски умеет выявлят константы, даже хорошенько запрятанные - если ему помочь( т.е. запилить реальный const, а не пародию как сейчас) - можно делать тикие штуки.


                      Всегда у биндов будет константа, а если будет не константа - я напишу по другому.

                      Вы нихрена не понимаете, у вас ущербанский универсализм головного мозга.
                      Ответить
                      • > Всегда у биндов будет константа, а если будет не константа - я напишу по другому.

                        Ага, по 10 раз перепиши руками на все случаи константа/некостанта) А ещё на Дельфи пиздел, что много текста лишнего набивать ахахаха.
                        Ответить
                        • Тарас, извини, промахнулся :(
                          Ответить
                          • Так ты мог не исправлять минус, я мог исправить комментарий на противоположный по смыслу, это ведь проще.
                            Ответить
                        • Упоролся чтоли? Одно дело хеадлеры/калбеки, а другое этот щит для сахара. Это пишется в абсалютно разных случая.

                          Мне не надо переписывать, очередно питушок, который не читает, что я пишу? Я просто напишу switch(), а конпелятор сам мне сгинерит 10функций.
                          Ответить
                          • > Я просто напишу switch(), а конпелятор сам мне сгинерит 10функций.

                            http://govnokod.ru/11479
                            Ответить
                            • Ну и что я там вижу, кроме тараса, который не осилил Сишку? гцц умеет сам выкидывать втвления для констант.

                              #include <stdio.h>
                              #include <string.h>
                              
                              typedef enum {tarasB = 0, superhackkiller1997, other_shit} users_t;
                              
                              char * users[] = {"tarasB", "superhackkiller1997", "other_shit"};
                              
                              typedef void(*say_ptr_t)(char *);
                              
                              inline void say(users_t usr, char * str) {
                                  fprintf(stderr, "%s: %s\n", users[usr], str);
                              }
                              void say_tarasB(char * str) { return say(tarasB, str);}
                              void say_superhackkiller1997(char * str) { return say(superhackkiller1997, str);}
                              void say_other_shit(char * str) { return say(other_shit, str);}
                              
                              int main(void) {
                                say_tarasB("shit");
                                say_superhackkiller1997("i'm god");
                                say_other_shit("ko-ko-ko");
                                return 0;
                              }

                              Это будет эквивалентно тому, что ты напишешь функцию отдельно.


                              Так же, просто say() с константой будет сведено к вызову say() с одним аргументом.


                              Так же, если бы ты там запилил свич - гцц бы выпилил его и заменил бы на нужную ветку.


                              Т.е. то, что ты сделал - гцц умеет итак делать для вменяемо написанного кода.
                              Ответить
                              • С ретурном я погорячился, но пусть останется.
                                Ответить
                              • inline void say(users_t usr, char * str) {
                                    fprintf(stderr, "%s: %s\n", users[usr], str);
                                }
                                return say(tarasB, str);

                                лол, inline для ускорения работы указателя на функцию?
                                Ответить
                                • > для ускорения работы указателя на функцию?
                                  > return say(tarasB, str);
                                  facepalm.png

                                  Где тут указатель на функцию, govnomonad?
                                  Ответить
                                  • Разумеется, если указателя не будет, будет работать совсем быстро. На нет и суда нет.
                                    Ответить
                                    • > Разумеется, если указателя не будет, будет работать совсем быстро.
                                      Ну здесь, я так понимаю, указатели автор будет брать на say_*, а не на say. Поэтому inline стоит вполне к месту.
                                      Ответить
                                      • Нет-нет-нет, остаётся вопрос, а что вообще делает inline и на что он вообще влияет? Про особенности линковки разных объектников не будем, юный хакер этого всё равно не знает.
                                        Ответить
                                        • > что вообще делает inline
                                          Рекомендует компилятору, по возможности, копипастить тело этой функции в точки вызова. Это если не вдаваться в подробности линковки и указатели на инлайн функции.
                                          Ответить
                                          • Нет питушок. Говорит конпелятору, что она ИНЛАЙН, что её не существует - конпилятор не будет гинерить код для неё. Не заинлайнит он её только из-за того, если ты напишешь там какое-нибудь говно, которое гцц не инлайнит, аля аллока.


                                            С инлайном не линкуют. Указатель от инлайна не берётся. c89 питушки.
                                            Ответить
                                            • > Указатель от инлайна не берётся
                                              ЧЯНТД?
                                              // test.h
                                              #ifndef TEST_H
                                              #define TEST_H
                                              #include <stdio.h>
                                              inline void test() { printf("You shall not pass\n"); }
                                              #endif
                                              // test.c
                                              #include "test.h"
                                              extern inline void test(); // теперь можно брать указатель и творить непотребства
                                              // main.c
                                              #include "test.h"
                                              int main() {
                                                  void (*t)() = &test;
                                                  t();
                                                  return 0;
                                              }
                                              // gcc main.c test.c -std=c99
                                              Ответить
                                              • А это уже implementation-dependent. Шибко усердные компиляторы не помещают inline-функции в объектный файл, поэтому и адрес взять нельзя. Только копипаст тела в точку вызова, только хардкор.

                                                А менее усердные — да, могут оставить, как в этом примере. extern inline — это взаимоисключающие параграфы.
                                                Ответить
                                                • > Шибко усердные компиляторы не помещают inline-функции в объектный файл
                                                  > extern inline — это взаимоисключающие параграфы
                                                  Хм, сходи почитай C99 :)
                                                  Ответить
                                                  • Спасибо за наводку. Мне приходилось сталкиваться с компиляторами, не поддерживающими C99, поэтому я и усомнился.

                                                    Почитал C99 и C11. Довольно размыто написано и про реализацию inline, и про inline+extern. Ясно только, что inline без extern не создаёт адреса функции.

                                                    An inline definition provides an alternative to an external definition, which a translator may use to implement any call to the function in the same translation unit. It is unspecified whether a call to the function uses the inline definition or the external definition.

                                                    Из этого следует, что inline+extern фактически для одной функции создаёт два описания, но какое из них будет использовано в конкрентом вызове, решать компилятору. Т. е. если он захочет, то заинлайнит, но в любом случае extern заставляет создавать адрес. Я правильно понял?
                                                    Ответить
                                                    • Поправочка - ты ничего не знаешь о c99.

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


                                                      Ехтерн говорт конпелятору захреначить код функции туда, где ты вызвал этот ехтерн. Питушок захреначил его в test.c - конпелятор в test.c захреначит тело инлайн функции. В мейне его не будет.

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


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


                                                Что теперь? Ты заюзал кастыль, а не питух напишет статик, а питух не догуглив до него - заюзает кастыль.

                                                И да, питух, она будет не в мэйне, а в тесте.

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


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

                                          И да, питушок, это не плюсы, это c99+.
                                          Ответить
                      • > Вы нихрена не понимаете, у вас ущербанский универсализм головного мозга.
                        Все. Теперь я окончательно понял смысл кода и ваш диагноз. Любовь к написанию кода для каждого частного случая, и ненависть к более-менее общим решениям. Если бы вы были контроллерщиком, у которого каждый байт на счету - я бы даже понял причину вашей профессиональной деформации, и согласился бы, что иногда байтоебству и интересным хакам есть место... Но контроллерщиков вы тоже считаете говном... Поэтому, простите, но вы страдаете хуйней.
                        Ответить
                        • О5 ваш ущербанский взгляд. Ваше сознание и понимание слабо для понимания, но вы пытаетесь.

                          У меня нет ненависти ни к каким решенияем, а есть ненависть только к говно. Мне похрен насколько универсально твоё решение, если оно говно - оно говно. Даже если ты напишешь частный случай как говно - оно будет говно.


                          У нормального кода тоже каждый байт насчету, каждый цикл. Петушкам не понять. Переиграл - говно не влезло в l1i, lcc - питушок идёт жрать говно.


                          Контроллёрщики - это питушки типа вас, которые отстали от мира лет на 20 и спорят с людьми, будучи gnu89 питушками в лучшем случае, а обычно это даже далеко не с89, да и понимание ЯП на уровне 1-го курса.

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


                          Таких "контроллерщиков" я считаю говном, а иных 1 на тысячу этих ущербанов и шанс мне их встретить крайне мал.


                          Мнение питушков не интересует. Питушок за пределами своего 486-го курятника ничего не видел, а уж осилить с99 - даневжизнь.


                          И этот питушок пишет, что мой код не работате. Ладно бы этот питушок сказал "на моём говне твой окд не работает"( и то можно сделать, чтобы он заработал), но он сказал "неработает", а остальные питушки его поплюсовали - он даволен.
                          Ответить
                          • > Даже если ты напишешь частный случай как говно - оно будет говно.

                            Молодец, а теперь глянь на то, что ты написал
                            Ответить
                            • Ты напишешь это лучше, питушок? Я жду.
                              Ответить
                              • Лол, да.
                                Я напишу либо с лямбдами, если реально нужен бинд, либо просто вызовом функции от 2 аргументов.
                                Ответить
                                • А если там 10аргументов, питушок? А на сишке, питушок? А чтобы возвращало указатель на функцию, как было нужно по контексту.

                                  Нет питушок, ты не напишешь.
                                  Ответить
                                  • И что, если там 10 аргументов?
                                    По контексту нахуй был не нужен указатель на функцию.
                                    Ответить
                                    • Ты питух будешь писать функцию на 10аргументов и 10аргументов каждый вызов передавать? Питух.

                                      Питух? Там было сказанно "указатели на функции в сишке непонятны и вырвиглазны".
                                      Ответить
                                      • Ты питух структуры выучи, их примерно для этого придумали.
                                        Ответить
                                        • Питух выучи call abi, и пойми в какое тормазное говнище превратит твои структуры конпелятор. Хотя что питуху знать.


                                          И да, питух, до того, как передать туда структуру - тебе её надо заполнить. Ты будешь как питух её заполнять? Или менять пару аргументов? А потом в функции разбирать?

                                          Питух.
                                          Ответить
                                          • Питух, у тебя есть бенчмарки, сравнивающие передачу 10 параметров в виде структуры и в виде параметров? Нету? Тогда ты пиздобол.
                                            Предъяви бенчмарк, или ты за базар не отвечаешь.

                                            Структура у меня живёт давно, потому что с ней работают ещё дохрена функций, а уж как аргументы подменять, сам придумай.


                                            ТарасБ.
                                            Ответить
              • Только что проверил, этот код компилируется Delphi XE:
                {$APPTYPE CONSOLE}
                uses SysUtils;
                
                type
                    users_t = (tarasB, superhackkiller1997, other_shit);
                    say_ptr_t = reference to procedure(str: PChar);
                const
                    users: array[users_t] of PChar = ('tarasB', 'superhackkiller1997', 'other_shit');
                
                function bind(usr: users_t): say_ptr_t;
                begin
                  bind := procedure (str: PChar)
                    begin
                      Writeln(ErrOutput, Format('%s: %s', [users[usr], str]))
                    end;
                end;
                
                begin
                  bind(tarasB)('shit');
                  bind(superhackkiller1997)('i''m god');
                  bind(other_shit)('ko-ko-ko')
                end.
                Ответить
                • Анализ генерируемого кода показал, что оператор Result := procedure (str: PChar) begin ... end генерирует много питушни возвращает экземпляр анонимного класса, поля которого содержат контекст (в данном случае это значение параметра usr в момент инициализации) и единственный метод, тело которого совпадает с телом анонимной функции.

                  Таким образом, reference to procedure — это ссылка не на процедуру/функцию, а на экземпляр класса, а в старых Дельфи код будет выглядеть так: http://ideone.com/MHQreD
                  Ответить
                  • И даже так: http://ideone.com/ymY9me
                    Ответить
                  • > возвращает экземпляр анонимного класса
                    Ну собственно по этому эта штука и не совместима с обычным указателем на процедуру, а называется reference to procedure, которая, как я понимаю, представляет собой что-то типа std::function или boost::function...
                    Ответить
              • А вот версия для FPC:
                {$APPTYPE CONSOLE}
                {$modeswitch nestedprocvars}
                uses SysUtils;
                
                type
                    users_t = (tarasB, superhackkiller1997, other_shit);
                    say_ptr_t = procedure(str: PChar) is nested;
                const
                    users: array[users_t] of PChar = ('tarasB', 'superhackkiller1997', 'other_shit');
                
                function bind(usr: users_t): say_ptr_t;
                  var
                    local_usr: users_t;
                  procedure say(str: PChar);
                    begin
                      Writeln(ErrOutput, Format('%s: %s', [users[local_usr], str]))
                    end;
                begin
                  local_usr := usr;
                  bind := @say
                end;
                
                begin
                  bind(tarasB)('shit');
                  bind(superhackkiller1997)('i''m god');
                  bind(other_shit)('ko-ko-ko')
                end.

                Пруф, что работает: http://ideone.com/nNSXTU
                Ответить
                • Внезапно починил: http://ideone.com/MLXyhC
                  const вместо var — и всё работает.
                  Ответить
            • показать все, что скрытоЧто это за петушарня? Мои глаза вытекли и не втекают обратно. Ты реально не видишь разницы между нашим кодом?
              Ответить
              • Разница в том, что один код работает нормально, а другой - только пока подпорки не убрали.
                Ответить
              • Кто сказал, что не вижу? Вижу. В моём bounds checking из коробки.

                Кроме того, в Си нельзя объявить массив с индексами из заданного диапазона. В Си так нельзя: array[users_t]. Массивы только с целочисленными указателями, всегда начинающимися от нуля, — это стиль Бейсика и Фортрана, а не современных языков.
                Ответить
                • > Кто сказал, что не вижу? Вижу. В моём bounds checking из коробки.
                  Видил бы - это гумно не запостил бы. Мне похрен что там в твоей пародии на ЯП, которая ЯП даже не является.
                  > Кроме того, в Си нельзя объявить массив с индексами из заданного диапазона. В Си так нельзя: array[users_t]. Массивы только с целочисленными указателями, всегда начинающимися от нуля, — это стиль Бейсика и Фортрана, а не современных языков.

                  А зачем? Из-за петушков, которые не осилил офсеты? Вычти из каждого первый елемент - вот тебе и твой модный стиль, но ты же это не осилишь.

                  С чего мой язык должен тормазить и быть избыточным, только потому, что какие-то питушки что-то не осилили?
                  Ответить
                  • > Вычти из каждого первый елемент

                    А кто-то говорил, что в Паскале слишком много писать нужно.

                    > С чего мой язык должен тормазить

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

                      > Вот и я не понимаю, с чего бы тут тормоза должны возникнуть?
                      Язык превращается в нестрогое говно, которое будет тормазить как твой паскаль. Вот у меня массив с начальным индексом 100 и мне пришла не константа - что конпелятору делать? Ему надо хранить начальный индекс, потом отнимать от того, что пришло. Следить за тем где же питушок заюзает этот щит.

                      Менять синтаксис, добавлять избыточность ради не нужности и т.п.
                      Ответить
                      • Вычитание — для компилятора это ведь так сложно, да? Без потери производительности на этапе компиляции можно пофиксить адрес массива на начальное значение индекса. Да и s-index-base в инструкциях процессора никто не запрещал.

                        Может быть, ты и многомерные массивы не юзаешь, ведь компилятору придётся тормозить, умножая первый индекс на длину строки?

                        P.S. enum в сишке — костыль.
                        Ответить
                        • > P.S. enum в сишке — костыль.
                          В крестах он ничуть не лучше. Кошерный енум разве что в последних жабах.
                          Ответить
                        • Вот какие ущербаны плюсуют этого анскилледа - это показатель аудитории.


                          Нельзя на этапе компиляции узнать индекс для не костантного значения. У тебя приходит из функции 100, а конпелятор не знает, что пришло 100 - ему надо отнять 100 по семантике.


                          Какие нахрен инструкции? Ты упорот?


                          Нету никаких многомерных массивов, анскилябра. Да, вменяемые люди их не юзают. Максимум, что пацаны юзают - степень двойки и последовательный обход( на лоре какраз идёт батл между мной и тамашними пропацанами, иди попробуй запилить хотябы 10тактов, а я пока поржу - там банальный 2ддифур).


                          Да я клал что там он для кастыль или нет.
                          Ответить
                          • > Нельзя на этапе компиляции узнать индекс для не костантного значения.

                            Паскаль разве позволяет определять массивы с неконстантными границами?
                            var x: array[5..200] of integer;

                            Если нужно обратиться к x[i] (заметьте, что i — неконстантное значение), то компилятор посчитает смещение i*sizeof(integer) - 5*sizeof(integer) + offset x. Так вот -5*sizeof(integer) можно узнать на этапе компиляции. Так трудно вычесть пять несуществующих элементов?

                            > ( на лоре какраз идёт батл между мной и тамашними пропацанами, иди попробуй запилить хотябы 10тактов, а я пока поржу - там банальный 2ддифур)

                            Излагайтесь яснее. Какой батл?
                            Ответить
                            • Ты что несёшь, животное упоротое. Дак упорошка, а отнимать то тебе твои 5*sizeof(type) надо в рантайме, дебилушка. И да, животное - посчитать в рантайме это ничего не стоит. А вот хранить и тратить лишний регистр, а потом отнимать ещё одну байду - это дорого. Теболее вы же 486-е пацаны.


                              Что тебе неясно? в гугле набрал "лор" и "батл".
                              Ответить
                              • Зачем отнимать в рантайме, если можно либо заранее посчитать смещённую ссылку на массив, либо использовать s-i-b, который появился ещё на 386-м, но ты об этом не знаешь, поскольку хаккиры мануалов не читают.

                                > в гугле набрал "лор" и "батл".
                                Набрал. Куча ссылок на вконтактик и всякие разные игровые форумы, а ссылка http://www.linux.org.ru/tag/батл выдаёт 404.
                                Ответить
                                • Питушок, вот у тебя есть любое число от 5 до 100 - ты его узнать не можешь. Твой индекс начинется с 5-ти - т.е. 5 - это нулевой елемент. Твои действия как ты будешь добывать елемент из $mas.

                                  лорбатл
                                  Ответить
                                  • Ну ты бля лошара, (mas-5)+i
                                    первое - это выражение периодна компиляции,
                                    а прибавление i - это уже так же как и при нулевом смещении.

                                    Ты ведь на паскалях-адах нихуя не писал и в асмовый лист нихуя не заглядывал, просто заливисто кукарекаешь про то, в чём не рубишь, да?
                                    Ответить
                                  • 1. Пишем говно типа этого:
                                    const
                                        x: array[5..10] of integer = (1, 2, 3, 4, 5, 6);
                                    var
                                        i, j: integer;
                                    begin
                                        i := 7;
                                        j := x[i];
                                        Writeln(j)
                                    end.

                                    2.
                                    dcc32 -J hello.pas
                                    wdis hello.obj -l

                                    3. Находим в листинге строки:
                                    0061    B8 07 00 00 00            mov         eax,0x00000007 
                                    0066    8B 1C 85 EC FF FF FF      mov         ebx,dword ptr L$10-0x14[eax*4]

                                    0x14 = 20 = 5 * sizeof(integer) — как раз то самое смещение. Да вычитается оно в рилтайме, но в одну инструкцию с добавлением индекса (i = eax) и умножением индекса на размер элемента (4 = sizeof(integer)). Учи коды инструкций 80386, лошара.
                                    Ответить
                              • > Дак упорошка, а отнимать то тебе твои 5*sizeof(type) надо в рантайме, дебилушка.

                                Посоны, приколитесь, наш хацкер не знает, что команда lea нахаляву поддерживает прибавление и вычитание константы при вычислении адреса!
                                Ответить
                                • > команда lea нахаляву поддерживает прибавление и вычитание константы при вычислении адреса
                                  lea тут будет равносильна sub. Тоже лишняя команда. Тут нужно было воспользоваться сложением, встроенным в вычисление адреса в самой операции с элементом массива.

                                  mov -100500(%ebx), %eax,
                                  Ответить
                                  • lea, в отличие от sub, поддерживает прибавление числа, умноженного на 4.
                                    Ответить
                                    • См. листинг выше. Если нужно получить @x[i], Дельфи действительно вставит lea:
                                      lea         ebx,L$10-0x14[eax*4]

                                      А если нужно значение x[i], вместо lea сразу будет mov.
                                      Ответить
                                • > И да, животное - посчитать в рантайме это ничего не стоит.

                                  Кукареку - тарас питушок. И никакая не хвалява. Для питушка поясню, халява будет после разименования, а до это далеко не халява.
                                  Ответить
                                  • Суперхакер не осилил переставить слагаемые в выражении
                                    arr_addr + (index - first_index)?
                                    Ну так если ты такой дебил, что даже до этого не можешь додуматься, то как ты можешь тут со взрослыми дядями спорить?
                                    Ответить
                                    • Питушок, когда ты вырастишь из своего курятника и поймёшь как что-то работает - ты такую херню писать не будешь. А пока ты питушок, который несёт херню, но другие, более анскильные питушки - ему вторят.


                                      Мы посчитаем до мува, ай мы питушки не знаем как работает наша архитектура, под которую "мы"-питушки пишем. Хотя вы 486-епитушки, но даже тогда люди такой херни не сказали.
                                      Ответить
                                      • Сам ты питушок и не знаешь нихера, вычесть константу из адреса можно на этапе компиляции, просто только тупому петушку с красными глазами кажется, что если он какую-то хрень делает надроченными руками вместо компилятора, то у него это получается лучше. Так почему ты на асме не пишешь? А потому что ты анскиллед.
                                        Ответить
                                        • Питух, причем тут конпеляция питух? Питух, ты ничего не знаешь о конпеляторах.

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

                                          Вычитай из адреса - превращай код в питушню. Вычислить адрес конпелятор не может - он может взять только относительный адрес, тогда питушок тебе надо байдени фичагить в линкере. Никому это не упало.
                                          Ответить
                                          • Ты ещё не видел, как выглядит PIC (position independent code) в Линуксе, когда всякая жопа вычитается в рантайме, и какие страшные типы фиксапов бывают в эльфах.

                                            Что же касается массивов, то если все массивы с нулевой базой, то вычитать смещение придётся прямо в исходнике твоей программы, т. е. писать
                                            x = arr[i - base];
                                            вместо паскалевского
                                            x := arr[i];
                                            Ну и чем сишный код лучше, если в Паскале и исходник выглядит короче, и для компилятора больше простора для оптимизации?
                                            Ответить
                                            • Массивы с ненулевой базой не нужны, ибо это питухкод.


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


                                              Паскалевскйи вариант щит, лишнее говно, лишняя морока, лишний регистр, лишняя зависимость. Это не любят ни я, который читает код, ни конпелятор, ни х86.

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

                                              Вычисления рядом с мувом(до него) дороги, ибо зависимость. Лишний регистр - дорого. Вычисление в том месте, о котором я говорил выше - дешевы, но конпелятор не осилит такую оптимизацию в 80% случаев.
                                              Ответить
                                              • Какой в жопу лишний регистр? Ассемблерный листинг видел или ты асм не осилил?
                                                Ответить
                                                • Питух, причем тут твой асмлистинг тут?

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


                                                  Питухи.
                                                  Ответить
                                                  • И что? Лишний регистр будет у тебя, если ты будешь в своей программе пересчитывать базу.
                                                    Ответить
                                                    • Чего базу?

                                                      Лишний регист - это попец для оптимизацтора конпелятора и для перфоманса вообще, питух.
                                                      Ответить
                                                      • Видишь ли, цикл
                                                        for i in A'Range loop (ты ведь знаешь, что это за ЯП, ведь ты знаток 100500 языков, да?) для компилятор не составляет никакого труда превратить в последовательный перебор без лишних вычитаний и тесты на шутауте намекают, что у этого языка со скоростью всё зашибись.
                                                        Просто ты, питух, любишь дрочить руками то, что должен делать нормальный компилятор, и даже не знаешь нихуя про то, на что компиляторы способны.
                                                        Ответить
                                                      • Глаза залил? Выше был пример, где для доступа к паскалевскому array[5..10] of integer лишние регистры не требовались. Компилятор уложился в одну инструкцию. Такую же инструкцию он использует и для массивов с нулевой базой. Вычитание базы сделает линкер.

                                                        Изучи сначала форматы объектных файлов и посмотри, какие типы фиксапов там бывают.

                                                        В твоём же коде, когда все массивы принудительно с нулевой базой, придётся явно писать (i - 5), а это уже лишний регистр и попец для оптимизатора.
                                                        Ответить
                                                  • Для массивов в куче действительно нужно вычитание, но на практике оно нихуя не влияет на производительность.
                                                    Ответить
                                                    • Реально? Питух не осилил матчасть. И для массива не в куче нужно, либо переделывай линкер и всю братию.

                                                      Что ты знаешь о производительности, питух?
                                                      Ответить
                                              • > от от него отнимается база в этапе вычисления i

                                                Вот именно, и это, питушок, делается уже программой.
                                                А вычитание из базы делается компилятором. Слился, питушок?
                                                Ответить
                                          • > сколько стоит бесполезные вычисление адреса до мува.

                                            Нихуя оно не стоит, питух, это делает компилятор, питух, а не программа.
                                            А сколько там думает компилятор, мне похуй, потому что в Дельфи он и так реактивный, в отличие от твоей убогой сишки.
                                            Ответить
                              • Для массива на стеке - смещение массива относительно стекового кадра уже есть и его все равно придется прибавлять к индексу и адресу начала стекового кадра. Оно константно. Вот из него можно вычесть те самые 5 * sizeof(type) на этапе компиляции. На производительности никак не скажется.

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

                                Для массива в куче - вот тут да, получаем лишнее вычитание в рантайме (если на данной платформе нет команды, в которой можно указать два регистра + смещение не вычитая заранее).

                                Видимо у вас из-за этого и спор, что один представил массив на куче, а второй на стеке\глобалку.
                                Ответить
                                • P.S. Имхо на паскале больше проверки диапазонов сожрут, чем это вычитание.
                                  Ответить
                                  • Да, проверки жрут такты, но во-первых, они отключаемы. А во-вторых, собирал я гэцэцэ с экспериментальной опцией «bounds checking»... Так вот по сравнению с этим Паскаль не тормозит.
                                    Ответить
                                • > Для массива на стеке - смещение массива относительно стекового кадра уже есть и его все равно придется прибавлять к индексу и адресу начала стекового кадра. Оно константно. Вот из него можно вычесть те самые 5 * sizeof(type) на этапе компиляции. На производительности никак не скажется.
                                  Смешные 486-е питушки.

                                  >Для массива в куче - вот тут да, получаем лишнее вычитание в рантайме (если на данной платформе нет команды, в которой можно указать два регистра + смещение не вычитая заранее).
                                  МЫ получим питушню. Вменяемому человеку проще вычесть индекс, да и я не раду не видел, чтобы мне такая питушня понадобилась.
                                  Ответить
                                  • > Вменяемому человеку проще вычесть индекс

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


                                      Мы питушки, мы ущербаны - мы не понимаем что нам и когда надо. Вместо того, чтобы хранить нормальным интексы - мы питушки будет хранить говно с мыслью о том, что конпелятор нам поможет.
                                      Ответить
                                      • А зачем ты пользуешься фором? Ты заставляешь компилятор напрягаться. Пиши через goto. Фор для неосиляторов.
                                        Ответить
                                        • Да, фор для неосиляторов. Я юзаю вайл, причем дувайл.


                                          Одно дело напрягать по делу, другое дело напрягать из-за анскильности некоторых питухов.

                                          И да, вор напрягает конпелятор не больше, чем гото.
                                          Ответить
                                          • Ты ещё комментарии покороче пиши, чтобы не напрягать технику не по делу.
                                            Ответить
                                          • Зачем тебе сишка, пиши кодами, компилятор для лохов.
                                            Ответить
                                            • Мне напоминает другого летнего поциента. Тот руками рисовал окружности. #3948. Но словарный запас у него явно был выше.

                                              Деградируют.
                                              Ответить
                          • > Да я клал что там он для кастыль или нет.

                            В Паскале можно объявить массив с дипазоном индексов поверх енума. В Си же нужно хакерство, как в твоём коде tarasB = 0, да к тому же думать, покроет ли размер массива мощность енума.

                            P.S. По запросу лорбатл находится одна ссылка, и то 404.
                            Ответить
                            • Покроет, ещё как покроет.

                              Питушок не осилил гуглокеш?
                              Ответить
                              • > Покроет, ещё как покроет.

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

                                > Питушок не осилил гуглокеш?
                                https://www.linux.org.ru/forum/development/9152724/page20#comment-9209945

                                Это что ли?
                                Ответить
                                • >Ага, если посчитать количество элементов енума и ручками выставить такой же размер массива.
                                  Питух не осилил передать последний елемент как "размер" массива?


                                  Да.
                                  Ответить
                                  • Наш голосистый петушок предлагает передавать руками всякую херню?
                                    По-моему, ты слишком увлёкся онанизмом.
                                    Ответить
                                    • > голосистый петушок
                                      Как-будто бы что-то изменилось, если бы петушок был в бюстгальтере.
                                      Ответить
                                    • Дак питух, в паскале ты тоже передаешь. И будешь всегда передавать. Но путих несёт всякую херню, а питухи плюсуют не понимая всей херни, которую ты рассеях в пространство.
                                      Ответить
                  • > А зачем? Из-за петушков, которые не осилил офсеты? Вычти из каждого первый елемент - вот тебе и твой модный стиль, но ты же это не осилишь.

                    Это нагляднее.

                    > С чего мой язык должен тормазить и быть избыточным, только потому, что какие-то питушки что-то не осилили?

                    Почему ты не пишешь на сосемблере?
                    Ответить
                    • > Это нагляднее.
                      Для меня нет.

                      >Почему ты не пишешь на сосемблере?
                      Пишу, но сишка удобнее ущербанских макроассеблерах, а писать обвес на голяке - я не ущербан. Меня по предсказуемости для моего кода гцц устраивает - я не юзаю асм до случаев, когда припекло.
                      Ответить
                      • Двойные стандарты — такие двойные стандарты...
                        Ответить
                        • Они не двойные. Твой говноязык ущербен, избыточен, непредсказуем и тормазит как говно, да и фичей 0. Дай мне лисп с фичами и предсказуемостью сей, а так же вменяемым синтаксисом - я буду писать на нём.

                          А так ты предсвзятая лалка, которая дальше своего носа не видит.
                          Ответить
                          • Но ведь паскаль такой няшка! ^_^
                            Ответить
                            • Но только шёлковое сердце, шёлковое сердце не пылает и не болит...
                              Ответить
                              • Только procedure и function, procedure и function никогда не будет забыт, никогда...
                                Ответить
                          • > ущербен, избыточен
                            XDDDDDD

                            > непредсказуем
                            Ой умора, а сам на сишке говно пишет :D

                            > да и фичей 0
                            По сравнению с сишкой-то? Ахахаха ты клёвый
                            Ответить
                            • >XDDDDDD
                              питушок.

                              >Ой умора, а сам на сишке говно пишет :D
                              Оно предсказуемо.


                              >По сравнению с сишкой-то? Ахахаха ты клёвый
                              Интринсики, http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html, мощный конпелятор с вменяемой оптимизацией. Нормальные указатели, адресная арифметика, перфоманс и ещё тысячи.
                              Ответить
                      • > Для меня нет.
                        Это тебе так кажется, а когда будешь старый проект отлаживать и в отладчике увидишь мутные цифры вместо человеческих имён, тогда поймёшь.

                        > но сишка удобнее ущербанских макроассеблерах
                        Так ты ведь анскилед, на сишке, скрывающей всё за тоннами непонятных абстракций, придуманных для ущербанов, тебе писать удобнее, чем на нормальных родных асмокодах? Какой ты хакиллер, ты лошара недоделанная же)))))
                        Ответить
                        • >Это тебе так кажется, а когда будешь старый проект отлаживать и в отладчике увидишь мутные цифры вместо человеческих имён, тогда поймёшь.
                          Я не работаю говнокопателем за еду, питух.

                          >Так ты ведь анскилед, на сишке, скрывающей всё за тоннами непонятных абстракций, придуманных для ущербанов, тебе писать удобнее, чем на нормальных родных асмокодах? Какой ты хакиллер, ты лошара недоделанная же)))))
                          Да, мне удобнее. Большой асмкод выглядит как питушня, а вменяемых ассемблеров нет.
                          Ответить
                          • > Я не работаю говнокопателем за еду, питух.

                            Ты вообще нигде не работаешь, и даже в школе не учишься.

                            > Да, мне удобнее.
                            Хах вот жеж анскилябра
                            (чуть пальцы не сломал на последнем слове)
                            Ответить
          • > Это не дело вкуса, а дела анскилледа. Я знаю сам где и что, а лишнии хрени мне не упёрлись - с такими аргументами только в школотрон.

            Ахаха, анскиллед. С возрастом самоуверенность проходит.
            Ответить
            • > С возрастом самоуверенность проходит.
              Или наоборот развивается в тотальную мизантропию и манию величия ;)
              Ответить
          • Вброшу-ка я ещё что-нибудь. Вот код с той же семантикой, но без грехопадения: http://ideone.com/zLNMHx
            Ответить
            • Питух, ты сделал за конпелятор ту оптимизацию, которую он не осилил сам, ибо питух.


              Да и глобальная переменная - ты чё, это не по мете.
              Ответить
              • Твой код падает на ideone.com. Он вообще будет падать, если компилятор модифицированный, например с прополисом от IBM или с другим защитником стека. Компилятор не может догадаться, для чего тебе нужен стек.

                Ну если глобальная переменная не нравится, сделай по-другому, но так, чтобы не падало. Покажи класс.
                Ответить
                • >Ну если глобальная переменная не нравится, сделай по-другому, но так, чтобы не падало. Покажи класс.
                  Мне нравится - питушкам нет.

                  >Твой код падает на ideone.com. Он вообще будет падать, если компилятор модифицированный, например с прополисом от IBM или с другим защитником стека. Компилятор не может догадаться, для чего тебе нужен стек.
                  Патамучто там питушарский call abi. Нахрен мне твой питушарский защитник стека? Я похож на питушка, которому это надо?

                  Он может это оптимизировать, как он это сделал в твоём случае. А вот он не оптимизирует, ибо питушок. Из-за ущербанского стандартса питушарни.
                  Ответить
                  • Весь мир питушарский, потому что по твоим ущербным правилам не работает?
                    Ответить
                    • Давай я тебе расскажу питошок, вот есть структура на стеке из 5елементов(тупых интов) - конпелятор её передаёт через стек, а если из 2-х - передаёт через регистры, а если передать 5полей, то через регистры.

                      Вот объясни, почему конпелятор делать через стек, а не через регистры? Патамучто питушки перечиталь call abi.

                      Ну вообще-то объясни, почему конпелятор не оптимизирует этот случай? Что тут ущербного?
                      Ответить
                      • А нахуя ты вообще структуру по копии передаёшь? Что быстрее - передать один указатель или 10 аргументов?
                        Ответить
                        • 10аргументов. Ты итак уже обрабатываешь со структуру - её поля у тебя итак лежат в регистрах и вызов тебе ничего не будет стоить.

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

                          Вобщем мужики вообще не юзают не инлайн функции - только в редких случаях, ибо слишком тормазит. Инлайн в 99% случаев.
                          Ответить
                          • > задампить все регистры и прочую питушню
                            http://clck.ru/8hHAM
                            Ответить
                          • > 10аргументов

                            Вот ты и снова лоханулся.

                            > Ты итак уже обрабатываешь со структуру - её поля у тебя итак лежат в регистрах и вызов тебе ничего не будет стоить.

                            Это кто тебе сказал, что компилятор догадается все эти числа в регистры положить, да ещё и в точности в том порядке, в котором они передаются по конвенции?

                            > Вобщем мужики вообще не юзают не инлайн функции - только в редких случаях, ибо слишком тормазит. Инлайн в 99% случаев.

                            Если всё заинлайнить, то пограмма как раз замедляется, потому что код раздувается и перестаёт влезать в кэш, только ты, лошня понторезная, нихуя про это не знаешь и порешь кулхацкерную хуиту 20-летней давности.
                            Мужики вообще пишут inline только чтоб линковка не глючила, потому что компилятор лучше них сообразит, когда надо, а когда не надо встраивать тело функции, и делает он это независимо от слова inline.
                            Ответить
                            • >Вот ты и снова лоханулся.
                              Питушок.

                              >Это кто тебе сказал, что компилятор догадается все эти числа в регистры положить, да ещё и в точности в том порядке, в котором они передаются по конвенции?
                              Это тебе не делфи, питушок - гцц так умеет.

                              >Если всё заинлайнить, то пограмма как раз замедляется, потому что код раздувается и перестаёт влезать в кэш, только ты, лошня понторезная, нихуя про это не знаешь и порешь кулхацкерную хуиту 20-летней давности.
                              На лоре было про это тема - и такие питухи как ты - там слились.


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

                              Ты говоришь "неможет" на то, что конпелятор может и гвооришь "может" на то, что конпелятор не может. Питух.
                              Ответить
                              • > Это тебе не делфи, питушок - гцц так умеет.

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

                                > Питухи так пишут. Нихрена твой конпелятор незнает. Ты питух ничего о конпеляторах не знаешь. Ты, питух, несёшь полную херню.

                                Это ты сам себе сказал? В любой теме ты только кукарекаешь общими словами, под внешним слоем этих слов, чуть копми, видно полное незнание темы, только подростковый гонор и вера юного дрочера в то, что он руками лучше машины что-то сделает.
                                И да, передача 10 аргументов - это тоже дроево руками, передача структуры - это наглядно и просто, и как там компилятор распихает элементы структуры по регистрам - это уже разработчиков компилятора проблемы.
                                Ответить
                                • > Отсосу у симпатичного парня [email protected]

                                  спасибо, не надо
                                  Ответить
                                • Рассказывать ли лошадке, что Дельфи, например, при попытке передать по значению структуру, не помещающуюся в регистр, выделяет память под её копию, а в вызываемую функцию фактически передаёт только указатель?

                                  Т. е. передают по значению то, что не помещается в регистр, только питухи. А поскольку структуру мы передаём по ссылке, вызываемая функция один раз извлечёт её адрес, а поля будет извлекать по относительным смещениям. Лошадке же на 10 аргументов может не хватить регистров, поэтому придётся захламлять стек.

                                  Да и при вызове функции заполнить структуру можно одним махом. Если там нули, это будет одна инструкция процессора типа REP MOVSB, а лошадка будет передавать каждый ноль индивидуально.
                                  Ответить
                                  • Какой нафиг стек, у него же есть распиздатое call abi, у которого 10 регистров.
                                    И конечно же, он передаст всё через 10 регистров, оставив компилятору минимум свободных регистров и свободы для оптимизации.
                                    Ответить
                                    • А если мне надо передать 30 параметров?
                                      Ответить
                                      • Питух, передаёт даже 10 аргументов только питух.
                                        Ответить
                                        • А сообщение назад ты защищал передачу 10 аргументов.
                                          А тру поцаны передают указатель на структуру.
                                          Ответить
                                  • Чё ты несёшь, питух.

                                    Питух, ты думаешь она будет работать быстрее, чем 10мувов(хотябы 8-мибайтных, выровненым 16байтным она в питушню сольёт) подрят? Питух. Осисиль мемкопи, питух. Кому упрёлось занулять структуру в функции, питух.


                                    Питух, какой ноль? Питух?
                                    Ответить
                                • Питух анскильные, 0 аргументов 100% ко-ко-ко.
                                  Ответить
                                  • Ты опять слил.
                                    Ты безнадёжен.
                                    Ответить
                                  • http://vk.com/id91498424 увидев его ник впервые прочитал его как ikarus-gay по концентрации луркоебов и ссачеров этот форум зашкаливает, ну и любителей отсосать у кавказцев
                                    Ответить
                                    • А вот наш старый знакомый опущенный парашный пидор припёрся защищать школохакера.
                                      Ответить
                                    • Дык старался же выбрать неоднозначно читаемый ник, чтобы детектировать долбоёбов. Раз пришло время цепляться к никам, значит, тема этой ветки исчерпана?
                                      Ответить
            • Нереентерабельно и непотокобезопасно.
              Ответить
              • Ещё бы. Код возвращает три раза один и тот же указатель. Как прибинденная функция должна угадать свой второй аргумент, если она в трёх случаях одна и та же? Только через глобальную переменную, ибо say одна, вызов bind новой функции не создаёт.

                Другое дело, что можно было реализовать стек для global_usr и функцию unbind, которая будет забирать из стека.
                Ответить
          • Продолжим специальную олимпиаду?
            #include <stdio.h>
            
            typedef enum {tarasB = 0, superhackkiller1997, other_shit} users_t;
            
            const char * users[] = {"tarasB", "superhackkiller1997", "other_shit"};
            
            typedef struct say_struct_t {
              users_t usr;
              void operator () (const char * str) {
                fprintf(stderr, "%s: %s\n", users[usr], str);
              }
            } *say_struct_p;
            
            say_struct_t bind(users_t usr) {
              say_struct_p p = new say_struct_t;
              p->usr = usr;
              return *p;
            }
            
            int main(void) {
              bind(tarasB)("shit");
              bind(superhackkiller1997)("i'm god");
              bind(other_shit)("ko-ko-ko");
              return 0;
            }
            Удалось реализовать без трамплинов и без классов: http://ideone.com/6TRIpp
            Ответить
            • Это класс. Это ничем не отличается от моего кода, кроме того, что g++ это умеет опитимизировать. Гцц превратил это в функцию с 2-мя аргументами, а потом заинлайнил.
              Ответить
              • Потому и зелёный цвет. Функция класса — это фактически функция с n+1 аргументом, потому что приходится передавать контекст (this).

                Этот код отличается от твоего, поскольку твой не работает с -fstack-check и с -fstack-protector. И сможет ли твой код обработать такое:
                int main(void) {
                say_struct_t p, q;
                  p = bind(superhackkiller1997);
                  q = bind(other_shit);
                  p("i'm god");
                  q("ko-ko-ko");
                  p("i'm very good");
                  q("trololo");
                  return 0;
                }
                Мне твой код с аналогичным мейном выдал только одну строку.
                Ответить
                • >поскольку твой не работает с -fstack-check и с -fstack-protector.
                  Не упёрлось никому. Надо быть полным животным, чтобы упороть стек. И да, у меня с ним прекрасно работает.

                  Мне выдаёт всё норм:
                  superhackkiller1997: i'm god
                  other_shit: ko-ko-ko
                  superhackkiller1997: i'm very good
                  other_shit: trololo


                  Выкинь свой атстойный 32битный питух, который протух лет 10назад - и лешишься проблем. Каллить функции через стек, когда у тебя есть 30регистров - упоротая затея, достойная топ1 по упоротости.
                  Ответить
                  • Выходит, что ideone.com и compileonline.com — питухи, потому что у них царский код не работает ни с какой моделью вызова.
                    Ответить
            • > Удалось реализовать без трамплинов
              Трамплины не от хорошей жизни придумали... Они нахер бы никому не сдались, если бы не требовалась совместимость с сишными функциями, которым нужен указатель на функцию. И вот этот say_struct_t ты вместо указателя на функцию просунуть не сможешь.
              Ответить
      • Паскаль был создан для студентиков и школьничков, которые еще не опошлились новомодными приемчиками и идиомами. Потому для них сделали коротенькие "пиписьки" - :=, что бы показать, что малыши.
        Создатели си возгорелись завистью и сделали для своего язычка пипиську подлиннее ==, и вставили ее в логические операции, что бы чаще видно было ее.
        Но самая большая, конечно же у программистов php, ===. Создатели этого языка говорят нам, что самые лучшие и востребованные специалисты находятся именно в этой области. Так что бросай ты и паскаль и си и что бы то ни было и изучай php! Ты будешь обласкан судьбой и женщинами и даже пользователи говнокода женского пола будут истошно прикусывать губу лишь при появлении твоего нового комментария.
        Аминь!
        Ответить
        • А говорят, что есть языки с более длинной пиписькой, а именно ====
          Ответить
          • ИХ НУЖНО СРОЧНО ИЗУЧАТЬ!!!
            Ответить
            • http://govnokod.ru/13111
              Ответить
              • > if (fooTextField.getText().equalsIgnoreCase ("")) {

                Ява - язык для женщин?
                Ответить
              • Был кстати недавно выбор что брать следующим C++ или Java. :)
                Все еще в раздумьях.
                Ответить
                • > Все еще в раздумьях.
                  Java, C#.

                  Если еще раздумываешь - не связывайся с С++.
                  Ответить
                  • Я и так шарпей. :)
                    Но на шарпах работа нудная. На джаве вроде бы поинтересней, но хз.
                    Ответить
                    • Ну можно жабой в контексте ведроида позаниматься. Мне понравилось. По сравнению с тем, что я видел, (SDK симбиана чего стоит) SDK очень грамотное и хорошо документированное.
                      Ответить
                      • Да, кстати, ваше авторитетное мнение хочу услышать, почему с C++ не стоит связываться?
                        Ответить
                        • Если не требуется срочно на нём что-то писать, засыпаешь примерно на середине книги Страуструпа.
                          Ответить
                        • Потому что NDK - говно
                          (ник не занимать, у меня акк гугловского разработчика уже так назван).
                          Ответить
                          • Ну я не имел ввиду только мобильные платформы. Где-то же еще С++ держит свои позиции?
                            Ответить
                            • Везде, где нужно написать гоночный велосипед.
                              Ответить
                              • Это печально.
                                Ответить
                              • роман, тебя прям в крайности бросает
                                от любви до ненависти?

                                а отвечая на вопрос - без хотя бы малой доли любви к битоебству (к слову, хотя бы понимать, что такое byte order, да?) в c/c++ делать нечего, спасибо
                                Ответить
                                • Не нужно интерпретировать мой комментарий как выражение ненависти. Скорее, это сарказм.
                                  Я имел в виду везде, где необходимо что-то нестандартное, требующее большой производительности. Для типичных вещей есть более приятные инструменты.

                                  Ну и продуктивно писать на плюсах, не прочитав пару талмудов, довольно сложно.
                                  Ответить
                                  • > не прочитав пару талмудов, довольно сложно
                                    А прочитав эту пару талмудов еще сложнее ;) Особенно если среди них попался Александреску.
                                    Ответить
                                    • > если среди них попался Александреску
                                      Ну а что такого в Александреску? Почему-то его уже немного устаревшую книжку преподносят как жуткий матан. По мне так она написана живым языком, весьма легко читается и поднимает много интересных тем.
                                      Ответить
                                  • >>Ну и продуктивно писать на плюсах, не прочитав пару талмудов, довольно сложно.
                                    Как и на любом другом языке. Без рихтера, на шарпах тоже делать нечего.
                                    Ответить
                                • Ну а что поделать, Роман прав насчет гоночного велосипеда. Если на производительность пофиг - можно и чем-то более высокоуровневым со сборщиком мусора воспользоваться...
                                  Ответить
                                • Не в бровь, а в глаз? Что, если я не знал раньше понятия порядка байтов, то я не осилю C++?
                                  Я так не думаю.
                                  Но, только ради того, что бы кому-то что-то доказывать, я его изучать не хочу. О перспективах думаю.
                                  Ответить
                                  • > Что, если я не знал раньше понятия порядка байтов, то я не осилю C++?
                                    Осилите конечно, лет через 5, как и все остальные крестовики, но просто там настолько много подобных архитектурных и языковых тонкостей, что можно свернуть голову. А если нет желания связываться с тонкостями платформ (а у вас его явно нет, т.к. про байт ордер только недавно узнали), то лучше писать на яве или шарпе, и горя не знать. Смысла в использовании плюсов "вместо явы" в наши дни нет никакого.
                                    Ответить
                                    • Можно самоограничиться и писать брутально по-паскальному, через СТЛ, тогда только изредка будешь на грабли синтаксиса натываться.
                                      Ответить
                                    • Ну как, осилили?
                                      Ответить
                                • И вообще, я пошел в программирование, потому, что это весело.(Да, для меня весело)
                                  Потому, что это мне нравится. Если я чего-то не знаю, то это не значит, что я это не хочу знать, а значит, что я занимался другим.
                                  Так что не надо ставить мне рамки пожалуйста.
                                  Ответить
                          • Кстати, про гугловскую разработку, похвастаюсь и тут.
                            Я набрал 1000 закачек (https://play.google.com/store/apps/details?id=tarasB.FluidArkanoid.free) и в честь этого выложил исходники (http://www.gamedev.ru/files/?id=88780), думаю, материала для уютненького там тоже достаточно.
                            Ответить
                        • lurkmore.to/Копипаста:Программирование#.D0.A1.D0.A2. D0.A0.D0.90.D0.A3.D0.A1.D0.A2.D0.A0.D0.A 3.D0.9F_.D0.B8_.D0.9B.D0.AF.D0.9C.D0.91. D0.94.D0.90
                          Ответить
                  • Можно D. Тот же C#, но без привязки к богомерзким виртуальным машинам.
                    Ответить
        • Вобще-то пиписька у Си короче, ибо '='. В паскале сравнение не короче.

          Это сделанно для того, что глупые школьнички путают = ==.
          Ответить
      • > := - почему пиписька, а не нормально равно?
        :=3
        Ответить
    • Мне кажется или дефекейта с тарасом затроллили? Вброс-то был тьфу и растереть.

      А по теме: лабы и к приравненный к ним код - не ГК по определению.
      Ответить
      • Какой троллинг? Здесь серьёзная дискуссия на тему «Pascal vs C», без решения которой дальнейшее обсуждение невозможно.
        Ответить
      • >Мне кажется или дефекейта с тарасом затроллили
        Почему нынче за троллинг принимаются малограмотные попытки залупаться, заканчивающиеся поеданием говна в прямом эфире?
        Ответить
    • А ведь синтаксис паскаля объясняется достаточно просто:

      «одним из design goals при разработке Паскаля была возможность LL(1)-разбора — т.е. автоматом, который видит только один следующий символ текста. Большинство «живых языков» в LL не укладываются: например, в Си на int может начинаться объявление либо переменной, либо функции, и мы не может отличить одно от другого, пока не дочитаем строку до конца.»
      http://habrahabr.ru/post/99466/
      Ответить
    • http://ru.wikipedia.org/wiki/Дельфинин
      Ответить
    • Офигенный тред, прочитал весь. Довольно годно и познавательно.
      Вот и всплывает постоянная слабость уютненького - длинные нити никак не отделить. Явно нужна вложенность поглубже или чисто линейный вид. В паре мест можно запутаться, кто кому чего отвечает.
      Ответить
      • Ну дак сейчас век питушков. А питушки умеют только нести херню, ибо нихрена не понимают. И ваять херню, ибо нихрена не понимают. И т.к. таких питушков 90%(на говнокоде все 99), то эти питушки всегда будут заплюсованы братьями по разуму.
        Ответить
      • Здесь не хватает ссылки на комментарий предыдущего оратора. Её можно было бы воткнуть или перед комментарием, как в соцсетях:
        eth0, отвечаю на ваш вопрос...
        Или добавить кнопочку после # (ссылки на сам комментарий в преамбуле комментария).

        И, чтобы долго не листать, пригодилось бы сворачивание ответов к комментариям корневого уровня, т. е. кнопки сворачивания/разворачивания кустов, как в том же ЖЖ.
        Ответить
    • Привет, посетите наш сайт yadelphi.ru!
      Ответить
    • Подведём итоги:
      - паскаль говно
      - царь, ты мой кумир
      Ответить
      • паскаль не говно, просто он уже 17 лет никому не нужен
        Ответить

    Добавить комментарий