Метатабличный / Говнокод #8651 Ссылка на оригинал

0

  1. 1
  2. 2
-- All scripts should begin at line
null, Null, NULL = nil

Lua

Запостил: istem istem, (Updated )

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

  • null, nulL, nuLl, nuLL,
    nUll, nUlL, nULl, nULL,
    Null, NulL, NuLl, NuLL,
    NUll, NUlL, NULl, NULL = nil
    Ответить
  • Это просо код чтобы облегнчить жизнь тех, кто пришел с других языков
    Ответить
    • неверно . undefined !== nil undefined в жаба скрипте очень даже "defined" 🙂
      Ответить
      • В JS undefined это единственный представитель типа undefined.
        А null это кажется object, но иногда он бажно еще и null.

        undefined крайне скверный тип, он никогда ничему не равен, кроме себя

        А вот кто такой Нил в JS я не знаю
        Ответить
        • null в JS - тоже значение отдельного типа.
          https://www.ecma-international.org/ecma-262/9.0/index.html#sec-terms-and-definitions-null-type

          Хотя, typeof null === 'object'
          https://www.ecma-international.org/ecma-262/9.0/index.html#sec-typeof-operator-runtime-semantics-evaluation

          В отличие от объектов, литералы null равны самим себе и не содержат свойств:
          var a = {}, b = [}, c = null, d = null;
          a == b // false
          c == d // true
          a.x // undefined
          c.x // exception


          > undefined крайне скверный тип, он никогда ничему не равен, кроме себя
          null ведёт себя так же с ===
          хотя, null == undefined
          Ответить
          • Блядь, ну вот нахуя в языке и null, и undefined? На кой чёрт? Зачем они нужны вместе? Есть хоть одна вменяемая причина, хотя бы крохотная?!
            Ответить
            • Чтобы отличать осознанно переданный null от случайного undefined?
              Ответить
            • null это указатель на нул
              а undefined это вообще ничево, когда переменной явно тип не указали
              Ответить
            • потому что мы привыкли как программеры жить в двоичной логие .. Да-Нет. А реальный мир живет в троичной логие. Да-Нет-"Хер его знает". Для исправления несправедливости ввели "undefined" 🙂
              Ответить
              • Это тоже можно через двоичную логику выразить, надо просто иметь дополнительный бит, обозначающий "знает ли хер".
                Ответить
            • Вроде писали где-то, что это последствия быстрого проектирования языка. И что null - был настоящим null pointer'ом, а undefined - питушнёй, которая совсем-совсем не определена. И оттого typeof null == 'object', что так было удобнее сделать, что-то про биты и компактное хранение JS-питушни в памяти.
              В общем, времени на раздумья не было, а в голове автора наверно ещё вертелись низкоуровневые и типизированные сущности.
              Ответить
              • >последствия быстрого проектирования языка
                это точно
                Ответить
                • не знаю. в плане динамичности языка - лучше уже придумать трудно
                  Ответить
                  • что такое "динамичность", что в ней хорошего, и с какими языками ты его сравнивал?
                    Ответить
                    • "динамичность" это все то что не требует linker 🙂
                      в C# попытка была сделать и то и то.. и как всегда получилось все сильно громоздко
                      Ответить
                      • Любопытное определение.

                        JavaScript из коробки не имеет никаких средств линковки потому что не поддерживает более одно файла вовсе. Все средства вроде AMD, require, и модулей из ES2015 это либо 3rd party, либо новые разработки.

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

                        В C#/.NET линковка всегда динамическая (правда я не знаю что там с ngen), однако она всё таки есть, просто нету для этого отдельной программы.

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

                        В JVM примерно тоже самое, только манифестов нет (кажется уже что-то завезли недавно) и файл идентифицировался только по имени.

                        В go (кажется) линковка всегда статическая, и внешнего линкера там нету.

                        В свете всего этого мне трудновато понять как определение динамичности, так и сравнение языков
                        Ответить
                  • > лучше уже придумать трудно
                    Придумать трудно, нужны ПРОТОТИПЫ.

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

                    Для старого скриптоговна предлагаются варианты:
                    * Выбросить нахрен
                    * Автоматический транслятор из произвольной в последнюю версию
                    * Встраивать интерпретаторы всех прошлых версий

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

                    По идее, в JS надо
                    * выкинуть undefined и void
                    * заменить === на ==, а == на ~ (вроде не должно мешать унарной тильде)
                    * добавить перегрузку операторов с возможностью задания произвольных как в хаскеле
                    * добавить прослойку между ООП и ФП: сделать адекватную замену (x => x.field); добавить двоеточие как в lua, чтобы в зависимости от выбора привязывать/не привязывать this к методу объекта; аналогично - с call/apply
                    * разделить в объектах данные и метаданные или полностью перейти на Symbol. Я не против, если operator('+-+') будет возвращать символ, а дальше его можно было бы использовать как ключ для перегрузки оператора +-+.
                    * сделать обязательной точку с запятой
                    * выбрать что-то из var/let и оставить только одно
                    * упростить синтаксис функций. (x,y) => z оставить, а варианты function(){} и () => {} облегчить и свести до одного, скажем, (in,put){ return output; }, this передавать либо явно, либо в функциях отдельного сорта. Например, [x,y] => z и [in,put]{ return output; } принимают свой this (как function(){}), а круглые скобки - нет (как x=>y).
                    Ответить
                    • > обкатывается на реальных проектах. Выясняются слабые места и недоработки,
                      ..а так же выясняется что этот языке уже написано 998 000 строк кода для сорока семи реальных проектов, сделано шесть фреймворков, двенадцать утилит и в мире живет 800 высокоопытных программистов на этом языке.

                      Выкинуть его и сделать новый займет примерно двадцать семь человеколет и будет стоить двадцать семь миллионов долларов


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

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

                        Касательно кода языка. Зачем выкидывать полностью? Главное, что должно получиться на выходе - язык, который выпускается как новый, в котором не оставлено говно для обратной совместимости. Выкидываются только куски кода, соответствующие плохим фичам; куски кода, соответствующие хорошим фичам - адаптируются под новый язык.

                        Касательно пользователей. Ну, либо транслятор, либо несколько движков для разных версий, либо всё вместе.
                        Если речь о вебе, то даже хорошо бы было, если старые движки ещё и CSS/HTML той же версии был. Тогда б настало всеобщее счастье. Программист проверяет, чтоб всё работает под текущий стандарт, а потом его код гарантированно запускается под этим же движком многие годы.
                        Лучше, чем сейчас, когда всё обновляется, но то поддерживает обратную совместимость и копит говно, то не поддерживает и всё ломает, то ещё что-то от изменений ломается.
                        Ответить
                        • Питон 3 показал что будет, если идти по этой схеме. Были и джва движка (правда под венду неудачно получились) и транслятор.

                          Сколько там лет уже лет прошло? А второй до сих пор жив.
                          Ответить
                          • третий питон появился в 2008 кажется
                            а второй умрет в 2020

                            всего 12 лет нужно
                            Ответить
                            • > умрёт в 2020
                              Если в очередной раз дату не передвинут.
                              Ответить
                          • > А второй до сих пор жив.
                            Это же здорово.
                            Сделали новый нормальный язык без багов старого, а обратная совместимость осталась через то, что
                            > второй до сих пор жив
                            Ответить
                            • И багами нового. Сломали совместимость апи байтов и строк зачем-то, из-за этого много какой код не переносится нормально на тройку.
                              Ответить
                              • А что там реально сломали то? Поиск байтиков по регулярке разве что.

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

                                    > возвращает int
                                    А должно возвращать хуету, от которой мне потом всё равно придётся брать ord?
                                    Ну заебись.

                                    Что должно лежать в массиве байтов, если не числа от 0 до 255?
                                    Ответить
                                    • Потому что так оно работало в двойке. Потому что код не надо менять чтобы апи могло принимать другой тип. И как часто тебе нужен был массив байтов? Есть же array
                                      Ответить
                                      • > в двойке
                                        Всем похуй на двойку, раз уж явно решили ломать с ней обратную совместимость...

                                        В двойке у тебя была байтстринга. И ты по индексу получал... байтстрингу длины 1. Сомнительная хуйня, но для строки ещё сойдёт.

                                        В тройке у тебя нет байтстринги. Есть массив байтов. И возвращать по индексу массив из одного байта - это уже треш какой-то.

                                        > array
                                        Array из интов жрёт дохуя. Массив байтов нужен для любых блобов (пакеты из сети, двоичные данные с диска, вот это всё). По сути это и есть Array, просто плотный.

                                        В принципе, в эрланге со списками из интов живут как-то. Наверное и тут можно было бы забить на пирфоманс.
                                        Ответить
                                        • Array жрет? Ты ничего не путаешь?

                                          Куда дели % и .format из байтов? Нахуя было это делать?
                                          Ответить
                                          • > Array жрет
                                            А, ты про import array? Да, этот плотный и не жрёт. Я затупил.

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

                                          with open('file.torrent', 'r') as f:
                                                  data = f.read()
                                              torrent = bencode.bdecode(data)

                                          Запусти на двойке и тройке и попробуй понять почему не работает. Опционально: перепиши так чтобы работало.
                                          Ответить
                                          • > тебе
                                            Гвидо похуй было же. Если бы ему не было похуй - он бы никогда на это не решился.

                                            > попробуй понять почему не работает
                                            Потому что 'r' вместо 'rb'. Вот только этот код у тебя и на двойке случайно работал. Просто удачные файлы попадались.

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

                                              >инструмент для отстрела ног
                                              Ты сейчас про то что файлы на тройке открывались по дефолту в однобайтовой локали? В следующих версиях они осознали свое долбоебство и стали открывать в утф8. На обратную совместимость похуй. Откроешь прогу старым питоном - нихуя не будет работать.
                                              А как считать файлы в текстовом режиме дальше символа конца файла?
                                              Ответить
                                              • > запусти
                                                Лень. Что там будет то? Там кривая либа, которая хочет именно текстовую строку (хотя протокол явно двоичный)?

                                                > по дефолту в однобайтовой локали
                                                Я про конвертер '\r\n' в '\n' на венде. А в торрентах полно замечательных полей с хешами, где такая хуйня может встретится. Всего 2 байта должны удачно лечь. Поэтому даже в двойке нельзя было открывать двоичные файлы без 'b'.
                                                Ответить
                                                • Она работает на двойке и не работает на тройке. Дальше сам разберешься?

                                                  >Поэтому даже в двойке нельзя было открывать двоичные файлы без 'b'.
                                                  В двойке ты мог сделать codecs.open('rb'). А вообще я деталей не помню.
                                                  Ответить
                                                  • > Она работает на двойке и не работает на тройке.
                                                    Ну дождись, пока автор портанёт либу на тройку. Или сам портани. Зачем совать либу от одного языка в другой и надеяться, что это прокатит?
                                                    Ответить
                                                    • Ты уже разобрался почему на тройке не работает?

                                                      >от одного языка в другой
                                                      Ну это пушка.

                                                      Двойка не нужна, но кто будет либы с двойки портировать? Борманд?
                                                      Ответить
                                                      • > почему на тройке не работает
                                                        Даже с 'rb' и актуальной версией либы (под тройку)?

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

                                                            Если оно с 'rb' не работает, но обещает совместимость с тройкой - это косяк либы. Если автор либы и не обещал совместимость - ну ССЗБ, о чём вообще разговор?
                                                            Ответить
                                                            • Ну тогда обсуждай паяльники, а не питон, тем более ты плюсовик типа.
                                                              Ответить
                                                          • > Попробовать было бы быстрее.
                                                            Какую конкретно либу надо ставить чтобы попробовать? А то их там куча похожих в репозитории. Штук 100 наверное.
                                                            Ответить
                                                          • Лол, попробовал bencode 1.0. На тройке вообще не взлетело. Что, в общем-то, логично для либы, которую не правили с 2010(!) года.

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

                                                            1) Из-за изменившихся правил поиска модулей либа не может найти свои же кишки. Фиксим импорт на bencode.BTL
                                                            2) Не может найти некий StringType. Убираем импорты, заменяем типы на свежие. Выбрасываем ветку для long нахуй.
                                                            3) Теперь наконец-то получаем ошибку декодирования. Въёбываем ord'ов в ключи мапы которую там читали.
                                                            4) index хочет байты, въёбываем b перед строками, заодно обмазываем ord'ами сравнения. bdecode() заработало.
                                                            5) У dict.items() нет sort, обмазываем в list.
                                                            6) Запинываем ошибки конкатенации байтов и строк (b-литералы и encode после str). Убираем ветку для строки и добавляем ветку для bytes.
                                                            7) Профит, торрент читается и сохраняется.
                                                            Ответить
                                                            • >> 3) Теперь наконец-то получаем ошибку декодирования. Въёбываем ord'ов в ключи мапы которую там читали.
                                                              >> 4) index хочет байты, въёбываем b перед строками, заодно обмазываем ord'ами сравнения. bdecode() заработало.
                                                              Теперь ты понял свой обосрамс? Раньше функция работала и для байтов и для юникода. Кто весь код будет править под тройку? Ты?
                                                              Ответить
                                                              • > ты
                                                                Гвидо, блядь. Раз недооценил масштабы использования своего языка.

                                                                Но какого хрена эта либа вообще делает в репе для тройки? Зачем пип ставит заведомо мёртвые либы? Вот в чём вопрос.

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

                                                                  Ну найди мне рабочую либу для тройки. А нет их именно из-за сложности портирования.

                                                                  Ассерт же в дебаг моде только работает?
                                                                  Ответить
                                                                  • Да, защищаю. Я согласен с тем, что ломать совместимость к хуям - очень плохая и спорная идея. Но если считать python3 новым языком - то API с байтами и строками у него намного более годное и предсказуемое, чем у python2.

                                                                    > рабочую либу для тройки
                                                                    "bencode3", "bencode.py". Авторы пишут, что для тройки подходит. Разве это всё не работает?

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

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

                                                                        > кто же будет либы переписывать на тройку
                                                                        Да мне похуй, кто будет их переписывать, если честно. Гвидо спрашивай. Не я устроил эту маленькую победоносную войну с переходом напитон3.

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

                                                                          Нахуй ты лезешь обсуждать питон, если на нем не пишешь? Эксперт по всем вопросам, несешь свое охуительно ценное мнение? Двойка не моя, дятел, я на ней за редкими исключениями не пишу, но кто мне будет либы портировать?
                                                                          Ни малейшего плюса от изменений апи я не вижу, часть из них уже откатили в новых версиях, кое-где сломав обратную совместимость со старыми версиями третьей ветки.
                                                                          Ответить
                                                                          • > не пишешь
                                                                            Да, я не настоящий сварщик. Я всего лишь допиливал хрень на базе твистеда на прошлой работе и писал тестики, утилитки и адаптер для бинарных протоколов через ctypes на текущей. Всякий just for fun с usb коннектом до циклоняшки и stm'ки, само собой, считать за работу напитоне нельзя. Подработку с сервером на фласке - аналогично.

                                                                            Очевидно, что раз питон не является моим основным языком, я не имею права высказывать своё мнение о питонах, в особенности о работе с байтами.
                                                                            Ответить
                                                                            • Раз ты расхлебываешь проблемы с портированием библиотек на тройку из-за несовместимости исключительно языком, то скорее нет.
                                                                              Кстати, твистед как раз и не портанули на тройку. А на чем еще писать подменяющие прокси я хз.
                                                                              Ответить
                                                                              • Хм, на SO пишут, что твистед почти портанули. Кроме нескольких модулей. Это правда?
                                                                                Ответить
                                                                • > Зачем пип ставит заведомо мёртвые либы? Вот в чём вопрос.
                                                                  Удваиваю вопрос, кстати. Буквально вчера поставил python-geoip на свой самый новый Питон 3.7.2 через штатный пип, пробую — нихера не работает, вываливается с невразумительной ошибкой. Смотрю исходники — а там куча принтов без скобок. Охуеть.
                                                                  Ответить
                                              • > инструмент для отстрела ног
                                                А тут я имел в виду байтстрингу.
                                                Ответить
                                    • чувак, никто не спорит что стало лучше.

                                      Вообще юникод лучше чем не юникод, это всем понятно на третьем почти что десятке 21 века

                                      Проблема в том что старый код перестал работать.
                                      Тысячи строк перестали работать. Его надо переписывать.

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

                                      Это ОЧЕНЬ страшно, сложно и дорого
                                      Ответить
                                      • > сложно и дорого
                                        В других языках это прекрасно понимали и тащили обратную совместимость. Один гвидо, видимо, недооценил масштабы своего поделия.

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

                                          См генерики в джаве, например
                                          Ответить
                                          • В этой вашей джаве костылей то почти нет... То ли дело кресты. Вот где наслоения копролитов от всех эпох.
                                            Ответить
                                              • Ты ещё про settings забыл, или как там его, где они унаследовались от мапа и просили не пихать не строки. И про урл который лезет в инет в equals.
                                                Ответить
                                                  • З.Ы. Эти строки, имхо, единственная фича py3, которая требовала поломать всё к хуям ради внедрения. Ну и деление, наверное.

                                                    Всё остальное - мелкая косметика, на которую можно было вообще хуй забить и которую затащили заодно с переработкой строк и деления.
                                                    Ответить
                                                    • Апи менять абсолютно не требовалось жи.
                                                      Ответить
                                              • >Ты знаешь чем Vector отличается от ArrayListа?
                                                А StringBuilder от StringBuffer?
                                                Один помечен как устаревший, другой - нет?
                                                Ответить
                                        • Проблема на самом деле в том, что нельзя было использовать в программе код на 2 и 3. То есть, пока все библиотеки и библиотеки использующиеся в библиотеках и библиотеки использующиеся в библиотеках которые используются в библиотеках и так до конца цепочки не будут переписаны на тройке - толку от инвестиций не будет. Вот на тройку и клали хуй до последнего.
                                          Ответить
                                      • > Cтатического анализатора нет. Только тесты, и то не всегда.
                                        > Это ОЧЕНЬ страшно, сложно и дорого.
                                        Да, это действительно очень страшно. Огромная кодовая база, которая реально используется, но при этом держится на соплях и изоленте.

                                        Вот только этот страх есть при любом рефакторинге питоньего кода, переход с двойки на тройку просто вытащил эту проблему на поверхность.

                                        Я согласен, и в крестах можно поломать логику если нет тестов. Но там я хотя бы не боюсь переименовывать поля...
                                        Ответить
                                        • Зачем ты сравниваешь питон с крестами? Сравнивай с js
                                          Ответить
                                          • Может ещё с php сравнить, чтобы питон совсем идеальной няшкой казался?
                                            Ответить
                                            • Почему ты пытаешься сравнивать язык со статической и динамической типизацией? Естественно во втором стат анализ работает примерно никак.
                                              Ответить
                                              • > Почему ты пытаешься сравнивать язык со статической и динамической типизацией?
                                                Потому что я хочу показать преимущество языков со статической типизацией.

                                                Питон няшный. Мне очень нравится на нём писать небольшие скрипты, экспериментировать с железками через его REPL. Но я тупо боюсь трогать тот же парсер тредов на NGK. Хотя надо бы.
                                                Ответить
                                                • Это не преимущество, они другие. Ты об этом сам ведь только что написал
                                                  > Мне очень нравится на нём писать небольшие скрипты

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

                                                Либо мы сравниваем языки честно и беспристрастно, либо организуем "сорта" языков и внутри них сравниваем только выбранные. Статические-динамические языки - это слишком неточно. Можно ещё сравнивать языки, использующиеся в веб-клиентах, серверах, в микроконтроллерах. Потом окажется, что это тоже неточно, и личность автора может улучшить/испортить хороший язык. Соответственно, сравнивать языки в категориях "языки Кернигана и Ритчи", "языки Вирта", "языки Ван Россума", "языки Эйха" и т.д., где каждый язык будет победителем в своей нише.
                                                Ответить
                                              • В динамическом ерланге статический диалайзер, например, ищет баги ещё как.
                                                Ответить
                                                • При прямых руках и динамическую питушню можно статически анализировать. К примеру, в текущем проекте у нас есть билд-тайм проверки вплоть до "при лайв-апгрейде загрузка вот этих модулей в этом порядке может накрыться".
                                                  Ответить
                                                • Ну эрланг так то очень простой язык. Да ещё и иммутабельность во все поля.
                                                  Ответить
                                                  • Ну так и речь о том, что дело не столько в типизации, сколько в количестве граблей в языке.
                                                    Ответить
                                                  • В природе нет никакой иммутабельности, хуйню какую-то выдумали. Вот в ыорте мутабельность во все поля, там даже константы не константны. Именно поэтому я ща форт.
                                                    Ответить
                                                    • В природе нет никакой мутабельности. В каждый квант времени срабатывает >>=, порождая новое состояние мира.
                                                      Ответить
                            • охуенно совместимость

                              знаешь сколько миллионов долларов было потрачено индустрией на перепиську с "print foo" на "print(foo)"?
                              Ответить
                              • Ноль? Сервакам принт не нужен, либам тоже. Т.е. это либо скриптушня консольная либо лабы.
                                Ответить
                                • Management Commands в джанге, утилиты терминальные, охулион их
                                  Ответить
                                    • вот по этому я за "Mac OS Classic"
                                      Там нет Терминала
                                      Ответить
                          • Второй жив в плане поддержи легаси скорее, модулей более-менее общего назначения не переписанных на тройку осталось совсем мало.
                            Ответить
                        • З.Ы. Как либы писать? Под конкретный движок переписывать каждый раз - дорого и бессмысленно. Остаётся крутить много движков параллельно, а между ними общаться через какое-то стабильное ABI?

                          В итоге вся эта замечательная идея вырождается в сишко-колл-конвеншн или какой-нибудь COM. Где на языки как таковые вообще всем насрать. Лишь бы ABI стабильное было.
                          Ответить
                          • бинго же!! так и надо!

                            делаеш виртуальную машину и 100500 языков под нее
                            и пиши на чем хочешь: хочешь на окамле хочешь на пхп
                            Ответить
                            • У нас уже есть такая машина - обычный компьютер.
                              С виртуальной машиной придётся либо сделать слишком низко, что она не нужна, либо слишком высоко, что принципиальных изменений в языке не провернёшь, не потеряв совместисомть.
                              В общем, надо как-то попадать в середину, где оптимально.
                              Ответить
                              • Машина есть, но в нее не встроены средства управления памятью, да и стандартная библиотека там говененькая (еслине считать SSE)
                                Ответить
                          • > переписывать каждый раз - дорого и бессмысленно
                            В мире языков так не считают. Под много популярных языков библиотеки несовместимы, кроме случаев, когда переиспользуется сишкостандартная библиотека или работает компиляция в жс.

                            Я бы скриптушню транслировал в новую версию. А кто писал говнокрипты, которые надеются на размер своего файла и прочую питушню - выкинуть.
                            Ответить
                            • +1.

                              Всегда хуел с того, как например есть 20 языков, и на каждом написан HTTP клиент.

                              Причем они этим горядтся, и говорят: "наш клиент нативный, без всяких посторонних либ".

                              НАХУЯ?!
                              Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8