1. JavaScript / Говнокод #25205

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    class Cat {
      constructor(
        public name: string) {
      }
      toCoolCat(coolness: number): CoolCat {
        return new CoolCat(this.name, coolness);
      }
    }
    // ...
    class CoolCat extends Cat {
      constructor(
        name: string,
        public coolness: number) {
    
        super(name);
      }
    }
    //...
    function addCoolCat(coolness: number, cat: Cat): void {
      this.coolCats.push(cat.toCoolCat(coolness);
    }
    //...
    addCoolCat(80, {name: 'Greycat'});

    Вроде TypeScript, а на самом деле NotCompletelyTypeScript.
    Во время выполнения получим ошибку "cat.toCoolCat is not a function". Тем не менее, компилятор TypeScript позволяет это (а конкретно, строку 23) скомпилировать. Хотелось бы, чтобы не позволял.

    Запостил: wissenstein, 19 Декабря 2018

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

    • Ошибка вышла. Строку 23 компилятор не принимает. Принимает такое:
      const cat: any = {name: 'Greycat'};
      addCoolCat(80, cat);
      Ответить
      • Ну в этом суть any. Просто не используйте any.

        Вообще все эти ваши тайпскрипты — жуткая дрянь, broken by design. Гораздо приятнее жс, конечно, но быть лучше жс — это слишком low bar.

        У ReasonML хотя бы задумка правильная.
        Ответить
        • >Вообще все эти ваши тайпскрипты — жуткая дрянь, broken by design. Гораздо приятнее жс, конечно, но быть лучше жс — это слишком low bar.
          Мне кажется, ты слишком узко на это смотришь. Я бы рассматривал не конкретный typescript или reasonML, а множество языков, компилируемых в js, в котором каждый может выбрать язык, соответствующий его бизнес-кейсу, или запилить свой ламповый DSL. А это замечательно.
          Ответить
          • > компилируемых в js
            > замечательно
            Юзать высокоуровневый язык с динамической типизацией в качестве ассемблера. Что может быть замечательней...
            Ответить
            • [незелёный]Юзать Форт в качестве асемблера... Что может бть замечатльней?[/незелёный]
              Ответить
            • Ты против любых compilation target'ов кроме ассемблера в общем, или ты против js в частности?
              Ответить
              • В общем-то против любых кроме нативного кода и байткодов.

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

              Имея достаточно высокоуровневый язык, можно сделать тоньше дополнительные слои абстракции, лежащие над ним.
              Ответить
              • Процессор с его инструкциями это вообще лишнее всё, надо головой в уме всё считать
                Ответить
                • https://habr.com/company/badoo/blog/420407/
                  "Посыл статьи (если отбросить C-специфичные вещи про выравнивание, неопределенные биты и тд) в том и был, что C (и все другие похожие языки) был простым языком, который напрямую ложился на реальное железо, а теперь инженеры пытаются всячески вбить новое железо (которое имеет принципиально другие допущения!) в видение мира старого языка (а разработчики компиляторов в то же время пытаются как-то приспособиться к новому железу, которое пытается выглядеть старым). Строго та же фигня происходит и с, к примеру, архитектурой ОС — до сих пор программы притворяются, что весь компьютер принадлежит им, а ОС всячески им в этом потворствует ценой приличных накладных расходов. Обратная совместимость — главное зло мира..."
                  https://habr.com/company/badoo/blog/420407/#comment_19013005
                  Ответить
                  • Последовательное выполнение программ, плоское адресное пространство, даже операторы пре- и постинкремента отлично ложились на режимы адресации PDP-11.

                    Именно поэтому я за "Электроника БК-0010".
                    Ответить
                    • Есть архитектуры на которые не ложится последовательное выполнение?
                      Ответить
                      • Если я правильно понял, автор намекает на VLIW.

                        Статью вообще трудно читать из-за косноязычности автора и кривого перевода.
                        Ответить
                      • https://pdfs.semanticscholar.org/6b29/e59d426f8998d39550d7c2593bc6754fed99.pdf
                        https://www.princeton.edu/~kung/papers_pdf/New%20Folder/Wavefront%20Array%20Procesor.pdf
                        https://habr.com/post/122479/
                        Ответить
                  • >до сих пор программы притворяются, что весь компьютер принадлежит им,
                    Ты про дос расширители? Или про программы, срущие себе в каталог? Но и они замечательно работают из %appdata%
                    Ответить
                    • Он про защищенынй режим

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

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

                Используя процессор ты теряешь контроль над гейтами и не можешь делать что-то помимо перечисленных инструкций.

                Используя си ты теряешь часть инструкций процессора.

                Используя жс ты теряешь структуры и указатели. Какие-то новые структуры данных помимо хешмапа уже не запилить.

                Каждый новый уровень абстракции отбрасывает какие-то концепции в пользу других.
                Ответить
                • > Используя си ты теряешь часть инструкций процессора .
                  Используя S" Forth" я ничего не теряю , именно поэтому я ничего не теряю .
                  Ответить
                • В программировании XXI века всё наоборот. Чем выше уровень абстракции, тем больше возможностей. Что важно, современные абстракции поставляются на пару с оптимизатором.

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

                  Больше вариантов для человека выразить сложное простыми словами.

                  Больше вариантов оптимизации. В сраной сишке слишком много притянуто за уши. Одно неверное действие программиста порождает чёртову неоптимизируемую ссанину. Пирфоманс достигается за счёт неистового пердолинга программиста, иначе свобода по стандарту в руках компилятора. Код получается быстрый, но с UB. В сраной сишке можно соптимизировать код только с одного уровня абстракции, и это теоретический максимум. В ЯВУ компилятор может оптимизировать код как хочет, работая на всех уровнях абстракции сразу.

                  Мастеру(*) гораздо проще реализовать "сделайте нам хорошо"(1), чем подробное задание на 100 страниц(2). Мастер знает, как нужно делать, чтобы было хорошо. Юристы заказчика формализуют нерабочую идею и связывают мастеру руки, на выходе имеем только говно. То же в случае ЯВУ(1)/ЯНУ(2) и оптимизатора(*).

                  Человек туп и тормознут. Опыт группы людей можно закачать в оптимизатор. Вместо 16 лет просиживания в школе и вузе (умножаем на количество программистов) можно потратить несколько минут на копирование оптимизатора. Оптимизатор работает круглосуточно и не устаёт.
                  Достаточно один раз автоматизировать процесс, сделать оптимизатор и всем пользоваться им, чем всем делать одни и те же потуги в сторону оптимизации.

                  И вишенка на торте: низкоуровневое говно настолько просто, что выражается через высокоуровневые абстракции. Присваивание легко запиливается через монады, любые байты и указатели - через объекты JS. А оптимизатор анализирует и сразу генерирует низкоуровневую питушню, эквивалентную написанному. Таким образом, высокоуровневая питушня позволяет реализовывать объекты с любых нижележащих уровней абстракции.
                  Ответить
                  • >>. Чем выше уровень абстракции, тем больше возможностей.
                    Нет. С точностью до наоборот. Просто по определению. На машине тюринга можно сделать всё, что угодно (просто займет безумное количество времени). А на HTML нет.
                    Ответить
                    • Почитайте http://govnokod.ru/25205#comment446032, там всё подробно написано.

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

                      > На машине тюринга можно сделать всё, что угодно (просто займет безумное количество времени). А на HTML нет.
                      На любом тьюринг-полном языке тоже ничего нельзя сделать. Потому, что машина Тюьринга что-то считает, а языки вроде HTML или C ничего не считают, только описывают какие-то факты/утверждения/прочую информацию.

                      Чем не тьюринг-полный брейнфак?
                      <!DOCTYPE html>
                      <html>
                        <body>
                          <ul>
                            <li data-cmd="P" data-rep="10">
                            <ul data-cmd="loop">
                              <li data-cmd="R">
                              <li data-cmd="P" data-rep="7">
                              <li data-cmd="R">
                              <li data-cmd="P" data-rep="10">
                              <li data-cmd="R">
                              <li data-cmd="P" data-rep="3">
                              <li data-cmd="R">
                              <li data-cmd="P">
                              <li data-cmd="L" data-rep="4">
                              <li data-cmd="M">
                            </ul>
                            <li data-cmd="R">
                            <li data-cmd="P" data-rep="2">
                            <li data-cmd="dot">
                            <li data-cmd="R">
                            <li data-cmd="P">
                            <li data-cmd="dot">
                            <li data-cmd="P" data-rep="7">
                            <li data-cmd="dot" data-rep="2">
                            <li data-cmd="P" data-rep="3">
                            <li data-cmd="dot">
                            <li data-cmd="R">
                            <li data-cmd="P" data-rep="2">
                            <li data-cmd="dot">
                            <li data-cmd="L" data-rep="2">
                            <li data-cmd="P" data-rep="15">
                            <li data-cmd="dot">
                            <li data-cmd="R">
                            <li data-cmd="dot">
                            <li data-cmd="P" data-rep="3">
                            <li data-cmd="dot">
                            <li data-cmd="M" data-rep="6">
                            <li data-cmd="dot">
                            <li data-cmd="M" data-rep="8">
                            <li data-cmd="dot">
                            <li data-cmd="R">
                            <li data-cmd="P">
                            <li data-cmd="dot">
                            <li data-cmd="R">
                            <li data-cmd="dot">
                          </ul>
                        </body>
                      </html>
                      Ответить
                      • >>божественная высокоуровневая абстракция позволяет эмулировать низкоуровневое говно

                        Разумеется. Любой тьюринг полный ЯП позволяет эмулировать любой другой тьюринг полный яп.

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

                        В приведенном тобой примере HTML ничуть не выше уровнем чем то, что ты пытаешься на нем изобразить.

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

                          Как я говорил, транслятор будет тоньше. Нет дублирования кода компилятора и оптимизатора.
                          Вариант с ВМ + языками: ВМ простая, компиляторы и оптимизаторы толстые и содержат много логики. Каждый новый язык должен напердоливать свои std.lib. и оптимизатор.
                          Вариант с ЯВУ + компиляцией в ЯВУ: ВМ сложная, компилятор и оптимизатор сложный, но один. Трансляторы из других языков очень простые. Каждый новый язык может создать даже тупой школьник без потери изящности std.lib. и пирфоманса.

                          > В приведенном тобой примере HTML ничуть не выше уровнем чем то, что ты пытаешься на нем изобразить.
                          Я могу взять JS, пройтись по DOM и сгенерировать код в brainfuck. А могу просто оставить HTML+JS и написать сложное приложение.
                          На brainfuck очень долго придётся писать код, который символизирует HTML.

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

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

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

                            Теперь скомпилируй мне в него код на сях который строит кеш в формате B-Tree и по принципу LRU выбрасывает его куски
                            Ответить
                            • > в общем случае
                              Ну а кого интересует общий случай?

                              В общем случае
                              * Большинство программ (бесконечность против единицы) выполняется за бесконечное время
                              * Количество задач - континуально, а количество программ - счётная бесконечность
                              И прочая дурь в этом роде.

                              На то человек - существо с зачатками разума, чтобы отсеять откровенно говённые языки и создать адекватные.

                              > А так же там есть GC (или какой-то другой способ не управлять памятью) и нет ручных указателей
                              Ну и где я такой язык возьму? Тот же JS компилируется и JITится, внутри использует указатели, может выкомпилить нафиг вызовы GC и создание объектов в куче, может делать массивы - иммутабельными, слайсы хреначить как копии или как ссылки, а строки - мутабельными.

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

                              Я задаю код, эмулирующий B-Tree LRU (tm) (c) (r), а он эквивалентными преобразованиями доводится до того машинного кода, который вылез бы из компилятора сишки.
                              Ответить
                              • >> Тот же JS компилируется и JITится, внутри использует указатели

                                Однако в самом JS этого всего нет, и таким образом я не смогу это на JS выразить.

                                >>Почему Вы считаете, что когда у нас есть ЯВУ, все предыдущие уровни абстракции исчезают нафиг

                                Потому что в этом-то и смысл высокого уровня.
                                В JavaScript нельзя сказать "помести переменную в регистр", а в ассемблере можно.

                                >>Я задаю код, эмулирующий B-Tree LRU
                                Как оптимизатор поймет что там B-Tree?
                                Ответить
                                • > Как оптимизатор поймет что там B-Tree?
                                  Так же, как сейчас понимает "структуры" - по паттерну. Само собой, разрабы движка JS должны предусмотреть такой паттерн. Обычная дыра между слоями абстракции.
                                  Ответить
                                  • >>по паттерну.
                                    В таком случае я буду вынужден изучить этот паттерн и всегда ему следовать, иначе копулятор меня не поймет.

                                    И прекрасная идея 1024 о том как Дениска Попов пишет свою вторую программу в жизни, а оптимизатор выдрачивает ее так, словно бы ее Кнут написал, эта идея не работает. Потому что Дениске придется знать паттерны
                                    Ответить
                                    • > изучить этот паттерн
                                      В сишке ты тоже пишешь (x << 5) | (x >> 27) чтобы получить rol. Да и в HDL все эти триггеры да блоки памяти выводятся по паттернам. Технологические отверстия в абстракциях везде есть :)
                                      Ответить
                                  • А как программист понимает "структуры"? По паттерну.

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

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

                                    Это для понимания чужого. Для написания своих программ программист должен надрочить какой-то набор алгоритмов, и писать код в их терминах, либо в терминах их линейной кобенации.

                                    Таким образом, обычный программист, знающий алгоритмы, и программист из мира гостя8-Борманда, знающий паттерны оптимизатора - тот же самый человек, только второй пишет свой код быстрее. Но это всё говно примерно одного порядка.

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

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

                                            Какое кресло ты используешь чтобы сесть, а какое отдашь отцу?
                                            Ответить
                                            • Путина посажу на кресло с ножиками, а Медведева посажу на кресло с совсем немиловидными предметами.
                                              Ответить
                                          • Экономьте цитаты. Их меньше, чем Вы думаете - примерно в два раза.
                                            Ответить
                                • > Однако в самом JS этого всего нет, и таким образом я не смогу это на JS выразить.
                                  Многая низкоуровневая питушня и на C не выражается.
                                  Если учесть, что ЯПы сделали для общения не только с компьютером, но и между программистами, то можно вспомнить, что очень много алгоритмов требуют использования конструкции языка "комментарий", иначе читатель ничего не поймёт.
                                  Ответить
                                  • >>Многая низкоуровневая питушня и на C не выражается.
                                    Да, но выражаемой обычно хватает для оптимизации.

                                    >> "комментарий",
                                    причем тут это, лол?:)
                                    Ответить
                                    • зы: еще раз хочу подчеркнуть что я ни в коем случае не говорю что ЯВУ это плохо.

                                      Но я считаю что сверху должны быть ЯВУ, а снизу ISA.
                                      Как и есть в нормальных системах.

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

                                      И только в вебе сложилась больная ситуация когда все обязаны комппилироваться в ЯВУ (да еще и без стат типизаци!!!) и потом бедный оптмизиатор вилкой должен искать какие-то паттерны и понять что хотел сказатьт прогарммист.

                                      Это всё равно что из C++ сначала скомпилироваться в Shell Script, а оттуда в ASM, и ныть потом что всё не оптимально.
                                      Ответить
                                      • > И только в вебе сложилась больная ситуация когда все обязаны комппилироваться в ЯВУ (да еще и без стат типизаци!!!) и потом бедный оптмизиатор вилкой должен искать какие-то паттерны и понять что хотел сказатьт прогарммист.

                                        Нет, не только в вебе, это во всём программировании.

                                        И только в программировании сложилась больная ситуация когда все обязаны комппилироваться в ТЗ (да еще и без непротиворечивого естественного языка!!!) и потом бедный программист вилкой должен искать какие-то паттерны и понять что хотел сказатьт заказчик.


                                        Я же говорю, что человек слаб и любит велосипеды и вавилонские башни. Если не сконцентрировать свои усилия на умном компиляторе ЯВУ, будут быстрые ЯНУ и медленные ЯВУ, а вместе с этим - дорогие программисты и пердолинг при написании программ.

                                        Кто бы пилил оптимизации для говножс, если б в браузерах была ВМ и цари с сишкой?
                                        Ответить
                                        • > браузерах была ВМ
                                          Пилили бы оптимизации для ВМ, как это делалось во всяких там JVM и .NET. И весьма неплохо делалось.
                                          Ответить
                                          • Пробовал я как-то пописать на JScript.NET.
                                            Конпелятор был настолько ленивый, что его нельзя было заставить делить инты как инты без перехода во флоаты. Вроде даже явное указание типов от этого не уберегало. В итоге пошёл на C#.
                                            То есть они сделали, чтобы C# летал, а всё остальное - как выйдет.
                                            Более, чем уверен, что JS в той же ситуации остаётся в интах.

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

                                              ЯВУ тормозят. На них не пишут серьёзный код потому, что тормозят. ЯВУ не оптимизируют потому, что пользователей с серьёзным кодом мало.
                                              Ответить
                                              • >>ЯВУ тормозят.
                                                Нет.

                                                Я тебе привел выше пример очень высокоуровневых ЯПов: Kotlin, Swift, C#.

                                                ничуть не сложнее чем твой JS, ничуть не больше пердолинга.

                                                А тормозит куда меньше. Угадаешь почему?
                                                Ответить
                                                • > А тормозит куда меньше. Угадаешь почему?
                                                  Потому, что у них слабая и динамическая типизации - опциональны (слабую типизацию и вовсе надо самому делать), а также много синтаксиальной психозы для выражения разных питушней (вплоть до выбора передачи по ссылке/значению), которую лучше понимает более простой оптимизатор?
                                                  Ответить
                                      • > Хочешь -- бери ЯВУ, хочешь пиши напрямую.
                                        А хочешь —– бери S" Forth" и делай что хочешь со своим мозгом
                                        Ответить
                                    • >> "комментарий",
                                      > причем тут это, лол?:)
                                      Это к тому, что программисту тоже нужны подсказки как оптимизатору, а язык в явном виде не представляет всех абстракций.
                                      Ответить
                              • > когда у нас есть ЯВУ, все предыдущие уровни абстракции исчезают нафиг
                                Ты же от них сам сознательно абстрагировался, бака. И в этом нет ничего плохого, своё подмножество задач жс действительно решает проще и безопаснее.

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

                                  Я абстрагируюсь и накидываю код в виде идей (объясняю их на текущем уровне развития компилятора: для сишки - на уровне указателей, для жс - на уровне ФВП), а автоматика делает за меня всю чёрную работу.
                                  В этом и смысл абстракций - чтобы что-то сложное выразить через простое и не копаться в говне вручную.

                                  В этом суть программирования и любой наёмной работы
                                  Я абстрагируюсь и накидываю ТЗ в виде идей (объясняю их на текущем уровне развития программиста: для ребёнка - в терминах переменных и функций, для взрослых - UML-диаграмм и архитектуры), а программист делает за меня всю чёрную работу.
                                  В этом и смысл наёмного работника - чтобы что-то сложное высказать через простое задания и не выполнять работу самому.
                                  Ответить
                  • Ты так ничего и не понял.
                    Ответить
                    • Почитайте http://govnokod.ru/25205#comment446032, там всё подробно написано.

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

                        зы: и я кстати совсем не против оптмизатора и ЯВУ

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

                        Это, в общем, все знаюит
                        Ответить
                        • > какой-то очень ненаучный термин
                          Если нужно, его, как и всё остальное можно формализовать за бесконечное время.

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

                          Получаем коэффициент k = E_высоко / (E_высоко + E_низко)
                          Чем ближе к нулю, тем удобнее на практике высокоуровневая питушня.
                          Ответить
                      • > Вкратце: божественная высокоуровневая абстракция позволяет эмулировать низкоуровневое говно, а оптимизатор делает эквивалентные преобразования, чтобы пирфоманс не просаживать.
                        Так происходит в мире разноцветных пони. А в нашей серой и унылой реальности эвристический оптимизатор обречён периодически проёбываться, генерируя тормозящую питушню. А на сладкое — программист на божественном ЯВУ не имеет никакой возможности узнать, почему же его божественные абстракции тормозят: то ли комп плохой, то ли оптимизатор проебался, то ли алгоритм принципиально неоптимизируемый. Полагаться на какие-то недокументированные мега-оптимизации — примерно то же самое, что писать на «C» с UB.
                        Ответить
                    • Забей на него
                      смотри лучше какая прелесть
                      https://boyter.org/2016/04/collection-orly-book-covers/
                      Ответить
                      • Знакомая буква!

                        https://boyter.org/static/books/CpvvUyXW8AQgO1K.jpg

                        Именно поэтому...
                        Ответить
                        • Там уже сразу меня убило
                          https://boyter.org/static/books/Cj0Up_hUUAAn8-g.jpg
                          Ответить
              • Обычно абстракция работает так. Ты можешь поместить няшку в вазу чтобы получить больше контроля и упростить свои размышления над ней. При этом ты можешь закрыть её полностью или оставить дыры в абстракции для доступа к нужным деталям реализации.

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

                  Здесь программист вышел из положения подчинённого.
                  Здесь программист - не раб UBожий, а сам себе Соломон.
                  Здесь с кодом пердолится конпелятор, а не программист.
                  Человек творит, машина возится с рутиной.
                  Ответить
                  • Вот, представьте только, если в браузеры завезут сишку. Веб-программистам придётся учиться 16 лет, чтобы писать за час то, что они пишут за десять секунд. При наличии быстрого языка гонка скоростных движков высокоабстрактного говна заглохнет. JS будет тормозить, компании будут платить в 10 раз больше сишникам за ту же работу. Знания и опыт не будут копиться в движке и храниться на носителях с защитой информации, они будут дедушкиным способом передаваться из поколения в поколения ненадёжными мясными существами, у которых из RAIDов есть только баллончик от тараканов.
                    Ответить
                    • >>Вот, представьте только, если в браузеры завезут сишку.
                      Ты даже не понял о чем говорит Борманд.


                      В браузеры надо завести нормальную виртуальную машину с ясным и чётким ISA.

                      А компилироваться под эту машину можно хоть их сишки, хоть из свифта с котлином, хоть из JavaScript.

                      Каждый выбирает себе язык по вкусу и на нем пишет
                      Ответить
                      • > Каждый выбирает себе язык по вкусу и на нем пишет
                        Я же говорю, что при такой возможности выбора народ из-за лени и нехватки времени сэкономит на ЯВУ. Будет быстрая сишка и медленные питоны.
                        Сейчас JS вынужден быть быстрым при работе с кодом на JS. Либо генеришь быстрый код, либо выбрасываешь движок. Параллельно прикручивают всякие asm.js, чтобы низкоуровневые питухи тоже были быстрыми. И высокий, и низкий уровень работает быстро.

                        С ВМ быстрой будет только работа с ВМ, оптимизации лягут на плечи компиляторов разных языков, которые не допилят. Человеки в условиях свободы выбора пилят 100500 разных уникальных недоделанных языков, пакетов для луникса и прочих программ вместо того, чтобы вкладываться во что-то одно хорошее.

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

                          Если бы вместо этого была одна виртуальная машина, то 90% кода, некритичного к перформансу, по прежнему писали бы на JavaScript.
                          А критичные вещи писали бы Отцы На Сях, и делали бы API для JS.
                          И все было бы хорошо. Как на десктопе.

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

                          JSер и рад бы помочь, но увы: язык не дает таких возможностей.
                          И потом у нас сайт тормозит в хроме на i7 kabylake с 16Gb RAM
                          Ответить
                          • > то 90% кода, некритичного к перформансу, по прежнему писали бы на JavaScript.
                            > А критичные вещи писали бы Отцы На Сях, и делали бы API для JS.
                            Конечно, это заманчиво для Отцов на Сосях, но подход в общем случае говённый.

                            Те 10% кода составят то, что работает 90% времени :)

                            В итоге
                            * Программист становится незаменимым, проекты зависят от дорогих специалистов
                            * Качество программы зависит от знаний и опыта мелкой группы людей (вместо зависимости от всего опыта программистов)
                            * Знания надо передавать из поколения в поколение в ненадёжных плохостардартизуемых мясных мешках, подверженным ошибкой

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

                            С точки зрения принципов программирования (декомпозиция, дублирование кода, упрощение интерфейсов) текущее программирование -- говно.

                            Вполне себе можно сделать ЯВУ, в котором можно подсказывать конпелятору. Хотя, это тупик.
                            GCC же вроде уже не слушает inline, ему надо писать ((inline)). Потому, что он уже умнее программистов, которые 20 лет назад писали inline. Когда GCC ещё больше поумнеет, он и ((inline)) будет игнорировать, чтобы баги скудоумия мясных программистов как-то обойти. Тогда труъ программисты будут писать ((((definitely inline)))), что будет значить "да, я точно-точно хочу заинлайнить, здесь прямо сильно надо, и это случай особый, тут я точно умнее тех, кто писал inline, кто писал ((inline)), и умнее конпелятора.

                            Групповой разум в лице конпелятора эволюционирует быстрее, чем мясной программист, и лучше закрепляет знания. Чем лучше его написали, тем меньше нужны подсказки.
                            Ответить
                            • >>Те 10% кода составят то, что работает 90% времени
                              Именно так и будет. И тогда их оптимизируют Оцы.

                              Зачем вообще что-то изобретать, если всё это уже много лет работает за пределами веба?

                              >>Программист становится незаменимым
                              Какой программист и почему он незаменим?

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

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

                              Совершенно не хотим. Зато вы хотите найти рациональное объяснение безграмотности, двадцати пяти мегабайтам зависимостей на JS, и тому что gmail грузится 20 секунд на машине, которая в 100000 раз мощнее той, что отправляла человека на луну.

                              >>Вполне себе можно сделать ЯВУ, в котором можно подсказывать конпелятору. Хотя, это тупик.

                              Без подсказок однако не будет никакой оптимизации.

                              Если программист даже связанный список выразить не может, о какой оптмизиации может идти речь?
                              Ответить
                              • > Зачем вообще что-то изобретать, если всё это уже много лет работает за пределами веба?
                                А какие быстрые ЯВУ уровня JS есть, кроме Lua?

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

                                > Зато вы хотите найти рациональное объяснение безграмотности
                                Ну а что, развивать мясных программистов - это тупик. Они долго учатся, рано начинают тупить и просить зарплату, быстро умирают.
                                Объясняю: программист - это переводчик с человечьего на компьютерный, не более того.
                                Начальнику достаточно сказать "строим дом", и строительство начинается. Хорошим работникам не нужны подсказки, они как специалисты сделают всё как надо.
                                Почему тогда в программировании мы не говорим "строим дом", а пишем длинную программу? Это неудобно, дорого и глупо. Фактически программист должен просто приказать "строить дом", и машина должна строить дом.

                                > gmail грузится 20 секунд на машине, которая в 100000 раз мощнее той, что отправляла человека на луну
                                Переходный период. Пока оптимизаторы не так сильно развиты.

                                > Без подсказок однако не будет никакой оптимизации.
                                Будет. И даже лучше, чем с подсказками.
                                Потому, что подсказки - это по сути второй слой кода.
                                Сначала человек в коде подсказывает, что будет квадратичный алгоритм вместо линейного, потом - что здесь всё влезет в стек (а в реальной программе не влезает).

                                > Если программист даже связанный список выразить не может, о какой оптмизиации может идти речь?
                                Напомните, в каких задачах нужно выражать связанный список, кроме лабы про связанный список?
                                Ни разу не слышал, чтобы где-то понадобился связанный список в чистом виде. Это только лишь деталь реализации, рудимент из низкоуровневых языков.
                                Мясного программиста нельзя допускать к структурам данных. Решать, какие структуры и как использовать, должен автомат.
                                Ответить
                                • > И даже лучше, чем с подсказками.
                                  А зачем тогда добавляют всё новые и новые подсказки? Плотные массивы, тайпхинтинг аля asm.js, кучу неписанных правил в духе "если заполнить все поля в конструкторе и не добавлять новых то получится почти сишная структура"...
                                  Ответить
                                  • Оптимизатор пока не такой умный, чтобы сам понять.

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

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

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

                                        А когда оптимизатор в зачаточном состоянии, подсказывать некому.
                                        Ответить
                                • >>А какие быстрые ЯВУ уровня JS есть, кроме Lua?
                                  Как язык может быть "быстрым"?

                                  Если мы говорим о реализации то Swift под LLVM или Kotlin под JVM или C# под .NET точно не будут медлене JS:)

                                  >>Переходный период. Пока оптимизаторы не так сильно развиты.
                                  ахахахха

                                  >>Напомните, в каких задачах нужно выражать связанный список, кроме лабы про связанный список?

                                  Тебя Сёма укусил?
                                  Ответить
                                  • > Как язык может быть "быстрым"?
                                    Я уже говорил об этом несколько месяцев назад, даже формализовал.
                                    Измеряем время работы реальных программ на реальных задачах на реальных языках, интегральные значения сравниваем.

                                    > Тебя Сёма укусил?
                                    Нет. Но Сёма нередко бывает прав.

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

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

                                      Ты правда стал как Сёма.

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

                                      Для AAA игры более важна оптимизация для попадания в кеш. Для 1С Бухгалтерия менее важна.

                                      Каждый берет нужный ему уровень, и всё
                                      Ответить
                                      • > Такое чувство, что у тебя комплекс
                                        У меня комплекс.
                                        Злые сишники говорят, что я не знаю указатели, стек и кучу (на самом деле, я знаю, как ими можно пользоваться, хотя во всяких колл-конвеншенах и алгоритмах аллокации не разбираюсь).
                                        Злые жабоскриптеры говорят, что я не знаю новые фреймворки и модные говноинструменты (я их не знаю и изучать новое говно, чтобы не использовать забыть через год, не намерен; изучаю только то, что нужно сейчас для работы).
                                        Злые алгоритмисты говорят, что я не знаю алгоритмы и символику оценки трудоёмкости (алгоритмы сложнее сортировки пузырьков я действительно не знаю, т.к. сами по себе они мне не интересны, а для работы бывают нужны только малая рандомная часть, которую никак нельзя заранее угадать и изучить - проще достать один конкретный алгоритм с полки, когда он понадобится, а про то, что я не знаю символику асимптотических оценок - они врут).
                                        Злые труъ программисты говорят, что я не знаю низкий уровень (в гробу я видал этот пердолинг с битами, когда у меня есть лямбды и ФВП).
                                        Злые функци ональщики говорят, что я не знаю *-морфизмы, монады, линзы и призмы (я действительно львиную доли этих математических терминов и их применения не знаю, и ума и желания понять их у меня не будет).
                                        Потом набигают злые банкиры, токари, слесари, врачи, гуманитарии и говорят, что я не знаю их элементарной питушни, которую должен знать каждый сука человек.

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

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

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

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


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

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

                                  что-то я не знаю таких оптимизаторов которые могут ужать код ОС с графическим интерфейсом так, чтобы он в сумме с несколькими программами и игрушками занимал мегабайт с небольшим, а запуск самой ОС и программ не приходилось бы долго ждать. (Сишка тут тоже сосёт, на ней я самое маленькое видел 8 Мб луникс (версия SliTaz без гуёв))
                                  Ответить
                                  • Линукс на дискету в 1,44 мегабайта помещали... Хотя там же ядро и образ root FS были зожаты гзипом, а сколько будет в распакованном виде, я не помню.
                                    Ответить
                                    • > 1,44 мегабайта помещали
                                      Когда я это видел - уже на джве. На первой ядро, на второй /.
                                      Ответить
                                      • Совсем старое говно утаптывали и на одну. Потом кто-то мудрый в ядро 2.6 решил интегрировать кучу драйверов, которые в старых ядрах были внешними модулями, и тогда влезать перестало.
                                        Ответить
                                        • еси выкинуть ненужное гомно из ёндра, выкинуть early user space (initramfs), выкинуть к хуям systemd, dbus, взять lilo вместо GRUB и busybox, то оно и чичас на дискету может влезть
                                          Ответить
                                      • bootdisk и rootdisk, да!
                                        Ответить
                                  • Что-то я не знаю таких программистов, которые ... Сколько стоит подготовить и нанять такого программиста?

                                    Давайте сравним, сколько стоит подготовка среднего программиста с тем, сколько стоило вложить в современный V8 логику уровня среднего программиста (нормируя на количество программ, написанных программистом и V8). Вот когда обычные программисты станут дешевле V8, тогда и посмотрим.
                                    Ответить
                                    • Тебе уже 20 раз сказали что не нужно ВСЕХ программистов делать оптимизаторами

                                      Пусть библиотеку пишет крутой чувак, а обычные питушки юзают ее АПИ
                                      Ответить
                                  • >> ОС с графическим интерфейсом
                                    qnx
                                    Ответить
                                    • QNX использовалась в основном только для «больших» проектов, так как ядро, имеющее размер 44 килобайта, было слишком большим, чтобы работать на однокристальных чипах того времени.

                                      Я не могу... вы провоцируете меня на изобретение машины времени... хочу туда!
                                      Ответить
                                      • Тоже хочу. Чем больше кругом JavaScript, тем больше хочу
                                        Ответить
                                      • > хочу туда
                                        Купи какой-нибудь контроллер с cortex-m0 и играйся. Меньше бакса стоит. 44 килобайта не войдёт.
                                        Ответить
                                      • З.Ы. Тебе же хватит 32Кб флешки и 4Кб памяти под форт-систему?
                                        Ответить
                                        • > под форт-систему
                                          Смотря какую, для доса я умещал где-то в 3.6 Кб (это уже с определяющими словами и управляющими коньструкциями, когда я только-только заставил работать репл она была килобайт с небольшим, расширять можно было только с помощью ",", "C,", "!" и "C!" ;)), но она была нестандартная и в статьях даже не было поля кода, считалось что код шёл сразу за ней. (ещё видал форт-систему в 512 байт, но в ней был лишь адресный интрепретатор и несколько определений)

                                          Я как-то смотрел разные армы, среди них есть очень дешёвые, но я пока что не смог определится с выбором.
                                          Ответить
                                          • > пока что не смог определится с выбором
                                            ARM'овские контроллеры не особо приятны для пайки, в отличие от AVR. Даже у STM32F030K6, на котором я делал клаву, корпус с шагом 0.8мм. А это один из самых простых чипов...

                                            Поэтому бери рандомную отладочную плату на STM32 и программатор к ней. В пять баксов можно уложиться за весь комплект.

                                            Или что-нибудь из серии stm32 discovery, если денег не жалко. Там есть охуенная няшка с дисплеем, usb и встроенным программатором.
                                            Ответить
                                          • Кстати, Postscript — это же вроде диалект Форта? На чём собирались постскриптовские принтеры?
                                            Ответить
                                            • > Postscript — это же вроде диалект Форта?
                                              Не знаю PostScript. Фишка Forth'а в расширяемости, а насколько расширяем PostScript?
                                              Ответить
                                          • > пока что не смог определится с выбором
                                            Вот такая няша сегодня приехала: https://i.imgur.com/ryVmtyu.jpg

                                            32-битный ARM на 72MHz, 64KB флешки, 20KB оперативки, Micro-USB (только как девайс). Для форт-машины тебе хватит с запасом, имхо. И ещё джва бакса из пяти останутся на программатор.
                                            Ответить
                                            • Ох, ёба. Купи себе лучше пизду резиновую, раз подруги нет, и забей на электронные развлечения. На алиэкспрессе стоит рублей 200...
                                              Ответить
                                              • Это же govnokod.ru, тут пёздами не интересуются
                                                Ответить
                                              • Я бы побоялся её юзать. Хуй знает из чего эти сумрачные гении её сделали...
                                                Ответить
                                              • Какие посоветуешь? Как ощущения?
                                                Ответить
                                              • > рублей 200
                                                Я купил за 67900 донг.
                                                Ответить
                                            • Я такую и выбрал, и программатор st-link v2. Вместе с доставкой почти 6000 тенге. Меня ещё кроха STM8S103F3P6 хотела своим светодиодным глазом соблазнить, но там всего 1 Кб памяти, под него наверное только на асме писать.

                                              Эх, ARM'яша только в январе приедет :(. Пока читну доки.
                                              Ответить
                                              • > stm8
                                                Она осьмибитная, поэтому так мало.
                                                Ответить
                                              • > читну доки
                                                Доку по чипу, доку по семейству, доку по ядру... Эх, для avr всё в одной помещалось.

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

                              Тут и работа отцам-сишкователям будет, где они эффективно себя проявят. И остальные программисты будут более эффективными, работая на быстрых ЯВУ без пердолинга с байтами, памятью, подсказками ко-ко-компилятору.
                              Ответить
                              • Унпиверсальный Язык который Решит Все Проблемы

                                ...
                                ...

                                джава чтоли?
                                Ответить
                            • Это случайно не ты SQL проектировал? Такой высокоуровневый язык, где есть умный компилятор, и не надо ничего руками оптимизировать, ога.
                              Ответить
                              • >> и не надо ничего руками оптимизировать, ога.

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

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

                                Но мы же видим развитие технологий. Какие крутые оптимизации делают GCC и V8, какие продвинутые программы загружены в современные смартфоны.

                                Если вместо SQL не придумают что-то другое, через некоторое время он выполнит свои обещания.
                                Ответить
                                • > какие продвинутые программы загружены в современные смартфоны
                                  Замечательный пример - смотрелка смсок, которая лагала от сраных 200-300 записей на гигагерцовом проце и гигабайте памяти...
                                  Ответить
                                  • В смартфоне сейчас есть
                                    * Личный почтальон и курьер
                                    * Личный фотограф и художник
                                    * Личный диджей и киношник
                                    * Личный фитнес-центр

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

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

                                      Нет. Он не анализирует записи. Он их просто передаёт.
                                      Ответить
                                      • P.S. Если сравнивать с ребёнком, то ребёнка нужно попросить передать запечатанный конверт с записями.
                                        Ответить
                                        • Ребёнок открывает дверь почтальону, заучивает сообщения или записывает их на бумажку, затем отрисовывает их на маркерной доске чертёжным шрифтом.
                                          Ответить
                                          • Ребёнок обладает способностями, которых нет в типичном мессенджере:
                                            1. Он распознаёт речь. Он разбивает колебания воздуха на фонемы языка, отделяя их при этом от фонового шума.
                                            2. Из фонем он составляет слова. Для компактного хранения собщения в памяти ребёнок заменяет знакомые слова их семантическими образами.
                                            3. При передаче он должен выполнить обратные преобразования: перевести образы в набор звуков.
                                            4. Ребёнок должен распознать почтальона, выделить в речи почтальона имя адресата, определить себе задачу (передать сообщение), потом распознать адресата.

                                            Ребёнку приходится выполнять задачи, которым его специально не обучали, при этом отделяя хорошие указания от плохих, ведь в дверь может позвонить злой дядя и попросить вынести драгоценности и деньги.
                                            Ответить
                                            • Справедливо. Хотя, мессенджер нужно сравнивать с некоторыми мыслями и действиями ребёнка, а ребёнка - со смартфоном. Мессенджер и мысли - приходящая-уходящая питушня, а смартфон и ребёнок - машины для их исполнения.
                                              И смартфон что-то из перечисленного умеет или начинает уметь.
                                              Ответить
                                    • Ничего, скоро всего этого там не будет. Останется только браузер.
                                      Ответить
                                      • В этом есть и пюлсы, Большому Барту будет проще за нами присматривать...
                                        Ответить
                                        • Нет. Большому брату проще, когда работает нативная программа, собирающая FullHD видео, HiFi звук, данные сенсоров с точным разрешением и информацию из файлов, запаковывающая это всё мощным нативным архиватором, умеющим в диффы.
                                          Большому брату вообще не выгодно, когда все ресурсы займёт браузер с говноскриптами, и сматрфон от этого быстро разряжается и перестаёт следить.
                                          Ответить
                                    • > А как будет лагать трёх-пятилетний рёбенок, если его просить читать 200-300 записей

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

                                      fixed
                                      Ответить
                                    • 1023 снова троллит ради троллинга.
                                      Ответить
                                      • Ну голосовое управление таки полезно для водителей чтобы адрес в навигатор не вбивать. Где его ещё применить - х.з., но хоть одна область нашлась.
                                        Ответить
                                        • Я про "А как будет лагать трёх-пятилетний рёбенок, если его просить читать 200-300 записей, а?". Показать список из 300 записей, ебать достижение.
                                          Ответить
                                      • +1

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

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

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

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

                                            Но они походу хотят годное покрытие десятка городов чем хуёвое но всех. Поэтому там даже рашка далеко не вся.

                                            Еще в оффлайне неплохо работали проги на основе openstreetmap. Но там качество мап сильно зависит от добровольцев.
                                            Ответить
                                            • А maps.me что использует? Их?
                                              Кстати, полезная питушня. Есть наверно весь мир, только удобство использования на практике по сравнению с 2гис хуже.
                                              Ответить
                                            • OSM только векторные? http://govnokod.xyz/_25205/#comment-408316
                                              Ответить
                                              • > OSM только векторные
                                                Да. Ты же ёбнешься спутниковые на телефон заливать. Разве что деревню какую-нибудь.
                                                Ответить
                                                • Хотя бы самый крупный масштаб http://govnokod.xyz/_25205/#comment-408316 Да и в чем проблема? У меня кэш сас.планеты 600 метров занимает, это все карты что я смотрел. Или тебе нужно весь мир туда залить?
                                                  Ответить
                                                • Яндекс-карты вроде раньше давали такую возможность, не знаю про то, как сейчас. Один раз питушню порядка гигабайта залил - и всё хорошо. Хотя, разрешение больше в городе и меньше в непопулярных местах. Опять же, видимо, в местах, где дачи яндексовиков, сохраняют подробность :)

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

                                                    У Я есть Народная Карта. Любой может пойти и нарисовать свою деревню, после апрува иксперитов она будет на глагне.
                                                    Ответить
                                                    • А, то есть если разметить неразмеченные дачи, то алгоритм зожатия данных со спутника в этом месте повысит разрешение в оффлайн версии?
                                                      Кстати, оффлайн версия спутника ещё жива?
                                                      Ответить
                                                    • Раньше апрув не требовался. Народные карты были действительно народными. Сейчас же развели бюрократию, чтобы дачи министров никто не нарисовал.
                                                      Ответить
                                                      • > Раньше апрув не требовался.

                                                        Аппрув нужен чтобы правки из народных карт попадали в основную.https://mapeditor.yandex.com
                                                        Ответить
                                                    • А что творится с картами «Гугла»? Детские сады почему-то начали переименовывать в детские крематории.

                                                      Введи в поиск на гуглокарте: «детский крематорий».
                                                      Ответить
                                                      • Тонкий намёк на сгоревших при пожаре?
                                                        Ответить
                                                      • > А что творится с картами «Гугла»?
                                                        Какие-то юмористы обнаружили возможность переименования там произвольной питушни и решили пошалить.

                                                        > детские крематории
                                                        Их построили до или после школ имени Рикардо Милоса?

                                                        P.S. Со стороны школ был выдвинут отряд специалистов-переименовальщиков:

                                                        Специалисты вновь переименуют на Google-картах школу №12 в Таганроге Ростовской области, которую шутники обозвали в честь бразильского стиптизера Рикардо Милоса, рассказал директор школы Павел Олейников
                                                        Ответить
                                                        • Унылые дети какие-то.

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

                                            > Карты гермашки там есть?
                                            Есть несколько карт мест вне России (в которые ездят в отпуск разработчики? потому, что выбраны какие-то особые города).

                                            > Им в оффлайне пользоваться реально?
                                            Реально, но пробки не показываются.
                                            Ответить
                                            • Ага, неопределенность по гейзенбергу

                                              А формат карт там открытый? Спутниковые или OSM можно подрубить? Там растровые или векторные?

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

                                                Карты векторные. А с каждым обновлением всё больше тормозят, это да.

                                                Надо уже отдельный картотред создавать. Интересно узнать, что на практике удобно использовать как оффлайн карты (а) в глуши в конкретной стране и (б) в мире в целом.
                                                Ответить
                                                • Есть андроидотред http://govnokod.xyz/_24889/ , хочешь - создавай.

                                                  >(а) в глуши в конкретной стране
                                                  Если ты про размер карт, то размер спутниковых снимков для одного города просто смешной.
                                                  Ответить
                                      • > оффлайновых карт
                                        Есть RMaps. Оно, правда, лет пять назад померло, но зато не страдает Джээстянкой и быстро работает даже на древних телефонах. И выполнено в этаком «Unix way»: умеет мало, зато то, что умеет, делает отлично.
                                        Ответить
                                  • Потому что там под капотом SQLite какой нить (причем что в ндроиде android.database.sqlite, что в ios CoreData).

                                    И надо умно префетчивать данные, а это не все умеют.
                                    Ответить
                                    • SQLite вполне справляется с такими "нагрузками". А вот гуйня (или сервер, х.з. кот из них) походу основаны на алгоритме Шлемиэля. Потому что лаги продолжали расти явно нелинейно.
                                      Ответить
                                      • Я имел ввиду именно Шлёмин алгоритм: он может подгружать все записи на скролл, например.
                                        Ответить
                                • > акие продвинутые программы загружены в современные смартфоны

                                  В современные телефоны загружено унылое раздутое говно, которое жрёт ресурсы впустую. Вот тебе яркий пример:
                                  https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920/
                                  Эти макаки написали столько говна, что загрузчик ВМ не хотел его грузить. В итоге они хакнули загрузчик. Самое печальное, что они этим гордятся.

                                  К слову, у меня в телефоне с 4 ядрами и 3 Гб оперативы у Anki иногда уходит до 30 сек, чтобы загрузить с диска и отобразить несколько десятков байт html.
                                  Ответить
                                  • >> One of these challenges is related to the way Android's runtime engine, the Dalvik Virtual Machine, handles Java methods.

                                    >> This isn't normally possible, but we examined the Android source code and used Java reflection to directly modify some of its internal structures.

                                    Сейчас прибежит РКГ и скажет, что в Андроиде нет никакой Джавы.
                                    Ответить
                                  • > унылое раздутое говно
                                    Забавно смотреть, как тот же hearthstone раньше без проблем летал на iPad 2, а теперь он на нём даже запуститься толком не может. Хотя визуально разницы нет. Как была карточная игра с простыми анимациями, так и осталась.

                                    Чему-чему, а утилизации ресурсов мобильные программисты научились.
                                    Ответить
                                    • Именно поэтому я за игры под "DOS", досбокс норсально работает на андрэ, и управление в думе для экстрасенсорного и крана подходит.
                                      Ответить
                                    • > утилизации

                                      Утинизации: девайс еле ходит и крякает под нагрузкой.
                                      Ответить
                                      • Мой девайс сходил к тебе за щеку и крякнул там. Проверь.
                                        Ответить
                                      • Я недавно снёс Google Play (вместо него можно использовать Yalp) и Google Play Services. Стало легче. При сносе последнего выскочило предупреждение, что я больше не смогу дистанционно отслеживать своё перемещение и дистанционно удалять свои данные. Ой, как страшно...

                                        Думаю ещё о сносе GAPPS и Google Services Framework, но без них не все приложения работают.
                                        Ответить
                                        • Но ведь многие приложения отказываются работать без гугл плэй сёвисес, а ещо они постоянно просят его обновить (у него в гугл плэй там сплошные негативные отзывы).
                                          Ответить
                                        • > Сносишь GApps
                                          > Заменяешь на F-Droid
                                          > Прилетает корпоративное обновление политики, запрещающее устанавливать новые приложения не из Gulag Spy Store
                                          > Не унываем, т.к. termux-то остался
                                          Ответить
                                  • А среди людей тоже много алкоголиков, тунеядцев, хулиганов. Но кто-то уже на Луну своих собратьев отправил.
                                    Если так рассуждать про программирование, то у нас есть только тупые тормознутые IDE, а никаких продвинутых GCC и V8 на их фоне просто нет.

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

                                    я надеюсь их приложение написано на JS, да? на ReactNative?
                                    Ответить
      • Ошибка вышла из пизды твоей мамани, когда та задрав ноги лежала возле параши.
        Ответить
      • Эту проблему решить статически нельзя, но можно облегчить ситуацию с помощью type-guards:
        function isCat(cat: any): cat is Cat{
            return !!cat.name && !!cat.toCoolCat
        }
        
        function addCoolCat(coolness: number, cat: Cat) {
            if (isCat(cat)) {
                this.coolCats.push(cat.toCoolCat(coolness)); // cat is narrowed to Cat
          }
            else {
              throw new Exception('meow')
          }
        }
        //..
        const cat: any = {name: 'Greycat'}
        addCoolCat(80, cat);
        Ответить
    • Я бы на месте TypeScript не стал бы компилировать 20-ю строчку.

      Нехватка скобок –— это опечатка?
      Ответить

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