1. Куча / Говнокод #26961

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    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, 18 Сентября 2020

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

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

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

      Зачем? Зачем?
      Ответить
      • > VB

        VBA же, а не 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 и не осиливших что-либо сложнее скриптушни или языка "который как сишка тока безопасный даже думоть не надо!"
      Ответить
      • Всё правильно сказал.

        Доброе утро, oaoaoammm.
        Ответить
      • Я тоже, кстати, не вижу никакого смысла в реге на «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 класса программирует но или безответственный долбоеб или какой-то безэмпатийный ребенок или там аниме смотрит
              Ответить
    • По этому я за lua
      Ответить
    • А "PHP" где?
      Ответить
    • А ведь у истоков SO стоит Спольски, который часто топил за няшную Сишку и бинарные форматы данных.

      https://www.joelonsoftware.com/2001/12/11/back-to-basics/
      Ответить
      • а еще он на VB писал чуть ли не до середины нулевых
        Ответить
        • И правильно делал!
          Ответить
          • всё еще хуже
            не vb, но vbs
            VBScript is the dinkiest language on earth and ASP programming consists of learning about 5 classes, only two of which you use very often. And only now do I finally feel like I know the best way to architect an ASP/VBScript applicatio
            https://englishplusplus.jcj.uj.edu.pl/texts/lord-palmerston-programming/fulltext/index.html

            риальне питух
            Ответить
            • VBScript такое лютое говнище, что даже с моими тёплыми чувствами к Old Basic, никак не могу защищать эту мертворождённую сранину.

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

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

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

              Это выкидывая за скобки немаловажный момент, что его поддерживал только IE, во времена своей славы.
              Ответить
              • В чём смысл "Basic"? Я никогда нигде не видел реальных примеров применения данного язычка.
                Ответить
              • показать все, что скрытоvanished
                Ответить
                • Говорю же, даже я как позитивно ангажированный в пользу васика, считаю VBS фейлом. Там не было многих функций из js. Js был компактнее и проще. При той же слаботупизированной идеологии.

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

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

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

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

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

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

                      a=1

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

                      const a:int=1;
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Не совсем правда.

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

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

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

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

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

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

                              Смысл в том чтоб const был по умолчанию.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • >но там нужнописать val
                                  Это не то. Хуйня.

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

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

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

                                  Компилятор это отловит, т.к. это переприсваивание константы.
                                  Ответить
                            • > > выдавать ошибку при shadow.
                              > ну, такое

                              https://govnokod.ru/28254
                              Ответить
                      • > Идеальный язык

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

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

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

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

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

                                > или как в жс
                                this is undefined
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • >"Мне вот хочется явно описать API моего модуля. Как мне это сделать?"

                                    В "Word"-е.
                                    Ответить
                                  • странные люди хотят непонятного

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

                                    а вообще отойдите от меня, мужчина, от Вас сильно пахнет нафталином
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • > А как сгенерировать?
                                        - откуда я знаю, как это делается в языке, на котором ты пишешь? погугли
                                        Ответить
                                      • >"Как мне сделать так, чтобы клиенты моей либы не заюзали другие классы?"

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

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

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

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

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

                                        я беру питон

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

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

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

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

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


                                          Та же хуйня с "PHP".
                                          Ответить
                                        • >пишу одно файло
                                          Я беру сишку. Пишу int main() и теку.
                                          Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • а что оно у тебя для .h сгенерит? символы из заголовочника перенесёт в исходник с дефолтной реализацией?)
                                        Ответить
                                        • не понял тебя.

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

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

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

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

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


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

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

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

                                                      у вас молоко убежало
                                                      Ответить
                                                      • И в "PHP".
                                                        Ответить
                                                      • показать все, что скрытоvanished
                                                        Ответить
                                                        • > как в свифте выглядит SDK

                                                          Форварды к объективному си поди?
                                                          Ответить
                                                          • показать все, что скрытоvanished
                                                            Ответить
                                                            • 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);


                                                                          Чем не явный список экспорта?
                                                                          Ответить
                                                                    • показать все, что скрытоvanished
                                                                      Ответить
                                                                      • 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

                                                          только руками его никто не трогает почти никогда за исключением редких случаев
                                                          Ответить
                                                          • показать все, что скрытоvanished
                                                            Ответить
                                                          • показать все, что скрытоvanished
                                                            Ответить
                                                            • Какой тул? Создаёшь проект типа Framework, вот тебе сразу и заголовочник

                                                              Про modulemap для затравки

                                                              https://stackoverflow.com/questions/47036023/what-is-export-in-module-modulemap-file-inside-each-framework

                                                              https://clang.llvm.org/docs/Modules.html#export-declaration
                                                              Ответить
                                                              • >вот тебе сразу и заголовочник
                                                                а как он выглядет?

                                                                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? чтобы быстрее конпелировалось?
                                                                                    Ответить
                                                                                    • товарищ крестоблядь, а как правильно?
                                                                                      Ответить
                                                                                      • >"товарищ крестоблядь, а как правильно?"

                                                                                        https://php.ru/
                                                                                        Ответить
                                                                                      • пишешь 1 precompiled.hpp, в который включаешь системное, затем пару десятков своих hpp файлов и 1 main.cpp
                                                                                        когда ставишь компилять, сражаешься на мечах на стульях в коридоре

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

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

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

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

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

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

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

                                                                                                Qt это юзает, к примеру.
                                                                                                Ответить
                                                                                                • то, что раньше на стеке само дохло, теперь сделает дуршлаг из кучи
                                                                                                  нет ничего идеального
                                                                                                  Ответить
                                                                                                • показать все, что скрытоvanished
                                                                                                  Ответить
                                                                                                  • почитай что такое ABI

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

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

                                                                                                    теперь ты решил, что в ХуёМоё надо хранить на одно приватное поле больше - int dick_length_;
                                                                                                    пересобрал ХуёМоё.длл - всё, клиент пошёл по пизде, его теперь тоже надо пересобирать
                                                                                                    Ответить
                                                                                                  • > В чём удобство?

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

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

                                                                                                      Pimpl не настолько гибкий в плане поштучной подмены компонентов. Да и "импл" часто просто структура без методов.
                                                                                                      Ответить
                                                                                                      • показать все, что скрытоvanished
                                                                                                        Ответить
                                                                                                        • >В жабе нету ТАКОЙ проблемы с 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.

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

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

                                                                                                              Ответить
                                                                                                            • Наверное я всё-таки загнул.

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

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

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

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

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

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

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

                                                                                                    То есть поставленные цели не достигнуты: ни сокрытия, ни абстрагирования достигнуть не удалось.
                                                                                                    Ответить
                                                                                                • >Стабильное ABI. Методы не виртуальные, на их порядок и количество насрать.

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

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

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

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

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

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

                                                                                            This.

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

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

                                                                                      думаю, что это технически должно быть возможно, ведь в общем приватные методы класса в обжективе так и пишут: делают экстеншн в .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.

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

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

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

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

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

                                                  или нет?

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

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


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

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

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

      Эти языки сейчас в тренде, потому и вот
      Ответить
    • Странно, что в dreaded нет ЙАЖА.
      Ответить
      • И крестов. Они то уж точно выше няшной должны стоять.
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • 341 комментарий. Вкусняшка! Как вы смогли столько насрать?
      Ответить

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