1. VisualBasic / Говнокод #28567

    −2

    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
    Public Function DescendingSort(ByRef Data As Variant) As Variant
        Dim i As Long
        For i = LBound(Data) To UBound(Data) - 1
            Dim j As Long
            For j = i + 1 To UBound(Data)
                If Data(i) < Data(j) Then
                    Dim Temp As Variant
                    Temp = Data(j)
                    Data(j) = Data(i)
                    Data(i) = Temp
                End If
            Next
        Next
    
        DescendingSort = Data
    End Function

    Вот все спрашивают, зачем на собеседованиях требуют сортировки писать — так вот для этого! Вдруг вам придётся писать на «VBA»?
    > Как в VBA правильно создавать одномерный массив. ArrayList
    https://habr.com/ru/post/712000/

    Запостил: ISO, 23 Января 2023

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

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

          В VBA у такие объекты представляет приложение (word, excel, outlook, sharepoint и прочий microsoft project с accessом)
          В VBA@WSH скриптхост
          В VBA@ASP еще и IIS
          В VBA@IE IE

          Плюс можно использовать внешние COM объекты. Обычно их регистрируют в системе (regsvr32, HKCR ну ты понел) и юзают. Но можно наверное .ocx или там .dll рядошком положить.

          VB это классический Glue язык без какого-либо фреймворка, чисто чтобы дергать готовые внешние компоненты (как php)
          Ответить
          • какие ещё есть классические Glue-языки?
            Ответить
            • https://wiki.c2.com/?GlueLanguages
              Ответить
              • питон??
                руби??
                джаваскрипт??

                они просто добавили все (которые знали) языки, которые можно заэмбеддить?
                Ответить
                • Там же есть определение вначале)

                  Вообще эту концепцию сформулировал Ойстерхаут для своего TCL
                  https://en.wikipedia.org/wiki/Ousterhout%27s_dichotomy


                  Программисты пирдоляца с серьезными языками и делают компоненты.
                  Хаусвайвз берут компоненты и лепят из них прилажухи драг ын дропом натягивая компоненты на формочку или пися код тип типа
                  display dialog "Hello, world!" -- a modal window with "OK" and "Cancel" buttons


                  Но потом конечно долбодятлы стали писать высоконагруженное говно на ПХП и вся идеология превратилась в мутное говно (как это обычно бывает в мире айти)
                  Ответить
                  • определение там максимально мутное

                    любой язык может служить для того, чтобы между собой "склеивать" что-то, вопрос в удобстве

                    но в широком смысле это получается любая скриптушня в принципе
                    Ответить
                    • Ну тут не дискретно всё. Есть более хардкорные япы, есть скриптушня.

                      Любая скриптушня есть глу ленгвич, да
                      Ответить
                      • Классическая скриптушня — это bat, sh, tcl, m4.

                        Ruby, Python, Perl, PHP, JS — это уже ни рыба, ни мясо. Они компилируемые, хотя и компилируются в байткод для VM, а не в нативный. От Java и C# их отличает отсутствие статической типизации.
                        Ответить
                        • Хотя, с другой стороны, у Ruby, Python, Perl, PHP, JS есть интерактивный режим, что роднит их с шеллом.
                          Ответить
                          • есть даже шел на питоне для наркоманов

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

                                  но думаю, что просто cd и grep

                                  напиши команды, я попозже проверю
                                  Ответить
                                  • ну хрен знает, например выведи пользователей с интерактивным входом
                                    awk
                                    $ awk -F: '!/nologin/{print $1}' /etc/passwd | sort -u

                                    ну или вот так наверное полегче будет
                                    $ sed /nologin/d /etc/passwd | cut -d':' -f1 | sort -u
                                    Ответить
                                    • нипонел, ты хочешь моего хомячного юзера попалить?))

                                      а, nologin же

                                      но всё равно стрём)
                                      Ответить
                            • А ещё в ЦЕРНе есть CINT — интерпретатор для сишки...

                              А ещё есть Temple OS для совсем поехавших...
                              Ответить
                          • В йажах и слалках тоже наделали интерактивных шелов.

                            Медленных как лалка.

                            Карго-культ. «яже как баш».
                            Ответить
                            • ну про скалу не скажу, но той же кложуре сам босх велел
                              Ответить
                            • есть еще грувийный шел. Вздрочнуть можно пока он запускается.
                              Ответить
                              • Я и забыл про эту срань.
                                Точно! Получается целя йажа-говно-троица.
                                Ответить
                        • >Классическая скриптушня — это bat, sh, tcl, m4.
                          awk, sed?

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

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

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

                      lua наверное более лучший пример, и пхп тот же
                      Ответить
                      • У пхп сложная история. Первые версии были почти что чистым шаблонизатором. Потом накрутили процедурное и объектное программирование.

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

                IBM продвигал Rexx как замену коммандкому. Но потом, когда Windows стала несравнимо популярнее OS/2, про Rexx все забыли.
                Ответить
                • ну как я ниже написал шелы это клей

                  WSH это видимо тоже клей. Виндоадмины начала нулеыых любили еще какую хуйню для автоматихации винды, но я забыл. на бейсик была похожа чуток

                  ps: вот!
                  https://www.autoitscript.com/site/
                  Ответить
                  • точно

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

                    это такой аналог автоматора, который на маке из коробки
                    Ответить
                    • в офисном VBA можно было теребонькать тоже

                      Собссно, я объектную модель документа так и изучал в какой-то момент: теребонькаешь гуёк, а в это время VBA записывает твои действия и генерит божэественный код

                      Да, AI писал за меня код когда это езще не было мейнстримом
                      Ответить
                      • > теребонькаешь гуёк, а в это время VBA записывает твои действия и генерит божэественный код

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

                        Для браузеров гораздо позже придумали selenium IDE.
                        Ответить
                        • Или вот вебсайты

                          Я просто тянул кнопочки во фронтпейдже, и тек (а проф дизайнеры делали тоже самое в дримвивире)
                          А теперь?
                          .item {
                            flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
                          }
                          .hujatem {
                            align-self: auto | flex-start | flex-end | center | baseline | stretch;
                          }

                          блячтоэто?

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

                            только вот каждый фреймворк использует свой шаблонизатор, придётся редактор под каждый допиливать
                            Ответить
                            • На самом деле неможно. Пердолики так и не сумели сделать за все эти годы. Единственным существующим их подогрел Netscape.
                              Ответить
              • PHP — clay-язык, клеюшит HTML и MySQL.
                Change my mind.
                Ответить
            • Луа. У него рантайм минимальный.
              Ответить
              • интересно, в какую категорию попадает повершелл
                Ответить
                • это классический глю кмк: обертка вокруг .net да еще и шелл

                  шеллы впринципе глю
                  Ответить
                  • только вот у ps не выполняется условие glue-языка "нет или маленькая библиотека": там весь .net за плечами, причём, как я понимаю, условно zero-cost
                    Ответить
                    • Ну вот ps и используют как клей между дотнетовскими библиотеками. Из него легко вызвать какой-нибудь метод дотнета и обработать результат. А своего у него почти ничего нет.

                      В отличие от C# и VB.Net, он может работать в интерактивном режиме, что позволяет макетировать на ходу, не разрабатывая приложение целиком.
                      Ответить
                      • Да, причем там там еще и комплишен работает;;)

                        PS C:\> $arr = New-Object System.Collections.ArrayList;
                        PS C:\> $arr.Add(3);
                        0
                        PS C:\> $arr.Add(1);
                        1
                        PS C:\> $arr.Add(2);
                        2
                        PS C:\> $arr.Sort();
                        PS C:\> [System.String]::Join(",", $arr.ToArray())
                        1,2,3

                        Довольно заебись на самом деле же
                        Ответить
                        • более того, ps можно использовать как куркулятор

                          в отличие от голого bash, zsh etc
                          Ответить
                          • ну вообще говоря баш тоже можно
                            $ expr 1 + 1
                            2

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

                            А еще есть ``bc(1)``
                            $ bc
                            bc 1.07.1
                            Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
                            This is free software with ABSOLUTELY NO WARRANTY.
                            For details type `warranty'.
                            42 * 12
                            504

                            А еще есть божественный ``dc(1)`` с обратной польской нотацией и не требующий даже терминала (его реально можно на печтном телетайпе юзать). Все эти тупые срачи про скобочки про которые недавно опять обсасывали ему не страшны
                            $ dc
                            2
                            2
                            *
                            p
                            4
                            Ответить
                            • > expr

                              – не знал про такое, но умеет он, судя по ман, целое нихуя? как в степень возвести, например? зато можно по регулярке сравнить, слава свитеру!
                              Ответить
                              • > как в степень возвести, например?
                                echo $((3**3))
                                echo $((1+1))
                                Ответить
                                • так это не expr

                                  уж лучше bc конечно тогда взять

                                  но вообще, когда есть пистон или пс, зачем ногти грызть вообще
                                  Ответить
                                  • > уж лучше bc конечно тогда взять

                                    Лучше bc не брать.
                                    Ответить
                                    • почему?
                                      Ответить
                                      • ПРИШЛО ВРЕМЯ ИСПОЛЬЗОВАТЬ BC
                                        BC САМ НЕ ПОСЧИТАЕТ
                                        ЗАЧЕМ МНЕ НУЖЕН PERL, У МЕНЯ НЕТ ВРЕМЕНИ ЧТОБЫ ЕБАТЬСЯ С НИМ
                                        ЛУЧШЕ ЕЩЕ РАЗ НАПИСАТЬ USER-DEFINE FUNCTION
                                        Я ПИШУ USER-DEFINE FUNCTIONS ПО 3 РАЗА В ДЕНЬ
                                        КАЖДАЯ ФУНКЦИЯ ЗАНИМАЕТ ДВАДЦАДЬ МИНУТ
                                        Я ЖИВУ АКТИВНОЙ И ПОЛНОЦЕННОЙ ЖИЗНЬЮ
                                        Я УСПЕШЕН И ПОЭТОМУ ЦЕЛЫЙ ДЕНЬ ПИШУ USER-DEFINE FUNCTIONS
                                        Я СВОБОДНЫЙ ОТ ЗАДРОТСТВО ЧЕЛОВЕК
                                        В BC ВСЕ ПРОСТО И ПОНЯТНО
                                        ОШИБКА Runtime warning (func=(main), adr=11): non-zero scale in exponent
                                        ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬ



                                        https://govnokod.ru/27121#comment602977
                                        Ответить
                                        • ну охуеть

                                          бесе не умеет в нецелую степень, значит его лучше не брать
                                          а если мне не надо в нецелую степень можно брать бесе?
                                          Ответить
                              • Слыхал про принцип Unix?

                                Бери готовую утилиту, и теки
                                $ ps h | wc -l | xargs -I "{}" echo '{}^{}' | bc
                                Ответить
                              • expr с которым надо считаться — только в tcl
                                Пердолики устроили кашу из названий.
                                Ответить
                            • > Free Software
                              > This is free software
                              > Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
                              Ответить
                              • Тоже не понял причем тут expr, это же такая же внешняя утилита как perl или python.
                                Ответить
                                • сам ты внешний
                                  $ readlink $(which expr)
                                  /bin/busybox


                                  а вот то что ты вот со скобочками понаписал это башизм небось, и в обычном sh может и не взлететь
                                  Ответить
                                  • Нет, ну я бы понял если бы там прикол был как с time и /usr/bin/time
                                    Ответить
                                    • Как раз в алпайне этой проблемы нет, как и во всем бизибоксе
                                      А в больших прыщах /usr/bin/time соооовсем не то выдает, что надо.

                                      Подобный отсос в свое время случился с командой mail
                                      https://heirloom.sourceforge.net/mailx_history.html

                                      After installation, Berkeley Mail was found as /usr/ucb/Mail, but Unix mail was still available as /bin/mail.


                                      Берклевцы серанули в вечность своим csh, но его кое-как победили, а мейл -- нет
                                      Ответить
                                • А знаете, чего не хватает в этом календаре свободы? Патентов.
                                  Ответить
                          • >>в отличие от голого bash, zsh etc

                            Какой анскилл )))
                            echo $((42*2-5+2**3))
                            Ответить
                            • какой багор
                              $ echo $((42*2-5+2**3))
                              ash: 5: arithmetic expression: expecting primary: "42*2-5+2**3"
                              Ответить
                            • башизм не пройдет
                              башизм не пройдет
                              Ответить
                              • в zsh работает
                                Ответить
                                • zsh для хипстеров

                                  и в dash не работает
                                  # echo $((42*2-5+2**3))
                                  dash: 1: arithmetic expression: expecting primary: "42*2-5+2**3"


                                  а это был шел по умолчанию для дебиана и вроде даже убунты года так до 2006-го (хотя я не помню чото там было с убунтой тажа)
                                  Ответить
                        • Много $$$ можно заработать!
                          Ответить
    • Сортировка выбором с лишними перестановками? Он завидует пирфомансу пузырька и хочет такой же?
      Ответить
      • Нет, обычный пузырёк же — всплываем на каждой итерации.
        Человек открывает для себя дивный мир программирования за пределами стдлибы «VBA», где даже сортировку писать вручную не надо.

        Во-первых, мы можем выгрузить все элементы одним
        методом ToArray. Как следует из названия, он преобразует
        все элементы объекта в обычный массив типа Variant.
        
        Во-вторых, мы можем составлять список уникальных значений,
        проверяя их наличие методом Contains.
        
        В-третьих, можно забыть про функцию UBound, ведь у этого
        класса есть свойство Count, которое, как не сложно догадаться,
        возвращает количество элементов помещенных в объект.
        
        В-четвертых, есть возможность быстро отсортировать элементы как
        по возрастанию (метод Sort), так и по убыванию
        (сначала используем метод Sort, а после метод Reverse).

        Как узнает про «компараторы» — вообще охренеет!
        Ответить
        • ЕМНИП в VB не было никаких компараторов.

          Только две опции
          Option Compare Text
          Option Compare Binary

          Там можно было колобки через AddressOf делать для шiнарi.
          А вот как вызвать самому функцию по такому адресу, я не помню.
          Ответить
          • В «VB» нет, есть в «.NET». Собственно, всё открытие как раз от того, что автор заюзал «COM» и получил к себе в «VBA» артефакт развитой цивилизации:
            Dim List As Object
            Set List = CreateObject("System.Collections.ArrayList")

            Думаю, что «IComparator» можно похожим способом прикрутить.
            Ответить
    • https://i.postimg.cc/SNnp2fwX/image.png

      господи блядь
      они реально добавили эту инстаграмную хуиту
      Ответить
    • >To UBound(Data) - 1
      -1 действительно ли это енобходимо?
      Ответить
    • Писать на VBA
      В 2023 году
      Не знать про квиксорт
      Ответить
      • Справедливости ради, написать по памяти квиксорт и нигде не проебаться на единицу существенно сложнее того же самого, но для пузырька.
        Если человеку приходится для каждой задачи заново писать сортировку — неудивительно, что он выбрал «пузырёк».
        Ответить
        • Спросим, я и в пузырьке проебусь?:)

          В VBA наверняка есть готовый ActiveX компонент:) Автор в своем 1999-м году может взять диск с MSDN, и почитать
          Ответить
          • Попробовал поискать, нашёл: https://excelchamps.com/vba/arrays/sort-array/.
            >>> To sort an array in VBA, you need to write a code where you can match the first element of the array with the next one and inter-change them if the first one needs to come before. You need a FOR LOOP (For Next) for this and the UCASE function.
            Какой багор )))

            И вся первая страница «Гугла» в таком.
            Ответить
            • Но как же так? Ведь все языки одинаковые и совсем-совсем не важно, на чем писать! Хочу пишу на Haskell, хочу на VBA, никакой ражницы
              Ответить
              • Погуглил «activex sort».

                Первая ссылка:
                https://learn.microsoft.com/ru-RU/sql/ado/reference/ado-api/sort-property
                Ответить
                • Это ADO, это API к СУБД же

                  ps:
                  https://www.vbforums.com/showthread.php?231925-VB-Quick-Sort-algorithm-(very-fast-sorting-algorithm)
                  Ответить
                  • Private Sub QuicksortString(List() As String, ByVal min As Integer, ByVal max As Integer)
                    Dim med_value As String
                    Dim hi As Integer
                    Dim lo As Integer
                    Dim i As Integer
                        If max <= min Then Exit Sub
                        i = Int((max - min + 1) * Rnd + min)
                        med_value = List(i)
                         List(i) = List(min)
                        lo = min
                        hi = max
                        Do
                            Do While List(hi) >= med_value
                                hi = hi - 1
                                If hi <= lo Then Exit Do
                            Loop
                            If hi <= lo Then
                                List(lo) = med_value
                                Exit Do
                            End If
                            List(lo) = List(hi)
                           lo = lo + 1
                            Do While List(lo) < med_value
                                lo = lo + 1
                                If lo >= hi Then Exit Do
                            Loop
                            If lo >= hi Then
                                lo = hi
                                List(hi) = med_value
                                Exit Do
                            End If
                            
                            ' Swap the lo and hi values.
                            List(hi) = List(lo)
                        Loop
                        QuicksortString List(), min, lo - 1
                        QuicksortString List(), lo + 1, max
                    End Sub

                    подумаешь
                    Ответить
                  • а это?

                    https://learn.microsoft.com/en-us/office/vba/api/excel.range.sort
                    Ответить
                    • Отлично, если у вас код именно под эксель
                      Ответить
                      • не понял
                        субд тебе не нравится, эксель тебе не подходит

                        а для чего ещё может быть нужен vba?
                        Ответить
                        • Давай так поставим вопрос

                          Начиная с Office 2003 под него можно писать на Vb.NET. Там есть доступ ко всему фреймворку, включая класс List и его метод Sort

                          Зачем VBA?
                          https://learn.microsoft.com/en-us/archive/msdn-magazine/2003/september/visual-studio-net-and-microsoft-office-business-solutions
                          Ответить
                          • хрен знает. но людям нравится странное или приходится его использовать. из комментариев:

                            Вот буквально пару месяцев назад при программировании правда на VBScript в SCADA использовал ArrayList. Вообще, если поковыряться в MS COM интерфейсах, можно найти ещё несколько коллекций или структур данных, типа очереди (Queue), которые можно в VBScript задействовать через COM. Главное, чтобы имелся тривиальный конструктор, в нетривиальные COM не умеет передавать параметры.
                            Ответить
                            • Ну я про них и говорил. Там гдето лежал Dictionary и еще всякие
                              И конечно хранить в них можно только тривиальные строки и числа, а документ Word туда не запихнуть)

                              Вот какой
                              https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dictionary-object
                              Ответить
                • в комменте чувак средствасми excel сделал

                  ActiveSheet.UsedRange.Columns(1).RemoveD uplicates Columns:=1, Header:=xlYes и далее Sort
                  Ответить
      • > Не знать про квиксорт

        А зачем?
        Просто ставишь ListBox1.Sorted=True и оно само всё сортирует!
        Ответить
    • Вот человек открыл для себя структуры
      https://habr.com/ru/post/711222/

      У человека неиллюзорно на дворе конец 90-х. Причем там одновременно и VBA под Excel, и мне 15 лет, и я только что узнал, что "x" и "y" удобнее объединить в запись Point
      Ответить
      • > VBA под Excel, и мне 15 лет, и я только что узнал, что "x" и "y" удобнее объединить в запись Point

        Мммм.
        Сейчас даже живого дельфятника вероятнее встретить.
        Ответить
        • на говнокоде есть один

          но я не советую тебе его встречать
          Ответить
      • Смешно что он из простой и понятный концепт struct обзмазал геттерами/леттерами, приватами и назвал это ПАТТЕРНОМ.
        Ответить
        • а главное: нахуя? Чем этот бойлерплейт полезен?

          В коко, C#, и прочих ломбоках с грувями хотябы не нужно вручную писать одинаковый код
          Ответить
          • >Чем этот бойлерплейт полезен?

            Ну он же там валидации e-maila добавил.
            Хотя на мой вкус данные должны валидироваться ещё до попадания в структуру.
            Ответить
            • В высокоуровневой питушне я бы хотел декларативности. Я бы выдумал такой езык
              struct Petuh {
                  @Validate(&amp;emailValidator)
                  email: string
              }


              тащемто даже в йажа есть похожее для бинов, а в рельсах всяких и подавно
              Ответить
              • CAmpAmp
                Ответить
              • >тащемто даже в йажа есть похожее для бинов
                Мне тоже синтаксис йажа-аннотации напомнил.

                Впрочем с метушней это везде можно сделать.

                Но тут важно иметь автодесрализацию этих структов, и чтобы она умела в такую валидацию.

                Без декларативности я бы просто сделал.
                И в конструкторе бы валидировал
                struct Email {
                    String email;
                    String getDomain(); //полезные геттеры
                    String getLocalName();
                }
                Ответить
                • https://jcp.org/en/jsr/detail?id=380
                  public class Address {
                       @NotNull(message="would be nice if we had one", payload=Severity.Info.class)
                       public String getZipCode() { [...] }
                  
                       @NotNull(message="the city is mandatory", payload=Severity.Error.class)
                       String getCity() { [...] }
                  }
                  Ответить
                  • Они же бесполезны без фреймворка на сотни тысяч строк говнокода.

                    Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
                    Ответить
                    • Именно поэтому я за «Python».
                      Ответить
                      • А кок с этим обстоят дела в «Python»?
                        Ответить
                        • «Декораторы» осилит даже не очень умный петух.
                          Для желающих особой декларативщины есть «Annotated» — штука, которая позволяет к объявлению типа прикрепить произвольные данные, а потом их вытащить.
                          Я так делал декларативное описание небинарных структур, см. https://govnokod.ru/28540#comment803502 — получилось угрёбищненько, но довольно наглядно, работает и поддерживает типизацию (=> у меня есть нормальные подсказки в IDE). Работает в проде.
                          Ответить
                          • Тот пример десрализации ебинарных форматов я видел (просто времени не было ответить).

                            А можно реальный пример валидатора данных?
                            Ответить
                            • Именно валидатора с хорошей функциональностью — это к «Джанге». А если совсем примитивно (типизировать не буду, заебусь каллабли прописывать):
                              def max_len(n):
                                  def inner(f):
                                      def f_wrapper(s):
                                          if len(s) > n:
                                              raise ValueError(f'Too long string')
                                          return f(s)
                                      return f_wrapper
                                  return inner
                              
                              
                              @max_len(42)
                              def print_govno(s):
                                  print(s)
                              
                              
                              print_govno('a' * 42)  # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                              print_govno('b' * 43)  # ValueError

                              Вложенность пугает, но это плата за примитивизм.
                              Ответить
                              • То есть это просто функция? Охуенно!

                                А в какую версию питуха такое подвезли?

                                > Вложенность пугает, но это плата за примитивизм.
                                Не знаю. Меня даже сложные конструкции на питоне не пугают особо.
                                А вот Rust такой синтаксис что тошнит сразу, даже если что-то "простое" в пару строк.
                                Ответить
                                • «Декораторы» (по крайней мере функций) — ещё в 2003 (https://peps.python.org/pep-0318/).

                                  А так питонья собачка — очень примитивная вещь: она берёт то, что справа от неё, и применяет к тому, что снизу от неё, а результат — помещает на место того, что было ниже. Поэтому никто не запрещает сделать, например, вот так:
                                  >>> def foo(f):
                                  ...     return [1, 2, 3]
                                  ...
                                  >>> @foo
                                  ... def bar():
                                  ...     print('bar')
                                  ...
                                  >>> bar  # Обратите внимание на отсутствие скобочек: bar — это уже не функция, бля
                                  [1, 2, 3]
                                  Ответить
                                  • > # Обратите внимание на отсутствие скобочек: bar — это уже не функция

                                    Я недавно на этом подорвался и сгорел к чертям блядь я уже зверь нахуй
                                    Ответить
                                • В версию 2.4, в 2003 году.
                                  https://peps.python.org/pep-0318/

                                  Будем честны: до 2003-го года питон не был ни популярным, ни особо удобным

                                  &gt; Rust такой синтаксис что тошнит сразу, даже если что-то "простое" в пару строк.

                                  В рустне ты можешь написать свой макрос и он примет на вход AST и как-то его трансформанёт. Именно так реализованы всякие автореализации сериализации, логирования (привет, аоп) и пр. Но синтаксис и правда всратый
                                  Ответить
                              • это ж контракты!

                                https://docs.racket-lang.org/guide/contract-boundaries.html
                                Ответить
                                • а они статически проверяются?
                                  Ответить
                                  • Нет, типизация в «Питоне» пока ещё очень тупенькая, даже вариабельные шаблоны только совсем недавно подвезли (и то в очень хуёвом виде).
                                    Ответить
                                    • я про контракты спросил у Десктопа же)

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

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

                                          Я хочу выразить например такое:

                                          Функция "foo" возвращает положительные числа если её аргумент тоже положителен.
                                          Я пишу
                                          if (foo(42) > 0) //и тут компилятор меня ргуает

                                          вот тьакое хочу
                                          Ответить
                                          • так рэкет не компилируемый язык

                                            впрочем, typed racket свои проверки выполняет до основного запуска (это называется phase 0 или что-то в этом роде), так что в теории наверное всё возможно
                                            Ответить
                                            • статическому анализу можно подвергнуть и программу без компиляции. Примеры статических анализаторов прямо по исходному коду
                                              * lint: c
                                              * Critic: Perl
                                              * Rubocop: Ruby
                                              * flake8, pylint, mypy: python
                                              * eslint, tsc: TypeScript
                                              Ответить
                                              • Кстати, про линт есть чудесное
                                                https://invisible-island.net/personal/lint-tools.html

                                                When I began programming, there were no static (or dynamic) analyzers, no profilers, no debuggers. There was only a compiler (initially in two parts: a precompiler and a compiler). In lieu of a debugger, the IBM 1620 conveniently responded to use of an uninitialized variable by going into an infinite loop. There were no compiler warnings (only errors). This was in fortran, of course.
                                                Ответить
                                              • это линтеры. такой есть и для рэкета: https://github.com/Bogdanp/racket-review

                                                только к формальной проверке корректности это не имеет особого отношения. и в чистом рэкете я её не вижу

                                                пример контракта, который сработает в рантайме

                                                https://docs.racket-lang.org/guide/contracts-general-functions.html#%28part._contracts-arrow-d%29
                                                Ответить
                                          • Это кажется называется зависимыми типами (ну и реализуется обычно в системе типов, а не практически юзерспейсе)
                                            Ответить
                                            • > ну и реализуется обычно в системе типов, а не практически юзерспейсе

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

                                                  Меня заебали, грубо говоря, ПХП
                                                  Ответить
                                                  • лучше б ты хотел бо́льшую зарплату, фанатик
                                                    Ответить
                                                  • Как насчет Паскаля, от которого у местных &amp;quot;скр&amp;amp;птухов&amp;quot ; из задних кальдер извергаются потоки раскаленной смагмы и где есть типы фундаментальные и простые, совместимость и идентичность типов и даже ключслово для превращения алиасного типа в отдельный?
                                                    Ответить
                                                • Ну всё, завели свою шарманку про пейсы.
                                                  Ответить
                                        • А помните тему про паскалевы сеты типа "set of 13..20"? И там тоже были какие-то багры с превращением в них числа
                                          Ответить
                                          • В каком смысле перевращения? Это же битмап.
                                            Ответить
                                          • Числа в них сами по себе не превращаются, это же не сишка. Но можно сделать аналог reinterpret cast, если хочешь получить доступ к битам числа.

                                            А какие багры ты знаешь?
                                            Ответить
                                • госконтракты?
                                  Ответить
                                • Да можно это по-разному называть.

                                  В питоне это называют декораторами.
                                  Придёт джавух и расскажет что это аннотации и АОП.
                                  Придёт Снаут и объяснит что-то про high order functions на хаскельном сленге.

                                  Но до полноценной Ады и coqmpile-time proof мало кто дорос.
                                  Ответить
                                  • Не, аннотации - это прицеп статических метаданных к символу в языке, и их возможности сильно ограничены, зачастую ты даже не можешь что-то кроме константы использовать, и это приводит к смешным случаям, когда ты строку из нескольких часткй туда запихнуть не можешь
                                    Декораторы - это именно выполняющийся кусок кода, который в теории может что угодно натворить
                                    Ответить
                                    • Ну АОП это и есть кусок кода, который (через какой-нибудь cglib) делает из безжизненной жава-метушни удобные декораторы.

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

                                        Джавист: Вот я джавист, в начале каждого метода я пишу лог
                                        Тролль: Но почему не взять AOP?
                                        Джависит: АОП ГАВНО НЕ НУЖНО АПО АОП ТОЛЬКО ВСЕ ПОРТИТ ПОТОМ КОД НЕ ПОНЯТЬ111111111
                                        ****
                                        Питонист: Я питонист, я использую декораторы
                                        Джавист: Да, прикольная штука, мне нравится
                                        Ответить
                        • В питоне есть
                          * декораторы
                          * декоратор @property из коробки
                          * всякие модельки в Django и SQLAlchemy тоже довольно декларативные
                          Ответить
                    • Самое смешное в джавовой валидации - то, что она применяется к уже созданному объекту в рантайме

                      Естественно, 99% использования - это проверить что там юзер прислал в жсоне или параметрах запроса
                      Естественно, все опечатки тупо идут нахуй и не десериализуются в поля (= юзер даже не знает, что он что-то неправильно передал)
                      Естественно любой ошибочно указанный тип приводит не к сообщению об проваленной валидации, а к эксепшену со стектрейсом без внятной информации о том, а что собственно пошло не так

                      Скриптушня с диктами и всякими JSON-схемами куда лучше подготовлена к реальному миру и применению, чем вот это всё
                      Ответить
                      • Раньше люди использовали SOAP, схемы и статически типизированные языки. Проблема "опечатки" встречалась настолько же часто, насколько встречается проблема "браузер случайно вместо GET / послал запрос ХУЙ / и веб-приложение не запустилось"

                        Потом пришли смузихлёбы-калоеды и теперь у нас
                        if (kurochka["petuhok"] == null) { //ах блядь опечатлся, не petuhok в petushok. На третий день работы в продакшене пользователь заметит
                        Ответить
                        • Не, ты можешь включить "слать запрос нахуй, если он прислал что-то не из текущего набора параметров", но тут такая хуйня, что ты отрубаешь возможность совместимости разных версий клиентов.

                          В принципе, это решается подпихиванием валидации схемы до десериализации, только кто ж их писать будет, и вообще у нас тут всё стат типизированные, мы же не динамические лошки, у меня язык сам по себе схема =))))))) )) )) ) )
                          Ответить
                          • Представляете, авторы IPv4 такие: Ну нам же нужна совместимость, потому давайте слать пакеты текстом, неизвестные поля игнорировать, а к самому пакету добавлять схему
                            {
                             "src": "1.2.3.7"
                             "dst": "4.3.1.1"
                             "checksum": 0xDEADBEAF
                             "ttl": 42
                             "upper_level": "TCPv4"
                            }
                            Ответить
                            • Ну камон, IPv4 и сервис доставки еды на джаве это принципиально разные вещи
                              Ответить
      • > и я только что узнал, что "x" и "y" удобнее объединить в запись Point

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

          Рекорды были в поскале
          Ответить
        • Fike, тут что-то по твоей части, опять горизонтальное
          https://twitter.com/allofmewants/status/1617491182271201280
          Ответить
          • Заебись, почитаю дома. Вот держи благодарочку: https://t.me/rbordunov/2481
            Ответить
          • > квируха, левачка, работница adult сферы

            – бля
            Ответить
            • >квируха
              кротовуха

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

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

            охуенно
            охуенно
            охуенно

            и ничего ведь в голове не щёлкает

            секс-рабы миграции

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

              ну слушай, вообще-то это AI-complete задача
              Ответить
            • ещё мы прекратили сексуальное взаимодействие с даней, когда он сказал его заебал наш сын

              а я бы наверное прекратил хрюкать, да только как?

              ...только спустя пару абзацев приходит понимание, что "мы" - это она про себя. это она так взяла кальку с they/them и перенесла на себя.
              Ответить
              • ещё мы прекратили сексуальное взаимодействие с даней, когда он сказал его утомил сексуальным взаимодействием наш сын

                fixed
                Ответить
          • > квир-комунны

            Квир-Ленин
            Такой молодой
            И юный квиртябрь впереди (и в заде тоже)
            Ответить
            • и вот ты знакомишься с классными квирами начинаешь с ними жить тесно общаешься с полиаморной парой состоящей из квир-активистов и перфоманс-артисток

              придя домой я весь вечер я рыдала от осознания что а)горизонтальность и общность о которой я так мечтала вылетели в трубу
              Ответить
              • а они там друг друга при знакомстве про хуй спрашивают на всякий случай?
                Ответить
                • Зачем? Какая разница есть он или нету? На полиаморный секс квирактивистов это никак не влияет
                  Ответить
                  • откуда ты знаешь? ты что, квир6?
                    Ответить
                    • я никогда не спал с мужчиной
                      ну то есть нет конечно спал
                      но просто спал вобще без секса
                      ну то есть что считать за секс
                      Ответить
          • что меня отдельно порадовало в этой истории - в обычных мигранты просто обвязывают поебенью вполне насущные пробелмы типа заработка денег баром, десять лет вместе жили, вот это всё

            что же произошло у этих?

            1) две квир-коммуны не ладят
            2) месяц готовили выпуск подкаста, потом разругались каким он должен быть
            3) пошла нахуй (семь раз!!!)
            4) всё остальное ещё менее примечательно

            https://twitter.com/ed_mechanics/status/1617705848670912513
            Ответить
            • https://pbs.twimg.com/media/FnOjDUdWQAABF2j?format=jpg&name=900x900

              https://twitter.com/MikeYagupian/status/1617979531977195520
              Ответить
              • А вдруг это 40-ка летний С++ программист который просто идентифицирует себя как семилетний ребёнок двадцатипяти летней тян?
                Ответить
              • > https://twitter.com/MikeYagupian/status/1617979531977195520
                Да, вот это самый лютый пиздец, конечно.
                Ответить
          • tl;dr: одна сумасшедшая посралась с другой ещё более сумасшедшей (которая ещё и они).

            > + сказал что за непрошенное мнение посылают нахуй и послал нахуй
            Бля, тут аж взвизгнул.
            Ответить
      • Я только что узнал, что в сишке можно задать размер полям структуры в битах, чтобы делать, например, всякие флаги:
        struct Point {
        unsigned x: 1;
        unsigned y: 1;
        };
        Ответить
        • Я же недавно тут срал кирпичом от того, что в расте это не сделать, и стуктура с 8 флагами это 8 байт (а не один)

          Ну дедов метод это байт плюс энды конечно
          Ответить
        • откуда узнал?
          Ответить
        • кстати, если бы вы сравнивали два джейсона писали на сишке простой рефкаунтер, то как бы сделали?
          Ответить
          • Использовал бы готовый Boehm GC
            Ответить
          • Я бы сделал вручную через AddRef/Release. Ну или как говорили ваши предшественники Retain/Release
            А как еще можно сделать?
            Ответить
            • эт понятно
              а где должен счётчик храниться?
              типа есть структура со счётчиком и указателем на void, где типа объект?
              Ответить
              • ну да. В куче хранится структура со счетчиком и указателем

                ну либо можно их рядом хранить, но без обобщенного программирования получится очень грязно, так что лучше бы не
                Ответить
                • В общем всё это условно говоря вот. С C++ малость сложнее, бо там delete[] (вроде бы autopr потому и не умел в массивы) зато там можно нашаблонить без лишнего указателя
                  В Сишке наверное можно через незакрытый массив как-то наебенить но нужно выравнивание и пр
                  #include <stdlib.h>
                  
                  typedef struct
                  {
                  	int count;
                  	void* data;
                  } ref_counter;
                  
                  
                  // Сделай malloc и пихахуй сюды указатель
                  ref_counter* create_counter(void* data)
                  {
                  	ref_counter* r = malloc(sizeof(ref_counter));
                  	// забиваем пока на проверку нанул
                  	r->count = 0;
                  	r->data = data;
                  	return r;
                  }
                  
                  void retain(ref_counter* r)
                  {
                  	r->count++; //забиваем пока на многотопочностость
                  }
                  
                  void release(ref_counter* r)
                  {
                  	r->count--;
                  	if (r->count == 0)
                  	{
                  		free(r->data);
                  	}
                  }
                  
                  
                  void main()
                  {
                  	int* i = malloc(sizeof(int));
                  	*i = 42;
                  	ref_counter* r = create_counter(i);
                  	retain(r);
                  	release(r);
                  }
                  Ответить
                  • ну ясно, это по-нормальному

                    я как-то делал по-ротоёбски, когда счётчики по разным структурам рядом с данными лежали, чтобы void* не кастовать :-D
                    Ответить
                    • указатель тут лишний оверхед наверное, так что если ты заранее знаешь тип в момент компиляции то конечно лучше data сделать нормуль типа


                      а можно кстати амкароёбить
                      Ответить
                    • ахаха

                      #include 
                      
                      
                      #define MK(TYPE_NAME) \
                      	struct \
                      	{ \
                      		int count; \
                      		TYPE_NAME data; \
                      	}
                      
                      
                      void main()
                      {
                      	MK(int)* r = malloc(sizeof(MK(int)));
                      	r-&gt;count = 0;
                      
                      	r-&gt;count++; //retain
                      	r-&gt;count--;
                      }


                      Всё, теперь в си управление памятью автоматическое, и код стал безопаснее. Продам макрос MK любому разработчику критических важных приложений
                      Ответить
                      • это анонимная структура? и как мне её в funcii передать?
                        Ответить
                        • да) так очень просто же
                          void foo(MK(int) * a)
                          {
                          	printf("There are %d left in the house", a->count);
                          }
                          Ответить
                          • какие шаблоны )))
                            Ответить
                          • ещё б инкапсуляцию

                            а то каждый питух сможет счётчик попердолить
                            Ответить
                            • ну это нужно выносить в отдельный модуль трансляции

                              либо делать непрозрачный тип: алиас для void*, и обратно всегда кастить

                              ps: но на самом деле конечно не нужно этого ничего делать, а нужно брать Rust или C++
                              Ответить
                              • подожду Rust++
                                Ответить
                                • бля, кракодил!
                                  https://web.archive.org/web/20101203170217/http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html
                                  
                                  
                                  int main() {
                                      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
                                   
                                      Greeting *greeting = [[Greeting alloc] init];
                                      [greeting sayGreeting];                         // > Hello,  world!
                                   
                                      Hello *hello = new Hello("Bonjour, monde!");
                                      [greeting sayGreeting:hello];                   // > Bonjour,  monde!
                                   
                                      delete hello;
                                      [greeting release];
                                      [pool release];
                                      return 0;
                                  }
                                  Ответить
                                • Зачем? Зачем?

                                  Свифт гораздо менее отвратный и у яблок есть поддержка.
                                  Ответить
                                  • Я не знаю свифта

                                    Что будет если я хочу передать структуру из двух полей по 4 байта каждый в какую-то функцию?
                                    * куча + Ref Count
                                    * escape analysis при компиляции и передача через RAX
                                    * всем похуй
                                    Ответить
                                    • десктоп, а правда, можно ли в свифте передать структуру тупо копированием или положить ее на стек и передать указатель/ссылку (не трогая кучу и RC)?
                                      Ответить
                                      • Структуры и так копируются, это value types

                                        Работать с указателями можно, но по поводу тонкостей надо курить доку, я редко таким пользовался
                                        Ответить
                                        • а
                                          то есть у вас есть разница между структурой и классом, как в C#?
                                          Ответить
                                          • Не знаю точно, как в шарпе

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

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

                                                Я не знаю зачем, предполагаю:
                                                * семантика value types: ты всегда явно копируешь что-то и сравниваешь по всем полям (а не по указателю). Это бывает удобно когда ты знаешь, что callee не засрёт переданное значение и что нет нужды вручную реализовывать Equals
                                                * все таки массив структур будет занимать меньше памяти и меньше нагружать GC. Нет нужны пирдолица с представлением структур или наборов флагов интом (как иногда делают в высоконагруженных кусках яжы)
                                                * ну на мелочевку типа передачи Point тоже не тратится время GC

                                                Мы все вкурсе, что недолго живущие объекты в GC это семечки, но курочка по зёрнышку клюет, а весь двор в дерьме.
                                                Есть конечно всякое лукавство типа если функция принимает интерфейс, то структура боксится (динамический полиморфизм же) то в целом можно много кода написать не тронув GC

                                                Кстати, массивы в сишке тоже не копируются. В крестах копируется std::array и всякие STL коллекции
                                                Ответить
                                                • > массив структур будет занимать меньше памяти
                                                  – поясните мысль
                                                  Ответить
                                                  • https://www.markopapic.com/csharp-under-the-hood-locking.html
                                                    https://curryncode.com/2016/09/28/coding-for-performance-struct-vs-class/

                                                    Заголовок объекта в куче занимает 16 байт (на x64): Указатель на RTTI для таблицы методов и вероятно для рефлексии, и какое-то недокументированное говно в котором вероятно хранится хеш (который первый раз выводится из адреса памяти, но потом сохраняется видимо на случай передвижения объекта) и лок (в CLR каждый объект может быть локом для синхронизованных мтеодов как и в JVM)

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

                                                    Кроме того, структуры уложены в массив последовательно, и отлично работает префетчер и кеш. А у классов там лежат указатели по которым надо куда-то идти, и в каких-то случаях reference locality может объебаться
                                                    Ответить
                                                    • это звучит reasonable

                                                      и, возможно, перекрывает оверхед на 100500 копирований (особенно, если там memcpy лол)
                                                      Ответить
                                                      • Если у тебя 100500 копирований то ты можешь всегда работать по ссылке
                                                        Ответить
                                                        • если я пишу фреймворк, то я не знаю, как там пользователи его будут сношать

                                                          или ты про ref?

                                                          в свифте кстати так не сработает, там тоже есть out параметр, только вот под капотом, насколько знаю, будет уже два копирования
                                                          Ответить
                                                          • Про ref.

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

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

                                                                Но в целом ситуация конечно намного более гибкая (всё по значению, кроме сишных массивов), и это хорошо.

                                                                В дотнете забоксить структуру достаточно легко, типа
                                                                public sealed class Box<T> where T : struct
                                                                    {
                                                                        public T Data;
                                                                    }

                                                                (уверен, такой класс уже где-то есть) а вот класс в value type уже не превратить.

                                                                В расте, кстати, по умолчанию ничего не копируется, но и куча не трогается: всё мувается только (если ты явно не реализовал трейт для копирования или явно не вызвал клон) а в Go и вовсе решение принимает escape analysis в момент компиляции
                                                                Ответить
                                                                • >В крестах ты можешь выразить

                                                                  Чалишься? По какой статье?
                                                                  Ответить
                                                                • > В дотнете забоксить структуру достаточно легко, типа

                                                                  С чего бы она здесь забоксится? Вот с интерфейсами действительно может быть проблема, where T : Interface может боксить структуры
                                                                  Ответить
                                                                  • Забоксится с того, что я оберну ее в класс Box

                                                                    Box это референс тайп
                                                                    Ответить
                                                                    • 1. нахуя
                                                                      2. с самой структурой-то ничего не произойдет
                                                                      Ответить
                                                                      • Тред не читай @ сразу отвечай


                                                                        Речь шла о том, что создавая структуру я вынуждаю работать с ней по значению (hence, копировать). Однако я могу передать ее по референсу используя ключевое слово "ref", а могу обернуть её в такой вот нехитрый класс, тем самым забоксив её и всегда передавая ее по указателю
                                                                        Ответить
                                  • нет шаблонов
                                    Ответить
                                  • пи, как ты пропустил Objective C++?
                                    https://govnokod.xyz/_28567/#comment-844582
                                    Ответить
                                    • Не понял
                                      Где там С++, guest6?!
                                      Ответить
                                      • delete, new
                                        Ответить
                                        • Ахаха, не заметил.

                                          Так уже таскали и много раз обсуждали на ГК этого франкенштейна.

                                          https://govnokod.ru/12337#comment165170
                                          Просто не пойму что такого особенного.
                                          Ну уродец-выкрест, жертва инцеста от спаривания близкородственных языков.
                                          Ответить
                              • > нужно брать Rust или C++

                                На самом деле конечно не нужно этого ничего брать, а нужно писать на Си.
                                Просто соблюдать паттерн.
                                {
                                   объявил хуйню;
                                   хуйню = насрал();
                                    ...
                                   убрал(хуйню);
                                }
                                Ответить
                                • и реализовывать на нем вручную референс каунтинг когда нужно
                                  Ответить
                                  • Часто он уже есть в коде, или реализован в проекте, или в какой-то либе.
                                    Условно g_object_ref() / g_object_unref()

                                    Просто эти умные рефкаунты имеют смысл только в многопоточной среде.

                                    Сишка никогда не была нацелена на многопоточность.
                                    Буквально вчера писал об этом:
                                    https://govnokod.ru/28528#comment805893
                                    Ответить
                      • ПХП ловко вырезал инклюд

                        ВРАГ НЕ ПРОЙДЕТ
                        Ответить
                        • Поди, нажал кнопку редактирования на хузе?

                          На хузе сейчас эту кнопку лучше не трогать, потому что она распидорашивает текст. Пиши порциями коротких комментариев, как в Твитторе, если боишься потерять несохранённый текст.
                          Ответить
                          • Блядь, олды же все, забыли, как комменты писали локально в текстовом редакторе, а потом копировали в поле, потому что то трубку кто-то в другой комнате снимет, то сайт затупит, то браузер упадёт?
                            Ответить
                            • То ГК кинет 500 Internal Server Error!

                              До сих пор иногда так делаю, когда пишу длинный комментарий.
                              Ответить
                              • Ага, вот отправит Макака недописанный комментарий, нажмёт кнопку редактирования, рассчитывая уложиться в пятиминутный лимит, а ГК упадёт и снова поднимется только после лимита.
                                Ответить
                            • &gt;локально в текстовом редакторе
                              GoldED
                              Ответить
                            • я и щас так делаю

                              веб штука опасная
                              Ответить
                            • Я и не переставал так делать.
                              Ответить
        • «Недавно открыл для себя удивительный мир Cишки: оказывается, там есть всё, что нужно, а то, чего не нужно, того и нет. »
          Ответить
    • у инью дуплорезку порвало
      https://i.postimg.cc/KzrJk4mf/image.png
      Ответить
      • У меня только затроились. Инью — лучший друг Смегмы MD.
        Ответить
    • да бля
      https://pbs.twimg.com/media/FnQCS3QX0AAMdGG?format=jpg&name=medium
      Ответить
    • Что лучше, сеттер или пойнтер?
      Ответить
    • наркоманты блядь
      https://plugins.jetbrains.com/plugin/15865-anime-memes
      Ответить
      • а мне нравится

        можно только картинки поменять
        Ответить
    • https://www.linux.org.ru/news/hardware/29717

      интересны два момента:

      1.

      Voodoo2 - чистый 3D акселератор, идет в PCI slot подключается
      кабель монитора и идет loop кабель на AGP ATI карту


      2. в 2000-ом году уже был SLI
      Ответить
      • 3DFX так вроде и работал
        https://en.wikipedia.org/wiki/3dfx_Interactive#Voodoo_Graphics_PCI

        И это не совсем SLI, это паравозик.

        &gt; The mechanical relays emitted an audible "clicking" sound when they engaged and disengaged

        "барышня, соедините меня с 3Д картой"
        Ответить
        • The Voodoo2 introduced Scan-Line Interleave (SLI) capability to the PC market. In SLI mode, two Voodoo2 boards installed in a PC run in parallel, each unit drawing half the lines of the display.
          Ответить
      • У меня первая полноценная карта была Voodoo3 в PCI исполнении.

        > в 2000-ом году уже был SLI
        Ничего удивительного, это ж 3dfx и придумала.
        А уже потом nVidia выкупила их с потрохами.
        Ответить
        • > Voodoo

          Да, палишься. Была такая файка у Стертора.
          Ответить
          • не такая

            а voodoodal16
            Ответить
            • Да, палишься. Была такая файка у Стертора.
              Ответить
          • ты просто недостаточно старый)

            В моем детстве все знали что 3Д ускоритель вуду от здфкс с API Glide это круто. Ни у кого не было, но все знали.
            Ответить
            • ты за субзеро или за люканга?
              Ответить
              • Скорее за субзеро. Он замораживал пролтивника, а люканг делал велосипедик ногами. А вот фаталити он делал преворащаясь в дракона и откусывая голову нахуй, а сабзеро замораживал, и разбивал.

                Это всё конечно работало если купить у метро книжечку с секретными кодами: зад-зад-вниз вперед-A+B
                Ответить
                • > откусывая голову нахуй
                  – забавно, что именно эта игра привела к появлению возрастных рейтингов в гейдеве
                  Ответить
                  • Угу. Когда мы в шестом примерно классе на дендях и сегах резались в мортАл комбАт, то наверное лопнули бы от смеха узнай что до 18-ти в них нельзя играть, ну
                    Ответить
      • Что за луп кабель?
        Ответить
        • не знаю, пишут что-то про daisy chain

          у меня оно с другим ассоциируется
          Ответить
        • а вот суп
          из восьми залуп

          три покорошено
          четыре так брошено
          Ответить
    • https://i.redd.it/9kczuzqypxj61.jpg
      Ответить
    • Why Zig When There is Already C++, D, and Rust?
      No hidden control flow (нету видимо деструкторов/Drop штоле???)
      No hidden allocations (нету динамический каллекций???)
      First-class support for no standard library (мояж ты луа)
      A Package Manager and Build System for Existing Projects (мимими, но в 2023 хвастаться таким всё равно что хвастаться что ты умеешь вытирать жопу бумагой а не пальцем)
      Simplicity (все так говорят, ага. После питона я уже никому не верю)


      что зиговал??
      Ответить
    • Изменения в персонажах M&M's вызвали резкую реакцию в соцсетях. Больше всего пользователи были недовольны ребрендингом Зеленой: петиция под названием «Оставьте Зеленую сексуальной» с требованием вернуть персонажу сапоги собрала около 20 тысяч подписей на платформе Change.org.

      Вероятно у кого-то первым сексуальным переживанием детства была мастурбация на M&M's
      Ответить

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