1. PHP / Говнокод #20014

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    function loadQuestionsInTest() {
      $mysqli = connectDB();
      $testID = $_POST['testID'];
      $testSets = $mysqli -> query('select * from testsets where test_id = '.$testID.';');
      if ($testSets->num_rows > 0) {
        $query = [];
        while ($row = $testSets -> fetch_assoc()) {
          $loID = $row['lo_id'];
          $questionsCount = $row['count'];
          $questionsInLO = $mysqli -> query('select count(*) as num from questions where lo_id = '.$loID.';') -> fetch_assoc()['num'];
          if ($questionsCount > $questionsInLO)
            $questionsCount = $questionsInLO;
          $query[] = '(select id, content, result, lo_id from questions where lo_id = '.$loID.' order by rand() limit '.$questionsCount.')';
        }
        $query = implode(' union ', $query).' order by rand();';
        
        $questionRes = $mysqli -> query($query);
        $questions = array();
        while ($row = $questionRes->fetch_assoc()) {
          $questionType = json_decode($row['result']) -> type;
          if ($questionType == 'check') {
            $question = array(
              'id' => $row['id'],
              'content' => $row['content'],
              'loID' => $row['lo_id']
            );
            array_push($questions, $question);
          } else if ($questionType == 'input') {
            $questionContent = json_decode($row['result']);
            $questionText = $questionContent -> text;
            $answers = $questionContent -> answers;
            for ($i = count($answers) -1; $i >= 0; $i--)
              $questionText = mb_substr_replace($questionText, '(|answer'.$answers[$i] -> id.'|)', $answers[$i] -> posStart, $answers[$i] -> posEnd - $answers[$i] -> posStart);
            $content = array( 'type' => 'input', 'text' => $questionText );
            $question = array(
              'id' => $row['id'],
              'content' => json_encode($content, JSON_UNESCAPED_UNICODE),
              'loID' => $row['lo_id']
            );
            array_push($questions, $question);
          }
        }
        $response = json_encode($questions, JSON_UNESCAPED_UNICODE);
        echo $response;
        $mysqli -> close();
        return;
      }
      echo '[]';
      $mysqli -> close();
    }

    Моя дипломная работа по теме "тестирование студентов". Загрузка вопросов для прохождения теста из базы. Вопросы должны идти в рандомном порядке, варианты ответов тоже.

    Запостил: cotheq, 16 Мая 2016

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

    • а типа если дипломная работа, то можно уж как-нибудь?

      почитай про mvc, не для преподов, а для себя
      и выбери другой язык, ни одна пыхоблядь mvc так и не освоила
      Ответить
      • кто такая пыхоблядь? B чем она отличается от скажем питонобляди ?
        Ответить
        • предложи современный php фреймворк, который на слое "модель" не заставляет писать простыни, включающие в себя одновременно описания моделей, коллекций, код по чтению этих сущностей (например, из базы), код по обработке этих сущностей, а делит всё это на разные слои с предсказуемыми контрактами
          Ответить
          • Пэхапэшники не пишут простыни для моделей. Они пишут контроллеры трёхметрового роста, толстые, в сучках и наростах.
            Ответить
            • с огромной азбукой рнр для проффессионалов под мышкой
              не прочитали ни одной книжки
              Ответить
              • С огромным форумом, где всегда помогут: http://tinyurl.com/jqwjbh7
                Ответить
          • Да полно их. Хоть Yii хоть Laravel хоть simfony с её доктриной.
            Ответить
            • штооэ
              ты перечитай ещё раз внимательно что я написал
              http://www.yiiframework.com/doc/guide/1.1/ru/basics.best-practices
              Таким образом, если применить это к рассмотренному выше примеру, необходимо добавить модель News с методом getLatestNews в пользовательскую часть и ещё одну модель News с методом getDeletedNews в административную часть.
              я же говорю
              пыхоблядь не может в mvc
              Ответить
              • Нахуй. Делаем финт ушами. Делаю дочерний класс от News туда добавляю метод getLatestNews для пользователського части и ещё одну дочку для админки нужнна будет еще одна модель для REST и для неё сделаю дочку.
                Базовая модель будет таскать данные из БД а бизнес логику буду реализовывать в дочках.

                Если кто то не умеет в пхп это его проблемы.
                Ответить
                • Уасилий, ещё. раз. почитай. что. написано. в. моем. посте.

                  Должен быть слой, который умеет читать и писать коллекции твоих сущностей:
                  NewsRepository.getLatestNews() -> Collection<NewsItem>
                  NewsRepository.getDeletedNews() -> Collection<NewsItem>

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

                  В самой модели (NewsItem) никаких методов нахуй не нужно, это декларация, она as is уйдет в wsdl, wadl, она прекрасно мапится (де/сериализуется) на объекты в запросах и ответах, таблицы и другие вещи, ничего не ведающие про методы.

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

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

                  > выбери другой язык, ни одна пыхоблядь mvc так и не освоила
                  ЧТД
                  Ответить
                  • причем, все вышеописанное (model-repository-service-controller-view) практически в таком же виде имплементируется в SPA приложениях, которые мы делаем на фронте, на ангуляре ли или митриле

                    прекрасно работает, особенно, с тайпскриптом
                    Ответить
                  • Я предлагаю. Разделить мух от котлет.

                    Родительский класс умеет читать писать коллекции получать сохранять отдельные инстансы, знает если ему показать о физических связях в хранилище. НЕ знает о бизнес процессах и о том где и как хранятся данные.

                    дочерний класс знает про бизнес логику. Бизнес логика тоже может быть разделена на части. Логика приложения отличается от логики админки хотя они и работают с одними сущностными.
                    Если требуется поменять бизнес логику то мы меняем дочерний класс над моделью данных.

                    И еще зачем нужны лишние слои абстракций типа repository service?
                    Лепить абстракции ради абстракций путь в никуда.
                    Ответить
                    • у тебя родительский класс и дочерний класс с одной стороны как бы на одном уровне абстракции, а с другой наделены абсолютно разными задачами - один как бы размечает атрибутный состав, а другие типа лезут в базу

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

                      ты уже написал в дочернем классе кучу sql шита с этими волосами, т.к. у тебя нет слоя абстракции, решающего конкретную задачу "дай мне 100 объектов, откуда тебе виднее", ты начинаешь судорожно писать какие-нибудь switch-case или портянку if

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

                      далее
                      тебе требуется поменять бизнес-логику
                      у тебя в элементе "Новость" появляется атрибут "источник", и теперь тебе надо в обоих дочерних классах поебстись с этим атрибутом единообразно

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

                      > Лепить абстракции ради абстракций путь в никуда.
                      я вообще считаю неразумным делить всё на файлы и даже папки, мало того, что это не удобно - закрываешь один файл, открываешь другой, так ещё и интерпретатору пиздец неудобно, это существенное замедление
                      поэтому самые крутые проекты всё пишут быстро и эффективно в index.php
                      Ответить
                      • Футаба так и написана: состоит из единственного index.php, в который упаковано всё, даже небо, даже Аллах. При этом ООП вообще не используется, что не мешает Футабе быть популярным движком для АИБ.
                        Ответить
                        • Круче index.php может быть только index.pl
                          Ответить
                        • Блин, у футабы ещё и комменты на лунном...
                          Ответить
                        • Для 3,5 человек и есть устраивает функционал искаропки - почему бы и нет? Двачик и сосачик вон вообще был написан на перле, после того как стал лагать как сука (его еще и кремлеботы ддосили) - его переписали, теперь норм,даже апи есть.
                          Ответить
                      • Ещё удобно протестировать бизнес-логику, не поднимая BD. Ах, да, зачем писать тесты, мы любим разведку боем продом.
                        Ответить
                        • Разведка BSOD'ом.
                          Ответить
                          • ))ты дрова что-ли под винду пишешь?
                            Ответить
                            • Нет.
                              Ответить
                              • имхо борманд уютно устроился в r&d какого-нибудь интела

                                мол, приехал борманд в новосиб, а он ему как раз!
                                Ответить
                                • > уютно устроился
                                  Угу. Задачки интересные, люди хорошие, зарплата очень даже норм. Ня ^_^
                                  Ответить
                                  • ну вот

                                    а осилил бы PHP, работал бы сейчас:
                                    https://novosibirsk.hh.ru/vacancy/17051910?query=php
                                    Ответить
                                    • > Возможность работать с одним из самых популярных PHP Framework
                                      Эх, такую возможность упустил...

                                      З.Ы. Ну там вон рядом сеньор-похапор есть. Уже 60-80к, получше.
                                      Ответить
                                      • >>сеньор

                                        джуниор пхп пишет так:
                                        $polzovatel = mysql_query("SELECT * from polzovateli where id=".$_GET['id'].);

                                        а сеньер так
                                        $polzovatel = mysqli_query("SELECT * from polzovateli where id=".$_GET['id'].);
                                        Ответить
                                        • $user = mysqli_query("SELECT * from users where id=".mysql_real_escape_string($_GET['id'])); же.

                                          Сеньор должен хотя бы немного знать инглиш и уметь экранировать, иначе какой он нахуй сеньор...
                                          Ответить
                                          • >>mysql_real_escape_string
                                            но все равно у него в базе должен быть пользователь "O\'Hara". Причем в конце концов должен получиться O\\\\\\\'Hara"
                                            Иначе какой он пхпист>?
                                            Ответить
                        • в настоящем пхп проекте часть логики реализована в SQL запросах из серии $smartUser = mysql_query("SELECT user from Users where IQ=42");

                          так что без БД никак
                          Ответить
                        • > BD
                          это BazaDannyh, разумеется.
                          Ответить
                • Ну как, реализовал?
                  Ответить
          • > −1
            давайте, давайте, пыхобляди, не стесняемся, рассказываем о своих охуительных приключениях с бизнес-логикой в унаследованных моделях
            модели сами себя не унаследуют
            Ответить
        • я не знаю что такое питоноблядь, но словом "пыхоблядь" обычно называют людей, которые используют для разработки PHP. Такие люди, как правило, весьма посредственные программисты.
          Ответить
          • Люди которые не осилили пхп, обычно и исходят на говно от упоминания о нем.
            Ответить
            • Я никогда не обсыраю то, что не пробовал.
              Я пробовал PHP и могу сказать что готов подписаться под каждым словом в статье "фрактал плохого дизайна"
              Ответить
              • вот пробовал и не осилил.
                Я про это и говорил.
                Ответить
                • > и не осилил
                  И слава богу. Хватит нам и одного адепта PHP.
                  Ответить
                • "Попробовал жрать говно и не осилил".

                  Уж какая потеря. После прочтения фрактала мне показалось что проще осилить питон чем рнр на таком уровне, чтобы не наступать на грабли. Нахуй он такой нужен, васютка? Чтобы зарабатывать деньги, правя код людей, работавших за еду или лайк в инете?
                  Ответить
                  • Разве плохо, что Васютке удаётся заработать хоть какие-то деньги?
                    Ответить
                • глупый троллинг -- единственное, на что способен пхпшник)
                  Ответить
            • Я не осилил PHP, поэтому считаю, что PHP - говно. Не осилил - это значит не понял, как на нём сделать что-либо приличное и сложное. Зато осилил другие языки, менее блядские.

              p.s. Продолжаю жрать кактус использовать PHP в тех задачах, где его блядство нивелируется его плюсами.
              Ответить
              • это какие? на гк достаточно аргументов про говнистость любого языка.
                какой блядский язык ты считаешь менее блядским?
                Ответить
                • Менее блядские почти все языки. По крайней мере порог вхождения чуть повыше и адекватность архитектуры почти у всех лучше. Под вопросом только JS.
                  Какие задачи проще на PHP сделать? Да самые простейшие. Вывести список сотрудников с ебальниками на корпоративном портале. Да, тупым <table>, без всяких дивов. Показать календарь и закрасить красным выходные дни. Нарисовать тортики, если дни рождения сотрудников. Ну и тому подобное одноразовое корпоративное говнецо, где не надо всеми этими правильностями заморачивается.
                  Смысл кода пыха в том, чтобы отработать и умереть.
                  Ответить
                  • > Да, тупым <table>, без всяких дивов.

                    1. Какое отношение к этому имеет PHP?

                    2. Почему <table> тупой?
                    Ответить
                    • 1. Основное назначение пыха - генерация HTML. Так исторически сложилось.

                      2. Table тупой в том же смысле что и молоток. Молоток тупой. Он умеет забивать гвозди. Шурупы тоже может, но хуёво.
                      Ответить
                      • 1. Допустим.

                        2. Я так и не увидел объяснения. Почему <table> тупой?
                        Ответить
                        • Блядь.
                          Потому что это не модно уже много лет.
                          Потому что он решает только одну задачу и не является серебрянной пулей.
                          Ответить
                          • Ничто не является серебряной пулей.

                            Кроме «не модно» аргументы есть?
                            Ответить
                            • не адаптивно
                              не виден сайт, пока все не прогрузится
                              сетки обычно гораздо сложнее, чем просто таблица

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

                              а с таблицами программист должен явно рассказать где же будет tr, где td, и больше ничего не поделать, на телефоне не сделать автоматом из 3 колонок одну переносом
                              Ответить
                              • > не виден сайт, пока все не прогрузится

                                table-layout:fixed изменит это поведение.

                                > содержание должно быть развязано от представления

                                Согласен. Если вынести представление в CSS, то его будет легко менять без изменения вёрстки.

                                > располагает твои 20 элементов в три колонки по сетке, или рисует из них буллетами ненумерованного списка в одну

                                Хороший пример. <ul>/<li> и выглядит семантично как список, и может отображаться по-разному. Однако, браузеры применяют к спискам свои встроенные стили, которые потом трудно перекрыть, так что к великому баттхёрту дизайнеров добиться во всех браузерах отображения 1:1, как у них на макете, не получится. Но HTML и разрабатывался как средство передачи текста, а не дизайна.

                                > не сделать автоматом из 3 колонок одну переносом

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

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

                                *****

                                Кстати, kerman не сказал, о чём он спорит: об элементах <table> vs <div> или о стилях отображения display:table vs display:block. А то некоторые верстают дивами со стилем display:table и говорят, что у них нетабличная вёрстка.

                                А ещё display:block — не панацея. Он сносно располагает абзацы текста, но не годится для дизайна, потому что задача выравнивания становится нетривиальной. Для автоматически перетекающих блоков больше подходит display:flex, но он не работает в браузерах пятилетней давности.
                                Ответить
                                • если ты сумел выдавить из себя такую огромную портянку по существу, зачем задавал свои вопросы выше?
                                  сам достаточно знаешь, чтобы решить, чем верстать
                                  а керман в веб-технологиях валенок, он к прости господи мускулу из толстого клиента подключается, на что ты рассчитывал не пойму
                                  Ответить
                                  • Я увидел в его комментариях зашкаливающее количество повторов слова «блядь» и однокоренных и попытался узнать, какие он ещё слова знает. А то слишком грустно, что человек, владеющий современными технологиями вроде C# обладает таким скромным словарным запасом.
                                    Ответить
      • Так у них главный написал что MVC не нужно.
        Говнокод -- основа идеологии языка:

        https://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
        Ответить
        • Где в той статье написано, что MVC не нужно?
          Ответить
          • Попробуй почитать статью, и понять какой подход он пропагандирует, а потом скажи: является-ли это MVC?
            Ответить
    • Но что-то есть в этом митьковском нигилизме/фатализме. Ну говно ПХП, ну и что, все равно сделаю еще говна. Потому что жизнь говно.
      Ответить
    • Просто в PHP много возможностей, и велик соблазн писать говнокод. Он очень простой, и у него низкий порог вхождения. Поставил себе веб сервер - и всё работает из коробки. Но это не значит что язык говно. Это программисты-недостуденты долбоёбы.

      А для лабы, тем более сойдёт.

      Если следовать общепринятым правилам - то всё будет заебись.
      Ответить
      • Да нет, это именно язык с говнофичами. == не юзать, например. Покажи мне общепринятые правила, где запрещают юзать ==
        Ответить
        • Говнофичи во всех языках есть. Но ПХП из них состоит на 99%.
          Ответить
          • Есть, например, массивы $_GET и $_COOKIES - это говнофичи? Объясни первокурснику или школьнику через какую жопу это нужно получить в питоне или жабе.

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

            И именно поэтому так много говнокодеров.
            Ответить
            • Объясняю.

              Дорогой школьник! Есть такое понятие -- модуль. Оно набрало популярность еще в 70е, когда умные дяди придумали структурное программирование. Если у тебя один код работает с HTTP, то у тебя есть специальный модуль для работы с ним.

              Например для работы с кукой есть модуль http.cookies. Какое неожиданное имя, правда?)

              А еще есть такой тип данных -- dict. ПХПшники про него не знают, и путают его с массивом, но он есть.

              А поскольку куки приходят через HTTP запрос который, как ты помнишь, попадает в аргумент environ функции ``application`(environ, ...` , то нужно сделать так: SimpleCookie(environ['HTTP_COOKIE'])

              Но это все лоу-левел скам, а потому кончай выябываца и ставь Джангу.

              В далеком 1998м школьников учили паскалю. И 14тилетние дети как-то понимали что для работы с экраном надо сделать uses crt, а для работы с графикой -- uses graph.

              Думаете, с тех пор потупели?
              Ответить
              • Да я не спорю, гуесто.

                На любом языке можно говнокодить как на php. Просто в php это делать легче.
                Ответить
                • Просто ПХП как-бы __учит__ тебя этому

                  Нуб ведь впитывает стандартную библиотеку, стандартные идиомы, и считает что именно так и надо. Он как импринт. Если функция срет в глобальный спейс то и он так будет делать. Чего не делать то, если сами авторы ЯП так сделали?
                  Ответить
              • > $_COOKIE
                > http.cookies
                Понятно.
                Значит, $_COOKIE - плохо, http.cookies - хорошо.
                $_COOKIE[x] - плохо, http.cookies.SimpleCookie()[x] - хорошо.
                Естветсвенно, $_COOKIE - глобальная переменная и вселенское зло.
                В то время, как http.cookies - няшный модуль, который, разумеется, не является глобальной переменной и, разумеется, не виден ни в одной из функций, кроме main, откуда куки канонично переносятся через аргументы и замыкания...
                Хотя, постойте-ка, в питоне же нет функции main, а http.cookies можно использовать в любой точке кода. Фундаментальные отличия? В питоне нужно писать больше букв, поэтому программист подумает над тем, что ему писать, и не станет писать говнокод.

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

                  >>Хотя, постойте-ка, в питоне же нет функции main
                  если очень хочется что можно сделать (if __name__ == "__main__"), однако же в случае визги точной входа является ф-я application, считайте что это main

                  >>Теперь буду рекламировать модули всем друзьям, ведь они настолько отличаются от глобальных переменных в лучшую сторону!

                  Лучше почитай, например, "Идеальный Код"

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

                    > __main__
                    Всё равно куки пролезут в обход неё.
                    Ответить
                    • >>Чаще всего эти неймспейсы - просто повод понаписать имена подлиннее и с точками.

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

                      >>Всё равно куки пролезут в обход неё.
                      нет
                      Ответить
                      • >>Всё равно куки пролезут в обход неё.
                        >нет
                        А, их надо ещё всасывать из контекста в кукообъект. Выходит, я точно наполовину наврал.
                        Ответить
                        • чего? какого контекста?

                          еще раз: точкой входа визги является функция. В нее они передаются как аргументы (точнее заголовки передаются). Куки сами по себе нигде не гуляют.
                          Ответить
                          • > какого контекста?
                            > В нее они передаются как аргументы (точнее заголовки передаются).
                            Вот из такого, переданного через аргументы.
                            Ответить
                • http.cookies видно только тем, кто этот модуль подключил.
                  $_COOKIES видно всем.

                  Да, в питоне, в отличие от ваших js и php, внезапно, есть модули.
                  Ответить
                  • В ECMAScript 5 модули поинтереснее. Хотя бы за счёт того, что нельзя случайно всосать сразу много имён в скрипт как в питоне. Ну и ключевыми словами они не засоряют язык.
                    Ответить
                    • > случайно всосать сразу много имён
                      Это ты про from хуй import * (aka using namespace в крестах)? Это сколько надо выпить, чтобы случайно написать *?
                      Ответить
                      • Да, про *.
                        Это надо много кода написать, каждый раз импортируя только нужные функции, и обновляя этот список. Потом пишешь звезду, и всё работает. Явно написать её легче, чем списочек.
                        А в доморощенных жс-модулях надо целый for-in написать (ещё и правильно), это не каждый сможет.
                        Ответить
                        • во-первых не много
                          во-вторых для ленивых есть IDE
                          Ответить
                        • from xyu import * пишут только в сосноли. Вообще, нормальные иде импорт проставляют сами.
                          Ответить
                  • В языке изначально заточенном под веб наличие суперглобальных массивов с куками не так страшно. Питон же язык более общего назначения. В нем тоже есть суперглобальные переменные - __builtins__
                    Ответить
                    • __builtins__ тоже не айс

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

                Тогда сишка и кресты — говно. Директива #include, заголовочные файлы и (почти) ручная линковка — это не модульность.
                Ответить
                • >Тогда сишка и кресты — говно.
                  а, что кто то так не считает?
                  Ответить
                • > Тогда сишка и кресты — говно.
                  Кто-то с этим спорит? Модулей там нет, и это большая жопа.
                  Ответить
            • > это говнофичи
              Конечно. Благодаря им, код, использующий параметры запроса, размазывается толстым слоем по всей портянке... А из-за суперглобальности - ещё и затекает в половину функций...

              > через какую жопу это нужно получить в питоне или жабе
              Я просто скопипащу первый попавшийся пример по Весеннему Каркасу, ок?
              @RequestMapping("/hello.html")
              public String hello(@CookieValue("foo") String fooCookie) {
                  // ...
              }
              Ответить
              • )это Spring MVC:)

                Блин! Если человек не понимает в чем минус глобальной переменной, то о чем вообще можно говорить?
                Ответить
                • > глобальной
                  Она не просто глобальная, а суперглобальная.
                  Ответить
                  • в том смысле что она глобальна не только в рамках модуля?

                    а, я забыл
                    в ПХП нету нормальных модулей
                    Ответить
                    • > глобальна не только в рамках модуля
                      В том смысле, что она лезет во все подряд скопы, даже если там нахуй не нужна. Да, в пхп есть единственная адекватная фича - глобалки нельзя юзать без слова global.
                      Ответить
                    • http://php.net/manual/ru/language.variables.superglobals.php
                      global писать не надо
                      Ответить
                    • дурашка. в пхп уже лет 5 как все есть. модули ограничиваются неймспейсом.
                      Не создавай функций, глобальных переменных и будет тебе счастье.
                      Ответить
                      • ой Вась, не пизди. _REQUEST как был в глобальном, так и остался
                        mysql_query как было в глобальном, так и осталось

                        пыхомакаки не осилили модули
                        Ответить
                        • _REQUEST
                          Если тебк критично откуда приходят значения переменных не юзай его.
                          _REQUEST - юзается только в битриксе а он квинтэссенция говна и php тут не причем.
                          Ответить
                          • Но почему же битрикс написали именно на пхп? Почему не на руби каком-нибудь?
                            Ответить
                            • Потому что руби язык для повышения ЧСВ его автора. но не как для работы.
                              Почему не на питоне. потому как разрабы питона сами не знают с кем они с умными или с красивыми. Да я про не совместимость версий 2 и 3.
                              Ответить
                            • потому что пхп "программисты" дешевле, равно как и пхп хостинги
                              Ответить
                          • лол, ты даже своего говноязыка не знаешь

                            http://php.net/manual/ru/reserved.variables.request.php
                            Ответить
                            • ты чего дебил? я же тебе написал _REQUEST юзается только в битриксе.
                              Он нужен но в очень узком спектре задач типа пагинации.
                              Ответить
                              • опять песдиш

                                это часть культуры языка что-ли -- постоянно брехать?
                                https://developers.google.com/s/results/?q=%22%24_REQUEST%22
                                Ответить
                  • Она тред-локальная, если так разобраться. Ну или около того.

                    Да и не всё так плохо. Язык изначально заточен на обработку http и быстрое изучение/написание сраниц. Гораздо больше удивляют те кто на нём vk/fb пишут.
                    И главное у них всё шустро работает!

                    Вон в JSP request.getCookies(). Вроде глобальная (на странице), а по факту нет.
                    Ответить
                • хе-хе, неплохо неплохо подгорает пыхомакакам
                  let the butthurt.jpg

                  >> через какую жопу
                  через какую?
                  HttpServletRequest из параметров?
                  Ответить
              • > Я просто скопипащу первый попавшийся пример по Весеннему Каркасу, ок?

                Только ты забыл указать зависимости системы сборки, конфиг спринга (xml или код), какой-нибудь web.xml (сейчас они вроде тоже кодом задаются), и настроенный контейнер сервлетов. А так коротко, да.
                Ответить
                • зачем сравнивать php с джавой?

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

                      нубу нужно просто:
                      a = 42
                      print(a)

                      а в жабе ему сразу public static void main
                      и у нуба песдец в голове

                      Короче, детей я бы джаве не учил
                      Ответить
                      • >начинать на нем писать что-то реально полезное.

                        >а в жабе ему сразу public static void main
                        Питон прост в начале, но гораздо сложнее жавы если полезть в потроха.

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

                                В Си, как и в ПХП нет нормальных структур данных.
                                В Си реализация любых алгоритмов общего назначения упирается в отсутствие генериков / необходимость решать кто и когда будет освобождать память. И поэтому в Си их нет, и самому написать = страдать.
                                В Си так трудно добиться того, чтобы код можно было повторно использовать, что, по-сути, никто к этому даже не стремится. В Си так тяжело добиться вообще работающего кода, что когда оно наконец скомпилировалось, и после отключения всех чужих библиотек валгринд выдал всего сотню-другую ошибок, хочется заплакать и бежать закрыв глаза до самого горизонта.

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

                                  мля ну начались стенания

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

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

                                  просто на сишке не надо проходить абстрактные синглтоны и прочие паттерны с функциональщиной, на сишке надо проходить вызовы ядра, межпроцессное взаимодействие и прочие вещи, которые называются "системным программированием"
                                  Ответить
                                  • > Си - язык для тех, кто понимает как работает вычислительная машина
                                    +1. Ну, кстати, кресты для сишных задач тоже неплохо подходят, как показала практика. RAII, шаблоны и move семантика превращают лютую системщину в более-менее няшный код. Даже если под ногами нет не только операционки, но даже аллокатора...

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

                                        З.Ы. Или всё-таки полетит?
                                        Ответить
                                        • Борманд Паскаль без SYSTEM.TPU не полетит, потому что даже некоторые арифметические операции вставляют код не из недр компилятора, а из SYSTEM.TPU. Более того, для компиляции самого SYSTEM.TPU из SYSTEM.PAS требуется файл SYSTEM.TPS, в котором описаны типы данных и некоторая «магия» компилятора. В частности, в SYSTEM.TPS описано, что процедура Writeln может принимать переменное количество аргументов.

                                          Но никто не мешает написать свой минимальный SYSTEM.PAS для эмбеддопердолинга.
                                          Ответить
                                          • > никто не мешает написать
                                            Это возможно? Или там придётся перепиливать какую-нибудь магию в самом компиляторе?

                                            > некоторые арифметические операции
                                            Ну это и в сишке/крестах так.
                                            Ответить
                                            • > Или там придётся перепиливать какую-нибудь магию в самом компиляторе?

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

                                              Чтобы полетело, нужно реализовать некоторое подмножество функций/процедур из модуля SYSTEM.
                                              Ответить
                                              • > некоторое подмножество
                                                writeln (или какой-то его бекенд?) и прочую платформозависимую мишуру я смогу реализовать? Ну и свой аллокатор. Если да - то норм, можно поюзать.

                                                З.Ы. А, ещё точку входа можно поправить? Чтобы она за параметрами и окружением, к примеру, не лазила.

                                                Ну и хотелось бы что-нибудь 32-64 битное, типа FPC. А не 16-битное говно мамонта, застрявшее в первом мегабайте...
                                                Ответить
                                                • 32-битный Дельфи, можно делать оконные екзешники в 4 кб, не требующий рантайма.
                                                  Ответить
                                                  • > не требующий рантайма
                                                    > оконные
                                                    А чем оно окна делает? :) Через прерывание сисколлы венды дёргает?
                                                    Ответить
                                                    • Тарас считает, что рантайм — это непонятная хрень типа msvbvm60.dll или cygwin1.dll, многометрового роста, которую нужно таскать с экзешником.
                                                      Ответить
                                                      • Ну это я, наверное, вас всех с толку сбил. Скорее не без рантайма, а без зависимости от какой-либо операционки.
                                                        Ответить
                                                        • А без зависимости от операционки — пожалуйста. Если есть, чем потом линковать, конечно. Дельфи, начиная со второй версии подойдёт, потому что умеет генерировать obj-файлы.

                                                          Единственное, что может напрячь — нужно некоторое место в стеке (иначе нельзя будет вызывать процедуры и функции) и некоторое место под глобальные переменные и типизированные константы. Т. е. написать загрузчик БИОСа, когда ОЗУ ещё не инициализировано, скорее всего, не получится.
                                                          Ответить
                                                          • > когда ОЗУ ещё не инициализировано
                                                            Есть хак с использованием кеша в качестве оперативки. Так что х.з., может быть и там будет работать...
                                                            Ответить
                                                    • Обращается к dll, поставляемым с виндой в комплекте.
                                                      Ответить
                                                      • Кстати, в TP/Delphi для создания секции импорта в экзешнике достаточно написать что-то типа:
                                                        function RegisterClassExA(const lpWndClass: TWndClass): ATOM; stdcall; external 'user32.dll' name 'RegisterClassExA';

                                                        Сразу ясно, из какой DLL под каким именем импортируется.

                                                        А теперь вспомним, сколько способов есть для импорта функции из DLL в сишке.
                                                        Ответить
                                                        • нежные отношения линкера и компилятора вообще спасают много нервов людям, далеким от си. Потому например в обжси придумали модуль который и компилятору и линкеру передает нужную инфу
                                                          Ответить
                                                          • Справедливости ради замечу, что в некоторых реализациях сишки можно сообщить линкеру полезную информацию с помощью #pragma comment, но всё-таки это лишь первый шаг на пути к модульности.
                                                            Ответить
                                                            • да, в стандарте си нету модульности в чистом (виртовском) понимании. Но зато там есть единицы трансляции и препроцессор с include, а это уже лучше чем , например, в жопаскрипте.
                                                              Ответить
                                                              • > лучше чем, например, в жопаскрипте
                                                                Что там говно, что сям:
                                                                - один глобальный плоский неймспейс
                                                                - возможность запилить приватную для куска кода функцию/переменную

                                                                Семантической разницы нет вообще. Никакой. Как и модулей.
                                                                Ответить
                                                                • есть инклуд, а значит хотябы на уровне кода можно описать зависимости
                                                                  в JS же инклуда нет( он есть только в ноде)

                                                                  Потому в сях модульность на двойку, а в джаваскрипте на единицу
                                                                  Ответить
                                                                  • > есть инклуд
                                                                    Формально - да. А так - это ж просто препроцессор, который и с js прекрасно будет работать.
                                                                    Ответить
                                                                    • > это ж просто препроцессор, который и с js прекрасно будет работать.
                                                                      Хорошо бы, если встроенное было.
                                                                      А то теперь скриптушню, рассчитанную на "написал - уже работает" туда-сюда перегоняют из языка в язык, минифицируют, склеивают (осталось ещё два-три раза прогонять жс в асм и обратно для профилактики)... Тогда б на пацанской сишке уже сразу под веб писали, что ли.
                                                                      Ответить
                                                                      • > на пацанской сишке
                                                                        Дык 100 раз уже говорили, что в браузерах надо не язык, а виртуальную машину.

                                                                        Один хуй js после всех этих минификаций нечитаем.
                                                                        Ответить
                                                                        • > не язык, а виртуальную машину

                                                                          Были же жабоапплеты, в которых можно было посылать всех на Jython. А теперь на некоторых платформах плагин для JVM не поставишь.
                                                                          Ответить
                                                                          • Потому что машина была слишком универсальной и вся её безопасность держалась на честном слове (SetSecurityManager()).
                                                                            Ответить
                                              • Кстати, в паскале возможно написать свою writeln-like функцию? Чтобы форматирование работало и т.п. Или придётся через псевдофайлы эмулировать?
                                                Ответить
                                                • В Турбо Паскале и в Дельфи 1.0 вместо функции Writeln нужно реализовать следующие функции:
                                                  procedure WriteFloat;           external {TF87};
                                                  procedure WriteStr;             external {TSTR};
                                                  procedure WriteInt;             external {TINT};
                                                  procedure WriteBool;            external {TBOL};
                                                  procedure WriteChar;            external {TCHR};
                                                  procedure WriteLine;            external {TCTL};
                                                  procedure WriteEnd;             external {TCTL};
                                                  procedure WriteFile;            external {FCTL};


                                                  Т. е. вызов Write('Высота = ', 5) магия компилятора, описанная в SYSTEM.TPS, превратит в вызов WriteStr и WriteInt.

                                                  У WriteStr три аргумента: файловая переменная (куда магия компилятора подсовывает Output, если мы ничего не указали), собственно строка, а третьим аргументом идёт длина поля вывода (если мы её указали через двоеточие, то она подставляется, иначе берётся длина строки).
                                                  Ответить
                                                  • Понятно. А у файловой переменной какая-то жёсткая структура или можно что-то своё вместо стандартной подсунуть?
                                                    Ответить
                                                    • На структуру файловой переменной завязано несколько функций из того же модуля System типа WriteBuffer.

                                                      Стоп! Она же является переменной стандартного типа Text. Боязно менять структуру без синхронного патча SYSTEM.TPS. Компилятор же под var X: Text; выделяет известный ему размер памяти.

                                                      P.S. А в 32-битных Дельфях нужно реализовать аналогичные функции:
                                                      procedure _WriteRec;
                                                      procedure _WriteChar;
                                                      procedure _Write0Char;
                                                      procedure _WriteBool;
                                                      procedure _Write0Bool;
                                                      procedure _WriteLong;
                                                      procedure _Write0Long;
                                                      procedure _WriteString;
                                                      procedure _Write0String;
                                                      procedure _WriteCString;
                                                      procedure _Write0CString;
                                                      procedure _WriteLString;
                                                      procedure _Write0LString;
                                                      function _WriteVariant(var T: Text; const V: Variant; Width: Integer): Pointer;
                                                      function _Write0Variant(var T: Text; const V: Variant): Pointer;
                                                      procedure _Write2Ext;
                                                      procedure _Write1Ext;
                                                      procedure _Write0Ext;
                                                      procedure _WriteLn;


                                                      И тоже тип Text явно в интерфейсе не описан, а считается встроенным.
                                                      Ответить
                                                    • Кстати, вот эти всякие _Write0String, _Write0Long — это варианты функций, когда ширина вывода не указана. По сравнению с BP 7.0 сэкономили инструкцию JCXZ в рантайме ценой расширения перегрузки. Вот он, настоящий объектно-ориентированный подход!
                                                      Ответить
                                                      • А CString и LString это что? Сишная и юникодная?
                                                        Ответить
                                                        • _WriteLString — это для AnsiString — такой новый тип в Дельфи, в котором можно хранить более 255 символов.

                                                          _WriteСString — это для PChar — сишных строк с завершающим нулём.

                                                          P.S. Я немного ошибся про перегрузку:
                                                          procedure _Write0LString{ VAR t: Text; s: AnsiString };
                                                          asm
                                                                  { ->    EAX     Pointer to text record  }
                                                                  {       EDX     Pointer to AnsiString   }
                                                          
                                                                  XOR     ECX,ECX
                                                                  JMP     _WriteLString
                                                          end;

                                                          JECXZ не выкинули. По сути два варианта функции отображаются на один, как в том анекдоте про математика и полный чайник.
                                                          Ответить
                                                • Ещё я забыл, что модуль Crt из Борманд Паскаля определяет процедуру AssignCrt, которая в переменной типа Text подменяет указатели на процедуры-обработчики ввода-вывода. При старте модуль Crt вызывает AssignCrt(Input); AssignCrt(Output); тем самым пропуская Read и Write для стандартных потоков через свои обработчики, минуя псевдофайлы ДОСа с дескрипторами 0 и 1.
                                                  Ответить
                                                  • > указатели на процедуры-обработчики ввода-вывода
                                                    О, значит туда можно свои вписать?
                                                    Ответить
                                                    • Да. Все эти WriteInt, WriteПлавПитух etc. производят только «сериализацию», превращая внутреннее представление типов данных в строку символов. Далее они (если мы их не переписали) передают управление на подпрограмму WriteBuff, которая из файловой переменной считывает адрес обработчика и передаёт управление ему. А системозависимую питушню по выводу символов в файл или на экран производит этот обработчик. Т. е. даже не переписывая модуль System, только пофиксив соответствующие поля файловой переменной, можно перенаправить вывод куда угодно.
                                                      Ответить
                                          • Что за чушь, турбопасовские екзешники на пустой машине нормально идут. ТПУ нужны только компилятору, и это не рантайм никаким боком.
                                            Был прикол с рантаймом для графических баблиотек, но никто не мешает самому написать свою, которая прерываниями выставит нужный видеорежим и запишет в видеопамять то, что нужно.
                                            Ответить
                                            • Тогда я не понял, о чём был вопрос. Я решил, что вопрос был о том, нужны ли библиотеки во время компиляции. Сишка-то некоторые минимальные модули может скомпилировать и без библиотек (экзешник получить не получится, потому что нужен обж с точкой входа, передающий управление на main).

                                              Если вопрос о том, нужны ли библиотеки во время запуска экзешников, то мой ответ — не нужны. Таки да, паскалевские программы идут на «голой» машине.
                                              Ответить
                                              • Ну, не на голой машине то есть конечно, а на голой операционке.
                                                Ответить
                                                • Тем не менее, открываем SYSTEM.PAS и читаем:
                                                  {*******************************************************}
                                                  {                                                       }
                                                  {       Turbo Pascal Runtime Library                    }
                                                  {       System Unit                                     }
                                                  {                                                       }
                                                  {       Copyright (C) 1988,92 Borland International     }
                                                  {                                                       }
                                                  {*******************************************************}


                                                  Да, Борланд называет это рантаймом. Рантайм не обязан быть динамическим и подгружаться отдельно, как в Вижуал Бейсике. Никто не запрещает «рантайм» насмерть линковать в экзешник.
                                                  Ответить
                                                • > на голой операционке
                                                  Нахуй мне ваша голая операционка и экзешники в 4кб, которые только под операционкой стартуют? На операционке я лучше нормальные либы поюзаю, которые все её фичи раскроют...

                                                  Я про bare metal, когда под ногами даже bios/uefi нету.
                                                  Ответить
                                                  • Можно. Паскаль per se делает никаких системных вызовов, все вызовы только в библиотеках. Да, на нём можно написать хоть диспетчер загрузки, если переписать модуль SYSTEM под себя.
                                                    Ответить
                                                  • Трудность возникает с форматом выходного файла. У продуктов Борланда было три линейки:

                                                    1. Турбо Паскаль до версии 4.0 (не включая) генерировал только COM-файл. Модель памяти tiny, все указатели короткие, код 16-битный, лимит 64 килобайта.

                                                    2. Турбо Паскаль с 4.0 (включая) по Дельфи 1.0 генерировал только экзешник (TP 6.0, BP 7.0, Delphi 1.0 могли генерировать ΝΕ-файл для 16-битного защищённого режима). Указатели на данные «длинные» (сегмент+смещение), указатели на код в пределах модуля могут быть и длинными, и короткими, указатели на код между модулями только длинные. «Процедурный тип» (указатели на процедуры/функции) только длинные.

                                                    Глобальные var размещаются в неинициализированном сегменте данных (в экзешнике «ноль» байт), const — в инициализированном сегменте, локальные var — в стеке.

                                                    OBJ получить нельзя, но можно готовый экзешник пропустить через кросслинкер (так на нём получали SYS-драйвера для ДОСа, патча заголовок) или написать кросслинкер для TPU-файлов (для TP4.0 была неофициальная программа TPU2OBJ).

                                                    3. Дельфи, начиная с версии 2.0, генерирует 32-битный код. Может получать OBJ-файлы (Microsoft/Intel OMF), не линкуя.

                                                    Были ещё версии для .ΝΕΤ и для 64-битного кода, но это уже после Борланда, если я не путаю.
                                                    Ответить
                                                    • > форматом выходного файла
                                                      Да это не особо важно. The cat coff/elf is a fine too. Можно постпроцессингом релоки поправить да на секции нарезать как надо. См. мою говно"ось" на гитхабе.

                                                      Или ты про трудности линковки с nasm'ом и прочими няшными ассемблерами?

                                                      З.Ы. 16 битные компиляторы под x86 (кроме ассемблера) нинужны. Даже точки входа прошивок через десяток команд в ужасе съябывают из реалмода и возвращаются в него только если надо сэмулировать BIOS для загрузчика... А все модули UEFI прошивки (включая тот, где точка входа), внезапно, оформлены в виде PE файлов.
                                                      Ответить
                                                      • Если 16-битные не нужны, то всё просто. 32/64-битные компиляторы под Винду генерируют OMF, который при желании можно сконвертировать в COFF.

                                                        Линуксовый Дельфи не смотрел (подозреваю, что как раз для него ELF будет родным форматом). Но наткнулся на то, что виндовый Delphi XE может компилировать под OSX/iOS и генерировать объектные ELF-файлы.

                                                        Ну и, наконец, есть GPC, использующий инфраструктуру GCC, и FPC, для которого COFF родной.
                                                        Ответить
                                                        • Эх, жаль, что ELF и PE требуют фиксированные буковки в начале файла. А то можно было бы замутить по-настоящему кроссплатформенную прогу...
                                                          Ответить
                                      • паскаль дохера скрывает под капотом от программиста "программиста"

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

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

                                          Поясните свою мысль.

                                          > вся эта магия с индексами не с нуля

                                          Какая там магия?
                                          Ответить
                                          • что такое myarray[134]?
                                            где лежит в памяти этот элемент массива?
                                            надо ли знать школьнику, где он конкретно лежит относительно других его переменных?

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

                                            не надо понимать что такое стек, надо лишь понимать, что вот тут мы переставляем элементы массива, а вот тут мы делаем writeln

                                            а ты думал почему столько неосиляторов указателей на 1 курсе? нипаняятна!! сишка миня угнитаает
                                            Ответить
                                            • myarray[134] в Паскале и в Си обозначают почти одно и то же, за исключением того, что в Паскале возможна ненулевая база.

                                              В Паскале нельзя написать 134[myarray] и myarray+134. Это, конечно, страшное ограничение.

                                              > работа с кучей - приличное такое табу

                                              Что за табу? Впервые слышу.

                                              > адресная арифметика

                                              Вот тут как раз в сишке кое-что спрятано под капотом. В Паскале Inc(p) увеличивает адрес на единицу, а в сишке ++p неявно домножает единичку на размер элемента массива.
                                              Ответить
                                              • > В Паскале Inc(p) увеличивает адрес на единицу,

                                                неправда
                                                Ответить
                                                • Твоя правда. Проверил FPC во всех режимах. Действительно, Inc/Dec учитывают тип указателя, как в сишке.

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

                                          >которая не создает даже близко ощущения, что ты работаешь с синтаксическим сахарком поверх ассемблера
                                          Лол.
                                          Кстати а можно уточнить поверх какого именно ассемблера ты работаешь в сишке?
                                          Ответить
                                      • И компилятор Юрского периода
                                        Ответить
                                        • FPC, GPC, Delphi XE, PascalABC.NET, Oxygene, MIDletPascal, WDSibyl.
                                          Ответить
                                          • И они все равнозначны по реализации? Дельфи лет десять назад много где был, только как-то сравнивать его с турбой или сишкой не агонь, не? Не те цели
                                            Ответить
                                            • Сишки тоже неравнозначны. Сравним хотя бы gcc, шланг и MSVC.
                                              Ответить
                                      • Потому что к величайшему моему сожалению API половины этого мира написана на английском языке и на си.

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

                                        Так что я рад что в моем детстве детей учили паскалю.
                                        Ответить
                                    • С++ слишком сложен для нуба. Это вообще один из самых сложных языков, по правде-то говоря. Я бы к нему только тех подпускал, кто уже освоил си (и может быть еще какой ООПшнутый ЯП)
                                      Ответить
                                  • +1! Си нужно учить чтобы уметь понимать как написаны операционки. И основные алгоритмы вроде квиксорта можно учить на си.

                                    Конечно, блин, паттерн Visitor надо не на plain си учить.

                                    Просто зная си _можно_ освоить джаву (ну придется подучить паттерны и ООП), а вот неосилившие си нытики как wwxwxw будут бегать по форумам о орать что на си невозможно ничего написать
                                    Ответить
                                    • Нахер Си не уперся для квиксорта. Для квиксорта нужно учить flow diagrams, decision trees, Эренфух-Фраисе игры и т.д. а не ебаться придумывая как же так сделать, чтобы квиксорт мог посортировать флоаты и инты. Или как сделать так, чтобы и в МСВС и в ГЦЦ скомпилировалось.
                                      Ответить
                                      • Конечно.

                                        Именно по этому первыми языками программирования должны стать flow diagrams, decision trees, Эренфух-Фраисе игры итд.

                                        А знать что такое int и float вообще не надо. Вон, PHPшники не знают, и ничего: живут
                                        Ответить
                                        • Именно так. От того, что студенты никогда не узнают про абсурный мир где целыми называют непонятную хуйню вообще не похожую на целые числа, уж не говоря про фантастический пиздец с флоатами они точно ничего не потеряют. И в то же время, я более чем уверен, что большинство из так сильно защищающих сишку не смогут, например, обьяснить почему алгоритм сортировки основаный на сравнениях не сможет работать бысрее чем линейно-логарифмическое время.
                                          Ответить
                                          • Действительно. Нахуя программисту знать что такое int и float?
                                            Ответить
                                            • int (32-разрядный) не умеет считать триллионами => не нужен.
                                              float не сможет показать 100 знаков числа π => не нужен.
                                              Ответить
                                              • в сишечке инт не 32х разрядный
                                                он там всякий разный
                                                Так что может и нужен еще
                                                Ответить
                                                • И double, может быть, ещё нужен, ибо его точности для обычных лаб хватает.
                                                  Ответить
                                  • Та ладно, и чем он так хорош для системщины? Тем, что под это уебище специально затачиватся всякое железо? - Так это путать причину и следствие. На самом деле Сишка на столько убога и непонятна даже тем, кто на ней пишет, что даже тормозной Го с автоматической сборкой мусора и очень наивным компилятором его обганяет на таких вещах как, например реализация ИП протокола.

                                    http://arxiv.org/abs/1603.05636

                                    И это-то после тридцати лет написания оптимизирующих компиляторов.

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

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

                                      >>На самом деле Сишка на столько убога и непонятна даже тем, кто на ней пишет

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

                                      >>Ну а уже о том, что в Си нет нормального способа, например, представить число как сроку, склеить две строки и т.п. банальные вещи

                                      А еще там нет Twitter клиента в стандартной библиотеке.
                                      Ответить
                                      • > Тем, что в нем можно напрямую работать с памятью,

                                        ЛОАЛЛЛ ты чисто копируешь то, над чем я ржал. А какой нативный язык не позволяет-то?

                                        > и тем что API операционок описаны на нем.

                                        На любом нативном языке ты можешь точно так же подключиться к любому АПИ. А то, что в АПИ осей часто встречается такое дерьмо, как null-terminated string, то это не плюс сишки, это минус АПИ. Это рак, которым АПИ заразилось от сишки.
                                        Ответить
                                    • > затачиватся всякое железо
                                      надо почитать лунный календарь, www.xxx последнее время в особенном обострении

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

                                      > с вычислительными машинами (их только доминируювих подходов есть аж три
                                      да-да, лисп машины захватили мир
                                      а ещё микрософт уже 10 лет как выпускает процессоры, исполняющие c# напрямую

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

                                        Ну и Сишка "сахарок" (кому сахарок, а кому и глоток из параши) над ассемблером в такой же степени как и десяток, а может и сотня других языков. Смысл же в том, что это плохая надстройка над ассемблером, а не в том, что она вообще надстройка.

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

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

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

                                          > Электронная вычислительная техника затачивается под Сишку
                                          железо оптимизируется не под сишку, оно оптимизируется под рынок

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

                                            На железе PDP-11? В целом, по сравнению с другими нативными языками, она выделяется лишь своей общей уёбищностью.
                                            Ответить
                                            • Тарас, если для тебя железо состоит из PDP-11 и x86, то ты просто ничего не знаешь, как джон сноу
                                              Ответить
                                              • Ото всего остального сишка далека точно так же, как далека она от х86.
                                                Где в любом современном распространённом процессоре аналоги пост и пред-инкременты?
                                                Где в сишке бср, бсф? Где блять лонгмул? Как написать функцию, которая меняет два числа значениями, но не дрочит память? А какого хуя массив и указатель на массив неявно кастятся друг в друга?
                                                Ответить
                                                • Вот кстати, в Паскале с его операциями над множествами BSR и BSF BT, BTS, BTR пригодятся. А в сишке их не к чему прикручивать.
                                                  Ответить
                                                • > А какого хуя массив и указатель на массив неявно кастятся друг в друга?
                                                  Предыдущие утверждения покрывали аппаратную питушню. Это последнее утверждение - внезапный переход на математику или реально по каким-то причинам такие касты мешают железному питуху?
                                                  Ответить
                                                  • В языке с претензией на близость к железу неявный каст сущности к указателю на неё - это что-то из серии жабских классов, который на самом деле указатели. Впрочем да, это не к аппаратной части претезнии, а к общей уёбищности и несимметричности дизайна.
                                                    Ответить
                                                    • Поддерживаю. Вот ЭКМАпитушня, где всё передаётся по ссылке:
                                                      http://ideone.com/u2wvOL

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

                                                      А в Паскале значения и указатели чётко отделены друг от друга. Пример копирования значения:
                                                      http://ideone.com/szTMXt
                                                      Пример копирования указателя:
                                                      http://ideone.com/aFglyP
                                                      Ответить
                                                      • А ещё бывает передача по значению с отдачей обратно. In out параметры в Фортране и Аде. Для обмена двух чисел местами самое то, аргументы приходят в регистрах и возвращаются в регистрах. А в сишке что? А в сишке передаётся значение указателя на переменную. И только благодаря кропотливому труду тысяч программистов появился оптимизатор, который эту питушню превращает в нормальный код, но это уже оптимизатору спасибо, и как тогда вообще можно говорить о близости к железу?
                                                        Ответить
                                                    • >это что-то из серии жабских классов, который на самом деле указатели
                                                      Классы==указатели? r u mad?
                                                      В жабе нет указателей. В жабе ссылки. Причём jvm может их двигать как пожелает.
                                                      Ответить
                                                      • В джаве термины указатель и ссылка взаимозаменяемы.
                                                        Хотя технически они, конечно же, ссылки.

                                                        Речь о том, что в джаве инстансы классов в общем случае живут на куче, и с ними общаются через указатель(точнее ссылку)

                                                        Потому когда я говорю "Переменная goo это объект", на самом деле я говорю "переменная foo это указатель на объект"

                                                        Может-ли JVM разместить класс на стеке? Наверное, может если знает что я его за пределы блока не опубликовал. Но программист никогда не должен про это думать
                                                        Ответить
                                                        • Что ты мне сейчас хочешь доказать этой своей длинной телегой?
                                                          Что "жабские классы,на самом деле указатели"?

                                                          Инстансы классов != Классы.
                                                          В жабе нет указателей. Только ссылки. Точка.
                                                          AtomicReference, WeakReference, SoftReference, PhantomReference.

                                                          >JVM разместить класс на стеке?
                                                          JVM размещает классы в permgene. Если кто-то разместит его на стеке - он просто сумасшедший.
                                                          Ответить
                                                          • > разместить класс на стеке
                                                            Шёл 2016 год, а люди до сих пор не научились отличать классы от объектов...
                                                            Ответить
                                                            • Слово «класс» лучше вообще не употреблять, а то набегут адепты обобщённого программирования и скажут, что класс типов — это совсем другое и что крестошаблоны и жабодженерики — это лишь ограниченная реализация классов типов.

                                                              То, что в крестах зовут классом, в иных местах называют типом объекта/класса, а то, что в крестах зовут объектом, в иных местах называют экземпляром объекта/класса.

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

                                                              ссылку на инстанс класса многие люди называют инстансом класса , а то и вовсе классом
                                                              Ответить
                                                          • >>AtomicReference, WeakReference, SoftReference, PhantomReference.

                                                            NullPointerException ;)

                                                            Да, разумеется с точки зрення терминологии ++ они ссылки

                                                            >>JVM размещает классы в permgene.
                                                            да) это вот пример того что я объект назвал классом
                                                            даже точнее ссылку на объект
                                                            Ответить
                                                      • Я терминологией жабьей на владею, но суть поняли же вроде, думаю?
                                                        Ответить
                                                  • >А какого хуя массив и указатель на массив неявно кастятся друг в друга?
                                                    Для удобства программиста. Как и всё в сишке.
                                                    Ответить
                                                    • Если без шуток, интересная же питушня (как и нуль-петушированные строки), оригинальный минималистический подход и по-царски быстрые слайсы.
                                                      Ответить
                                                      • Иными словами: говно.
                                                        Ответить
                                                        • Как-то жёстко Вы, будто в холиваре /[wl]in/ участвуете...
                                                          Иногда в этих терминах удобно думать. Где-нибудь внутри алгоритма, когда не надо передавать массив как целое (что сделать не получится из-за разделённости массива и его длины).
                                                          Ответить
                                                      • В Паскале тоже можешь передавать структуру указатель/количество.
                                                        А в Аде слайсы вообще родные, в язык вшиты, никаких специальных структур передавать не надо. В Фортране кажется даже двумерные слайсы вшитые есть (!!!)
                                                        Ответить
                                                        • В фортране уже не только произвольномерные слайсы, но и эмуляция shared memory поверх MPI есть. И толку, если этим никто не пользуется?
                                                          Ответить
                                                • Я, конечно, плюсанул, но, всё же:

                                                  > Где в сишке бср
                                                  псевдокод
                                                  #if defined(GCC)
                                                  #  define BSR(x) __buildin_clz(x)
                                                  #elif defined(MSVC)
                                                  #  define BSR(x) _BitScanReverse(x)
                                                  #else
                                                  #  define BSR(x) MySlowBSR(x)
                                                  #endif
                                                  Не фонтан, но жить можно.
                                                  Хреново, конечно, что в каждом проекте нужна эта тоскливая копипаста. Хорошо бы иметь модульный компилятор, у которого можно спрашивать, что он умеет делать, со стандартизированным набором фич.
                                                  Ответить
                                                  • Спасибо! Оставлю-ка здесь полезные ссылки, чтобы лишний раз не гуглить:
                                                    http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

                                                    https://software.intel.com/sites/landingpage/IntrinsicsGuide/

                                                    http://www.opennet.ru/man.shtml?topic=ffsll&category=3

                                                    https://msdn.microsoft.com/en-us/library/fbxyd7zd.aspx

                                                    https://msdn.microsoft.com/en-us/library/wfd9z0bb.aspx

                                                    https://msdn.microsoft.com/en-us/library/bb384809.aspx

                                                    В Шланге вообще красиво:
                                                    static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
                                                    _BitScanReverse(unsigned long *_Index, unsigned long _Mask) {
                                                      if (!_Mask)
                                                        return 0;
                                                      *_Index = 31 - __builtin_clzl(_Mask);
                                                      return 1;
                                                    }
                                                    
                                                    static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__))
                                                    __lzcnt16(unsigned short __X)
                                                    {
                                                      return __X ? __builtin_clzs(__X) : 16;
                                                    }

                                                    Встроенные функции похожи на GCC, а в хидерах определены переходники, похожие на MSVC.
                                                    Ответить
                                                  • >Не фонтан, но жить можно.

                                                    А поделить два числа и получить раздельно остаток и частное?
                                                    Работает в 1 инструкцию только благодаря "умному" компилятору.
                                                    Ответить
                                                  • Да знаю я, что есть эти специфичные функции, ну так это не сишка уже это специфичные расширения сишки, потому что чистая сишка такое говно, что даже этого не может.
                                                    Ответить
                                              • >если для тебя железо состоит из PDP-11 и x86, то ты просто ничего не знаешь, как джон сноу

                                                The PDP-7, however, did have a few `auto-increment' memory cells, with the property that an indirect memory reference through them incremented the cell. This feature probably suggested such operators to Thompson; the generalization to make them both prefix and postfix was his own. Indeed, the auto-increment cells were not used directly in implementation of the operators, and a stronger motivation for the innovation was probably his observation that the translation of ++x was smaller than that of x=x+1.

                                                The B compiler on the PDP-7 did not generate machine instructions, but instead `threaded code' [Bell 72], an interpretive scheme in which the compiler's output consists of a sequence of addresses of code fragments that perform the elementary operations. The operations typically—in particular for B—act on a simple stack machine.

                                                .
                                                Ответить
                                    • ++++
                                      >Та ладно, и чем он так хорош для системщины?

                                      PDP-7.

                                      >Тем, что под это уебище специально затачиватся всякое железо?

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

                                  в си есть препроцссор

                                  >>В Си, как и в ПХП нет нормальных структур данных.
                                  это традиционный пиздеж, все там есть

                                  >>В Си реализация любых алгоритмов общего назначения упирается в отсутствие генериков
                                  лол, как и в любой ЯП, выдуманном в 1970х.
                                  void* и вперед. Си не для этого. Не пишите на нем бизнес-логику.

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

                                  Это очередной пиздеж. В мире дохуя либ, написанных на си. СМ API OS.

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

                                  У миллионов людей получается, а у тебя нет. Потому что ты неосилятор, который не знает си. Пиши на ПХП или 1С.

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

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

                                      Я не знаю что такое "таскать байты", потому я обычно использовал СИ для составления алгоримтов для решения конкретных задач. И задачи эти решались. И миллионы людей так делали. Например, они написали Apache Web Server. Или Linux. Или Windows. Или nginx. И все у них получилось.

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

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

                                          Чем собирать проект на C++? Как повторно использовать библиотеки?
                                          На эти вопросы, увы, нет простого ответа.
                                          Ответить
                                          • Под инфраструктурой очевидно имеется ввиду наличие компиляторов, библиотек и документации.

                                            Я вот хочу писать на smalltalk. Но на нем не так удобно будет писать, например, под iOS. Правда?
                                            Ответить
                                        • Тарас, 90% того что есть в IT -- говно. Но надо с этим как-то жить) Windows говно, IP говно, HTTP говно, HTML вообще адское говно.
                                          Ответить
                                  • > В мире дохуя либ, написанных на си.
                                    > У миллионов людей получается
                                    Но у многих из этих либ внутри такое говно, что даже всё желание их юзать/править отпадает.

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

                  > зависимости, конфиг
                  Можно подумать, что какой-нибудь модуль к ПХП проще прикручивается. Там со всякой экзотикой, типа редких СУБД, вообще дело до ручной сборки из исходников доходило... Ну и всякие помойки типа php.ini + .htaccess тоже не стоит забывать.
                  Ответить
                  • для пыха, на секундочку, нужен веб-сервер с mod_php или cgi.

                    пыхобляди никогда не могли его осилить, и потому наплодили denverов
                    Ответить
                    • Во-во. Так что не так страшен web.xml, как php.ini...

                      А уж как в php роутинг делается - это вообще отдельный вопрос. Может быть, при запуске через fastcgi, что-то повменяемее завезли?
                      Ответить
                      • завезли фреймворки
                        в зенде, например, для этого routes.ini

                        Там через mod_rewrite ВСЕ заворачивается в пых, ну и дальше routes.ini
                        Ответить
                    • > для пыха, на секундочку, нужен веб-сервер

                      Ну, чтобы поиграться достаточно
                      http://php.net/manual/en/features.commandline.webserver.php
                      Ответить
                      • ого, вот это прогресс

                        правда в мавене тоже был томкат
                        можно был mvn run:tomcat или как-то так
                        Ответить
                        • Мавен, кстати, на меня всегда навевал ужас - столько пакетов выкачивается, чтобы что-то скомпилить или запустить...
                          Ответить
                          • Зато автоматом)

                            Мавен, к сожалению, все равно не спасает от хелла
                            Потому что нельзя в класс-пасе иметь два разных класса foo.Bar.

                            Зато в .NET можно, кстати) там в манифесте указана версия
                            Тут .NET сделал JVM
                            Ответить
                            • > можно
                              Да один фиг, не всегда это будет работать. Если у сборки нету общего стейта - ну ок, хоть 100500 копий запускай. А если есть стейт - всё разъедется уже на второй.
                              Ответить
                              • хм) а разве там будут не разные стейты у разных сборок?
                                Ответить
                                • Ну вот в том и трабла, что не всегда это допустимо. Вдруг либа требует именно один экземпляр общего стейта (тот же GUI тред, к примеру, который должен быть один)?
                                  Ответить
                                  • стоп-стоп-стоп

                                    GUI тред конечно один и какие сборки в него не лезут
                                    Там вертится луп, и они в этот луп задачи пихают
                                    Ответить
                                    • Ну вот будет у тебя 2 сборки с лупом и они подерутся ;)
                                      Ответить
                                      • зачем у меня будет сборка с лупом для гуя? Я что, микрософт?

                                        Вот если у меня будет две сборки с лупом для доступа к моей ВундерВафле на USB, тады ой

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

                                            хотя я хз, если честно, я давно туда не смотрел. Но в целом возможность сказать что "мой модуль хочет Foo версии 1.0" это лучше чем просто сказать "Мой модуль хочет bar.Foo"
                                            Ответить
                                            • > сказать что "мой модуль хочет Foo версии 1.0" это лучше чем просто сказать "Мой модуль хочет bar.Foo"
                                              +1. Кстати, в мире джавы OSGi решает эту проблему (по крайней мере, пытается).
                                              Ответить
                                        • > верную реализацию интерфейса
                                          Которую из? :)

                                          > Кто последний -- тот и победил
                                          Ну это ж хуёвый способ, недетерминированный. Сегодня первый победил. Завтра второй. А послезавтра бегай с больной головой и ищи в чём была трабла...
                                          Ответить
                                          • последнюю

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

                                              (На UEFI так драйверы сортируются).
                                              Ответить
                                              • не всегда это правильно
                                                можно получить отсутствие обратной совместимости и упасть

                                                но в уефи наверное можно запустить бутменеджера или его шелл и загрузить нужный модуль и нужный .efi файл
                                                Ответить
                                • Ну даже 2 пула коннектов к субд или два кеша - тоже не самая приятная ситуация, хоть и будет работать. Так что я бы не считал сборки панацеей...
                                  Ответить
                                  • согласен)
                                    просто это все же меньшее из говен. Вот когда ты депендишься на foo, а foo на bar, а bar привез тебе log4j не той версии что тебе надо -- вот это боль.

                                    Кстати, пулы в дотнете уже реализованы обычно в ADO.NET (если есть нужные дрова)
                                    Ответить
                              • а вообще в идеальном мере все стейтлесс, нужно хендлены юзать

                                бля, это еще Дейкстры с Никлаусами говорили

                                не nasrat_govno() а govno = nasrat_govno().
                                на худой конец nasrat_govno(&govno); же
                                Ответить
                                • Ну либо начнётся какая-нибудь херня с несовместимостью между разными версиями... Одну версию либы попросят запилить объект, а потом, случайно он достанется другой, которой от него станет плохо. Или там рантайм такое не даст сделать?
                                  Ответить
                                  • вот да
                                    это может быть
                                    интересно, полетит-ли класскаст?)
                                    Ответить
                                • > nasrat_govno(&govno);
                                  Сишкопроблемы
                                  Ответить
                                  • хуишкопроблемы

                                    nasrat_govno(out govno) // шарпей
                                    так лучше?

                                    хотя в C# лучше коенчно просто вернуть хендлер по причинам того что он все равно будет в куче
                                    Ответить
            • request.args.get('login')
              Да уж, через жопу. Но рнр слегка проще, согласен.
              Ответить
        • И тут кому-то бомбануло. Свинособаки, вы хоть пишите, с чем не согласны.
          Ответить
      • Нет, это именно что язык говно.
        Писать на нем плохо очень легко, а писать хорошо -- сложно.
        Он имеет плохой синтаксис, плохую библиотеку, плохие best practices, и плохое, тупое коммунити.
        Почитай "фрактал плохого дизайна". посмотри на вопросы на PHPClub, а потом сравни их с вопросами по питону на StackOverflow
        Ответить
        • Как раз на СО полно вопросов типа "как сложить 2 массива" с кучей плюсов, тут ты не в тему.
          Ответить
          • в питоне прекрасно складываются два листа
            а что такого?

            а вот так в пистоне нельзя
            $php[1] = 1;
            $php["govno"] = 2;

            потому что массив (он же список для простоты, хотя это конечно не так) не равен дикту (он же хеш он же мап)
            Ответить
            • >а что такого?

              >посмотри на вопросы на PHPClub, а потом сравни их с вопросами по питону на StackOverflow
              >Как раз на СО полно вопросов типа "как сложить 2 массива" с кучей плюсов, тут ты не в тему.
              Ответить
              • "как сложить 2 массива" не такой плохой вопрос как http://tinyurl.com/grvp74l
                Ответить
      • Просто в ПХП много много прекрасных возможностей, но выходит говно.
        Это как с едой, сожрал элитные пельмени пощелкивая креветкой, но выходит ведь все равно говно.
        Ответить
        • > много много прекрасных возможностей...
          ... прострелить себе ногу
          Ответить
    • Ответить
    • знаня гуесто о пхп заканчиваются 10 годом. С тех пор язык сильно изменился.
      Ответить

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