- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
var buf = Buffer.allocUnsafe(kexInitSize);
var p = 17;
buf[0] = MESSAGE.KEXINIT;
if (myCookie !== false)
myCookie.copy(buf, 1);
writeUInt32BE(buf, kexBuf.length, p);
p += 4;
kexBuf.copy(buf, p);
p += kexBuf.length;
writeUInt32BE(buf, hostKeyBuf.length, p);
p += 4;
hostKeyBuf.copy(buf, p);
p += hostKeyBuf.length;
writeUInt32BE(buf, algos.cipherBuf.length, p);
p += 4;
algos.cipherBuf.copy(buf, p);
p += algos.cipherBuf.length;
writeUInt32BE(buf, algos.cipherBuf.length, p);
p += 4;
algos.cipherBuf.copy(buf, p);
p += algos.cipherBuf.length;
writeUInt32BE(buf, algos.hmacBuf.length, p);
p += 4;
algos.hmacBuf.copy(buf, p);
p += algos.hmacBuf.length;
writeUInt32BE(buf, algos.hmacBuf.length, p);
p += 4;
algos.hmacBuf.copy(buf, p);
p += algos.hmacBuf.length;
writeUInt32BE(buf, algos.compressBuf.length, p);
p += 4;
algos.compressBuf.copy(buf, p);
p += algos.compressBuf.length;
writeUInt32BE(buf, algos.compressBuf.length, p);
p += 4;
algos.compressBuf.copy(buf, p);
p += algos.compressBuf.length;
// Skip language lists, first_kex_packet_follows, and reserved bytes
buf.fill(0, buf.length - 13);
3.14159265 07.03.2020 03:52 # 0
Исходный тред:
https://govnokod.ru/26463#comment531865
3.14159265 07.03.2020 03:55 # 0
То ли дело инкрементить индекс в удобном сишном массиве/указателе с автовыводом размера типа:
gost 07.03.2020 03:57 # 0
*((p += 4) - 4) = ...;
Fike 07.03.2020 05:00 # 0
> Unsafe
так падажжи мы же специальный язык написали чтобы мимо памяти не промазать
gost 07.03.2020 05:03 # 0
>>> This method differs from the Buffer.alloc() method because it creates a not-pre-filled buffer, and it may contain information from older buffers. That is why it is called unsafe.
Без этого наверняка файл в тридцать семь мегабайт будет не три минуты загружаться, а три минуты и сто миллисекунд, что неприемлемо.
guest8 07.03.2020 05:04 # −999
gost 07.03.2020 05:04 # 0
guest8 07.03.2020 05:03 # −999
1024-- 07.03.2020 09:58 # 0
Если бы автор реализовал хелперы pushInt(buf, x), pushFloat(buf, x), pushString(buf, x), было бы даже лучше, чем в сишке, т.к. в сишке было бы pushInt(buf, x), pushFloat(buf, x), pushString(buf, x, dlina_stroki).
3.14159265 07.03.2020 12:42 # 0
А указатель p куда девать?
Даже в сраной жабе нормальные апи есть.
Гость подсказывает: https://govnokod.ru/26472#comment531961
1024-- 07.03.2020 12:55 # 0
gost 07.03.2020 03:56 # +1
https://github.com/mscdex/ssh2-streams/blob/master/lib/sftp.js#L2305
3.14159265 07.03.2020 03:59 # 0
Это походу ему никто никогда не писал ради прикола в глобал-скоупе
undefined=42;
guest8 07.03.2020 04:02 # −999
3.14159265 07.03.2020 04:03 # 0
Ну видно как людям сильно не хватает сишного struct
1024-- 07.03.2020 10:04 # 0
И это в не очень свежей версии "Node.pituz".
Ну и вообще, переопределить unpituzed может только хацкер, который специально ломает код. Так же можно во все прототипы вставить function(){} или сделать for(char*p=NULL; p<LONG_MAX; p++) *p = 0; в сишке. От этого нет адекватной защиты, кроме отдубашивания хацкера стандартом C++ по башке.
3.14159265 07.03.2020 12:31 # 0
Это был сарказм.
Зачем на ровном месте создавать проблемы?
Какой смысл в
Зачем undefined? Зачем?
void(0) короче и надёжнее.
1024-- 07.03.2020 12:41 # 0
* работает in
* сравнивается по ==
3.14159265 07.03.2020 12:46 # 0
Я же не знаю. Вдруг это какая-то хитрая питумизация, чтобы не инициализировать их раньше времени.
Вот спрашиваю зачем именно undefined?
> сравнивается по ==
А undefined разве нет?
1024-- 07.03.2020 12:57 # 0
> А undefined разве нет?
Сравнивается. Я имел в виду, что null == undefined, и больше ничему не равны.
gostinho 07.03.2020 12:50 # 0
bormand 07.03.2020 13:02 # 0
guest8 07.03.2020 04:00 # −999
gost 07.03.2020 04:04 # 0
Огромная переголова. Адекватнее будет просто написать обёртку над libssh.
guest8 07.03.2020 04:11 # −999
Fike 07.03.2020 04:42 # +1
bormand 07.03.2020 13:05 # +1
Да оно, скорее всего, даже быстрее работать будет... Ну и без проёба кусков файла.
3.14159265 07.03.2020 04:04 # +3
>А дебажить это всё как?
Элементарно!
gost 07.03.2020 04:06 # +1
Из utils.js.
3.14159265 07.03.2020 04:07 # +1
gost 07.03.2020 04:11 # 0
Fike 07.03.2020 04:54 # 0
guest8 07.03.2020 04:56 # −999
3.14159265 07.03.2020 05:11 # +3
А не могут высрать простейшую обёртку со счётчиком для buf.
Не хочу, хочу жрать говнопетушиться с индексами
writeUInt32BE(buf, cols, 23);
p += 4;
А не писать код как белый господин:
guest8 07.03.2020 05:21 # −999
1024-- 07.03.2020 10:09 # 0
Не читал код, поэтому не знаю, там добавляется в конец, или просто так поверх буфера (во втором случае самописный код с изменением полуглобального счётчика будет более гибким).
gost 07.03.2020 10:11 # +1
1024-- 07.03.2020 10:15 # 0
Меня печалит, что из-за подобного ГКвские анскиллябры, которые "JS" толком не видели, ругают "JS", как будто бы на "сишке" этот текст выглядел бы как-то иначе.
gost 07.03.2020 10:23 # 0
Могу поставить 64 вареции распулужения информации, что критических багов там дохуя и больше.
1024-- 07.03.2020 10:51 # 0
Единственное, что меня печалит - что она 0.5с входит. Не знаю, это криптопожатия хостов так долго работают, или жс питух тормозит. Но я просто наравне с SQL пулами держу наготове соединение и теку, когда мне надо несколько питушень запускать. Зато мой сервер может запускать разную питушню на хостах, где она доступна.
gost 07.03.2020 10:59 # +2
Надеяться на то, что один разраб (который там де-факто в одиночку проЭкт развивает) ни разу не ошибся в этих сотнях магических числах и не наделал кучи ошибок разной степени опасности — в высшей степени наивно.
И хорошо, если эта хуйня просто чанк из файла вырежет (как уже, заметь, бывало). А ведь она твои ключи парсит и по сетке что-то с ними связанное гоняет.
Мне вот страшно доверять своё бабло одному-единственному петуху, который даже именованные константы не осилил.
3.14159265 07.03.2020 12:40 # +1
Это кто тут JS не видел?
Ну коли там всё говнище лютое, чего б и не поругать?
«У нас архивчики не больше 128к» «У нас чанки херятся»
«Мы воруем исходники с сишки, а у нас по-прежнему всё дико тупит»
1024-- 07.03.2020 13:03 # 0
Больше говнища в мире скриптушни - не потому, что скриптушня - говно, а потому, что не-скриптушня просто не позволяет написать код человеку, не являющемуся пердоликом профессионального уровня.
И порицать нужно не-скриптушню, где простой человек не может написать программу, не может автоматизировать свою работу и не может иметь куч пользователей. Не-скриптушня превращает общество в закрытую секту программистов, хотя языки программирования в XXI веке должны быть доступны для всех, а не быть набором хипстерксих слов и концепций как C++.
3.14159265 07.03.2020 13:11 # 0
node.js-элиты, которая пишет сложнейший код ключевых модулей.
>быть набором хипстерксих слов и концепций как C++
Кмк, хипстерский набор слов и концепций — это Haskell и Node.js.
А С++ при всех его недостатках уже больше 30 лет как серьёзный промышленный язык.
1024-- 07.03.2020 13:48 # 0
По правилам хипстерства хипстерам следует быть не как все и, в частности, придумывать слова, которые другие люди не понимают.
В кулхацкеле и ноде гиковский набор слов и концепций.
3.14159265 07.03.2020 13:53 # 0
>где простой человек не может написать программу
А вот node.js для гиков.
Но там давно уже нет никакого набора концепций.
Просто их свалка.
guest8 07.03.2020 16:57 # −999
1024-- 07.03.2020 19:07 # 0
* те, кто пишут компиляторы, ВМ и прочий царский код, где нужно мышление поехавшего на байтушне
* те, кто занимается архитектурой и проектированием систем
* те, кто занимается дизайном от общей сути до пользовательского интерфейса
Как показывает практика, простой человек не может размышлять как поехавший байтушок, не может продумать архитектуру и не может сделать что-то, чем удобно пользоваться (часто для него важнее сам факт автоматизации, а не взаимодействие программы и человека). Всё остальное он сделать может.
Обычному человеку вполне себе можно доверить не только лоховскую скриптушню, но и C++, только для этого надо сделать C++ адекватнее (сейчас сложность C++ - это не сложность концепций или сложность программирования как такового, а сложность налипшего на язык говна). Обычный человек вполне себе понимает, как работает компьютер, что там происходит в памяти, что такое класс, метод и процедура. И только большее количество людей будет это понимать.
Обычному человеку легче написать для себя программу, чем программисту. Ему точнее известно, что она должна делать, он лучше разбирается в предметной области. Если предметная область сложная, программист в неё будет въезжать долго и дорого за это возьмёт. А программирование - это всего лишь язык. Научиться говорить с компьютером даже легче, чем с людьми.
Вся питушня, которая изучается "программистами" - либо коньцепции, которые просто впитали в себя здравый смысл (если писать медленную программу, она будет долго выполняться; если разделить задачу на подзадачи, будет две простых задачи, за которые легче взяться), который есть не только в программировании, либо абстрактная математика, которую программисты сами не используют (например, лямбда-исчисление), либо алгоритмы, которые программисты сами не знают и реализуют по книжкам, как будет их реализовывать простой человек.
gost 07.03.2020 23:59 # 0
Нет. Это твой сдвиг восприятия как программиста.
Для обычного человека компьютер — это такая же коробка, как и холодильник. Она работает, она выполняет задачи пользователя, внутри неё какие-то байты, электроны и фреон. Всё.
И никаких предпосылок к увеличению людей, понимающих, как работают компьютеры, нет. Точно так же, как не увеличивается количество людей, знающих, как работает телевизор.
1024-- 08.03.2020 11:10 # 0
Скорее всего, в бухгалтерии наврали, что телевизоры у них у на каждый стол поставили.
Готов поспорить, что и премии не каждый получал за мастерское владение холодильником. Ну разве что некоторые: http://joyreactor.cc/post/3186277
В офисы и прочие помещения ставят не телевизоры, а компьютеры. Компьютер на рабочем месте теперь не диковинка, но обычное положение вещей. За знание телевизора больше зарплаты не получишь, а вот за знание компьютера - вполне. Больше знаешь о компьютере - меньше времени тратишь на пердолинг и возню с ленивым админом - работаешь лучше, имеешь больше предпосылок для повышения зарплаты, спаривания с более здоровыми особями и больше возможностей (финансовых и биологических) для выведения здорового потомства. Знание компьютеров даёт преимущество в эволюционном плане.
Может быть, не все, но технари точно начинают понимать, как и что в компьютере крутится, когда им приходится что-то автоматизировать, а программист слишком туп, чтобы написать программу для их предметной области.
gost 08.03.2020 11:56 # 0
Ты путаешь «знания о том, как работает компьютер» со «знаниями о том, как работать с программами». Какому-нибудь бухгалтеру никто не будет повышать зарплату за то, что он знает о байтиках, тактах, тредах, оперативной памяти, винде на флешке и NAS с SMB1. А вот за углублённые знания «Экселя», «1С:Предприятие» и прочих профессиональных пакетов — вполне.
1024-- 08.03.2020 12:27 # 0
guest8 08.03.2020 00:22 # −999
1024-- 08.03.2020 11:18 # 0
Например, выломал человек байеровский фильтр ради фотографий с повышенными разрешением и чувствительностью и хочет сам сгенерировать картинку из RAW, т.к. не уверен, что демозаик алгоритм не перестанет смешивать субпиксели, поскольку этого без цветных стекляшек делать не нужно.
gost 08.03.2020 12:24 # 0
Зачем? Зачем? Если человек это делает для себя — он спокойно подождёт пару минут (не настолько же там всё плохо с батушнёй). Если он пишет программу для других — он автоматически становится программистом и должен страдать.
1024-- 08.03.2020 12:30 # 0
Питушня же, даже если зелёная. Человек может сделать что-то уровня письма в редакцию о том, как правильно поливать фикусы (ака современные лайфхаки), поделиться с любителями любительской питушнёй.
Его программа не обязана работать со всеми вариантами RAW файлов (даже LR так не умеет, если камера крайне нова), не обязана иметь удобный интерфейс, но она должна без пердолинга обрабатывать фотографии, для этого спецпрограммисты не нужны.
Desktop 07.03.2020 18:13 # +1
Расскажи мне, пожалуйста, как без боли, регистрации и смс мне сделать веб-страницу, которая выводит таблицу с картинками. Приветствуются все хипстерские решения.
1024-- 07.03.2020 18:46 # +2
* Можно сгенерировать страницу скриптом на python и т.п., положить в директорию со статикой и раздавать любой питушнёй, которая умеет раздавать файлы по HTTP.
* Можно взять хостинг с PHP и быстро нахреначить запрос в mysql и вывести в цикле.
* Можно написать очень простое приложение под Node, хотя PHP-питушня будет быстрее, т.к. в ней всё встроено, а под Node надо качать пакеты вроде mysql; если приложение будет сложнее странички - какой-нибудь express/impress, либо самому матчить request.url и писать заголовки.
Хоть я и забыл PHP, я бы выбрал второй вариант как наименее пердольный.
А если эта та задача со словарём с ворециями, то лучше всего написать простой скрипт на питоне, которым генерить страницу и заливать её как статику. Так даже можно использовать самый лоховской хостинг без БД и MySQL.
А хипстушнёй я не занимаюсь. Мне ближе ванильный ECMAScript5 без модного говна, чтобы добиваться цели, а не смаковать популярную питушню.
Desktop 07.03.2020 19:00 # 0
Я посмотрел на последний ангуляр и ужаснулся. В этих дебрях можно ногу сломать. Сейчас ковыряю vue.js
Основной вопрос, как сделать адаптивную таблицу, которая автоматически меняла бы количество рядов и колонок в зависимости от ширины экрана (но это, конечно, совсем не js-вопрос, на самом деле)
1024-- 07.03.2020 19:38 # 0
Ну то есть, если у неё есть какие-то строки/колонки, которые можно не показывать без вреда для пользователя, может быть, их стоит не показывать совсем?
Или же это не таблица, а набор блоков, которые можно перенести как слова на другую строку?
У таблицы можно сделать полосы прокрутки (CSS overflow) или сменить размер текста (CSS font-size). Можно просто накинуть прямоугольных блоков (HTML div, CSS float left, м.б. flexbox), которые будут переноситься на следующую "строку" и из-за равных размеров собираться в "таблицу". Можно вручную прописать разные стили (CSS media queries). Если ширина меньше такой-то, скрыть стилями такие-то столбцы; если высота - такие-то строки. Если ещё меньше в таких-то пределах, то скрыть ещё те и те.
Можно слушать изменение размеров страницы (JS window resize event), считывать реальные размеры (JS что-то про rounding box) и решать, что скрывать, что удалять, что рисовать.
Вон тут напитушили какую-то питушню: https://github.com/svinkle/responsive-table - если становится узко, таблицу перепердоливают в список и т.п.
Desktop 07.03.2020 19:43 # 0
,
а на ноутбуке, к примеру
1024-- 07.03.2020 19:52 # 0
или
?
Desktop 07.03.2020 20:03 # 0
Но вообще всё равно, оба варианта норм.
1024-- 07.03.2020 20:35 # 0
1. отрисовать таблицу как есть
2. измерить ширину колонок
3. зафиксировать её и пустить питушню по кругу
https://jsfiddle.net/b0rmtxLd/2/
Если взять максимальный размер, будет вариант 1: https://jsfiddle.net/b0rmtxLd/3/
Если убрать левость tr, tdшки пойдут в поток, будет вариант 2: https://jsfiddle.net/b0rmtxLd/4/
* аналогично - с высотой.
b0rmtxLd рекм0нду3т!
Если длина/ширина ячейки известна, можно сверстать на divах.
IIIuMnAH3E 07.03.2020 20:36 # +3
1024-- 07.03.2020 20:40 # +1
На эту тему есть статья https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Только писали сайт скриптухи, он у меня загрузился медленнее, чем Notepad++ с 20 открытыми файлами с говнокодом.
Desktop 07.03.2020 21:23 # 0
Desktop 07.03.2020 21:36 # 0
guest8 07.03.2020 22:44 # −999
gost 07.03.2020 23:56 # 0
[citation needed]
Программирование — это такая же профессиональная область деятельности, как вождение, ремонт/обслуживание техники, строительство или даже перевод (естественных языков).
Да, практически любой человек может, например, заменить у себя дома лампочку. Однако сколько могут поменять проводку и не сжечь дом впоследствии? Я вот не могу.
С программированием — всё абсолютно так же. Написать скрипт, который будет генерить какую-нибудь сводку в табличке, скачивать что-нибудь из интернета или генерировать вореции может практически любой опытный пользователь ПК™.
А доверять непрофессионалу реализацию сложного криптографического протокола или просто чего-то, от чего будут зависеть деньги — абсолютно то же самое, что и требовать от программиста починить лифт.
1024-- 08.03.2020 11:33 # 0
Профессиональный молоток будет в несколько раз дороже и крепче, но функционировать будет так же, как и любительский. Профессиональный лом вовсе не отличишь от любительского. А профессиональный автомобиль таксиста - от любительского. Профессиональные фотокамеры даже проще, чем любительские (из них выпиливают вспышку, кучу ненужных режимов и добавляют интуитивно понятные аппаратные кнопки вместо запутанных программных меню).
Но инструменты профессионального программиста - какое-то сложное говно с кучей придуманных аббревиатур. Программисту надо долго учиться работать с банальным текстовым редактором (vim, msvs), учиться выводить в поток в C++.
Несколько столетий/тысячелетий назад тоже делали бронзовые стамески. Но это было не потому, что они предназначались для профессионалов, которыми могли быть единицы, а потому, что технологий изготовления банальной стали у людей тогда не было. Так и с ИТ-питушнёй: пока мы имеем сырое говно, которое ещё не успело обкататься хотя бы веков за пять. И мешает его использовать не анскильность людей, а говённость инструментов. В программировании намного меньше задач, для которых действительно нужны программисты.
gost 08.03.2020 12:13 # 0
В первую очередь инструменты программиста сложны из-за того, что программист работает с крайне сложным устройством — компьютером.
Можешь открыть какой-нибудь лётный мануал от самолёта — там вообще чуть ли не половина слов написана капсом, а понятны только предлоги.
> И мешает его использовать не анскильность людей, а говённость инструментов.
[источник?]
Наше сырое говно на транзисторах мы уже обкатали до физически возможно максимума, дальше можно только крохи вырывать. А квантовая питушня — мало того, что требует крайне специфических знаний, так ещё и с большой долей вероятности нереализуема.
1024-- 08.03.2020 12:40 # 0
Ну нет там уж такой большой сложности. Все идеи - простые и понятные, реализация не всегда оставляет их такими, но всё же.
То ли дело медики или физики. У них в предметной области принципиально сложная питушня, которые они не придумывали и не хотели бы придумывать. Они распутывают говнокод мироздания.
ИТ-специалисты же сами создали своё говно, сами его усложняют и сами с ним борются. Асинхронность в JS как пример. Что мешало так долго бороться с лапшой? Почему так долго не вводили async/await и пердолились? Что мешало сделать нормальный C++ заново, а не фиксить баги и размышлять об оптимизации C++ в терминах C++ в идеологии C++, хотя известно было, что они - говно?
Асинхронность в JS и язык C++ - какая-то принципиальная сложность программирования? Нет, это просто необкатанное говно.
> Наше сырое говно на транзисторах мы уже обкатали до физически возможно максимума
Это мелочи. Остаётся ещё ряд задач, которые надо решить, чтобы инструменты программиста перестали быть таким говном
* Тормознутая скорость света и большое энерговыделение вентилей
* Ортогональная система команд у процессора
* Отсутствие UB
* Продвинутая оптимизация и нетормозной декларативный SQL
* Понятный C++
* Уменьшение бойлерплейта, семантически понятный код
* Понимание компьютером намерений пользователя и адекватное выполнение автоматически выведенного и скорректированного ТЗ
gost 08.03.2020 12:58 # 0
Ну да, ну да. Чтобы понять работу современного компьютера в деталях (а не на уровне «это АЛУ, он считает, а это ЗУПВ, там данные хранятся») нужно иметь как минимум пару вышек.
> Все идеи - простые и понятные, реализация не всегда оставляет их такими, но всё же.
Идея самолёта — простая и понятная, но это не значит, что самолёт — простое устройство (хотя он проще компьютера, кстати).
> язык C++ - какая-то принципиальная сложность программирования?
Да. Это попытка выразить высокоуровневые концепции в низкоуровневых терминах. Получить максимальный пирфоманс можно только так.
> Остаётся ещё ряд задач, которые надо решить, чтобы инструменты программиста перестали быть таким говном
Пожалуй, соглашусь, что сложность каждого из пункта последующего списка примерно одинакова. [/color]
1024-- 09.03.2020 19:00 # 0
Понимать на таком уровне не нужно. Программа либо сразу работает как надо, либо гуглится и рассматривается каждый случай отдельно.
Знание квантовых состояний атомов в полупроводниках программисту не нужно, так же как микроархитектура процессора. Программист работает на уровне абстракции повыше, где в двух-трёх сигмах случаев проблемы другие. То кто-то сел на флешку и долго читает, то пользователь поставил битый диск или какую-то питушню двадцатилетней давности, то UAC добавили. До того, как дело упрётся во внутренности ПК, программист уже может уйти на пенсию. Просто так рассматривать хвосты за тремя сигмами - питушня, которая не окупится.
>> язык C++ - какая-то принципиальная сложность программирования?
> Да. Это попытка выразить высокоуровневые концепции в низкоуровневых терминах. Получить максимальный пирфоманс можно только так.
Ну вот Вы говорите, что это "попытка". Чуть менее, чем полностью эта сложность - несовершенства такой попытки, никак не связанная с принципиальной сложностью.
Вот кто помешал разрешить описывать операторы с правым this внутри класса? Это можно сделать банальным препроцессором, который их выносит за класс, а внутри добавляет строчку дружеского доверия оператору.
Кто помещал переиспользовать и инлайнить коньструкторы (вроде же это уже добавили в новую версию)?
Кто помешал сделать режим без UB, но с подгоном кода и его ворнингов под конкретную архитектуру, где у меня, например, работает как надо интовый перекат, т.к. моя архитектура использует комплементарного питушка? Это бы и байтухам первым пригодилось.
Много высокоуровневых терминов могут хорошо описывать низкоуровневую питушню, и это можно эффективно использовать.
gost 09.03.2020 19:29 # 0
И тем не менее, как я и сказал, программирование такое сложное потому, что оно построено на базе крайне сложного устройства. Да, постоянно придумываются абсракции, которые отдаляют программиста от компьютера. Но у абстракций в реальном мире есть неприятное свойство: они постоянно текут. Нетекущие абстракции бывают только в чистой математике (и то не факт).
Собственно, поэтому для любого программиста крайне важно умение работать с протёкшими абстракциями.
> Чуть менее, чем полностью эта сложность - несовершенства такой попытки, никак не связанная с принципиальной сложностью.
Нет. Принципиальная сложность в том, что любая попытка выразить абстракции низкого уровня в терминах абстракций высокого уровня неизбежно будет (1) тормозить, (2) протекать и/или (3) выглядеть как переусложнённое говно (можно выбрать один или больше пунктов из списка, меньше нельзя). Происходит это из-за того, что при переходе на ступеньку «вверх» нам надо каким-то образом обработать потерянную при этом информацию. Разберём по пунктам:
1) Тормозящие абстракции: мы потеряли информацию о железе и не можем эффективно его использовать. Сюда входит любое скрипто- и вмоговно.
2) Протекающие абстракции: мы не потеряли информацию с нижнего уровня, а потащили её наверх. Реальный пример — «C». Вроде бы язык высокого уровня, но приходится пердолиться с памятью, ручными тредами и прочим железоговном.
3) Переусложнённое говно: мы не потеряли информацию, вместо этого полностью выразив её в абстракциях верхнего уровня. В результате у нас в одном слое лежат абстракции и верхнего уровня, и нижнего. Идеальный пример — кресты с их «std::hardware_destructive_interference_ size».
> операторы
> коньструкторы
> UB
Всё это — мелочи, которые никак не влияют на общую картину. Исправим их — получим вылезшего из другой лунки крота. Потому что абстракции низкого уровня всегда будут ждать удобного момента, чтобы укусить нас за жопу.
1024-- 09.03.2020 19:56 # 0
Это эффективная сложность, но не принципиальная. Если по литературе задали выучить пару строф из /dev/urandom, можно выучить ту кобенацию, которую выдаст генераторушня, а можно навернуть свой генератор, никто не заметит разницы!
Так и с компьютерами: можно изучать принципы и связи, а можно - конкретное устройство с чипами определённых производителей и набором установленных программ и шрифтов. Второе будет намного сложнее, хотя объективную реальность будет описывать более бедно.
> у абстракций в реальном мире есть неприятное свойство: они постоянно текут
И их успешно затыкают. Мой printf или console.log отлично работает, я чуть менее, чем никогда заглядывал внутрь.
Их затыкают настолько хорошо, что при их протечке программистом уже не обойдёшься, нужен будет эксперт по криптушне или внутреннему устройству процессоров отдельной серии.
И компиляторы выдают ошибки и ворнинги.
> Тормозящие абстракции
JIT, директивы и параметры компилятора.
В C++ есть "ссылки", которые позволяют не переписывать код, работающий со значением, и при этом добавить царски быстрое копирование аргументов в стек.
> Переусложнённое говно
Да. Но это уже проблемы реализации. С опытом у создателей языков вырабатывается статистика, вырабатывается опыт, популярный код начинает выглядеть проще и не тормозить.
gost 09.03.2020 20:20 # 0
Проблема в том, что этих самых принципов и связей в современном ПК вагон и маленькая тележка, и досконально их знают только хардкорные бородатые программеры с 20+ годами опыта. Остальным (включая меня, да) остаётся только жаловаться на несовершенство мира.
> И их успешно затыкают.
По большей части это «затыкание» сводится к банальному закидыванию дыры лишники гигагерцами и гигабайтами. Решение эффективное… Было до недавних пор, пока Мур работал. А теперь мы упёрлись в физику, дальше экспоненциально расти некуда (вернее, можно и нужно расти в мультиядерность, но там, во-первых, надо многопоточность, которую макаки не осилят, а во-вторых, к пределу энергопотребления мы тоже подползаем потихоньку).
> JIT, директивы и параметры компилятора.
Прах, тлен, эвристики и недетерминированная питушня. Ни жид, ни компилятор не знают, что от них хочет программист (он и сам это в большинстве случаев не знает).
> Но это уже проблемы реализации.
Это проблемы несоответствия гипотетической машины, под которую создаётся язык, и реальных компьютеров.
1024-- 09.03.2020 20:56 # 0
Но не все сразу нужны.
Если имеется сложная глючащая программа, часто достаточно с помощью чтения кода и отладчика выяснить её особенности в отдельном месте и пофиксить.
А можно у себя в голове смоделировать поведение программы, мысленно найти проблему и переписать код.
Так и в ИТ в целом. Достаточно базовых принципов и изучения конкретно нужных особенностей, хотя можно стать бородатым опытоносцем.
> По большей части это «затыкание» сводится к банальному закидыванию дыры лишники гигагерцами и гигабайтами.
Однако, с этим можно бороться.
Можно обучить компилятор упрощению стыков абстракций (самый простой пример - инлайн и анролл, когда тормозящие абстракции функций и циклов превращаются в царский код), можно вставить скукоживатель области оперделения (например, ворнинги на лишние касты наподобие ворнингов на касты из длиннуха в короткуха). Помню, дяденька Борманд рассказывал про программирование видеопитуха, где была абстракция цикла, но не было циклов с заранее неизвестным числом итераций. Аналогично - урезанная рекурсия в макросне C/C++.
> Ни жид, ни компилятор не знают, что от них хочет программист (он и сам это в большинстве случаев не знает).
> Это проблемы несоответствия гипотетической машины, под которую создаётся язык, и реальных компьютеров.
А вот это - принципиальная проблема процесса программирования.
Код надо перевести из желания клиента об автоматизации, выраженном в (недо)ТЗ, криво понятым программухом и изложенным на языке программирования, который настолько убог, что сочетает сложность (ради точного выражения царского кода) с описанием алгоритма под какую-то другую машину (ради попытки натянуть один царский код на несколько машин). Питушня, нафиг так жить.
gost 09.03.2020 21:21 # 0
В любой области достаточно базовых принципов и изучения конкретных особенностей. Другое дело, что специалистом так стать не получится, только PHP-программистом, пишущим гостевухи за еду.
> Однако, с этим можно бороться.
Как я и сказал, это всё тлен и частные случаи. Вот этому товарищу, кстати, тоже частные случаи постоянно мешали: https://gamedev.ru/flame/forum/?id=169618.
Нет, разумеется, это не значит, что я против развития оптимизаций, совсем наоборот. Просто фундаментальные проблемы эти затычки исправить в принципе не могут. Для этого надо как минимум изобретать другие, совершенно новые парадигмы программирования, включая языки (с нуля) и архитектуру компьютеров (с нуля). Убрать UB из крестов, добавить в жабаскрипт типизацию, реализовать агрессивный инлайн — это всё попытки починить «Титаник» синей изолентой.
Но с другой стороны: а так ли плохо современное программирование, чтобы выкидывать его на помойку и изобретать что-то новое?
Я вот думаю, что нет, не стоит это таких усилий. Над созданием современной IT-экосистемы целое человечество работало эдак лет сто. Сложность крестов — явно не то, из-за чего нужно повторять этот путь заново.
1024-- 10.03.2020 10:02 # 0
Настолько ли нужно им быть? Век специалиста недолог: знания специалиста устаревают быстрее.
Если можно на свою заплату покупать сёмгу, надо ли становиться пердоликом-специалистом?
> попытки починить «Титаник» синей изолентой
А мне кажется, это полезный опыт. Так можно выяснить направления движения, а не просто знать, что вон в тех точках нет ничего интересного.
Тем более, что полная замена
> не стоит таких усилий
Но вообще надо кобенировать революционный подход с эволюционным. Новое говно может дать большой буст, а может влить тонны говна. Старое говно может вяло улучшаться или вяло загибаться.
Новаторы пойдут строить реальные проекты на принципиальном новом говне (не стоило ругать менеджеров в соседнем треде. они дают индустрии полезные данные) и выносить их этого опыт. Консерваторы будут спокойно добавлять полезные фичи и улучшать старое говно.
gost 10.03.2020 10:49 # 0
С тем же успехом можно вообще не быть айтишником, а пойти в «Макдак» на кассу.
Специалисту, обладающему обширными знаниями, попросту открыто больше перспектив.
Можно быть пхп-макакой и всю жизнь писать гостевухи за три куска сёмги в день — но тогда надо быть морально готовым к тому, что ничего лучше уже не будет.
А можно быть крутым специалистом, пройти собеседование в «Гугле» и уехать в силиконовую долину, с соответствующим повышением уровня жизни.
И да, разумеется, я не утверждаю, что специальные знания автоматически дают +$100500 к зарплате. Они попросту увеличивают шансы получить +$100500 к зарплате. Стоит ли это затрат времени и сил на становление специалистом — тут уж каждому решать самостоятельно.
> Но вообще надо кобенировать революционный подход с эволюционным
Подтверждаю.
1024-- 10.03.2020 11:33 # 0
Пока пхпшник ходит в кино, ты работаешь над знаниями.
Когда пхп выкинули и пхпшник сидит в кафе учит ноду, ты сидишь с ним в кафе и хлещешь водку, т.к. тебе не наверстать выкинутый x86 и перестроиться на арм за короткое время.
guest8 10.03.2020 11:40 # −999
gost 10.03.2020 12:15 # 0
Я всё понял! На самом деле ДОБРОЕ ИМЯ ДОБРАЯ СЛАВА В ЧЕСТИ 1024-- — матёрый бородатый низкоуровневый спец, с закрытыми глазами определяющий ISA процессора на ощупь. А за анскильных пхп-макак он агитирует специально, чтобы в его области было поменьше конкурентов и побольше зарплаты.
gost 10.03.2020 11:50 # 0
Любому тотальному выкидыванию технологии на мороз обязательно будут предшествовать долгие годы обсуждений, подготовительных этапов и переходных процессов. Идеальный пример — «IPv4», который «выкидывают» уже лет двадцать, или «x86», который в пользу «x64» выкидывают чуть поменьше, лет десять-пятнадцать.
Если «специалист» много лет подряд полностью игнорировал все новости из области своей специализации и в результате оказался у разбитого корыта (при этом умудрившись проебать даже время, в которое устаревшая технология была нужна как легаси, а-ля Кобол) — ну, значит, это какой-то очень странный специалист.
И да, я очень сильно сомневаюсь, что пхп-макака, в жизни кроме пхп ничего не видевшая, выучит «Ноду» быстрее, чем специалист по x86 ассемблеру выучит другой ассемблер, в архитектуре которого вообще нет каких-то совершенно революционных идей.
Наконец, область IT вообще крайне новая, бурная и быстро развивающаяся. Если хочется просто получить работу и ближайшие лет пятьдесят сидеть на жопе ровно, получая стабильный доход — в айти идти точно не следует.
1024-- 10.03.2020 12:44 # 0
Она её выучит быстрее в необходимом для получения той же зарплаты объёме, чем специалист по x86 ассемблеру выучит другой ассемблер в необходимом для получения той же зарплаты объёме.
gost 10.03.2020 12:51 # 0
Как я уже написал, в «ARM» нет каких-то идей, которые будут совершенно новыми для x86-спеца. Разумеется, если «x86-спец» — это действительно специалист, углублённо знающий архитектуру компьютеров, а не просто замаскированная пхп-макака, заучившая список команд.
С другой стороны, при переходе на «Ноду» пхп-макаку ждёт целый дивный новый мир концепций, которых в пхп либо нет вообще, либо о которых пхп-макака не догадывается.
Асинхронность, события, потоки, REST, пакетный менеджер и так далее, и тому подобное. Даже то, что надо за собой чистить занятые ресурсы, ведь память в пхп не шарится, и на каждый запрос заново запускается.
1024-- 10.03.2020 13:44 # 0
В некотором смысле выходит, пхп-макака - это узкий специалист в прикладном скриптовании, для которого даже нода будет новой; а "x86-спец" на самом деле генералист, который хорошо знает только основные идеи и готов использовать другие инструменты. И генералист в долгосрочной перспективе с большей вероятностью остаётся в деле.
gost 10.03.2020 14:15 # 0
А вот для «x86-спеца» жизненно важно обладать мощными фундаментальными знаниями о работе процессора, потому что иначе просто не получится писать эффективный код (а нужен «x86-спец», который не может написать эффективный код? Легче тогда уж пару джаваскриптеров нанять).
Собственно, если пхп-макака возьмётся за самообразование, освоит основы программирования (императушня, структурошня, ООПушня, функциотушня, питушина Питуринга, общие питуринципы работы ПК, математика, etc.), то она внезапно превратится в самого обычного PHP-программиста, который способен достаточно легко перейти на любую другую скриптушню.
gost 10.03.2020 14:22 # 0
+а кому нужен «x86-спец», который не может написать эффективный код?
guest8 10.03.2020 11:05 # −999
1024-- 10.03.2020 11:26 # 0
Но не уверен, что он реализует свои алгоритмы лучше, чем номерной j с ГК, который знает актуальную питушню в ПК и GCC.
Знания Торвальдса и Руссиновича постоянно устаревают. Не удивлюсь, если они тратят пару часов в день на самообразование.
guest8 10.03.2020 11:30 # −999
1024-- 10.03.2020 11:35 # 0
guest8 10.03.2020 11:43 # −999
guest8 10.03.2020 11:20 # −999
IIIuMnAH3E 10.03.2020 11:25 # 0
Desktop 10.03.2020 11:32 # 0
Desktop 10.03.2020 11:34 # 0
guest8 10.03.2020 11:48 # −999
1024-- 10.03.2020 11:46 # 0
Специалисты, за которыми стоят в очереди - как айфоны. Их можно распродать, а можно получить очередь из 200 перекупщиков. Люди могут копить на них и залезать в кредиты, а могут взять что-то подешевле, даже если показатель "цена к качеству" будет ниже.
Сегодня стоят очереди, а завтра возьмут того, кто за меньшие деньги выдаст результат получше и не будут просить накинуть соточку за сертификаты.
> Выбирай, как грица
Два стула
guest8 10.03.2020 11:55 # −999
Desktop 10.03.2020 12:01 # 0
- дружище, а ты часто сам пробовал переключаться на новый язык/технологию/фреймворк?
guest8 10.03.2020 12:10 # −999
Desktop 10.03.2020 12:14 # 0
Типа ты писал на жабе серверные приложения, а потом рынок поменялся и ты начал писать на котлине под андроид, например?
Desktop 10.03.2020 12:24 # 0
- чувак, ты бы слышал стоны моих сотрудников году в 2015, которые искали 100500 причин не переходить на свифт (например, он, видите ли, недостаточно динамический). Это при том, что да, платформа, парадигма и фреймворки остались по сути теми же, а сколько при этом попоболи.
Или вот переход с UIKit на SwiftUI, особенно, если до этого тебе "реактивное" погромирование было до пизды. Да, через неделю ты сможешь копипастить туториалы, через месяц юзать как серебряную пулю, но сколько времени пройдёт, прежде чем ты осилишь технологию по максимуму, чтобы выйти на свой уровень продуктивности до начала её использования?
guest8 10.03.2020 18:15 # −999
Desktop 10.03.2020 18:35 # 0
Можно только представить, сколько Sun, MS, Apple потратили средств на раскрутку своих языков и платформ для разработчиков. Не было бы агрессивного маркетинга, была бы Джава с шарпом и котлином где-то в области обитания языка D.
У Мэттта прямо на сайте написано, что он worked as a technical writer, нерелевантно.
1024-- 10.03.2020 19:13 # 0
А что бы в этом случае использовали для питушни, где C++ слишком сложен, а python слишком тормозит?
guest8 10.03.2020 19:14 # −999
Desktop 10.03.2020 21:55 # 0
guest8 10.03.2020 21:58 # −999
Desktop 10.03.2020 22:07 # 0
Паскаль и дельфин, кстати, умерли вместе с компанией Борманд. Оказалось некому их продвигать и макаки не стали на них больше пересаживаться.
Недавно упоминавшийся тут Дилан умер вместе с донекстстеповским ябблом. Джобс не стал его продвигать и макаки не стали на него больше пересаживаться.
Не всегда новый инструмент лучше старого. Именно поэтому няшная и кресты, несмотря на все свои UBы и местами старческие маразмы, живее всех живых.
guest8 10.03.2020 23:54 # −999
Desktop 11.03.2020 00:09 # 0
- я так понимаю, под Nokia ты подразумеваешь рынок телефонов на j2me? Ябблу сложнее отправиться вслед за ним в обозримой перспективе, будем честны.
А так-то я несколько лет назад попробовал свитчнуться, поблевал, вернулся.
Плюс я говорил про сейчас: тебя никто (теоретически) не заставляет писать на свифте. Можно сидеть на обжективе до победного конца.
> Например, Нидлесс выучил свой J равно не ради работы, и думаю он любой другой язык так же выучит.
- выучит это для гыгыканья и ололоканья на говнокоде или же для того, чтобы писать на языке, занимая минимум сеньорскую должность?
bormand 11.03.2020 13:43 # +1
Но в итоге они продались майкам, а виндофоны не смогли пробиться на рынок и сдохли.
Desktop 12.03.2020 02:24 # 0
WinPhone мс лично закопала своими бангалорскими жавлами, никогда блядям не прощу.
bormand 11.03.2020 13:48 # 0
Desktop 12.03.2020 02:26 # 0
Пойду в таком случае писать задний конец на Рэкете или Стриже.
1024-- 10.03.2020 12:46 # 0
А недооплачиваемых бормандов?
Прирост эффективности профессионала (а вместе с ним - прирост зарплаты за единицу знаний) падает экспоненциально с поглощаемыми знаниями.
gost 10.03.2020 12:59 # +2
Насчёт асимптотики падения я бы не был так уверен.
В любом случае, вместе с поглощаемыми знаниями растёт количество подходящих мест работы, что позволяет
1) Получать бо́льшую зарплату за счёт устройства на более выгодную работу;
2) В целом быть более уверенным в своём будущем.
Да, конечно, получить все знания мира и стать королём шаманов и невозможно, и бессмысленно. Но вот чрезмерно ограничивать свой кругозор и свою область специализации не менее вредно, чем тратить всё свободное время на получение лишних знаний.
Во всём нужен баланс.
1024-- 10.03.2020 13:45 # +2
bormand 10.03.2020 16:41 # 0
> пхп
Но в пхп нет тредов, какой шаринг )))
guest8 10.03.2020 16:43 # −999
bormand 10.03.2020 16:52 # +1
Fike 10.03.2020 16:57 # +1
bormand 10.03.2020 17:32 # 0
IIIuMnAH3E 10.03.2020 17:41 # 0
guest8 10.03.2020 17:45 # −999
1024-- 10.03.2020 19:15 # +3
Вижу, у них целый раздел, который посвящён обсуждению многопоточности.
gost 10.03.2020 19:46 # +2
Какой позор (((
Блядь, за три дня битья головой об стену нормальный человек бы сто раз успел сообразить, что он делает какую-то хуйню, но, видно, для пхп-макак это не предел.
И ладно бы это был нуб, который только вчера книжку «ПХП за 2 часа» прочитал — так ведь нет, он, сука, на работу устраивается, испытательный срок проходит! Тьфу.
Концовка эпична, конечно:
bormand 10.03.2020 19:53 # +1
Ну это норм. У меня сишный rand() работал в сотню раз медленнее, чем без потоков...
1024-- 10.03.2020 19:53 # +2
Какая многопоточность )))
guest8 10.03.2020 19:57 # −999
gost 10.03.2020 20:03 # +2
gostinho 10.03.2020 22:36 # 0
1024-- 09.03.2020 19:16 # 0
Тормозящее сложное говно:
То же, но выглядит как цикл, без явной байтушни и ненужных кастов и царских умножений указателей, которые надо отдельно оптимизировать:
И вообще, банальное описание типа всё усложняет:
Тогда как можно было бы обойтись без всех этих значков, которые надо читать по спирали:
Запись одна и та же, компилируется в то же, но для её прочтения не нужно быть профессиональным читателем сигнатур функций в "сишке".
bormand 07.03.2020 13:22 # 0
У хипстерков так не принято, вон даже "кодексы поведения" всякие начали выдумывать...
gost 07.03.2020 04:09 # +2
3.14159265 07.03.2020 04:13 # +1
Вишенка.
Кто-то объяснит зачем? А то я туго понимаю в столь поздний час.
guest8 07.03.2020 04:16 # −999
3.14159265 07.03.2020 04:14 # +2
>Support Electron 5/6 for ed25519
https://github.com/mscdex/ssh2-streams/issues/144
Гениально просто.
gost 07.03.2020 04:19 # +1
Например: https://github.com/mscdex/pg2/blob/master/lib/Client.js
>>> A PostgreSQL driver for node.js that focuses on performance
guest8 07.03.2020 04:21 # −999
gost 07.03.2020 04:24 # 0
guest8 07.03.2020 04:29 # −999
3.14159265 07.03.2020 04:31 # +1
Вместо того чтобы перегнать сишные либы в asm.js люди городят такой пиздец невообразимый.
guest8 07.03.2020 04:39 # −999
3.14159265 07.03.2020 04:34 # +1
https://github.com/digitalbazaar/forge/blob/628b17fb5bc0bf22074b632432ffa535805a1b2b/lib/aes.js#L11
guest8 07.03.2020 04:40 # −999
3.14159265 07.03.2020 04:52 # +1
Если не сказать больше.
Но после этих безумных p += 4 няшная с её типами, cstdint.h, c её массивами и указателями, с memcpy и realloc кажется мне лютой годнотой.
gost 07.03.2020 04:54 # 0
3.14159265 07.03.2020 05:03 # +2
https://ideone.com/8lj4Ku
gost 07.03.2020 05:06 # 0
1024-- 07.03.2020 10:27 # 0
* Какая-то пидорская конструкция вместо явных sizeof, .size() или .length
*Работает только для массивов с известной длиной, выдаёт говно для int*
В итоге получается, что какая-то царушня
особо и не нужна, когда в C++ есть читаемая версия:
где точно известно, какой тип будет у элемента и на что ссылаться. Говна вида эквивалентности int [10][20][30][40] и int *[20][30][40] и типа int *[30][40] как элемента этого массива просто не будет. Либо массив как элемент, либо явный итератор.
gost 07.03.2020 10:31 # +1
> int arr[10][20][30][40]
Говно.
> std::array<std::array<std::array<std::ar ray<int, 40>, 30>, 20>, 10>
Говно.
Ни в «C», ни в «C++» искаропки нормальных многомалостныхмерных массивов нет, есть только тормозящее и вылетающее за кеш нечто.
gost 07.03.2020 10:39 # +1
+ Ни в «C», ни в «C++» искаропки нормальных динамических многомалостныхмерных массивов нет, есть только тормозящее и вылетающее за кеш нечто.
Статические есть: «GCC» успешно оптимизирует пачку арраев до одного сложения с укококозателем.
IIIuMnAH3E 07.03.2020 05:17 # 0
guest8 07.03.2020 05:54 # −999
1024-- 07.03.2020 10:16 # 0
Соответственно, размер элемента массива, включающего arr - 5 интов.
Fike 07.03.2020 04:49 # +1
> } else if(forge.util.isArray(key) &&
да сука
и тут без кастомного isArray не обошлось
guest8 07.03.2020 04:56 # −999
Fike 07.03.2020 05:11 # 0
guest8 07.03.2020 05:12 # −999
gost 07.03.2020 05:13 # +1
1024-- 07.03.2020 10:34 # 0
* инкапсулированная имплементация зависит от конькретного типа
* интерпейс принимает разные типы и
* конвертирует в поддерживаемые
* вызывает нужные имплементации
* бросает исключения
То есть то же самое, что делает хорошая программа с пользовательским интерфейсом
* инкапсулированная имплементация зависит от конькретного типа
* интерпейс принимает разные форматы ввода и
* парсит значения
* вызывает нужные имплементации
* бросает исключения
То есть в скриптушне можно скалировать MVC или business logic+interface с уровня приложения на уровень библиотеки и течь иметь хороший код.
Fike 07.03.2020 05:14 # 0
какое функциональное программирование )))
gost 07.03.2020 05:21 # 0
Теперь точно функциональное.
Fike 07.03.2020 05:26 # 0
guest8 07.03.2020 05:28 # −999
gost 07.03.2020 05:31 # 0
gost 07.03.2020 05:32 # +3
guest8 07.03.2020 05:39 # −999
1024-- 07.03.2020 10:41 # 0
Всё, что "логично" следует читать как "когда в системе 1 элемент, это логично; когда в системе N элементов, есть N! нелогичных кобенаций".
gost 07.03.2020 10:47 # 0
1024-- 07.03.2020 10:57 # 0
Надо думать, где вставить явное копирование, чтобы твои данные не споганили.
Надо думать, где вставить ссылки, чтобы твои данные могли изменить без рассинхронизации.
Один раз забыл - сел на флешку.
Надо думать, где вставить const и как изменить всех пользователей по цепочке, чтобы код скомпилировался, и возможно ли это.
Нудо думать, где вставить копирование, а где - ссылки, и вообще возможно ли это, если ты убрал const.
Один раз забыл - сел на флешку.
А питушня растёт факториально кобенаторно, и думать приходится в несколько раз больше на каждом следующем шаге.
Fike 07.03.2020 11:16 # +1
в принципе, они не поленились и self пробрасывать во всех методах «объекта»
guest8 08.03.2020 00:35 # −999
gost 08.03.2020 00:43 # 0
Потому что какие-то типы данных нельзя эффективно скопировать. Инт можно, а список — нельзя.
> Почему класс и список не копируются, а булен копируется? (на самом деле в питоне все ссылка, но семантика именно такая)
Нет, семантика не такая. Просто в Питоне есть мутабельные ссылки (листы, дикты), а есть немутабельные (инты, строки). Поэтому передача инта от передачи листа не отличается ничем.
> Хочу язык где всё всегда копируеца по значению
Питушня. Выстрел в ногу с испорченным массивом более заметен для непрофессионала, чем выстрел в то же место ноги, но с тормозами из-за копирования.
guest8 08.03.2020 00:54 # −999
gost 08.03.2020 00:57 # 0
*За исключением совсем малость количества исключений вроде джвух i32 на x64 процессоре.
guest8 08.03.2020 00:59 # −999
gost 08.03.2020 01:04 # 0
guest8 08.03.2020 01:08 # −999
gost 08.03.2020 01:17 # +1
Да. Поскольку математику изучают только в рашке, анскильные скриптухи про оценку сложности не слышали, просто пишут код и текут. Очень сложно будет объяснять анскильному питуху, что f(some_int) и f(some_1gb_array) — это совершенно разные (в языке с повальным копированием) вещи.
Тут очень показателен подход «JavaScript», в котором, вместо объяснений скриптухам про Шлёмиэля и O(N^2), просто взяли и оптимизировали «for (x in arr) { str += x; }» до O(NlogN).
guest8 08.03.2020 01:26 # −999
gost 08.03.2020 01:36 # 0
Кратко: да, язык должен упрощать разработку, в том числе и эффективного кода. Чем меньше нужно знать, чтобы писать эффективный код — тем язык лучше.
guest8 08.03.2020 01:43 # −999
gost 08.03.2020 01:47 # 0
Но причина конкретно этого багра, кстати, вовсе не в ссылках, а в том, что дефолтные параметры инициализируются один раз, на этапе «выполнения» объявления функции.
И опять же, я где-то выше писал, что лучше уж скриптух поломает голову попишет на SO про «неправильную» работу ссылок. Потому что в противном случае мы получим программы, которые у скриптуха работают, а у нас безбожно тормозят из-за O(N^2) (ещё больше, чем сейчас).
1024-- 08.03.2020 11:43 # 0
> Питушня. Выстрел в ногу с испорченным массивом более заметен для непрофессионала, чем выстрел в то же место ноги, но с тормозами из-за копирования.
Выстрел в ногу, которого можно было бы избежать - просчёт языка, поскольку
> язык должен упрощать разработку
Да, я согласен с тем, что
> разработку, в том числе и эффективного кода. Чем меньше нужно знать, чтобы писать эффективный код — тем язык лучше.
Но как по мне, лучше иметь медленный и корректный код, чем быстрый и некорректный. Тормозящей питушнёй даже можно пользоваться, а некорректную питушню можно только выкинуть.
Если массив распитушился и не вызвал исключение, а также удаление пользовательской директории, то это никто не заметит. Добавят пару костыльков, чтобы исправить перезаписанные значения - и снова запустят.
Даже программисты часто ловят исключения ради стабильной работы программы и игнорируют коды возврата, что уж говорить о простых людях, для которых важен эффект, а не призрачные красота, корректность и поддерживаемость кода.
Даже у программистов в почёте подход "сначала реализуй логику, потом оптимизируй". В первую очередь думают о поддерживаемом коде, а потом переписывают его по-царски с битхаками, если он вызывает зуд кулера.
Так и в языках для людей должен быть подход от простого и надёжного кода с копированием и GC до явно помеченных царских unsafe блоков с UB и ассемблерных вставок.
1024-- 08.03.2020 11:55 # 0
Я прочитал это как "чем если на ногу повесили гирю, и она от гири не болит как от пули". Может быть, изначальный комментарий был другой, я отвечал на придуманный мной тезис "лучше испортить массив, чем тормозить программу с неиспорченным массивом".
gost 08.03.2020 12:02 # 0
Гуест8 топит за копирование всего и вся по-умолчанию и отказ от неявных ссылок; я указал, что для языков, ориентированных на массового потребителя, это не самый здравый подход.
Но являются ли ссылки в действительности источником проблем?
Ведь программист не только может испортить массив, переданный по ссылке: с тем же успехом он может не поменять тот массив, который надо — и таким образом выдать пользователю некорректные данные (реальный пример: https://govnokod.ru/26443#comment528066).
А вот какой вид ошибок более распространён и вероятен — гораздо более сложный вопрос, требующий исследования. Эмпирикой тут не обойдёшься.
1024-- 08.03.2020 12:45 # 0
Выведет 2.
Мне кажется, императивное программирование и пошаговый интерпретатор в голове - профдеформация программушков.
Да и C++-боги же вроде приходят к функциональной чистоте, т.к. обилие изменяемого состояния заставляют подвиснуть даже их могучие мозги.
gost 08.03.2020 12:49 # 0
1024-- 08.03.2020 12:52 # 0
Однако, усложнённая что математика, что императушна - уже нет.
gost 08.03.2020 13:00 # 0
При этом усложнённая математика гораздо сложнее усложнённой императушни. Это наглядно демонстрирует, например, сравнение количества программистов на «JavaScript» и количества программистов на «Haskell».
1024-- 09.03.2020 18:26 # 0
Мир подсел на императушню
* Функциушня хуже ложится на выбранные идеи питушины Питуринга и питутиктуры фон Питуймана.
* Простых людей больше учили и учат пирфомансной императушне.
* Программистов учили и учат с упором на императушню, охват знаний функциушни часто слишком мал.
Почитайте посты поехавших скриптухов. Они с удовольствием используют ФВП для массивов, начинают садиться на монады и тащат функциушню в свой скриптомирок.
Функциушков пока маловато, в большой степени ещё и потому, что функциушня много раз пропускала день ног.
gost 09.03.2020 18:45 # 0
1024-- 09.03.2020 19:03 # 0
P.S. А, ну ещё нейросети и мозгушня. Функционально бегут сигналы.
P.P.S. Тогда *HDL ещё. Функциушня как питуредство метапрограммирования.
bormand 08.03.2020 13:03 # +1
gostinho 08.03.2020 13:06 # 0
guest8 07.03.2020 05:38 # −999
gost 08.03.2020 13:06 # 0
guest8 08.03.2020 13:13 # −999
IIIuMnAH3E 08.03.2020 15:47 # +1
https://ideone.com/gtrlOK
Просто *& не работало, «gcc» ругался: «assignment to expression with array type».
P.S. Я смотрел ассемблерный выхлоп. *(takefive_ptr)&krestuhi = *(takefive_ptr)&petuhi; именно копирует массив.
IIIuMnAH3E 08.03.2020 16:41 # +1
https://ideone.com/5SC190
1024-- 09.03.2020 18:35 # +1
А такой код можно легко сгенерировать скриптом для любых max_block.
gost 09.03.2020 18:43 # 0
Fike 07.03.2020 05:36 # 0
а вообще безусловно
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of
gost 07.03.2020 05:29 # 0
Fike 07.03.2020 05:35 # 0
ну ладно
3.14159265 07.03.2020 13:18 # 0
Опять мы приходим к тому о чём я уже говорилк удобству инициализаторов структур и массивов в сишке.
1024-- 07.03.2020 13:51 # 0
Данные надо не только инициализировать, но и использовать.
bormand 07.03.2020 15:14 # +1
x = "linux";
3.14159265 07.03.2020 15:28 # 0
1024-- 07.03.2020 15:42 # 0
Сложная сишка, два вида строк.
1024-- 07.03.2020 10:39 # 0
gost 07.03.2020 10:42 # +1
А не бумер ли ты часом?!
Fike 07.03.2020 05:20 # +1
это для обратной связи с повершеллом
https://imgur.com/j4zzglK
guest8 07.03.2020 05:24 # −999
gost 07.03.2020 05:25 # 0
guest8 07.03.2020 05:32 # −999
1024-- 07.03.2020 10:11 # 0
Почти как мы с дяденькой ПИ предлагали.
3.14159265 07.03.2020 04:22 # +1
Золотые, бессмертные строки Царя как нельзя лучше подходят к моменту.
guest8 07.03.2020 04:19 # −999
gost 07.03.2020 04:22 # +4
>>> I understand the file gets corrupted because it's a ZIP consisting of thousands of very small files, so the zip structure can be damaged easily...
guest8 07.03.2020 04:24 # −999
3.14159265 07.03.2020 04:27 # +3
Какое дожатие )))
IIIuMnAH3E 07.03.2020 04:50 # 0
Помнится, у Царя была какая-то проблема, когда размер файла делился на размер страницы без остатка.
IIIuMnAH3E 07.03.2020 04:47 # 0
Fike 07.03.2020 04:47 # +1
bormand 07.03.2020 10:11 # +2
gost 07.03.2020 04:24 # +1
Ко-ко-кой пирфоманс )))
guest8 07.03.2020 04:26 # −999
3.14159265 07.03.2020 04:37 # +2
Если бы n++ написали на ноде, он бы и мегабайта текста не вывез.
А node-zlib честно написали: мы говно, ничего не умеем, архивчики в 128Кб, не больше.
Note that node-zlib is only intended for small (< 128 KB) data that you already have buffered. It is not meant for input/output streams.
Desktop 07.03.2020 20:12 # 0
Fike 07.03.2020 06:28 # 0
блядь
блядь
блядь
mysql_escape_string doesn't work, try mysql_real_escape_string
guest8 07.03.2020 04:42 # −999
3.14159265 07.03.2020 04:45 # +2
>Possibly, but it's not really a priority at the moment
В переводе: «возможно, но я анскильный лох и вообще мне похуй».
guest8 07.03.2020 04:45 # −999
Fike 07.03.2020 04:46 # +2
золото.
я даже специально на всякий проверил - да, это три нуль-байта, за которыми идет [email protected].
3.14159265 07.03.2020 04:49 # 0
А 21 зачем?
"\u0000\u0000\u0000\[email protected]"
IIIuMnAH3E 07.03.2020 04:52 # +1
3.14159265 07.03.2020 04:56 # 0
Но зачем им e-mailы на 4 миллиарда символов? Зачем?
guest8 07.03.2020 04:58 # −999
3.14159265 07.03.2020 04:59 # 0
Fike 07.03.2020 05:03 # 0
3.14159265 07.03.2020 15:08 # 0
https://github.com/mscdex/pg2/blob/56049c528063548ed797a45dda6ca01fe0d409c2/lib/Protocol.js#L64