- 1
- 2
-- All scripts should begin at line
null, Null, NULL = nil
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
-- All scripts should begin at line
null, Null, NULL = nil
Lua
dos_ # 0
nUll, nUlL, nULl, nULL,
Null, NulL, NuLl, NuLL,
NUll, NUlL, NULl, NULL = nil
mozg # 0 ⇈
3.14159265 # 0 ⇈
NlI,Иll,NII,ИII
nIl,nlI,nil,nIL,
NiLL, ИiLL,итд...
dos_ # 0 ⇈
AlexT # 0 ⇈
null, nulL, nuLL, nuLl,
nULl, nULL, nUlL, nUll,
NUll, NULl, NuLl, NuLL,
NulL, NUlL, NULL
хотя херня какаято получается 🙁
плохо у меня с ним
guest # 0 ⇈
Lure Of Chaos # 0
NaIN!
CrashTesterAnusov # 0 ⇈
guest # 0 ⇈
lucidfoxGovno # 0
guest # 0 ⇈
TeaBag # 0
TeaBag # 0 ⇈
SemaReal # 0
inho # 0 ⇈
TOPT # 0 ⇈
d_fomenok # 0 ⇈
Only WCT forever
O4epegHou_nemyx # 0 ⇈
А ещё там есть загрузчик на кое-чём ещё:
https://github.com/freebsd/freebsd/blob/master/stand/forth/loader.4th
bormand # 0 ⇈
O4epegHou_nemyx # 0 ⇈
MAKAKA # 0 ⇈
MAKAKA # 0 ⇈
мощно
https://github.com/freebsd/freebsd/blob/master/stand/lua/loader.lua
guest # 0 ⇈
O4epegHou_nemyx # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
guest # 0 ⇈
там нотис
bormand # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
guest # 0 ⇈
с кем ты тееерь
O4epegHou_nemyx # 0 ⇈
guest # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
O4epegHou_nemyx # 0 ⇈
guest # 0 ⇈
O4epegHou_nemyx # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
O4epegHou_nemyx # 0 ⇈
guest # 0 ⇈
кегдан же писал на сишарпе
O4epegHou_nemyx # 0 ⇈
guest # 0 ⇈
Меня шмонай ты, вертухай,
Да загляни под юбочку,
Да посмотри на булочки.
Понюхай попку носиком,
Прикинься, киса, пёсиком,
Вот в этом вся и разница,
Кто хочет, а кто дразнится.
O4epegHou_nemyx # 0 ⇈
guest # 0 ⇈
cmepmop # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
guest # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
guest # 0 ⇈
O4epegHou_nemyx # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
roskomgovno # 0
TOPT # 0 ⇈
print(null) - - nil
Sim_salapim # 0 ⇈
(или наоборот)
3oJIoTou_xyu # 0 ⇈
Теперь угадай чья фуфайка торт и золотой хуй.
guest # 0 ⇈
roskomgovno # 0 ⇈
TOPT # 0 ⇈
666_N33D135 # 0 ⇈
JIyHHblu_xyu # 0 ⇈
Лунная клизма, дай мне силу!
TOPT # 0 ⇈
ucnykaH # 0 ⇈
KaKou-To_xyu # 0 ⇈
JIyHHblu_xyu # 0 ⇈
Pa3yMHbIu_xyu # 0 ⇈
nojloBou_xyu # 0 ⇈
HoBorogHuu_nemyx # 0 ⇈
3oJloTou_neTyx # 0 ⇈
cKpunToBou_neTyx # 0 ⇈
JIyHHblu_nemyx # 0 ⇈
guest # 0 ⇈
свет из лужи пьет и пьет
roskomgovno # 0 ⇈
я забыл что неинициализированна переменна будет нил
этот код не имеет смысла
gueest8 # 0 ⇈
зависит от точки _G
HoBorogHuu_nemyx # 0 ⇈
Просо —– это хорошо!
ASD_77 # 0 ⇈
OCETuHCKuu_nemyx # 0 ⇈
O4epegHou_nemyx # 0 ⇈
gost # 0
ASD_77 # 0 ⇈
guest # 0 ⇈
А null это кажется object, но иногда он бажно еще и null.
undefined крайне скверный тип, он никогда ничему не равен, кроме себя
А вот кто такой Нил в JS я не знаю
1024-- # 0 ⇈
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 равны самим себе и не содержат свойств:
> undefined крайне скверный тип, он никогда ничему не равен, кроме себя
null ведёт себя так же с ===
хотя, null == undefined
guest # 0 ⇈
gost # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
а undefined это вообще ничево, когда переменной явно тип не указали
ASD_77 # 0 ⇈
Rooster # 0 ⇈
1024-- # 0 ⇈
В общем, времени на раздумья не было, а в голове автора наверно ещё вертелись низкоуровневые и типизированные сущности.
guest # 0 ⇈
это точно
ASD_77 # 0 ⇈
guest # 0 ⇈
ASD_77 # 0 ⇈
в C# попытка была сделать и то и то.. и как всегда получилось все сильно громоздко
guest # 0 ⇈
JavaScript из коробки не имеет никаких средств линковки потому что не поддерживает более одно файла вовсе. Все средства вроде AMD, require, и модулей из ES2015 это либо 3rd party, либо новые разработки.
Вместе с тем большинство веб-проектов как раз таки используют статическую линковку вроде webpack, собирая один бандл из нескольких.
В C#/.NET линковка всегда динамическая (правда я не знаю что там с ngen), однако она всё таки есть, просто нету для этого отдельной программы.
Сборка с классами и интерфейсами нужна в момент компиляции, просто в рантайме она может быть подгружена и из другого места, причем если сборка "сильная" то можно указать конкретную версию потому что есть манифест.
В JVM примерно тоже самое, только манифестов нет (кажется уже что-то завезли недавно) и файл идентифицировался только по имени.
В go (кажется) линковка всегда статическая, и внешнего линкера там нету.
В свете всего этого мне трудновато понять как определение динамичности, так и сравнение языков
1024-- # 0 ⇈
Придумать трудно, нужны ПРОТОТИПЫ.
Ничего лучше не придумывается. Берётся прототип языка, обкатывается на реальных проектах. Выясняются слабые места и недоработки, создаётся новый язык с новыми фичами и без старых багов, а старый язык выкидывается нафиг. И так несколько раз, пока в ходе эволюции не получится нормальный язык.
Для старого скриптоговна предлагаются варианты:
* Выбросить нахрен
* Автоматический транслятор из произвольной в последнюю версию
* Встраивать интерпретаторы всех прошлых версий
И главное - не жалеть старое говно. Совместимость должна обеспечиваться комплияторами/трансляторами, а не языком.
По идее, в 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).
guest # 0 ⇈
..а так же выясняется что этот языке уже написано 998 000 строк кода для сорока семи реальных проектов, сделано шесть фреймворков, двенадцать утилит и в мире живет 800 высокоопытных программистов на этом языке.
Выкинуть его и сделать новый займет примерно двадцать семь человеколет и будет стоить двадцать семь миллионов долларов
зы: почти всё, что проектировалось как умное и правильное, никогда не покинуло стен лабораторий и институтов.
А все, что цветет и пахнет, весь мейнстрим, создавался когда-то на коленке случайно для простоты и быстроты
1024-- # 0 ⇈
Касательно кода языка. Зачем выкидывать полностью? Главное, что должно получиться на выходе - язык, который выпускается как новый, в котором не оставлено говно для обратной совместимости. Выкидываются только куски кода, соответствующие плохим фичам; куски кода, соответствующие хорошим фичам - адаптируются под новый язык.
Касательно пользователей. Ну, либо транслятор, либо несколько движков для разных версий, либо всё вместе.
Если речь о вебе, то даже хорошо бы было, если старые движки ещё и CSS/HTML той же версии был. Тогда б настало всеобщее счастье. Программист проверяет, чтоб всё работает под текущий стандарт, а потом его код гарантированно запускается под этим же движком многие годы.
Лучше, чем сейчас, когда всё обновляется, но то поддерживает обратную совместимость и копит говно, то не поддерживает и всё ломает, то ещё что-то от изменений ломается.
bormand # 0 ⇈
Сколько там лет уже лет прошло? А второй до сих пор жив.
guest # 0 ⇈
а второй умрет в 2020
всего 12 лет нужно
bormand # 0 ⇈
Если в очередной раз дату не передвинут.
1024-- # 0 ⇈
Это же здорово.
Сделали новый нормальный язык без багов старого, а обратная совместимость осталась через то, что
> второй до сих пор жив
guest # 0 ⇈
bormand # 0 ⇈
Зато теперь нет ёбли с пиндосскими либами и скриптами где они вечно забывали воткнуть encode и decode (для инглиша и так сойдёт). По-моему вполне адекватный ход.
guest # 0 ⇈
bormand # 0 ⇈
> возвращает int
А должно возвращать хуету, от которой мне потом всё равно придётся брать ord?
Ну заебись.
Что должно лежать в массиве байтов, если не числа от 0 до 255?
guest # 0 ⇈
bormand # 0 ⇈
Всем похуй на двойку, раз уж явно решили ломать с ней обратную совместимость...
В двойке у тебя была байтстринга. И ты по индексу получал... байтстрингу длины 1. Сомнительная хуйня, но для строки ещё сойдёт.
В тройке у тебя нет байтстринги. Есть массив байтов. И возвращать по индексу массив из одного байта - это уже треш какой-то.
> array
Array из интов жрёт дохуя. Массив байтов нужен для любых блобов (пакеты из сети, двоичные данные с диска, вот это всё). По сути это и есть Array, просто плотный.
В принципе, в эрланге со списками из интов живут как-то. Наверное и тут можно было бы забить на пирфоманс.
guest # 0 ⇈
Куда дели % и .format из байтов? Нахуя было это делать?
bormand # 0 ⇈
А, ты про import array? Да, этот плотный и не жрёт. Я затупил.
Ну тогда смело можно было вообще только юникод оставлять.
bormand # 0 ⇈
Им ctypes и struct завезли, а они хотят байтоёбить форматом... В конец уже упоролись со своим питоном. Правильно Гвидо сделал, что прикрыл эту вакханалию.
guest # 0 ⇈
Запусти на двойке и тройке и попробуй понять почему не работает. Опционально: перепиши так чтобы работало.
bormand # 0 ⇈
Гвидо похуй было же. Если бы ему не было похуй - он бы никогда на это не решился.
> попробуй понять почему не работает
Потому что 'r' вместо 'rb'. Вот только этот код у тебя и на двойке случайно работал. Просто удачные файлы попадались.
Питонисты такие наивные... У них отобрали инструмент для отстрела ног, а они жалуются...
guest # 0 ⇈
>инструмент для отстрела ног
Ты сейчас про то что файлы на тройке открывались по дефолту в однобайтовой локали? В следующих версиях они осознали свое долбоебство и стали открывать в утф8. На обратную совместимость похуй. Откроешь прогу старым питоном - нихуя не будет работать.
А как считать файлы в текстовом режиме дальше символа конца файла?
bormand # 0 ⇈
Лень. Что там будет то? Там кривая либа, которая хочет именно текстовую строку (хотя протокол явно двоичный)?
> по дефолту в однобайтовой локали
Я про конвертер '\r\n' в '\n' на венде. А в торрентах полно замечательных полей с хешами, где такая хуйня может встретится. Всего 2 байта должны удачно лечь. Поэтому даже в двойке нельзя было открывать двоичные файлы без 'b'.
guest # 0 ⇈
>Поэтому даже в двойке нельзя было открывать двоичные файлы без 'b'.
В двойке ты мог сделать codecs.open('rb'). А вообще я деталей не помню.
bormand # 0 ⇈
Ну дождись, пока автор портанёт либу на тройку. Или сам портани. Зачем совать либу от одного языка в другой и надеяться, что это прокатит?
guest # 0 ⇈
>от одного языка в другой
Ну это пушка.
Двойка не нужна, но кто будет либы с двойки портировать? Борманд?
bormand # 0 ⇈
Даже с 'rb' и актуальной версией либы (под тройку)?
> Ну это пушка.
Крестобляди никогда не понять тонкую душу питониста...
guest # 0 ⇈
Ты же сам питонист, целый сайт на питоне написал, не то что сёма.
bormand # 0 ⇈
Мне лень. Ничего интересного я там не найду.
Если оно с 'rb' не работает, но обещает совместимость с тройкой - это косяк либы. Если автор либы и не обещал совместимость - ну ССЗБ, о чём вообще разговор?
guest # 0 ⇈
bormand # 0 ⇈
Какую конкретно либу надо ставить чтобы попробовать? А то их там куча похожих в репозитории. Штук 100 наверное.
bormand # 0 ⇈
За каким хуем её дают скачать для тройки - х.з. Ну да ладно, давайте её пофиксим. Не брать же портированный под тройку форк.
1) Из-за изменившихся правил поиска модулей либа не может найти свои же кишки. Фиксим импорт на bencode.BTL
2) Не может найти некий StringType. Убираем импорты, заменяем типы на свежие. Выбрасываем ветку для long нахуй.
3) Теперь наконец-то получаем ошибку декодирования. Въёбываем ord'ов в ключи мапы которую там читали.
4) index хочет байты, въёбываем b перед строками, заодно обмазываем ord'ами сравнения. bdecode() заработало.
5) У dict.items() нет sort, обмазываем в list.
6) Запинываем ошибки конкатенации байтов и строк (b-литералы и encode после str). Убираем ветку для строки и добавляем ветку для bytes.
7) Профит, торрент читается и сохраняется.
guest # 0 ⇈
>> 4) index хочет байты, въёбываем b перед строками, заодно обмазываем ord'ами сравнения. bdecode() заработало.
Теперь ты понял свой обосрамс? Раньше функция работала и для байтов и для юникода. Кто весь код будет править под тройку? Ты?
bormand # 0 ⇈
Гвидо, блядь. Раз недооценил масштабы использования своего языка.
Но какого хрена эта либа вообще делает в репе для тройки? Зачем пип ставит заведомо мёртвые либы? Вот в чём вопрос.
> юникод
Эта функция должна бить ассёртом по ебалу передавшим туда юникод. Ибо протокол двоичный. Но в питоне так не принято, да?
guest # 0 ⇈
Ну найди мне рабочую либу для тройки. А нет их именно из-за сложности портирования.
Ассерт же в дебаг моде только работает?
bormand # 0 ⇈
> рабочую либу для тройки
"bencode3", "bencode.py". Авторы пишут, что для тройки подходит. Разве это всё не работает?
> Ассерт же в дебаг моде только
Ну ок, согласен, полноценным исключением по ебалу.
guest # 0 ⇈
А, ну тогда ок. Раз авторы пишут.
И ты так и не ответил на вопрос - кто же будет либы переписывать на тройку?
>API с байтами и строками у него намного более годное и предсказуемое, чем у python2.
Нет.
bormand # 0 ⇈
Что конкретно в них тебя не устраивает? У меня они несколько торрентов разобрали без проблем. Вижу все поля и хеши.
> кто же будет либы переписывать на тройку
Да мне похуй, кто будет их переписывать, если честно. Гвидо спрашивай. Не я устроил эту маленькую победоносную войну с переходом напитон3.
> Нет
Да. А ты дальше сиди на своей двойке и собирай грабли с автокастом строк в байты и обратно.
guest # 0 ⇈
Нахуй ты лезешь обсуждать питон, если на нем не пишешь? Эксперт по всем вопросам, несешь свое охуительно ценное мнение? Двойка не моя, дятел, я на ней за редкими исключениями не пишу, но кто мне будет либы портировать?
Ни малейшего плюса от изменений апи я не вижу, часть из них уже откатили в новых версиях, кое-где сломав обратную совместимость со старыми версиями третьей ветки.
bormand # 0 ⇈
Да, я не настоящий сварщик. Я всего лишь допиливал хрень на базе твистеда на прошлой работе и писал тестики, утилитки и адаптер для бинарных протоколов через ctypes на текущей. Всякий just for fun с usb коннектом до циклоняшки и stm'ки, само собой, считать за работу напитоне нельзя. Подработку с сервером на фласке - аналогично.
Очевидно, что раз питон не является моим основным языком, я не имею права высказывать своё мнение о питонах, в особенности о работе с байтами.
guest # 0 ⇈
Кстати, твистед как раз и не портанули на тройку. А на чем еще писать подменяющие прокси я хз.
bormand # 0 ⇈
gost # 0 ⇈
Удваиваю вопрос, кстати. Буквально вчера поставил python-geoip на свой самый новый Питон 3.7.2 через штатный пип, пробую — нихера не работает, вываливается с невразумительной ошибкой. Смотрю исходники — а там куча принтов без скобок. Охуеть.
bormand # 0 ⇈
bormand # 0 ⇈
А тут я имел в виду байтстрингу.
guest # 0 ⇈
Вообще юникод лучше чем не юникод, это всем понятно на третьем почти что десятке 21 века
Проблема в том что старый код перестал работать.
Тысячи строк перестали работать. Его надо переписывать.
А у тебя даже статического анализатора нет. Толькотесты, и то не всегда.
Это ОЧЕНЬ страшно, сложно и дорого
bormand # 0 ⇈
В других языках это прекрасно понимали и тащили обратную совместимость. Один гвидо, видимо, недооценил масштабы своего поделия.
Ну а раз уж за каким-то хуем попёрлись ломать - надо все косяки фиксить, а не только скобочки к принту. Второго шанса то уже точно не будет.
guest # 0 ⇈
См генерики в джаве, например
bormand # 0 ⇈
guest # 0 ⇈
Ты знаешь чем Vector отличается от ArrayListа?
А StringBuilder от StringBuffer?
А что такое writeObject?
А, блядь, виртуальные открытые методы и открытыиеклассы?
?
bormand # 0 ⇈
bormand # 0 ⇈
bormand # 0 ⇈
Всё остальное - мелкая косметика, на которую можно было вообще хуй забить и которую затащили заодно с переработкой строк и деления.
guest # 0 ⇈
guest # 0 ⇈
А StringBuilder от StringBuffer?
Один помечен как устаревший, другой - нет?
guest # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
> Это ОЧЕНЬ страшно, сложно и дорого.
Да, это действительно очень страшно. Огромная кодовая база, которая реально используется, но при этом держится на соплях и изоленте.
Вот только этот страх есть при любом рефакторинге питоньего кода, переход с двойки на тройку просто вытащил эту проблему на поверхность.
Я согласен, и в крестах можно поломать логику если нет тестов. Но там я хотя бы не боюсь переименовывать поля...
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Потому что я хочу показать преимущество языков со статической типизацией.
Питон няшный. Мне очень нравится на нём писать небольшие скрипты, экспериментировать с железками через его REPL. Но я тупо боюсь трогать тот же парсер тредов на NGK. Хотя надо бы.
guest # 0 ⇈
> Мне очень нравится на нём писать небольшие скрипты
>Но я тупо боюсь трогать тот же парсер тредов на NGK
Тесты пиши, долбоёба кусок.
bormand # 0 ⇈
Да надо бы.
1024-- # 0 ⇈
Либо мы сравниваем языки честно и беспристрастно, либо организуем "сорта" языков и внутри них сравниваем только выбранные. Статические-динамические языки - это слишком неточно. Можно ещё сравнивать языки, использующиеся в веб-клиентах, серверах, в микроконтроллерах. Потом окажется, что это тоже неточно, и личность автора может улучшить/испортить хороший язык. Соответственно, сравнивать языки в категориях "языки Кернигана и Ритчи", "языки Вирта", "языки Ван Россума", "языки Эйха" и т.д., где каждый язык будет победителем в своей нише.
CHayT # 0 ⇈
CHayT # 0 ⇈
bormand # 0 ⇈
CHayT # 0 ⇈
Rooster # 0 ⇈
1024-- # 0 ⇈
Desktop # 0 ⇈
JIyHHblu_nemyx # 0 ⇈
bormand # 0 ⇈
Да ну это говно. Когда-то у него были крутые регулярки и онлайн-репа с крутыми либами. Но сейчас это уже везде есть.
Rooster # 0 ⇈
guest # 0 ⇈
http://govnokod.ru/13565
guest # 0 ⇈
знаешь сколько миллионов долларов было потрачено индустрией на перепиську с "print foo" на "print(foo)"?
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Прыщебляди соснули.
guest # 0 ⇈
Там нет Терминала
O4epegHou_nemyx # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
В итоге вся эта замечательная идея вырождается в сишко-колл-конвеншн или какой-нибудь COM. Где на языки как таковые вообще всем насрать. Лишь бы ABI стабильное было.
guest # 0 ⇈
делаеш виртуальную машину и 100500 языков под нее
и пиши на чем хочешь: хочешь на окамле хочешь на пхп
1024-- # 0 ⇈
С виртуальной машиной придётся либо сделать слишком низко, что она не нужна, либо слишком высоко, что принципиальных изменений в языке не провернёшь, не потеряв совместисомть.
В общем, надо как-то попадать в середину, где оптимально.
guest # 0 ⇈
guest # 0 ⇈
https://github.com/revery-ui/revery
1024-- # 0 ⇈
В мире языков так не считают. Под много популярных языков библиотеки несовместимы, кроме случаев, когда переиспользуется сишкостандартная библиотека или работает компиляция в жс.
Я бы скриптушню транслировал в новую версию. А кто писал говнокрипты, которые надеются на размер своего файла и прочую питушню - выкинуть.
guest # 0 ⇈
Всегда хуел с того, как например есть 20 языков, и на каждом написан HTTP клиент.
Причем они этим горядтся, и говорят: "наш клиент нативный, без всяких посторонних либ".
НАХУЯ?!