Школоло / Говнокод #28567 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
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 ISO, (Updated )

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

  • Невыразимая тоска наполняет меня, когда я понимаю, что реальным людям приходится писать это в качестве реальных решений реальных проблем.
    Ответить
      • В стандартной библиотеке 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)
        Ответить
            • питон??
              руби??
              джаваскрипт??

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

                Вообще эту концепцию сформулировал Ойстерхаут для своего 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, только для работы с календарём?
                          Ответить
                          • VBA для Outlook же. Там есть календари
                            Ответить
                        • 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.
                      Ответить
                    • > теребонькаешь гуёк, а в это время VBA записывает твои действия и генерит божэественный код

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

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

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

                        блячтоэто?

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

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

                          только вот каждый фреймворк использует свой шаблонизатор, придётся редактор под каждый допиливать
                          Ответить
                          • На самом деле неможно. Пердолики так и не сумели сделать за все эти годы. Единственным существующим их подогрел Netscape.
                            Ответить
              • это классический глю кмк: обертка вокруг .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

                            – не знал про такое, но умеет он, судя по ман, целое нихуя? как в степень возвести, например? зато можно по регулярке сравнить, слава свитеру!
                            Ответить
                              • так это не expr

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

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

                              Бери готовую утилиту, и теки
                              $ ps h | wc -l | xargs -I "{}" echo '{}^{}' | bc
                              Ответить
                          • > expr

                            – не знал про такое, но умеет он, судя по ман, целое нихуя? как в степень возвести, например? зато можно по регулярке сравнить, слава свитеру!
                            Ответить
                              • так это не expr

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

                                но вообще, когда есть пистон или пс, зачем ногти грызть вообще
                                Ответить
                              • так это не expr

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

                                но вообще, когда есть пистон или пс, зачем ногти грызть вообще
                                Ответить
                                    • ПРИШЛО ВРЕМЯ ИСПОЛЬЗОВАТЬ BC
                                      BC САМ НЕ ПОСЧИТАЕТ
                                      ЗАЧЕМ МНЕ НУЖЕН PERL, У МЕНЯ НЕТ ВРЕМЕНИ ЧТОБЫ ЕБАТЬСЯ С НИМ
                                      В BC ВСЕ ПРОСТО И ПОНЯТНО
                                      ОШИБКА Runtime warning (func=(main), adr=11): non-zero scale in exponent
                                      ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬ



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

                                        бесе не умеет в нецелую степень, значит его лучше не брать
                                        а если мне не надо в нецелую степень можно брать бесе?
                                        Ответить
                              • так это не expr

                                уж лучше 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
                                      Ответить
                            • 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, но его кое-как победили, а мейл -- нет
                                    Ответить
                              • А знаете, чего не хватает в этом календаре свободы? Патентов.
                                Ответить
                      • более того, ps можно использовать как куркулятор

                        в отличие от голого bash, zsh etc
                        Ответить
                          • башизм не пройдет
                            башизм не пройдет
                            Ответить
                              • 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» можно похожим способом прикрутить.
          Ответить
          • Это в VBA не зарпаботает, только в VBA.NET
            Ответить
  • >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, никакой ражницы
            Ответить
                • 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

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

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

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

                ActiveSheet.UsedRange.Columns(1).RemoveDuplicates 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(&emailValidator)
                email: string
            }


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

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

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

              Без декларативности я бы просто сделал.
              И в конструкторе бы валидировал
              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() { [...] }
                }
                Ответить
                • Они же бесполезны без фреймворка на сотни тысяч строк говнокода.

                  Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
                  Ответить
                • Они же бесполезны без фреймворка на сотни тысяч строк говнокода.

                  Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
                  Ответить
                • Они же бесполезны без фреймворка на сотни тысяч строк говнокода.

                  Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
                  Ответить
                • Они же бесполезны без фреймворка на сотни тысяч строк говнокода.

                  Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
                  Ответить
                • Они же бесполезны без фреймворка на сотни тысяч строк говнокода.

                  Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
                  Ответить
                • Они же бесполезны без фреймворка на сотни тысяч строк говнокода.

                  Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
                  Ответить
                      • «Декораторы» осилит даже не очень умный петух.
                        Для желающих особой декларативщины есть «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 — это уже не функция

                                  Я недавно на этом подорвался и сгорел к чертям блядь я уже зверь нахуй
                                  Ответить
                                • > # Обратите внимание на отсутствие скобочек: bar — это уже не функция

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

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

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

                                В рустне ты можешь написать свой макрос и он примет на вход AST и как-то его трансформанёт. Именно так реализованы всякие автореализации сериализации, логирования (привет, аоп) и пр. Но синтаксис и правда всратый
                                Ответить
                              • а они статически проверяются?
                                Ответить
                                • Нет, типизация в «Питоне» пока ещё очень тупенькая, даже вариабельные шаблоны только совсем недавно подвезли (и то в очень хуёвом виде).
                                  Ответить
                                  • я про контракты спросил у Десктопа же)

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

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

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

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

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

                                          впрочем, typed racket свои проверки выполняет до основного запуска (это называется phase 0 или что-то в этом роде), так что в теории наверное всё возможно
                                          Ответить
                                        • Это кажется называется зависимыми типами (ну и реализуется обычно в системе типов, а не практически юзерспейсе)
                                          Ответить
                                          • > ну и реализуется обычно в системе типов, а не практически юзерспейсе

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

                                                Меня заебали, грубо говоря, ПХП
                                                Ответить
                                                • Как насчет Паскаля, от которого у местных &quot;скр&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 и сервис доставки еды на джаве это принципиально разные вещи
                            Ответить
                          • Ну камон, IPv4 и сервис доставки еды на джаве это принципиально разные вещи
                            Ответить
    • > и я только что узнал, что "x" и "y" удобнее объединить в запись Point

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

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

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

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

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

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

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

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

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

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

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

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

              fixed
              Ответить
            • ещё мы прекратили сексуальное взаимодействие с даней, когда он сказал его утомил сексуальным взаимодействием наш сын

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

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

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

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

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

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

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

          https://twitter.com/ed_mechanics/status/1617705848670912513
          Ответить
        • tl;dr: одна сумасшедшая посралась с другой ещё более сумасшедшей (которая ещё и они).

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

        Ну дедов метод это байт плюс энды конечно
        Ответить
      • кстати, если бы вы сравнивали два джейсона писали на сишке простой рефкаунтер, то как бы сделали?
        Ответить
        • Я бы сделал вручную через 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* не кастовать 😀
                  Ответить
                  • указатель тут лишний оверхед наверное, так что если ты заранее знаешь тип в момент компиляции то конечно лучше data сделать нормуль типа


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

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


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

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

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

                            ps: но на самом деле конечно не нужно этого ничего делать, а нужно брать Rust или C++
                            Ответить
                              • бля, кракодил!
                                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", а могу обернуть её в такой вот нехитрый класс, тем самым забоксив её и всегда передавая ее по указателю
                                                                      Ответить
                            • > нужно брать Rust или C++
                              На самом деле конечно не нужно этого ничего брать, а нужно писать на Си.
                              Ответить
                              • и реализовывать на нем вручную референс каунтинг когда нужно
                                Ответить
                                • Часто он уже есть в коде, или реализован в проекте, или в какой-то либе.
                                  Условно g_object_ref() / g_object_unref()
                                  Ответить
                                • Часто он уже есть в коде, или реализован в проекте, или в какой-то либе.
                                  Условно g_object_ref() / g_object_unref()

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

                                  Сишка никогда не была нацелена на многопоточность.
                                  Буквально вчера писал об этом:
                                  https://govnokod.ru/28528#comment805893
                                  Ответить
                                • Часто он уже есть в коде, или реализован в проекте, или в какой-то либе.
                                  Условно g_object_ref() / g_object_unref()

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

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

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

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

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

                            До сих пор иногда так делаю, когда пишу длинный комментарий.
                            Ответить
                            • Ага, вот отправит Макака недописанный комментарий, нажмёт кнопку редактирования, рассчитывая уложиться в пятиминутный лимит, а ГК упадёт и снова поднимется только после лимита.
                              Ответить
                          • >локально в текстовом редакторе
                            GoldED
                            Ответить
      • «Недавно открыл для себя удивительный мир Cишки: оказывается, там есть всё, что нужно, а то, чего не нужно, того и нет. »
        Ответить
  • https://www.linux.org.ru/news/hardware/29717

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

    1.

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


    2. в 2000-ом году уже был SLI
    Ответить
  • https://www.linux.org.ru/news/hardware/29717

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

    1.

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


    2. в 2000-ом году уже был SLI
    Ответить
      • 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.
        Ответить
      • 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.

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

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

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

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

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

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

        три покорошено
        четыре так брошено
        Ответить
  • 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
    Ответить

Добавить комментарий для HE_OTBE4Au_YE6KY Отменить ответ

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

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


    8