Куча говна / Говнокод #26961 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
Top 5 most loved languages:

Rust: 86.1%
TypeScript: 67.1%
Python: 66.7%
Kotlin: 62.9%
Go: 62.3%

Top 5 most dreaded languages:

VBA: 80.4%
Objective-C: 76.6%
Perl: 71.4%
Assembly: 70.6%
C: 66.9%

Top 5 most wanted languages:

Python: 30.0%
JavaScript: 18.5%
Go: 17.9%
TypeScript: 17.0%
Rust: 14.6%

https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-wanted

Миллионы мух не могут ошибаться.

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

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

  • Почему? Ну почему топ-5 самых любимых, это просто отборнейший шит-парад: пuтушатня, тайп-скрипт, питух, кококо и gовно.

    А в антирейтинге нормальные пацанские языки: VB, Пёрл, Асм, Сишка.

    Зачем? Зачем?
    Ответить
      • так вроде разница тока в том, что VBA работает в офисе и меет сразу доступ к объектной модели программы, не?
        Ответить
        • Ну на VB всё-таки писали троянов-авторанов популярный софт.

          А на VBA только троянов внутри документов опердень внутри экселек.
          Ответить
          • ну мне кажется, что сравнивать VB и VBA это как сравнивать ECMa 262 и JS в браузере.
            Или там как питон и питон в lldb или гимпе или куда его там заембедили

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

        Только apiшки разные. Так это один язык.

        Vb очень сильно отличается от VB.net, VBScript или QBasic. Там действительно пропасть.
        Ответить
  • Чёрт. С клиентухой такая же история:

    Most Loved Web Frameworks
    
    ASP.NET Core: 70.7%
    React.js: 68.9%
    Vue.js: 66.
    Express: 61.9%
    Gatsby: 60.7%
    
    Most Dreaded Web Frameworks:
    
    Angular.js: 75.9%


    Но ведь реакт и *уй — говнище.

    АнгулярЖс самый лучший клиентский фрейворк. На нём даже нгк написан.
    Ответить
    • В реакте две проблемы: в него так легко вкатиться что некоторые товарищи его начинают использовать до того как выучат js и его написали долбоебы которые сами не знают что хотят
      Ответить
  • Мдаа...
    Developers' Primary Operating Systems
    
    Windows: 45.8%
    MacOS: 27.5%
    Linux-based: 26.6%
    Ответить
  • Потому что на стак оверфлоу активно сидят в основном wannabe программисты (типа меня), у которых есть наклейки на ноут, футболка "I <3 Code" и подписка на хабр+tproger+мемыдляпрограммистов вконтакте.

    Зачем уважающему себя программисту активно сидеть на сайте с вопросами, ответами и _рейтингом_? Лично я там зарегался только когда не мог что-то нагуглить, поэтому хотел задать новый вопрос. Но удобный поиск по уже заданным вопросам избавил меня от этой необходимости, с тех самых пор в свой аккаунт я уже не заходил )))

    В итоге, что нам показывает эта статистика? Не мнение, может быть, 2% нормальных программистов, не знающих про говнокод, а потому срущих на стаке, а мнение 98% ламерков, прошедших курсы HTML/PHP/JS и не осиливших что-либо сложнее скриптушни или языка "который как сишка тока безопасный даже думоть не надо!"
    Ответить
    • Я тоже, кстати, не вижу никакого смысла в реге на «SO». На все буль-мень простые вопросы, которые задают нубы в соответствующих областях, слетаются толпы экспертов, наперебой делящиеся с вопрошающим сакаральным знанием, но стоит только кому-то спросить что-то более сложное, чем «Как разделить строку по запятым?», как страничка этого вопроса сразу же превращается в пустыню, и только редкие перекати-поле в виде комментариев «Вы пробовали выключить и снова включить?» нарушают абсолютную тишину.
      Поэтому, если беглый гуглинг вопроса не дал результатов, то на «SO», скорее всего, на него тем более никто ответить не сможет.
      Ответить
      • не соглашусь.

        у меня не очень много вопросов на so, но почти на все из них есть ответы и ответы вполне себе адекватные.

        если на so нет твоего вопроса, то как на нём появится ответ на твой вопрос? 🙂
        Ответить
    • Согласен. Но думаю дело не только в аудитории SO. Там сидит достаточное количество грамотных людей.

      SO лишь срез всего айти. Думаю дело в общем обанскиливании профессии.

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

      Я сделал забавное наблюдение, зарплаты в «most dreaded» сильно ниже средних цифр, а «most loved» сильно выше.

      https://insights.stackoverflow.com/survey/2020#work-salary-and-experience-by-language

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

          А сегодня только услышав, сколько вечнозелёных получает «Колька, Иркин брат», бегут в погромисты.

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

          И как им мама в детстве на ночь читала Кнута. И какая заебатая штука ТайпСкрипт, а Rust вообще чудо.
          Ответить
          • Именно! Только «Колька, Иркин брат» может и слова-то такого не знает: "Кнут". Он просто прошел курсы пхп разработчика и стал опотным
            Ответить
            • Да. С «Кнутом» эт я что-то загнул.

              Надо было чего попроще. Типа html.
              Ответить
          • Если у бывшего экономиста хватило мозгов и жопы выучить да хоть php для работы то он мне кажется гораздо более достойным прогерской зп чем задр который с 6 класса программирует но или безответственный долбоеб или какой-то безэмпатийный ребенок или там аниме смотрит
            Ответить
            • типа с шетсова класса программрует, а пхп все еще не знает?
              Ответить
    • В dreaded.
      PHP: 62.7%

      Но я был искренне удивлён, когда увидел, что народ больше страшится Ассемблера и Сишки, чем «PHP».
      Ответить
      • Потому что суммарный IQ всех программистов есть константа, а кол-во программистов растет
        Ответить
          • VBScript такое лютое говнище, что даже с моими тёплыми чувствами к Old Basic, никак не могу защищать эту мертворождённую сранину.

            Я немного пробовал это учить. Просто отвратительная, ублюдочная копия Ecma (ещё того, куцего, времён IE4-5).

            Спольски понять можно. VBA в Экселе получился лютой годнотой. На тот момент технология просто революционная.

            Но VBA для браузера, тут уж извините.

            Это выкидывая за скобки немаловажный момент, что его поддерживал только IE, во времена своей славы.
            Ответить
            • В чём смысл "Basic"? Я никогда нигде не видел реальных примеров применения данного язычка.
              Ответить
            • ну генеральная идея была в том, что если ты виндопитух, то ты знаешь бейсик, и VBS тебе легче зайдет, чем JS.

              А с VBS ты можешь и в ASP (классик) и в IE и в WSH, и всюду, куда заембедят.

              Но не выстрелило.

              У MS вообще было много идей, которые выглядели здраво и правильно (яб тоже так сделал) но почему-то не вышло
              Ответить
              • Говорю же, даже я как позитивно ангажированный в пользу васика, считаю VBS фейлом. Там не было многих функций из js. Js был компактнее и проще. При той же слаботупизированной идеологии.

                Бейсик изначально ведь и позиционировался как простая скриптуха для быстрого прототипирования.

                С этой точки зрения JS и Питон — эволюционировавший на следующую ступень Бейсик.

                А разработчики «TypeScript» этого так и не поняли, сотворив мерзкую, осклизлую, болотную недожабу для браузеров.
                Ответить
                • > разработчики «TypeScript» этого так и не поняли, сотворив Йажу для браузеров
                  - а как надо было?
                  Ответить
                  • Автовывод типов. Меньше мусорных мудификаторов и ООП.

                    Изначальный ЖС был гораздо ближе к идеалу. Туда бы хороший type inference прикрутить и тупизацию.

                    Я уже много раз про это писал.

                    Идеальный язык где ты пишешь.

                    a=1

                    А все ненужная питушня доопределяется сама

                    const a:int=1;
                    Ответить
                    • Изначальный ЖС почти сразу стали насильовать пытаясь сделать из него ооп
                      Ответить
                      • Не совсем правда.

                        Изначальный ЖС был функционален.

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

                      Кстати, для "JS"-дебилов: имейте в виду, что для превращения числа-строки в целое число необязательно использовать "parseInt" - можно просто умножить строку с числом на 1.
                      Ответить
                    • >a=1
                      А как панять это ты зашедовил переменную декларнув новую или старую переписить пытаешься?
                      Ответить
                      • А выдавать ошибку при shadow. const же.

                        И тогда заставлять явно писать мудификатор.

                        Ситуация довольно редкая, потому от этого только польза.
                        Ответить
                        • а если там не const? или у тебя ваще никогда не будет не конст?

                          > выдавать ошибку при shadow.
                          ну, такое
                          Ответить
                          • >а если там не const?
                            А тогда классическое:
                            var a=1

                            Смысл в том чтоб const был по умолчанию.
                            Ответить
                            • ну тогда коко почти то, что надо
                              но там нужнописать val
                              val -- r/o
                              var -- r/w
                              Ответить
                              • >но там нужнописать val
                                Это не то. Хуйня.

                                Неявный const очень сильно всё упрощает, и избавляет от целых КЛАССОВ ошибок.

                                Типа переопределения ниже по функции и захватов в лямбдах.

                                А классическое == убивается на корню:
                                x=gimme();
                                
                                if (x=2){ //тут ошибка, хотели x==2

                                Компилятор это отловит, т.к. это переприсваивание константы.
                                Ответить
                                • >"x=gimme();

                                  if (x=2){ //тут ошибка, хотели x==2

                                  Компилятор это отловит, т.к. это переприсваивание константы."


                                  Если компилятор и так "понимает", что имелось в виду, почему бы ему сразу на лету не переделать некорректный код и не выполнить то, что подразумевал пользователь?
                                  Ответить
                                  • было бы кстати заебись

                                    хочешь -- пиши =
                                    хочешь -- ==
                                    компилятор пускай сам доумкает, не маленький же
                                    Ответить
                                • x=2 в коко и так не сработает, бо там = не экспрешен

                                  С без вал есть такой проблем как установка значен по умолчанию
                                  в петухе это Noneом решают

                                  val petuz: String //в питонге было бы petuz = None
                                  if (..) {
                                  petuz = "A"
                                  } else {
                                  petuz = "B"
                                  }
                                  Ответить
                    • > Идеальный язык

                      если потеребонькать ширину таблички по нажатию на кнопаньку, то да

                      если SPA во все поля с файербейзами и рагулярами, то жс вообще ни о чём
                      Ответить
                      • да, писать большое сложное приложение на языках типа JS или Perl не всегда приятно
                        Ответить
                      • Внешний вид кода как ЖС (ECMA 5) или Питоне (до нововведений) но со статической тупизацией.

                        Минимум всякого синтаксичесого хлама private, public, protected. Без наследования.
                        Ответить
                        • ты можешь не писать public (в отличие от) и не использовать наследование
                          Ответить
                          • Ничего нового не услышал. Я в "PHP" всем этим наслаждался ещё до твоего зачатия.
                            Ответить
                          • Его в принципе не должно быть.

                            Вся приватность как в сишке (кишки не видны через h-файлы интерфейс модуля) или как в жс, локальные переменные прячутся в замыкании.
                            Ответить
                            • +1 за интерфейсы, кстати

                              У тебя есть модуль компиляции. В этом модуле я могу куда угодо залезть и что угодно потрогать

                              А вот снаружи этого модуля пусть будет явный интерфейс с документацией.

                              Пакетная видимость это вообще глупость
                              Ответить
                              • >В этом модуле я могу куда угодо залезть и что угодно потрогать
                                Именно.
                                Ответить
                                • Ну вот кстати в с# есть internal -- видимость на уровне .dll
                                  Вроде, а джву тоже что-то похожее завезли jigsaw
                                  Ответить
                            • чтобы было как в сишке, надо разделять сорцы на файлы-интерфейсы и файлы-имплементации

                              это такое буэ, что страшно сказать

                              > или как в жс
                              this is undefined
                              Ответить
                              • >, надо разделять сорцы на файлы-интерфейсы и файлы-имплементации

                                так заябись же! Мне вот хочется явно описать API моего модуля

                                Как мне это сделать?
                                Ответить
                                • >"Мне вот хочется явно описать API моего модуля. Как мне это сделать?"

                                  В "Word"-е.
                                  Ответить
                                    • Нее... пусть спрашивают на стековерфлоу.

                                      З.Ы. Это было бы смешно, если бы авторы некоторых либ реально так не делали.
                                      Ответить
                                • странные люди хотят непонятного

                                  сгенерь документацию из исходников

                                  а вообще отойдите от меня, мужчина, от Вас сильно пахнет нафталином
                                  Ответить
                                  • А как сгенерировать?

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

                                    или даже не классы, а функции

                                    Как мне сделать так, чтобы клиенты моей либы не заюзали другие классы?

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

                                        А как это делатся в твоем язуе?
                                        Ответить
                                        • >"А как это делается в твоем языке?"

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

                                          у тебя документация делается путём создания интерфейсов?
                                          Ответить
                                          • API делается путем создания интерфейсов
                                            Документация путем документирования API в том числе

                                            Что не так?
                                            Ответить
                                            • ну напиши свои интерфейсы, напиши доку, сгенерируй хтмл/пдф и выложи

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

                                      Можно назвать эти классы случайными наборами букв и цифр. Если, конечно, без классов вообще никак - ну любишь ты БДСМ.
                                      Ответить
                                    • > Как мне сделать так, чтобы клиенты моей либы не заюзали другие классы?
                                      - не понял, в твоём языке модификаторы public и private означают что-то более другое?
                                      Ответить
                                      • В моем языке модификатор public открывает класс всем, включая клиентов либы.

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

                                >это такое буэ, что страшно сказать

                                Возможно открою тайну.

                                Но интерфейсы есть в КАЖДОМ современном промышленном языке: C++, C#, Java, TypeScript, Python, Go, Rust (trait) итд.
                                Ответить
                                • в каком из этих языков их нужно писать руками?

                                  не считая крестов
                                  Ответить
                                    • не понял

                                      я беру питон

                                      пишу одно файло

                                      импорчу его и теку

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

                                    но точно так же оно и для .h сгенерит
                                    Ответить
                                    • а что оно у тебя для .h сгенерит? символы из заголовочника перенесёт в исходник с дефолтной реализацией?)
                                      Ответить
                                      • не понял тебя.

                                        Я написал реализацию, тыркнул кнопкой, и попросил вынести ее декларацию в .h файл
                                        Ответить
                                        • а, ну если так, то тогда я неправильно понял

                                          это ещё более-менее

                                          а в жабе это зачем руками делать?
                                          Ответить
                                          • если ты пишешь в блокноте, то как еще ты сделаешь интерфейс?
                                            а если в IDE, то оно сгенерит его.

                                            В общем смысл в том, что
                                            // petuh.h
                                            void petushok();

                                            ничем не хуже
                                            // Petushok.java (скомпирилуется в .class)
                                            public interface Petushok {
                                               void pikok();
                                            }


                                            но первое все ругают, а второе нет
                                            почаму?
                                            Ответить
                                            • >но первое все ругают, а второе нет

                                              В public interface Petushok {
                                              Буковок больше.
                                              Им за буковки платят.

                                              Интерфейсы есть не только в ЙАЖЕ, а вообще везде.
                                              Ответить
                                              • сказал чувак, которому void petushok() надо написать в двух разных файлах )))
                                                Ответить
                                                  • а в свифте не надо
                                                    и в го не надо
                                                    и в питоне не надо
                                                    и даже в великом и ужасном лишпе - нет, не надо

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

                                                      ты можешь в сишечке тоже .c файлы распостранять, и с ними компилироваться

                                                      А как в свифте выглядит SDK?
                                                      Ответить
                                                      • > как в свифте выглядит SDK

                                                        Форварды к объективному си поди?
                                                        Ответить
                                                        • я не об этом.

                                                          вот я написал супер-полезную функцию getFoo().
                                                          Я не хочу тебе ее сырцы давать, но могу тебе продать ее реализацию в виде .dyld или .so (забыл, в чем разница на ябле) чтобы ты с ней скомпилирвался динамически

                                                          Ну или продать тебе .lib, чтобы ты статически

                                                          Как ты компирилируешь свой код без .h файлов?
                                                          Ответить
                                                          • p.s. на самом деле в свифтовом фреймворке есть .h-файл, только руками в него тоже обычно ничего не пишут, если фреймворк свифтовый
                                                            Ответить
                                                            • > .h файл

                                                              Чтобы можно было его юзать из объективной сишки?
                                                              Ответить
                                                              • Смешно как люди начинают воевать с Сишкой по причине «нафталиновости».

                                                                А потом вылазят .h-файлы, llvm, биндинги сишные, вотэтовотвсё.

                                                                Сидят на полностью ворованной инфраструктуре да и покрякивают.
                                                                Ответить
                                                                • > Сидят на полностью ворованной инфраструктуре
                                                                  - я не рефлексирую по этому поводу)
                                                                  Ответить
                                                                • и я с сишкой не воюю, я против неё в принципе-то ничего и не имею

                                                                  просто разделение на .h и .с это, на мой взгляд, рудимент, а вы ещё это в 2020-ом году предлагаете в качестве "инновации" добавить в js
                                                                  Ответить
                                                                  • >вы ещё это в 2020-ом году предлагаете в качестве "инновации" добавить в js

                                                                    Может показаться что это «троллинг». Однако здесь абсолютно серьёзно.

                                                                    Есть модуль isTen.

                                                                    Внутри него объявлены всякие foo, bar.

                                                                    Мы хотим чтобы они не торчали наружу, засирая глобальную видимость.

                                                                    Наружу торчит только функция isTen.

                                                                    Добиться этого можно разными способами. private/public один из вариантов. Как я уже отметил далеко не наилучший.

                                                                    nodejs module.exports по духу как тот же extern, позволяет «увидеть» функцию или константу из других модулей. Да, там ещё есть поправки на линковку, но в целом.
                                                                    Ответить
                                                                    • мне, если честно, больше нравится тогда подход с явным списком экспорта

                                                                      > nodejs module.exports
                                                                      - это ж оно и есть?
                                                                      Ответить
                                                                      • >мне, если честно, больше нравится тогда подход с явным списком экспорта

                                                                        Поздравляю! Мы изобрели h-файл!

                                                                        double log10(double x);
                                                                        double      exp(double);
                                                                        double      exp2(double);
                                                                        float       exp2f(float);
                                                                        long double exp2l(long double);


                                                                        Чем не явный список экспорта?
                                                                        Ответить
                                                                  • а угадай, что за файлы такие -- ts.d ?
                                                                    Ответить
                                                                    • TSD may refer to:
                                                                      Businesses and organizations
                                                                      TSD Desalination, an Israeli start-up
                                                                      Texas School for the Deaf, U.S.
                                                                      Transylvanian Society of Dracula
                                                                      Turin School of Development, Italy
                                                                      University of Wales Trinity Saint David, a university in the U.K.
                                                                      TSD - Tunisian Software Development, Tunis , a Waste management IT consulting company
                                                                      Government
                                                                      Technical Services Division, another term for the U.S. CIA's Office of Technical Service
                                                                      Treatment, Storage, and Disposal Facility; see HAZWOPER
                                                                      Treasury Solicitor's Department, U.K.
                                                                      Trilateral Security Dialogue, part of the Quadrilateral Security Dialogue
                                                                      Science and medicine
                                                                      Target-to-skin distance, a measurement in external beam radiotherapy
                                                                      Tay–Sachs disease, a genetic disorder, fatal in its most common variant
                                                                      Temperature-dependent sex determination
                                                                      Thermionic specific detector, another term for nitrogen–phosphorus detector
                                                                      Total sleep deprivation, a parameter in sleep and memory studies
                                                                      Ответить
                                                              • хз

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

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

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

                                                                я чот думал, что их надо в обязательном порядке помечать как @objc, но это только для рантайма

                                                                ну и свифтовые типы должны быть представимы в objc
                                                                Ответить
                                                      • в питоне вообще-то есть колёса

                                                        в свифте как минимум есть llvm'ный modulemap

                                                        только руками его никто не трогает почти никогда за исключением редких случаев
                                                        Ответить
                                                        • верно

                                                          а если ты захочешь эти колеса (.so, .dll) юзать, то тебе надо или полностью полагаться на динамику, или... ... СКАЧИВАТЬ СТАБЫ

                                                          СТАБЫ БЛЯДЬ
                                                          PEP-484.

                                                          Для статической валидации кода.

                                                          Угадай, похожи ли они на .h файлы?
                                                          Ответить
                                                        • расскажи всё таки про модулмап

                                                          как сделать библиотеку на свифте и распостранить ее в виде скомпилированного кода?

                                                          или у вас есть как раз тул, чтобы сгенерить этот .h файл налету из кода?
                                                          Ответить
                                                            • >вот тебе сразу и заголовочник
                                                              а как он выглядет?

                                                              module MyLib {
                                                                module Base {
                                                                  header "Base.h"
                                                                }
                                                              
                                                                module Derived {
                                                                  header "Derived.h"
                                                                  export Base
                                                                }
                                                              }

                                                              а, ок
                                                              Ответить
                                                              • Нет, заголовочный это обычный .h файл.

                                                                А это как раз modulemap

                                                                Это разные вещи
                                                                Ответить
                                                                • ну так ты создаешь .h, а потом экспортируешь его через модульма, причем видимо можешь конкретный класс экспортнуть, да?
                                                                  Ответить
                                                                  • .h создаёт Xcode при создании проекта.

                                                                    modulemap генерируется автоматом при сборке. Но можно и руками, емнип

                                                                    В тонкой настройке экспорта я честно не силён, надо вникать в доку по llvm.

                                                                    Но там много можно разного делать, например, создавать модули из голых сишных исходников
                                                                    Ответить
                                                                    • Ну тоиссь .h всё таки есть, просто генерится сам.

                                                                      И клиент потом компилируется против этого .h файла.
                                                                      Ответить
                                                                    • Баг-репорт. В глоссарии плавающий блок с полезными ссылками закрывает номера страниц: https://i.imgur.com/Em8rAcx.png. В результате на другие страницы перейти невозможно. Какой багор )))
                                                                      Ответить
                                                    • >и в го не надо

                                                      Звучит очень смешно, т.к. в го приципиально отказались от ооп, однако зачем-то завезли:
                                                      type Foo interface {
                                                      ...
                                                      }
                                                      Видимо, потому что «не надо».
                                                      Ответить
                                                      • какое отношение interface в Go имеет к разделению на .c и .h? 🙂
                                                        Ответить
                                                        • > interface в Go имеет к разделению на .c и .h? 🙂

                                                          Разделение реализации и API достаточно очевидная концепция.

                                                          Особенно в контексте обсуждения модификаторов public/private.

                                                          МАКАКА даже пример дал:
                                                          https://govnokod.ru/26961#comment576261
                                                          Ответить
                                                          • не, ну дружище

                                                            я ж никогда не поверю, что ты не знаешь разницы между interface в %LANGNAME% и хедерами в сишке.

                                                            ты троллируешь

                                                            но я не ведусь(
                                                            Ответить
                                                            • >я ж никогда не поверю, что ты не знаешь разницы между interface в %LANGNAME% и хедерами в сишке

                                                              Речь не о разнице. А о схожести.

                                                              h-файлы немного по-уебански сделаны, через из-за чего пришлось выдумывать precompiled headers и прочую питушню.

                                                              Но их суть отделить API от его реализации.

                                                              >ты троллируешь
                                                              Даже gcc пишут что это интерфейсы.
                                                              https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
                                                              A header file is a file containing C declarations and macro definitions (see Macros) to be shared between several source files.
                                                              You request the use of a header file in your program by including it, with the C preprocessing directive ‘#include’.
                                                              
                                                              Header files serve two purposes.
                                                              
                                                              * System header files declare the interfaces to parts of the operating system. You include them in your program to supply the definitions and declarations you need to invoke system calls and libraries.
                                                              
                                                              * Your own header files contain declarations for interfaces between the source files of your program.
                                                              Each time you have a group of related declarations and macro definitions all or most of which are needed in several different source files, it is a good idea to create a header file for them.
                                                              Ответить
                                                              • я не спорю, что и то, и другое в принципе называется интерфейсами

                                                                только ж они всё-таки про разное

                                                                наличие interface в Go не заставляет язык иметь ещё и интерфейсные файлы отдельно
                                                                Ответить
                                                                • >наличие interface в Go не заставляет язык иметь ещё и интерфейсные файлы отдельно

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

                                                                  А в явах/шарпах тоже принято писать интерфейсы в отдельных файлах.

                                                                  На самом деле это логично.

                                                                  И на практике во всех RPC типа WSDL, SOAP принято поставлять стабы в отдельных файлах.

                                                                  Которые по сути те же интерфейсы.
                                                                  Ответить
                                                                  • мы говорим всё же про библиотеки

                                                                    в Си тебе нужно иметь хедер для своей библиотеки. и при этом писать его руками.

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

                                                                    вон Макака говорит, что какая-то сишная ИДЕ тоже умеет сигнатуры в хедер копировать. это прогресс.

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

                                                                    * не считая ожидаемо C++ и совершенно внезапно Лажи, ну и обжси до кучи
                                                                    Ответить
                                                                    • > в Си тебе нужно иметь хедер для своей библиотеки

                                                                      А в WSDL для библиотеки нужны стабы. В чём отличие-то?

                                                                      >и при этом писать его руками
                                                                      Не обязательно.

                                                                      Вообще не вижу корреляции между функцией IDE сгенерить h-файл и возможностями языка.
                                                                      Ответить
                                                                      • я не знаю, что такое wsdl и какие там стабы, потому не могу ничего тебе ответить

                                                                        а так отличие в том, что ты свои дефиниции мейнтейнишь в одном файле, а не в двух
                                                                        Ответить
                                                                        • > а так отличие в том, что ты свои дефиниции мейнтейнишь в одном файле, а не в двух

                                                                          А разве в свифте когда объявили protocol, его не нужно мейтенить в двух местах (объявлении и реализации)?
                                                                          Ответить
                                                                          • нет, зачем?

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

                                                                                вот тебе пример на C++, как я его понимаю (если в чём проебу, старшие товарищи поправят)

                                                                                у тебя есть абстрактный класс
                                                                                он описан в .h файле

                                                                                .cpp файла у него ведь нету, верно? (ну даже если есть, то только лучше для моего примера)

                                                                                есть наследник абстрактного класса.

                                                                                у него есть и .h, и .cpp

                                                                                то есть это три файла

                                                                                в Свифте протокол в одном файле и реализация в другом файле

                                                                                это два файла

                                                                                выигрыш в полтора раза

                                                                                масштабируй даже на небольшой проект на ~1000 файлов, нифига себе экономия энтропии

                                                                                а кто там что потом меняет и рефакторит, это вообще к теме разговора не относится
                                                                                Ответить
                                                                                • зачем классу-наследнику отдельно .h и .cpp? чтобы быстрее конпелировалось?
                                                                                  Ответить
                                                                                    • пишешь 1 precompiled.hpp, в который включаешь системное, затем пару десятков своих hpp файлов и 1 main.cpp
                                                                                      когда ставишь компилять, сражаешься на мечах на стульях в коридоре

                                                                                      всё равно всё в шаблонах через шаблоны
                                                                                      /green
                                                                                      Ответить
                                                                                      • ну если на шаблонах

                                                                                        то тогда конечно меняем в браузерах js на C++
                                                                                        Ответить
                                                                                    • Альтернативный вариант, если нужна изоляция и не всё в шоблонах через шоблоны: IХуёМоё в хедере + реализация ХуёМоё в цпп.
                                                                                      Ответить
                                                                                      • а как мы тогда узнаем про ХуёМоё, если его нет в хедерах?

                                                                                        если захочется конструктор там позвать
                                                                                        Ответить
                                                                                        • Ещё pimpl юзают (private implementation).

                                                                                          Когда в хедере у тебя ХуёМоё с единственным полем - указателем на ХуёМоёИмпл. А ХуёМоёИмпл лежит в цппшнике вместе с реализацией методов ХуёМоё.

                                                                                          Ну и твой вариант с тремя файлами тоже часто встречается.

                                                                                          В крестах дохуя вариантов отстрелить себе ногу так то.
                                                                                          Ответить
                                                                                          • Часто такое вижу. Пиздец бесит по такому навигироваться. А нахуя это делают?
                                                                                            Ответить
                                                                                            • > А нахуя это делают?

                                                                                              Стабильное ABI. Методы не виртуальные, на их порядок и количество насрать. А все кишки спрятаны в реализации и их можно менять как хочешь без переконпеляции клиента.

                                                                                              Qt это юзает, к примеру.
                                                                                              Ответить
                                                                                              • то, что раньше на стеке само дохло, теперь сделает дуршлаг из кучи
                                                                                                нет ничего идеального
                                                                                                Ответить
                                                                                              • Если мне нужно добавить метод, мне придётся добавлять в ХуёМоё.h с вызовом ХуёМоёИмпл->метод(), и написать в ХуёМоё.cpp ХуёМоёИмпл::метод
                                                                                                И так, и так 2 раза.
                                                                                                И так, и так при изменении .h нужно всё переконпиливать.
                                                                                                И так, и так, вся логика в .cpp
                                                                                                В чём удобство?
                                                                                                Ответить
                                                                                                • почитай что такое ABI

                                                                                                  ты свой ХуёМоё экспортировал в длл

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

                                                                                                  теперь ты решил, что в ХуёМоё надо хранить на одно приватное поле больше - int dick_length_;
                                                                                                  пересобрал ХуёМоё.длл - всё, клиент пошёл по пизде, его теперь тоже надо пересобирать
                                                                                                  Ответить
                                                                                                  • 1) В проекте, где я это видел, нет никаких “ABI”, твой случай не применим (если я правильно вас понял). Прога собирается статически, никаких клиентов нет.

                                                                                                    2) Если я добавляю int dick_length_ в impl, то почему это не должно распидорасить клиента, у которого размер приватного поля impl увеличится? Или там укококозатель храницца?
                                                                                                    Ответить
                                                                                                    • для статической линковки будет ровно всё так же применимо, как я выше и написал, разницы нет
                                                                                                      ABI

                                                                                                      > укококозатель
                                                                                                      https://en.cppreference.com/w/cpp/language/pimpl
                                                                                                      господи, даже на дцпреференс статью сделали для тебя, что за анскильность задавать такие вопросы в интернете
                                                                                                      Ответить
                                                                                                      • > разницы нет

                                                                                                        Я же сказал, что это мне запутывает навигацию по коду. Если смысла нет, то нахуя?
                                                                                                        Ответить
                                                                                                        • если ты компилируешь и класс и всего его использования вместе то да, нету никакой надобности в пимпле
                                                                                                          Ответить
                                                                                                      • Я предупреждал, что я анскильный. { Именно поэтому я не PHP Senior }
                                                                                                        Ответить
                                                                                                    • 1) Да. Это юзают для либ. Если у тебя проект в одном экзешнике, то в pimpl никакого смысла нет. Разве что если захочешь кишки какого-нибудь хедера спрятать, чтобы по всему проекту запах от него не стоял.

                                                                                                      2) Там указатель, в этом и минус подхода. Но в случае с интерфейсом и фабрикой он тоже будет.

                                                                                                      Если ты хочешь максимум пирфоманса, ты вынужден светить кишками наружу.
                                                                                                      Ответить
                                                                                                      • 1) Так а нахуя автор так сделал? Просто по привычке, или всё же есть какой-то смысл?
                                                                                                        Ответить
                                                                                                        • Ну возможно там были какие-то хедера, которые неприлично инклудить при людях. Винапи, к примеру.

                                                                                                          Либо просто привык после какого-нибудь Qt.
                                                                                                          Ответить
                                                                                                          • > хедера

                                                                                                            Тогда да, имеет смысл. Но вряд ли из-за этого.
                                                                                                            Ответить
                                                                                                  • > например, 56 байт на стеке
                                                                                                    > теперь ты решил, что в ХуёМоё надо хранить на одно приватное поле больше - int dick_length_;


                                                                                                    Какая кресто-инкапсуляция )))

                                                                                                    Абасракция потекла по штанине.
                                                                                                    Ответить
                                                                                                • > В чём удобство?

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

                                                                                                  Кстати, в ХуёМоёИмпл методы совсем не обязательны. Можешь юзать его в методах ХуёМоё просто как структуру.
                                                                                                  Ответить
                                                                                                • кстати это еще похоже на паттерн Мост

                                                                                                  У жабьего свинга так сделан UI, например.

                                                                                                  Есть иерархия классов компонентов, которая ниухя не делает, а только передает все вызовы лук-н-филу. Ну и паралленая ей иерархия компонентов лук-н-фила

                                                                                                  Я пишу код в терминах компонентов ничего не зная про конкретный лук и фил

                                                                                                  Тут Лук и Фил явлюятся как бы Пимплом из примера.

                                                                                                  Дело тут конечно не в аби, а в возможности сменить лук и фил.
                                                                                                  Но чем-то похоже
                                                                                                  Ответить
                                                                                                  • Ну для моста тебе лучше юзать интерфейсики и IoC, как в жабе, наверное.

                                                                                                    Pimpl не настолько гибкий в плане поштучной подмены компонентов. Да и "импл" часто просто структура без методов.
                                                                                                    Ответить
                                                                                                    • это да) но все таки чем-то похоже

                                                                                                      В жабе нету ТАКОЙ проблемы с ABI. Точнее, она есть, но менее страшная.

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

                                                                                                      Так что там пимпл в чистом виде не нужен
                                                                                                      Ответить
                                                                                                      • >В жабе нету ТАКОЙ проблемы с ABI.
                                                                                                        >Добавленрие поля хз, но вроде тоже

                                                                                                        Там в каком-то смысле ещё хуже.

                                                                                                        https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/Serializable.html

                                                                                                        The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException. A serializable class can declare its own serialVersionUID explicitly by declaring a field named serialVersionUID that must be static, final, and of type long.

                                                                                                        However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class serialVersionUID fields are not useful as inherited members.

                                                                                                        Ответить
                                                                                                        • ну если сериализация нужна, то да

                                                                                                          разумсеется, добавление поля это всегда пизда серилизации бинарной

                                                                                                          но мыж не про нее.

                                                                                                          Моя помнит, что в одном веб фреймоворке (struts?) контрорллеры implements Serializable, и Idea советовала писать всем serialVersionUID

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

                                                                                                          >may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization.

                                                                                                          стабильненкок

                                                                                                          теперь я понимаю, почему у нас GSon
                                                                                                          Ответить
                                                                                                          • Я к тому что йажа-инкапсуляция течёт там где и подумать трудно.

                                                                                                            В плане ABI проблем конечно меньше. Но при использовании RPC-технологий (а это в ынтырпрайзе частый гость) они как бы возвращаются вместе с сериализацией.
                                                                                                            Ответить
                                                                                                          • Наверное я всё-таки загнул.

                                                                                                            В Йажа всё-таки есть более-менее рабочая инкапсуляция. И сериализационных и ABI-проблем меньше.

                                                                                                            То есть безболезненно добавить приватное поле пожалуй можно, только осторожно и c transient.

                                                                                                            Но «перегенерить стабы и скелетоны» когда-то давно было довольно частой ситуацией во времена корбы и рми. Даже при неизменном классе, а например при обновлении версии jvm с 4ой на 5ю.
                                                                                                            Ответить
                                                                                                • >И так, и так, вся логика в .cpp

                                                                                                  Это же кресты ебаные. В них нет никакой логики.

                                                                                                  СиПлюсТруп вдобавок к имеющемуся в сишке механизму инкапсуляции (headers) сделал ещё один (классы с приватными полями).

                                                                                                  Где можно «прятать» поля.
                                                                                                  Механизм ожидаемо оказался полным говном, т.к. приватные поля хоть и не видны, но влияют на размер структуры.

                                                                                                  И к тому же в их содержимое всегда можно посмотреть скастив структуру в массив.

                                                                                                  То есть поставленные цели не достигнуты: ни сокрытия, ни абстрагирования достигнуть не удалось.
                                                                                                  Ответить
                                                                                                  • При чем тут вообще приватность, питушок?
                                                                                                    Ответить
                                                                                                  • да, добавление приватного поля вроде как не ломает API, но ломает ABI.

                                                                                                    Какой бугор))

                                                                                                    Кстати читал, что в древних юниксах (может в 70-х?) иногда не распостранялись .h файлы, а только документация.

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

                                                                                                        Но добавление приватново поля это делать реализации

                                                                                                        изменение реализации не должно ломать ABI!!
                                                                                                        иначе как обновлять либу не перекококококпилруя клиента?
                                                                                                        Ответить
                                                                                                  • Питушок, а почему ты именно на кресты гонишь? Если я в структуру захочу добавить поле, то я же тоже сломаю аби?
                                                                                                    Ответить
                                                                                                    • а в структуре сишечки нету кода: там поле не может быть деталью реализациии
                                                                                                      Ответить
                                                                                                      • Ну вообще эта проблема и в сишечке есть, да.

                                                                                                        Либо у тебя структура в паблике и часть ABI, либо ты её прячешь но начинаешь дрочить кучу.

                                                                                                        Либо ты делаешь ёбаный хак с резервированием места - для клиента поля не видны, только char buf[N].
                                                                                                        Ответить
                                                                                                        • так не храни в структуре приватные данные, храни по указателю, как ты верно и сказал, в куче там или где еще

                                                                                                          Но в ООП совершенно естественно добавить приватное поле. Интерфейс класса не изменится.

                                                                                                          Я на жабе так могу же сделать? а на крестах нет?
                                                                                                          Ответить
                                                                                                          • И в крестах можешь.

                                                                                                            Если ты все методы сделаешь виртуальными, а поля клиенту не покажешь - всё будет как в жабе.

                                                                                                            Если ты поля клиенту покажешь, даже приватные - они станут частью ABI, клиентов придётся пересобирать, зато работать будет быстрее и аллокатор можно не дрочить.

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

                                                                                                              вопрос про приватные поля, они же не виртуальеуые.

                                                                                                              >Если ты поля клиенту покажешь, даже приватные - они станут частью ABI,

                                                                                                              Воот)))

                                                                                                              Так что приватность она такая не очень приватная как-бы.
                                                                                                              Инкапсуляция кап-кап.

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

                                                                                                            Ахаха. Наивный. Почитай про java serialVersionUID.

                                                                                                            >Но в ООП совершенно естественно добавить приватное поле.

                                                                                                            Именно поэтому я против «ООП».

                                                                                                            Они не сделали инкапсуляцию данных или абстракцию, скрывающую детали реализации от пользователя API.

                                                                                                            Они просто сделали говно на котором писать нельзя.

                                                                                                            И в этом и заключается фокус.

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

                                                                                                            Очевидно, что сваять ничего нельзя - поэтому отовсюду торчат фасады, обёрточки, pimpl-указатели.
                                                                                                            Ответить
                                                                                                        • >Либо ты делаешь ёбаный хак с резервированием места - для клиента поля не видны, только char buf[N]

                                                                                                          Это вообще стандартная практика.

                                                                                                          Ещё один паттерн, сделать енум с ид параметров и хуйнуть flexible array member.
                                                                                                          Ответить
                                                                                                      • Приватное поле - не обязательно деталь реализации. Мне данные нужно где-то хранить. В си я бы добавил поле в структуру, в си++ я добавляю приватное поле.
                                                                                                        Ответить
                                                                                                        • как это не обязательно?

                                                                                                          приватное поле нужно только твоему коду, коду клиента оно не известно
                                                                                                          Ответить
                                                                                                          • Ну к примеру, у тебе библиотека для генератора случайных чисел.
                                                                                                            На С:
                                                                                                            struct State {
                                                                                                               int state;
                                                                                                            };
                                                                                                            int get_int(State *state);

                                                                                                            На С++:
                                                                                                            struct Generator {
                                                                                                                Impl* impl;
                                                                                                                int get_int();
                                                                                                            };
                                                                                                            // структура State объявлена в cpp и является частью реализации.


                                                                                                            Детали get_int опущены, но теперь ты хочешь добавить супер охуенный кэш, который ускоряет функцию в 100 раз, но для этого нужна дополнительная память, и нужно поменять структуру:
                                                                                                            struct State {
                                                                                                               int state;
                                                                                                               int _cache;
                                                                                                            };


                                                                                                            В крестах ты сделаешь это без изменения аби, а в сишке - нет.
                                                                                                            Ответить
                                                                                                            • ну так ты же сделал указатель на impl.
                                                                                                              Я и в сишечке могу отдать тебе структуру с указателем на непрозрачную структуру с указателями на функции, не?
                                                                                                              Ответить
                                                                                                              • Ну так а в чём тогда претензия питуха?
                                                                                                                Или он Конардо косплеит?
                                                                                                                Ответить
                                                                                                                • на всяк случай поясню. Я в сишечке могу так
                                                                                                                  // sdk.h
                                                                                                                  struct State;
                                                                                                                  
                                                                                                                  struct State* create_state();
                                                                                                                  int get_int(struct State * state);


                                                                                                                  // client.c
                                                                                                                  #include "sdk.h"
                                                                                                                  #include <stdio.h>
                                                                                                                  
                                                                                                                  void main()
                                                                                                                  {
                                                                                                                  	struct State* s = create_state();
                                                                                                                  	int q = get_int(s);
                                                                                                                  	printf("%d", q);
                                                                                                                  }


                                                                                                                  //impl.c
                                                                                                                  #include "sdk.h"
                                                                                                                  
                                                                                                                  struct State
                                                                                                                  {
                                                                                                                  	int a;
                                                                                                                  	int b;
                                                                                                                  };
                                                                                                                  
                                                                                                                  //ну извините, лениво маллочить, но суть вы же поняли?
                                                                                                                  static struct State s = {1, 1}; 
                                                                                                                  
                                                                                                                  struct State* create_state()
                                                                                                                  {
                                                                                                                  	return &s;		
                                                                                                                  }
                                                                                                                  
                                                                                                                  int get_int(struct State* state)
                                                                                                                  {
                                                                                                                  	return state->a;
                                                                                                                  }


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

                                                                                                                  А вот если мы хотим чтобы памятью заведовал клиент, тут уже сложнее.
                                                                                                                  Ответить
                                                                                                    • > Если я в структуру захочу добавить поле, то я же тоже сломаю аби?

                                                                                                      Если ты анскильный птушный лох, то безусловно.

                                                                                                      Потому я уже устал вам объяснять, что массив — единственная нужная структура данных.

                                                                                                      И чем вы быстрее это поймёте, тем будет лучше.

                                                                                                      В Сишке пацаны используют flexible array member. Пока ооптухи делают поля приватными и рвут стек.
                                                                                                      Ответить
                                                                                              • >Стабильное ABI. Методы не виртуальные, на их порядок и количество насрать.

                                                                                                То есть С+Труп сделал свою реализацию сишных хедеров через public/private.

                                                                                                И свою реализацию линковки, через виртуальные функции.

                                                                                                Но этот подход соснул хуйца и мы возвращаемся к .h и extern "C".
                                                                                                Ахахаха.
                                                                                                Ответить
                                                                                      • ну тебе для потребителя всё равно требуется знать об ХуёМоё в той единице компиляции, которая создает на куче реальный объект, поэтому как-то он должен там узнаться

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

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

                                                                                        на что только люди не пойдут, лишь бы не использовать шаблоны через шаблоны!
                                                                                        Ответить
                                                                                        • > IoC

                                                                                          This.

                                                                                          Но можно и просто фабричную функцию рядом с интерфейсом оставить, если это что-то внутреннее. Кишки с полями в хедер не торчат - и ладно.
                                                                                          Ответить
                                                                                • .cpp есть у него только если он не пьюр абстракт как я понима
                                                                                  если он пьюр то нету

                                                                                  кода в .h файла быть не должно (если это не шоблон)


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

                                                                                  А разве в ObjC так нельзя? Разве не могу я и декларацию и дефиницию описать в .m файле, если снаружи никто не будет иметь к нему доступ?

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

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

                                                                                  А как в обжс? там всегда-всегда надо было писать @interface и @implementation?
                                                                                  Я не помн. нихуя
                                                                                  или не знаю
                                                                                  Ответить
                                                                                  • > кода в .h файла быть не должно (если это не шоблон)
                                                                                    что за предрассудки
                                                                                    кресты не сишка, лучше иметь инлайн, где он нужен, чем течь от джампов
                                                                                    Ответить
                                                                                    • ох, ну пусть будет инлайн

                                                                                      Но если не инлайн, то точно не надо. Исправишь там одну букву, и будет все перекомпилироваться же, и еще одно и тоже
                                                                                      Ответить
                                                                                      • > будет всё перекомпилироваться

                                                                                        Можно юзать несколько прекомпайлед хедеров, по одному на подсистему например. Тогда не всё, а только десяток-другой файлов.
                                                                                        Ответить
                                                                                        • а зачем?

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

                                                                                            Потом, конечно, ты будешь ждать пока соберутся остальные. Но они не всегда нужны.
                                                                                            Ответить
                                                                                            • ну если у меня в .h вообще кода нету, то я перекомпилирую ровно тот .o файл, чей .c я поменял. Потом зову линкёра, и теку.

                                                                                              А если есть, то конечно лучше разбиваться на подсистемы
                                                                                              Это и так всегда полезно

                                                                                              Впрочем, наверняка в твоем прооекте есть такой .h файл, троганье которого приведет к битве на мечах

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

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

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

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

                                                                                    с этим говном мамонта сталкиваюсь по большим праздникам (хотя тут уместнее антоним)

                                                                                    думаю, что это технически должно быть возможно, ведь в общем приватные методы класса в обжективе так и пишут: делают экстеншн в .m файле и текут

                                                                                    пиздец конечно там атмосфера
                                                                                    Ответить
                                                                • > только ж они всё-таки про разное
                                                                  >а вы ещё это в 2020-ом году предлагаете в качестве "инновации"

                                                                  Да, в Сишке есть киллер-фича: линкер. А ЖСах и Йажах его нет.

                                                                  Спольски писал про это.

                                                                  https://www.joelonsoftware.com/2004/01/28/please-sir-may-i-have-a-linker/

                                                                  Вместо линкера в мире лалок принято ебошить: http://c.d.n/pitux.latest.js. А потом эпично ломаться, когда latest меняет api.

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

                                                                  Вот эту стадию скриптухи почему-то так и не освоили.
                                                                  >Then, it removes any library functions that your program does not use.

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

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

                                                                        вебпак называется. Линкер статический. Динамически тоже можно линковаться через всякие JS AMD, но ты не хочешь
                                                                        Ответить
                                                                        • >вебпак называется.

                                                                          Я знаю:
                                                                          >>Те что похитрее используют уёб-пак.

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

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

                                                                            зы: ахаха, как мы синхронно
                                                                            Ответить
                                                              • > Но их суть отделить API от его реализации.
                                                                это был вынужденный костыль, чтобы не инклюдить тела функций в каждую единицу компиляции, чтобы потом линекер охуел и сказал "я два раза два раза не повторяю", но и хоть как-то компилятору намекнуть, что это имя функции всем известно, и принимает она вот такие аргументы (первый компиляторам было даже похуй че она там принимает, известна, и на том спасибо, а если неизвестна - то ворнинг, пусть линекер разбирается)

                                                                среди практически современников ранней сишки уже были виртовские языки (мудула?), которые как раз и должны были уже отделить мух от котлет, но VHS победил Betamax, а питушки продолжают кипятить и в 2020 году
                                                                Ответить
                                                      • >"в го приципиально отказались от ооп"

                                                        Я было повёлся на это, а в итоге это оказалось той же хуетой.
                                                        Ответить
                                            • > то оно сгенерит его

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

                                                но обычно же не так
                                                обычно ты пишешь реализацю, и в процессе рождается понимание, как из нее абстракцию сделать

                                                или нет?

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

                                                    * делает хоть как-то
                                                    * делаем на это тест
                                                    * переписываем по уму
                                                    Ответить
                                      • кстати, не стоит ссылаться на то, что я писал ранее

                                        я могу каждый день противоположные позиции отстаивать, потому что никогда ни в чем не уверен, кроме базовых истин вроде пхп -- говно
                                        Ответить
                        • >private, public, protected.
                          да, это говнино, особенно когда это надо явно каждый раз писать
                          уй знает, почему не сделать как в C++ (и вроде как с#) хотябы

                          > Без наследования.
                          да. Наследование лучше никогда не

                          кстати, в коко все классы по умолчанию закрытые и методы их финльные
                          Ответить
                          • >в коко все классы по умолчанию закрытые и методы их финльные

                            В сишке тоже структы по умолчанию закрытые, а методы финальные )))
                            Ответить
                            • В сишке вообще хорошо сделано. Там нельзя "случайно" найти публичную функцию в чужой .soшке и дернуть ее)
                              Интерфейсы надо описывать явно

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

                              Там еще и все методы вротуальные, лал

                              Потому отцы все классы в жабе делают final по умолчанию (это еще в эффектив жава написано): планируйте наследование явно или запрещаейте его
                              Ответить
                              • не ты ли писал недавно

                                А потому что только Программист знает, что валидно, а что нет.
                                Он царь и бог, а не житель анально огороженной крепости с надсмотрщиком как в джава
                                Ответить
                                • и что? Это же вообще не про это.

                                  Если ты открыл класс, и не написал явно "не наследуйтесь, бляди" (а так никто не пишет) то ты невольно сформировал у пользователя либы ожидание
                                  Ответить
                                    • Нет, ты.

                                      Давай еще раз:

                                      В сишечке если ты хотел экспортировать какой-то функционал из либы, то ты должен был
                                      * написать код в .c файле
                                      * написать интерфейс в .h файле
                                      * отдать .h файл клиенту

                                      Внутри .c файла ты мог еще 100500 функций написать, клиенту похуй.

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

                                      Вопрос: что делать, если ты не хочешь экспортировать класс целиком, а только часть его методов?
                                      Невозможно сделать методы internal для .jar файла.
                                      Можно только package visible, но это почти никто не делает, потому что у тебя будут другие пакеты тоже.

                                      И тогда джависты говорят: сделай интерфейс, и отдай его клиенту.

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

                                      Хотя они тоже самое используют.

                                      Понял мою мыслю?
                                      Ответить
                                      • если честно, то понял, что жаба какое-то говно

                                        даже в шарпе есть интернал

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

                                      Наследование создаёт больше проблем, чем решает.
                                      Ответить
                                      • я не про наследование

                                        а про то, что макака в двух разных местах проповедует абсолютно противоположные вещи)

                                        я за явное лучше неявного

                                        лучше написать final, когда ты понимаешь, что он тебе реально нужен, чем сидеть тупить помнить, а какой же мудификатор здесь по умолчанию

                                        но авторам котлина виднее, конечно
                                        Ответить
                                        • >учше написать final, когда ты понимаешь, что он тебе реально нужен
                                          он нужен в 99% случаев

                                          Потому его логично сделать умолчанием
                                          Ответить
                                          • чем лучше?

                                            я ж не написал, что final нужен всем в 99% случаев

                                            он может быть нужен


                                            и потом разработка это не только либы

                                            я пишу конечное приложение и буду постоянно биться лбом о мудрость авторов котлина?
                                            Ответить
                                            • >он может быть нужен
                                              final нужен в 99% случаев, потому что наследование в 99% случаев не нужно.

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

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

                                                если я пишу приложуху, то какая хер разница, опен у меня там или жопен

                                                > потому что наследование в 99% случаев не нужно
                                                - попробуй пописать на UIKit совсем без наследования
                                                Ответить
                                    • извини, я не на то ответил.
                                      Ща про наследование объясню.

                                      Автор библиотеки должен управлять ожиданием клиентов: он должен говорить им, что является частью API (и не поменяется) а что может поменяться.

                                      Как только ты сделал открытый класс, от которого люди могли занаследоваться и переопрелеить методы (напомню, что они все вротуальные) то всё: ты не можешь поменять кишки класса не сломав нахуй клиентов.
                                      Ответить
                • >А разработчики «TypeScript» этого так и не поняли, сотворив мерзкую, осклизлую, болотную недожабу для браузеров.


                  если выбирать между JS и TS то выбор вроде бы очевиден:) Так что они всё таки сделали лучше.

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

                    Нахуй нужно всё это говно?
                    Ответить
  • миллионы мух выбирают то, что сейчас трендово.

    Эти языки сейчас в тренде, потому и вот
    Ответить
    • И крестов. Они то уж точно выше няшной должны стоять.
      Ответить
  • питузы, просвятите ламера

    видео из утубчика (h264 какой нито) он же на проце деокдируется, да? тоись на виде окарточку срать (ну если не считать там скорость работы памяти)?
    Ответить
    • аппаратным ускорением давно, если ты не сема
      В хроме флаги есть, проверь
      Ответить
      • use hardware accelartion, нашел
        спасибо

        то есть декодирует видео карта?

        так
        стоп

        Canvas: Hardware accelerated
        Flash: Hardware accelerated
        Flash Stage3D: Hardware accelerated
        Flash Stage3D Baseline profile: Hardware accelerated
        Compositing: Hardware accelerated
        Multiple Raster Threads: Enabled
        Out-of-process Rasterization: Hardware accelerated
        OpenGL: Enabled
        Hardware Protected Video Decode: Unavailable
        Rasterization: Hardware accelerated
        Skia Renderer: Enabled
        Video Decode: Hardware accelerated
        Vulkan: Disabled
        WebGL: Hardware accelerated
        WebGL2: Hardware accelerated

        вот тут я вижу, что хром юзает видяху для WebGL и канваса (2д), ну это и понятно
        а про кодеки пока не очень (я анскильный, говорил уже)
        Ответить
          • спасибо

            всегда ли пижже делать это на видео? а как поступают виндрплееры, когда играют древний mpeg там?
            Ответить
              • тогда почему у меня хром ест одно ядро на старом компе, когда играет 1080?

                кстати, вендоры видеокарт предоставляют тулы чтобы смотреть их загрузку? Операционкин шедулер то про них не в кеурсах
                Ответить
                • В десятке же вроде есть вкладка про GPU? Или я туплю?
                  Ответить
                    • 24% GPU 3% CPU когда видос смотрю.

                      На графике видно конкретно, что video decode работает.
                      Ответить
                        • Странно конечно, что видюха такой огромный процент репортит для сраного 1080@60. 2.5 терафлопса, лолшо?

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

                            а попробуй gpu-z
                            Ответить
                            • Да мне лень перезагружаться опять.

                              В прыщах в настройках нвидии те же 30% и 500-600МГц.
                              Ответить
                            • > греть атмосферу

                              Кстати спасибо за идею. Надо во что-нибудь поиграть перед сном, а то отопление ещё не дали.
                              Ответить
                              • крипту помайни)

                                а есть cpu burn для cpu, который грузит все ядра на 100%. Я и сам такой могу написать, причем иногда случайно) цпу бёрном я проверял раньше, что куллер правильно стоит

                                Есть такой же для gpu?
                                Ответить
                                • Я думаю есть.

                                  Я просто в 3дмарке стресс-тест гонял когда охлаждение системника проверял. 200+ ватт он с неё вполне выжимает.
                                  Ответить
                                  • точно) есть же 3дмарк) спасибо
                                    Ответить
                                • > крипту

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

                                    амазон спецом продает облака с крутыми видео именно ради этого
                                    Ответить
                                • >> Я и сам такой могу написать

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

                                    Я сделал это не умышленно, конечно
                                    Ответить
                                    • Я как-то while (true) в видюху случайно закинул. Гуйня выжила, но лагало всё пиздец.
                                      Ответить
                                      • я никогда ничего не писал под видюху, но у меня коллега писал под cuda, так что только ухом слыхал про это

                                        зато я раз написал примерно такое же говно на event треде в десктопном софте, и не смотря на низкую загрузку цпу (если у тебя 8 ядер, то одним ядром проц сильно не убьешь) гуй приложения лег)

                                        в общем засрать проц не сложно)

                                        Еще 15 лет назад на высокую загрузку цпу всем было боль-мень все равно, а теперь у всех ноутбуки, и пользователи жалуются, что у них куллер гудит и батарея кушается(
                                        Ответить
                                        • Ну чтобы полноценно засрать cpu тебе надо sse юзать. Иначе он плохо греется.
                                          Ответить
                                          • у меня загрузка была довольно высока в том примере с алгоритмом, хотя сам я sse не юзал (но его могли конечно трогать либы, которые я вызывал)

                                            хотя наверное загрузка cpu != его температуре

                                            можно загрузить 100% без SSE и FPU и будет не так горячо, да?
                                            Ответить
                                            • Ну да, while (true) тоже как бы грузит на 100% - частота максимальная, простоя нету. Но он вообще плохо греет. Перегрузить проц до троттлинга я им не смог. А вот sha256 уже неплохо зашёл.
                                              Ответить
                                              • а троттлинг же при tj max?
                                                Просто до tj max у меня даже cpu burn не смог, а уж его наверное с SSE писали..

                                                Тащемто tj max я видел только на одном ноуте, и как оказалось, там между кулером и процом было кусок какой-то пленки)) ноут был чиненный-перечиненный, ну и видимо там питух пробегал

                                                кстати, о температураз
                                                знаешь про https://occlub.ru/news/hardware/3863-u-novykh-protsessorov-intel-core-i9-za-1000-pod-kryshkoj-ne-pripoj ?

                                                В случае с i7-7700K снятие крышки и замена «жвачки» на жидкий металл в отдельных случаях снижает температуру работы на ошеломляющие 20 градусов.
                                                Ответить
                                                • Ну собственно у меня 8700к под разгоном тоже в термоговно под крышкой проца упирается 🙁

                                                  На 5ГГц получилось только 6 гипертредов из 12 запустить без троттлинга.

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

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

                                                        для них и так спец процы есть
                                                        Ответить
                                                          • ну вот и хули они в k жвачку пихнули?
                                                            Ответить
                                      • Я как-то (много раз) корраптил VRAM. Иней на экране красивый был.
                                        Ответить
                • Если ты сема, то он будет вынужден.
                  Ну и вдруг у тебя не на декодирование, а тупо на обслуживание приемки мпег чанков с сервера.

                  Ещё надо разобраться какой кодек пришел (профиль и тд)
                  Ответить
                  • Ну и битстрим скорее всего проц розжимает, ему удобнее, да и не параллелится там нихуя.

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

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

                          Просто если не может, то плюс видяхи еще в том, что не надо кучу говна туда-сюда гонять.

                          Кстати, добрался ща до машинки i7-3770 с GTX 560 ti (гпу gf114)
                          Видео на 1080 на утубе нагрузило карту на 7% (судя по gpu-z) а у цпу ядра на 8-10% загружены

                          Отключил hardware acceleration.

                          Теперь ядро на 45% загружено, а gpu на один.

                          Всё теперь понятно
                          Ответить
                          • Я не знаю.

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

                            А так то и проц видюхе и видюха процу могут в память срать.
                            Ответить
                  • в общем я понял

                    хром может передавать это карте или декодить на цпу в зависимости от поддержки кодека и карты хромом

                    ок
                    спс
                    Ответить
                • >кстати, вендоры видеокарт предоставляют тулы чтобы смотреть их загрузку?
                  intel_gpu_top
                  Ответить
            • Дык в процах сейчас и видюха есть и ускоритель для декодера (quick sync или как там его). На прошлом проце я в сталкера играл без внешней видюхи, лол.

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

                у меня видяхи давно нет, вопрос скорее теоретический
                Ответить
              • пасб

                Software codecs and software video processors can use DXVA to offload certain CPU-intensive operations to the GPU. For example, a software decoder can offload the inverse discrete cosine transform (iDCT) to the GPU.
                Ответить
                    • Ну это самая тяжелая штука там, наверное. Для каждого квадратика на экране надо матрицу на матрицу умножить.

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

                      Кобенирование кусков картинок и мыльный фильтр полегче будут.
                      Ответить
        • Видеокарта может декодировать. А по факту она может находиться в списке исключений данного браузера и не декодировать. Надо проверять.
          Ответить
          • понятно
            вот тут надо смотреть
            chrome://gpu
            Ответить
            • Короче, смотри, чтобы быть уверенным на 100% есть плагин для ютуба h264ify.

              Вот если загрузка CPU не упадёт, то уже нужно пердолиться.
              Ответить
          • А, пацаны.

            d++ дело говорит. Зависит от формата же. Ютуб совсем недавно AV1 выкатил в прод.

            И с сервера уже может AV1 приходить, без спроса. И ни одна видяха его пока не умеет декодить.

            И VP9 кстати тоже, если комп старше 5 лет.
            Ответить
      • я сру в первый попавшийся тред обычно
        А что, так делать не нужно?
        Ответить
        • Сри в соответствующий оффтоп. В данном случае тебе в «Электроника и электрика».
          Ответить
          • чувкк, ну это же говнокод

            тут пишешь любой вопрос в любой тред и в течение минуты тебе на него отвечают
            мне вот иканус, д++ и борманд всё объяснили
            Ответить
            • Если кто-то захочет задать такой же вопрос, он посмотрит, не был ли он задан ранее. Я за структурированность.
              Ответить
              • Да ну, как-будто кто-то реально ищет... Тут многие темы уже по 10 раз обсосали и обоссали.
                Ответить
                  • я где-то видел прогу которая из кучи твитов твитора делает посты
                    надо прогу которая из коментов в говнокоде делает посты
                    Ответить
                    • из комментов калиграфера нужно делать книгу
                      Пи вроде предлагал
                      Ответить
          • Либо в «Энергетика и отопление».
            Ответить
        • Я не против. Интересная тема.

          Кстати в ФФ наконец-то завели libva для X11. Вот только недавно. 2k20.
          Ответить
          • А VA-AP это чтобы вызывать карту наприямую через DRI?
            а до этого прыщевики всё рендерили на проце и рисовали через протокол X примитивами 2Д чтоли??? Или тоже через DRI, но всё таки тупо 2Д?
            Ответить
            • > примитивами 2д

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

                ну в общем понятно: я рендерю на CPU в памяти, а потом загружаю в карту.
                Ответить
                • Ну там примерно как в винде с device independent bitmap. Ты описываешь параметры своей картинки, а сервак сам разберётся как её преобразовать в то, что подходит к текущему видеорежиму. Скорее всего, с нормальными дровами он это преобразование не на проце делает.

                  Через текстуру в OpenGL можно ещё выводить.

                  Х.з., может ещё какой-то способ есть, о котором я не знаю.

                  З.Ы. Но эти преобразования очень криво работают. По сути только RGB, BGR, RGBA и ABGR. Остальное у меня не получалось запустить, цветовые маски игнорятся.
                  Ответить
            • Video Acceleration API (VA-API) is an open source API that allows applications such as VLC media player or GStreamer to use hardware video acceleration capabilities, usually provided by the graphics processing unit (GPU). It is implemented by the free and open-source library libva, combined with a hardware-specific driver, usually provided together with the GPU driver.

              VA-API video decode/encode interface is platform and window system independent but is primarily targeted at Direct Rendering Infrastructure (DRI) in X Window System on Unix-like operating systems

              The main motivation for VA-API is to enable hardware-accelerated video decode at various entry-points (VLD, IDCT, motion compensation, deblocking) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, H.265/HEVC, and VC-1/WMV3).
              Ответить
  • 341 комментарий. Вкусняшка! Как вы смогли столько насрать?
    Ответить

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

Помни, guest, за тобой могут следить!

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


    8