Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
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/
В стандартной библиотеке 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)
Программисты пирдоляца с серьезными языками и делают компоненты.
Хаусвайвз берут компоненты и лепят из них прилажухи драг ын дропом натягивая компоненты на формочку или пися код тип типа
display dialog "Hello, world!" -- a modal window with "OK" and "Cancel" buttons
Но потом конечно долбодятлы стали писать высоконагруженное говно на ПХП и вся идеология превратилась в мутное говно (как это обычно бывает в мире айти)
Ruby, Python, Perl, PHP, JS — это уже ни рыба, ни мясо. Они компилируемые, хотя и компилируются в байткод для VM, а не в нативный. От Java и C# их отличает отсутствие статической типизации.
Питон (как илюбая скриптушня) кмк тоже дизайнился для быстрого и лёгкого наговнокоживания каких-то несложных задач кмк, но я в голове Гвиды не спал, так что зуб не дам
У пхп сложная история. Первые версии были почти что чистым шаблонизатором. Потом накрутили процедурное и объектное программирование.
Сейчас во все официальные сборки пхп вшили кучу нативных модулей, которые раньше были внешними. Его уже сложно назвать языком совсем без фреймворка. Например, поддержка кукис и сессий сейчас из коробки.
Собссно, я объектную модель документа так и изучал в какой-то момент: теребонькаешь гуёк, а в это время VBA записывает твои действия и генерит божэественный код
Да, AI писал за меня код когда это езще не было мейнстримом
Ну вот ps и используют как клей между дотнетовскими библиотеками. Из него легко вызвать какой-нибудь метод дотнета и обработать результат. А своего у него почти ничего нет.
В отличие от C# и VB.Net, он может работать в интерактивном режиме, что позволяет макетировать на ходу, не разрабатывая приложение целиком.
формально конечно 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)`` с обратной польской нотацией и не требующий даже терминала (его реально можно на печтном телетайпе юзать). Все эти тупые срачи про скобочки про которые недавно опять обсасывали ему не страшны
ПРИШЛО ВРЕМЯ ИСПОЛЬЗОВАТЬ BC
BC САМ НЕ ПОСЧИТАЕТ
ЗАЧЕМ МНЕ НУЖЕН PERL, У МЕНЯ НЕТ ВРЕМЕНИ ЧТОБЫ ЕБАТЬСЯ С НИМ
В BC ВСЕ ПРОСТО И ПОНЯТНО
ОШИБКА Runtime warning (func=(main), adr=11): non-zero scale in exponent
ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬ
ПРИШЛО ВРЕМЯ ИСПОЛЬЗОВАТЬ 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
ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬ
Нет, обычный пузырёк же — всплываем на каждой итерации.
Человек открывает для себя дивный мир программирования за пределами стдлибы «VBA», где даже сортировку писать вручную не надо.
Во-первых, мы можем выгрузить все элементы одним
методом ToArray. Как следует из названия, он преобразует
все элементы объекта в обычный массив типа Variant.
Во-вторых, мы можем составлять список уникальных значений,
проверяя их наличие методом Contains.
В-третьих, можно забыть про функцию UBound, ведь у этого
класса есть свойство Count, которое, как не сложно догадаться,
возвращает количество элементов помещенных в объект.
В-четвертых, есть возможность быстро отсортировать элементы как
по возрастанию (метод Sort), так и по убыванию
(сначала используем метод Sort, а после метод Reverse).
Справедливости ради, написать по памяти квиксорт и нигде не проебаться на единицу существенно сложнее того же самого, но для пузырька. Если человеку приходится для каждой задачи заново писать сортировку — неудивительно, что он выбрал «пузырёк».
Попробовал поискать, нашёл: 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.
Какой багор )))
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
хрен знает. но людям нравится странное или приходится его использовать. из комментариев:
Вот буквально пару месяцев назад при программировании правда на VBScript в SCADA использовал ArrayList. Вообще, если поковыряться в MS COM интерфейсах, можно найти ещё несколько коллекций или структур данных, типа очереди (Queue), которые можно в VBScript задействовать через COM. Главное, чтобы имелся тривиальный конструктор, в нетривиальные COM не умеет передавать параметры.
Ну я про них и говорил. Там гдето лежал Dictionary и еще всякие
И конечно хранить в них можно только тривиальные строки и числа, а документ Word туда не запихнуть)
У человека неиллюзорно на дворе конец 90-х. Причем там одновременно и VBA под Excel, и мне 15 лет, и я только что узнал, что "x" и "y" удобнее объединить в запись Point
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). Работает в проде.
> Вложенность пугает, но это плата за примитивизм.
Не знаю. Меня даже сложные конструкции на питоне не пугают особо.
А вот Rust такой синтаксис что тошнит сразу, даже если что-то "простое" в пару строк.
А так питонья собачка — очень примитивная вещь: она берёт то, что справа от неё, и применяет к тому, что снизу от неё, а результат — помещает на место того, что было ниже. Поэтому никто не запрещает сделать, например, вот так:
>>> def foo(f):
... return [1, 2, 3]
...
>>> @foo
... def bar():
... print('bar')
...
>>> bar # Обратите внимание на отсутствие скобочек: bar — это уже не функция, бля
[1, 2, 3]
Будем честны: до 2003-го года питон не был ни популярным, ни особо удобным
> Rust такой синтаксис что тошнит сразу, даже если что-то "простое" в пару строк.
В рустне ты можешь написать свой макрос и он примет на вход AST и как-то его трансформанёт. Именно так реализованы всякие автореализации сериализации, логирования (привет, аоп) и пр. Но синтаксис и правда всратый
впрочем, typed racket свои проверки выполняет до основного запуска (это называется phase 0 или что-то в этом роде), так что в теории наверное всё возможно
статическому анализу можно подвергнуть и программу без компиляции. Примеры статических анализаторов прямо по исходному коду
* lint: c
* Critic: Perl
* Rubocop: Ruby
* flake8, pylint, mypy: python
* eslint, tsc: TypeScript
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.
Ну извенете што я не знаю как ещё емко обозвать клиентский код. Нет, это конечно не имеет отношения к кеернелу, но категория по отношению к SDK такая же как у юзерпейса к ядру
Как насчет Паскаля, от которого у местных "скр&птухов" ; из задних кальдер извергаются потоки раскаленной смагмы и где есть типы фундаментальные и простые, совместимость и идентичность типов и даже ключслово для превращения алиасного типа в отдельный?
В питоне это называют декораторами.
Придёт джавух и расскажет что это аннотации и АОП.
Придёт Снаут и объяснит что-то про high order functions на хаскельном сленге.
Но до полноценной Ады и coqmpile-time proof мало кто дорос.
Не, аннотации - это прицеп статических метаданных к символу в языке, и их возможности сильно ограничены, зачастую ты даже не можешь что-то кроме константы использовать, и это приводит к смешным случаям, когда ты строку из нескольких часткй туда запихнуть не можешь
Декораторы - это именно выполняющийся кусок кода, который в теории может что угодно натворить
Не, аннотации - это прицеп статических метаданных к символу в языке, и их возможности сильно ограничены, зачастую ты даже не можешь что-то кроме константы использовать, и это приводит к смешным случаям, когда ты строку из нескольких часткй туда запихнуть не можешь
Декораторы - это именно выполняющийся кусок кода, который в теории может что угодно натворить
Джавист: Вот я джавист, в начале каждого метода я пишу лог
Тролль: Но почему не взять AOP?
Джависит: АОП ГАВНО НЕ НУЖНО АПО АОП ТОЛЬКО ВСЕ ПОРТИТ ПОТОМ КОД НЕ ПОНЯТЬ111111111
****
Питонист: Я питонист, я использую декораторы
Джавист: Да, прикольная штука, мне нравится
Самое смешное в джавовой валидации - то, что она применяется к уже созданному объекту в рантайме
Естественно, 99% использования - это проверить что там юзер прислал в жсоне или параметрах запроса
Естественно, все опечатки тупо идут нахуй и не десериализуются в поля (= юзер даже не знает, что он что-то неправильно передал)
Естественно любой ошибочно указанный тип приводит не к сообщению об проваленной валидации, а к эксепшену со стектрейсом без внятной информации о том, а что собственно пошло не так
Скриптушня с диктами и всякими JSON-схемами куда лучше подготовлена к реальному миру и применению, чем вот это всё
Раньше люди использовали SOAP, схемы и статически типизированные языки. Проблема "опечатки" встречалась настолько же часто, насколько встречается проблема "браузер случайно вместо GET / послал запрос ХУЙ / и веб-приложение не запустилось"
Потом пришли смузихлёбы-калоеды и теперь у нас
if (kurochka["petuhok"] == null) { //ах блядь опечатлся, не petuhok в petushok. На третий день работы в продакшене пользователь заметит
Не, ты можешь включить "слать запрос нахуй, если он прислал что-то не из текущего набора параметров", но тут такая хуйня, что ты отрубаешь возможность совместимости разных версий клиентов.
В принципе, это решается подпихиванием валидации схемы до десериализации, только кто ж их писать будет, и вообще у нас тут всё стат типизированные, мы же не динамические лошки, у меня язык сам по себе схема =))))))) )) )) ) )
Представляете, авторы IPv4 такие: Ну нам же нужна совместимость, потому давайте слать пакеты текстом, неизвестные поля игнорировать, а к самому пакету добавлять схему
когда вы уже третий час идете по горам замерзшие накуренные и уставшие параллельно говоря что ни в коме случае не хотела обесценить их труд и вообще я восхищаюсь масштабом их усилий
-------
Вообще, подросткам иногда правда кажется что их какие-то переживания там про еблю охуенно важны всему миру потому что они неебаца оригинальные и сложные, в моем детстве тоже так было. Но не было твиттера. И квиров.
потом ты пытаешься по кусочкам начать собираться обратно начинаешь секс-работу ведь учеба в вузе осталась где-то в другой жизни а у тебя ни опыта работы ни резюме пытаешься сохранить разваливающиеся в эмиграции отношения
потом ты пытаешься по кусочкам начать собираться обратно начинаешь секс-работу ведь учеба в вузе осталась где-то в другой жизни а у тебя ни опыта работы ни резюме пытаешься сохранить разваливающиеся в эмиграции отношения
охуенно
охуенно
охуенно
и ничего ведь в голове не щёлкает
секс-рабы миграции
вспоминается та гениальная статья с хабра "меня перевезли в другую страну и выкинули на мороз"
что меня отдельно порадовало в этой истории - в обычных мигранты просто обвязывают поебенью вполне насущные пробелмы типа заработка денег баром, десять лет вместе жили, вот это всё
что же произошло у этих?
1) две квир-коммуны не ладят
2) месяц готовили выпуск подкаста, потом разругались каким он должен быть
3) пошла нахуй (семь раз!!!)
4) всё остальное ещё менее примечательно
что меня отдельно порадовало в этой истории - в обычных мигранты просто обвязывают поебенью вполне насущные пробелмы типа заработка денег баром, десять лет вместе жили, вот это всё
что же произошло у этих?
1) две квир-коммуны не ладят
2) месяц готовили выпуск подкаста, потом разругались каким он должен быть
3) пошла нахуй (семь раз!!!)
4) всё остальное ещё менее примечательно
В общем всё это условно говоря вот. С 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);
}
Что будет если я хочу передать структуру из двух полей по 4 байта каждый в какую-то функцию?
* куча + Ref Count
* escape analysis при компиляции и передача через RAX
* всем похуй
интересно, что мне пришлось пойти перечитать доку по шарпу на всякий случай, хотя я в общем с ним немного знаком. почему-то казалось, что там есть какие-то нюансы
с другой стороны, а зачем в шарпе разделение на value type? коллекции всё равно по ссылке передаются, а кмк это было бы главным бенефитом
В шарпе можно передать и по ссылке тоже, если явно указать "ref".
Я не знаю зачем, предполагаю:
* семантика value types: ты всегда явно копируешь что-то и сравниваешь по всем полям (а не по указателю). Это бывает удобно когда ты знаешь, что callee не засрёт переданное значение и что нет нужды вручную реализовывать Equals
* все таки массив структур будет занимать меньше памяти и меньше нагружать GC. Нет нужны пирдолица с представлением структур или наборов флагов интом (как иногда делают в высоконагруженных кусках яжы)
* ну на мелочевку типа передачи Point тоже не тратится время GC
Мы все вкурсе, что недолго живущие объекты в GC это семечки, но курочка по зёрнышку клюет, а весь двор в дерьме.
Есть конечно всякое лукавство типа если функция принимает интерфейс, то структура боксится (динамический полиморфизм же) то в целом можно много кода написать не тронув GC
Кстати, массивы в сишке тоже не копируются. В крестах копируется std::array и всякие STL коллекции
Заголовок объекта в куче занимает 16 байт (на x64): Указатель на RTTI для таблицы методов и вероятно для рефлексии, и какое-то недокументированное говно в котором вероятно хранится хеш (который первый раз выводится из адреса памяти, но потом сохраняется видимо на случай передвижения объекта) и лок (в CLR каждый объект может быть локом для синхронизованных мтеодов как и в JVM)
Не велика беда для одного питуха, но если у тебя есть структура из двух интовых полей, то она занимает 8 байт. А класс занимает 24, плюс сам указатель 8 байт, то есть памяти нужно больше ровно в 4 раза.
Когда у тебя массив из двадцати миллионов таких структур то разница уже есть.
Кроме того, структуры уложены в массив последовательно, и отлично работает префетчер и кеш. А у классов там лежат указатели по которым надо куда-то идти, и в каких-то случаях reference locality может объебаться
Если ты пишешь свой фреймворк то выбор между структурой и классом должен зависеть от семнатики, а не от перформанса, кмк.
Точно так же как Goвнари выбирают между указателем и копированием thisа в методе.
В крестах ты можешь выразить семантику через поведение класса и запреты различных конструкторов и операторов присваивания.
К примеру, запретив копирование ты можешь сделать хуйню, которую никогда нельзя передать по значению. А если еще и мув запретить, то будет и вовсе недвижмый класс, который "где родился -- там и пригодился". Такой копролит чтобы за пределы стекфрейма функции вынести, можно только положить в кучу, и работать по указателю: вот и будет почти reference type
Но в целом ситуация конечно намного более гибкая (всё по значению, кроме сишных массивов), и это хорошо.
В дотнете забоксить структуру достаточно легко, типа
public sealed class Box<T> where T : struct
{
public T Data;
}
(уверен, такой класс уже где-то есть) а вот класс в value type уже не превратить.
В расте, кстати, по умолчанию ничего не копируется, но и куча не трогается: всё мувается только (если ты явно не реализовал трейт для копирования или явно не вызвал клон) а в Go и вовсе решение принимает escape analysis в момент компиляции
Речь шла о том, что создавая структуру я вынуждаю работать с ней по значению (hence, копировать). Однако я могу передать ее по референсу используя ключевое слово "ref", а могу обернуть её в такой вот нехитрый класс, тем самым забоксив её и всегда передавая ее по указателю
На хузе сейчас эту кнопку лучше не трогать, потому что она распидорашивает текст. Пиши порциями коротких комментариев, как в Твитторе, если боишься потерять несохранённый текст.
Блядь, олды же все, забыли, как комменты писали локально в текстовом редакторе, а потом копировали в поле, потому что то трубку кто-то в другой комнате снимет, то сайт затупит, то браузер упадёт?
Ага, вот отправит Макака недописанный комментарий, нажмёт кнопку редактирования, рассчитывая уложиться в пятиминутный лимит, а ГК упадёт и снова поднимется только после лимита.
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.
Скорее за субзеро. Он замораживал пролтивника, а люканг делал велосипедик ногами. А вот фаталити он делал преворащаясь в дракона и откусывая голову нахуй, а сабзеро замораживал, и разбивал.
Это всё конечно работало если купить у метро книжечку с секретными кодами: зад-зад-вниз вперед-A+B
Угу. Когда мы в шестом примерно классе на дендях и сегах резались в мортАл комбАт, то наверное лопнули бы от смеха узнай что до 18-ти в них нельзя играть, ну
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
ISO # 0
HoBorogHuu_nemyx # 0 ⇈
guest # 0 ⇈
В VBA у такие объекты представляет приложение (word, excel, outlook, sharepoint и прочий microsoft project с accessом)
В VBA@WSH скриптхост
В VBA@ASP еще и IIS
В VBA@IE IE
Плюс можно использовать внешние COM объекты. Обычно их регистрируют в системе (regsvr32, HKCR ну ты понел) и юзают. Но можно наверное .ocx или там .dll рядошком положить.
VB это классический Glue язык без какого-либо фреймворка, чисто чтобы дергать готовые внешние компоненты (как php)
Desktop # 0 ⇈
DypHuu_niBEHb # 0 ⇈
Desktop # 0 ⇈
руби??
джаваскрипт??
они просто добавили все (которые знали) языки, которые можно заэмбеддить?
guest # 0 ⇈
Вообще эту концепцию сформулировал Ойстерхаут для своего TCL
Программисты пирдоляца с серьезными языками и делают компоненты.
Хаусвайвз берут компоненты и лепят из них прилажухи драг ын дропом натягивая компоненты на формочку или пися код тип типа
Но потом конечно долбодятлы стали писать высоконагруженное говно на ПХП и вся идеология превратилась в мутное говно (как это обычно бывает в мире айти)
Desktop # 0 ⇈
любой язык может служить для того, чтобы между собой "склеивать" что-то, вопрос в удобстве
но в широком смысле это получается любая скриптушня в принципе
guest # 0 ⇈
Любая скриптушня есть глу ленгвич, да
HoBorogHuu_nemyx # 0 ⇈
Ruby, Python, Perl, PHP, JS — это уже ни рыба, ни мясо. Они компилируемые, хотя и компилируются в байткод для VM, а не в нативный. От Java и C# их отличает отсутствие статической типизации.
HoBorogHuu_nemyx # 0 ⇈
guest # 0 ⇈
ну с другой стороны csh же есть
Desktop # 0 ⇈
– а в чём наркоманство? я таким пользуюсь
guest # 0 ⇈
Desktop # 0 ⇈
но думаю, что просто cd и grep
напиши команды, я попозже проверю
guest # 0 ⇈
awk
ну или вот так наверное полегче будет
Desktop # 0 ⇈
а, nologin же
но всё равно стрём)
HoBorogHuu_nemyx # 0 ⇈
А ещё есть Temple OS для совсем поехавших...
3.14159265 # 0 ⇈
Медленных как лалка.
Карго-культ. «яже как баш».
Desktop # 0 ⇈
guest # 0 ⇈
3.14159265 # 0 ⇈
Точно! Получается целя йажа-говно-троица.
3.14159265 # 0 ⇈
awk, sed?
awk в большей степени конечно.
Его конь-цепты позднейшие скриптухи разворовали.
Desktop # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
Desktop # 0 ⇈
– так может просто она была говно изначально?
я не думаю, что питон дизайнился гнидой чисто как язык для того, чтобы сишечку попердолить через ffi
вот applescript в принципе удачный пример, но это по сути дела dsl
guest # 0 ⇈
lua наверное более лучший пример, и пхп тот же
HoBorogHuu_nemyx # 0 ⇈
Сейчас во все официальные сборки пхп вшили кучу нативных модулей, которые раньше были внешними. Его уже сложно назвать языком совсем без фреймворка. Например, поддержка кукис и сессий сейчас из коробки.
HoBorogHuu_nemyx # 0 ⇈
IBM продвигал Rexx как замену коммандкому. Но потом, когда Windows стала несравнимо популярнее OS/2, про Rexx все забыли.
guest # 0 ⇈
WSH это видимо тоже клей. Виндоадмины начала нулеыых любили еще какую хуйню для автоматихации винды, но я забыл. на бейсик была похожа чуток
ps: вот!
https://www.autoitscript.com/site/
Desktop # 0 ⇈
только в автоите вроде можно было в гуе натеребонькать действия и течь
это такой аналог автоматора, который на маке из коробки
guest # 0 ⇈
Собссно, я объектную модель документа так и изучал в какой-то момент: теребонькаешь гуёк, а в это время VBA записывает твои действия и генерит божэественный код
Да, AI писал за меня код когда это езще не было мейнстримом
3.14159265 # 0 ⇈
Дико плюсую.
Охренительная была штука.
Для браузеров гораздо позже придумали selenium IDE.
3.14159265 # 0 ⇈
Дико плюсую.
Охренительная была конь-цепция как для того времени.
Для браузеров гораздо позже придумали selenium IDE.
guest # 0 ⇈
Я просто тянул кнопочки во фронтпейдже, и тек (а проф дизайнеры делали тоже самое в дримвивире)
А теперь?
блячтоэто?
Реально человечество в обратную сторону развивается, скоро будут на асемблере писать на листочке
Desktop # 0 ⇈
только вот каждый фреймворк использует свой шаблонизатор, придётся редактор под каждый допиливать
Desktop # 0 ⇈
только вот каждый фреймворк использует свой шаблонизатор, придётся редактор под каждый допиливать
o6AMa_4MO # 0 ⇈
o6AMa_4MO # 0 ⇈
Change my mind.
HoBorogHuu_nemyx # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
шеллы впринципе глю
Desktop # 0 ⇈
HoBorogHuu_nemyx # 0 ⇈
В отличие от C# и VB.Net, он может работать в интерактивном режиме, что позволяет макетировать на ходу, не разрабатывая приложение целиком.
guest # 0 ⇈
Довольно заебись на самом деле же
Desktop # 0 ⇈
в отличие от голого bash, zsh etc
guest # 0 ⇈
формально конечно expr не часть ш (у гнусни он отдельный, хотя в бизибоксе конечно встроен) но есть на любом позиксе
А еще есть ``bc(1)``
А еще есть божественный ``dc(1)`` с обратной польской нотацией и не требующий даже терминала (его реально можно на печтном телетайпе юзать). Все эти тупые срачи про скобочки про которые недавно опять обсасывали ему не страшны
Desktop # 0 ⇈
– не знал про такое, но умеет он, судя по ман, целое нихуя? как в степень возвести, например? зато можно по регулярке сравнить, слава свитеру!
3.14159265 # 0 ⇈
3.14159265 # 0 ⇈
3.14159265 # 0 ⇈
Desktop # 0 ⇈
уж лучше bc конечно тогда взять
но вообще, когда есть пистон или пс, зачем ногти грызть вообще
3.14159265 # 0 ⇈
Лучше bc не брать.
guest # 0 ⇈
Бери готовую утилиту, и теки
Desktop # 0 ⇈
– не знал про такое, но умеет он, судя по ман, целое нихуя? как в степень возвести, например? зато можно по регулярке сравнить, слава свитеру!
3.14159265 # 0 ⇈
Desktop # 0 ⇈
уж лучше bc конечно тогда взять
но вообще, когда есть пистон или пс, зачем ногти грызть вообще
3.14159265 # 0 ⇈
Лучше bc не брать.
Desktop # 0 ⇈
3.14159265 # 0 ⇈
Desktop # 0 ⇈
уж лучше bc конечно тогда взять
но вообще, когда есть пистон или пс, зачем ногти грызть вообще
3.14159265 # 0 ⇈
Лучше bc не брать.
Desktop # 0 ⇈
3.14159265 # 0 ⇈
BC САМ НЕ ПОСЧИТАЕТ
ЗАЧЕМ МНЕ НУЖЕН PERL, У МЕНЯ НЕТ ВРЕМЕНИ ЧТОБЫ ЕБАТЬСЯ С НИМ
В BC ВСЕ ПРОСТО И ПОНЯТНО
ОШИБКА Runtime warning (func=(main), adr=11): non-zero scale in exponent
ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬ
https://govnokod.ru/27121#comment602977
guest # 0 ⇈
бесе не умеет в нецелую степень, значит его лучше не брать
а если мне не надо в нецелую степень можно брать бесе?
Desktop # 0 ⇈
уж лучше bc конечно тогда взять
но вообще, когда есть пистон или пс, зачем ногти грызть вообще
3.14159265 # 0 ⇈
Лучше bc не брать.
Desktop # 0 ⇈
3.14159265 # 0 ⇈
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
o6AMa_4MO # 0 ⇈
Пердолики устроили кашу из названий.
o6AMa_4MO # 0 ⇈
> This is free software
> Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017
3.14159265 # 0 ⇈
guest # 0 ⇈
а вот то что ты вот со скобочками понаписал это башизм небось, и в обычном sh может и не взлететь
3.14159265 # 0 ⇈
guest # 0 ⇈
А в больших прыщах /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, но его кое-как победили, а мейл -- нет
o6AMa_4MO # 0 ⇈
Desktop # 0 ⇈
в отличие от голого bash, zsh etc
3.14159265 # 0 ⇈
Какой анскилл )))
echo $((42*2-5+2**3))
3.14159265 # 0 ⇈
Какой анскилл )))
3.14159265 # 0 ⇈
Какой анскилл )))
guest # 0 ⇈
башизм не пройдет
Desktop # 0 ⇈
guest # 0 ⇈
и в dash не работает
а это был шел по умолчанию для дебиана и вроде даже убунты года так до 2006-го (хотя я не помню чото там было с убунтой тажа)
3.14159265 # 0 ⇈
Какой анскилл )))
3.14159265 # 0 ⇈
Какой анскилл )))
DypHuu_niBEHb # 0 ⇈
o6AMa_4MO # 0 ⇈
o6AMa_4MO # 0 ⇈
o6AMa_4MO # 0 ⇈
[email protected] # 0
ISO # 0 ⇈
Человек открывает для себя дивный мир программирования за пределами стдлибы «VBA», где даже сортировку писать вручную не надо.
Как узнает про «компараторы» — вообще охренеет!
3.14159265 # 0 ⇈
Только две опции
Option Compare Text
Option Compare Binary
Там можно было колобки через AddressOf делать для шiнарi.
А вот как вызвать самому функцию по такому адресу, я не помню.
ISO # 0 ⇈
Думаю, что «IComparator» можно похожим способом прикрутить.
guest # 0 ⇈
Fike # 0
господи блядь
они реально добавили эту инстаграмную хуиту
JloJle4Ka # 0 ⇈
Fike # 0 ⇈
TAPAC # 0
-1 действительно ли это енобходимо?
guest # 0
В 2023 году
Не знать про квиксорт
ISO # 0 ⇈
Если человеку приходится для каждой задачи заново писать сортировку — неудивительно, что он выбрал «пузырёк».
guest # 0 ⇈
В VBA наверняка есть готовый ActiveX компонент:) Автор в своем 1999-м году может взять диск с MSDN, и почитать
ISO # 0 ⇈
>>> 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.
Какой багор )))
И вся первая страница «Гугла» в таком.
guest # 0 ⇈
HoBorogHuu_nemyx # 0 ⇈
Первая ссылка:
https://learn.microsoft.com/ru-RU/sql/ado/reference/ado-api/sort-property
guest # 0 ⇈
ps:
https://www.vbforums.com/showthread.php?231925-VB-Quick-Sort-algorithm-(very-fast-sorting-algorithm)
guest # 0 ⇈
подумаешь
Desktop # 0 ⇈
https://learn.microsoft.com/en-us/office/vba/api/excel.range.sort
guest # 0 ⇈
Desktop # 0 ⇈
субд тебе не нравится, эксель тебе не подходит
а для чего ещё может быть нужен vba?
guest # 0 ⇈
Начиная с 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
Desktop # 0 ⇈
Вот буквально пару месяцев назад при программировании правда на VBScript в SCADA использовал ArrayList. Вообще, если поковыряться в MS COM интерфейсах, можно найти ещё несколько коллекций или структур данных, типа очереди (Queue), которые можно в VBScript задействовать через COM. Главное, чтобы имелся тривиальный конструктор, в нетривиальные COM не умеет передавать параметры.
guest # 0 ⇈
И конечно хранить в них можно только тривиальные строки и числа, а документ Word туда не запихнуть)
Вот какой
https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dictionary-object
guest # 0 ⇈
ActiveSheet.UsedRange.Columns(1).RemoveDuplicates Columns:=1, Header:=xlYes и далее Sort
3.14159265 # 0 ⇈
А зачем?
Просто ставишь ListBox1.Sorted=True и оно само всё сортирует!
guest # 0 ⇈
guest # 0 ⇈
ListBox1.Sorted := True;
guest # 0
https://habr.com/ru/post/711222/
У человека неиллюзорно на дворе конец 90-х. Причем там одновременно и VBA под Excel, и мне 15 лет, и я только что узнал, что "x" и "y" удобнее объединить в запись Point
3.14159265 # 0 ⇈
Мммм.
Сейчас даже живого дельфятника вероятнее встретить.
guest # 0 ⇈
но я не советую тебе его встречать
[email protected] # 0 ⇈
JloJle4Ka # 0 ⇈
3.14159265 # 0 ⇈
guest # 0 ⇈
3.14159265 # 0 ⇈
guest # 0 ⇈
В коко, C#, и прочих ломбоках с грувями хотябы не нужно вручную писать одинаковый код
3.14159265 # 0 ⇈
Ну он же там валидации e-maila добавил.
Хотя на мой вкус данные должны валидироваться ещё до попадания в структуру.
guest # 0 ⇈
тащемто даже в йажа есть похожее для бинов, а в рельсах всяких и подавно
Desktop # 0 ⇈
3.14159265 # 0 ⇈
Мне тоже синтаксис йажа-аннотации напомнил.
Впрочем с метушней это везде можно сделать.
Но тут важно иметь автодесрализацию этих структов, и чтобы она умела в такую валидацию.
Без декларативности я бы просто сделал.
И в конструкторе бы валидировал
guest # 0 ⇈
3.14159265 # 0 ⇈
Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
3.14159265 # 0 ⇈
Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
3.14159265 # 0 ⇈
Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
3.14159265 # 0 ⇈
Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
3.14159265 # 0 ⇈
Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
3.14159265 # 0 ⇈
Лишпер-гомоиконщик осилит кастомный валидатор, а вот жовист без внешней монстролибы на десятки мегабат — вряд ли.
ISO # 0 ⇈
3.14159265 # 0 ⇈
ISO # 0 ⇈
Для желающих особой декларативщины есть «Annotated» — штука, которая позволяет к объявлению типа прикрепить произвольные данные, а потом их вытащить.
Я так делал декларативное описание небинарных структур, см. https://govnokod.ru/28540#comment803502 — получилось угрёбищненько, но довольно наглядно, работает и поддерживает типизацию (=> у меня есть нормальные подсказки в IDE). Работает в проде.
3.14159265 # 0 ⇈
А можно реальный пример валидатора данных?
ISO # 0 ⇈
Вложенность пугает, но это плата за примитивизм.
3.14159265 # 0 ⇈
А в какую версию питуха такое подвезли?
> Вложенность пугает, но это плата за примитивизм.
Не знаю. Меня даже сложные конструкции на питоне не пугают особо.
А вот Rust такой синтаксис что тошнит сразу, даже если что-то "простое" в пару строк.
ISO # 0 ⇈
А так питонья собачка — очень примитивная вещь: она берёт то, что справа от неё, и применяет к тому, что снизу от неё, а результат — помещает на место того, что было ниже. Поэтому никто не запрещает сделать, например, вот так:
Fike # 0 ⇈
Я недавно на этом подорвался и сгорел к чертям блядь я уже зверь нахуй
Fike # 0 ⇈
Я недавно на этом подорвался и сгорел к чертям блядь я уже зверь нахуй
guest # 0 ⇈
https://peps.python.org/pep-0318/
Будем честны: до 2003-го года питон не был ни популярным, ни особо удобным
> Rust такой синтаксис что тошнит сразу, даже если что-то "простое" в пару строк.
В рустне ты можешь написать свой макрос и он примет на вход AST и как-то его трансформанёт. Именно так реализованы всякие автореализации сериализации, логирования (привет, аоп) и пр. Но синтаксис и правда всратый
Desktop # 0 ⇈
https://docs.racket-lang.org/guide/contract-boundaries.html
guest # 0 ⇈
ISO # 0 ⇈
guest # 0 ⇈
Смысл контрактов кмк в стат их проверке.
Desktop # 0 ⇈
guest # 0 ⇈
Обычно это называется статическим анализом
Desktop # 0 ⇈
как ты это можешь сделать без входных данных, которые могут прийти хоть от пользователя, хоть от сети, хоть от аллаха?
это всё-таки не кок
зато ты можешь написать контракт не только на входящие значения, но и на результирующее
guest # 0 ⇈
Я хочу выразить например такое:
Функция "foo" возвращает положительные числа если её аргумент тоже положителен.
Я пишу
вот тьакое хочу
Desktop # 0 ⇈
впрочем, typed racket свои проверки выполняет до основного запуска (это называется phase 0 или что-то в этом роде), так что в теории наверное всё возможно
guest # 0 ⇈
* lint: c
* Critic: Perl
* Rubocop: Ruby
* flake8, pylint, mypy: python
* eslint, tsc: TypeScript
guest # 0 ⇈
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.
Desktop # 0 ⇈
только к формальной проверке корректности это не имеет особого отношения. и в чистом рэкете я её не вижу
пример контракта, который сработает в рантайме
https://docs.racket-lang.org/guide/contracts-general-functions.html#%28part._contracts-arrow-d%29
Desktop # 0 ⇈
только к формальной проверке корректности это не имеет особого отношения. и в чистом рэкете я её не вижу
пример контракта, который сработает в рантайме
https://docs.racket-lang.org/guide/contracts-general-functions.html#%28part._contracts-arrow-d%29
Fike # 0 ⇈
guest # 0 ⇈
Сначала прочитал как "это реализуется на в библиотеке а в оперативной памяти"
Fike # 0 ⇈
guest # 0 ⇈
Меня заебали, грубо говоря, ПХП
Desktop # 0 ⇈
Desktop # 0 ⇈
o6AMa_4MO # 0 ⇈
o6AMa_4MO # 0 ⇈
Fike # 0 ⇈
guest # 0 ⇈
o6AMa_4MO # 0 ⇈
HoBorogHuu_nemyx # 0 ⇈
А какие багры ты знаешь?
Desktop # 0 ⇈
https://docs.racket-lang.org/guide/contract-boundaries.html
Fike # 0 ⇈
3.14159265 # 0 ⇈
В питоне это называют декораторами.
Придёт джавух и расскажет что это аннотации и АОП.
Придёт Снаут и объяснит что-то про high order functions на хаскельном сленге.
Но до полноценной Ады и coqmpile-time proof мало кто дорос.
Fike # 0 ⇈
Декораторы - это именно выполняющийся кусок кода, который в теории может что угодно натворить
Fike # 0 ⇈
Декораторы - это именно выполняющийся кусок кода, который в теории может что угодно натворить
3.14159265 # 0 ⇈
Впрочем лобок тоже ведь из этой хуйни творит чудеса кодгена.
Fike # 0 ⇈
guest # 0 ⇈
Джавист: Вот я джавист, в начале каждого метода я пишу лог
Тролль: Но почему не взять AOP?
Джависит: АОП ГАВНО НЕ НУЖНО АПО АОП ТОЛЬКО ВСЕ ПОРТИТ ПОТОМ КОД НЕ ПОНЯТЬ111111111
****
Питонист: Я питонист, я использую декораторы
Джавист: Да, прикольная штука, мне нравится
CBuHOKYP # 0 ⇈
guest # 0 ⇈
* декораторы
* декоратор @property из коробки
* всякие модельки в Django и SQLAlchemy тоже довольно декларативные
Fike # 0 ⇈
Естественно, 99% использования - это проверить что там юзер прислал в жсоне или параметрах запроса
Естественно, все опечатки тупо идут нахуй и не десериализуются в поля (= юзер даже не знает, что он что-то неправильно передал)
Естественно любой ошибочно указанный тип приводит не к сообщению об проваленной валидации, а к эксепшену со стектрейсом без внятной информации о том, а что собственно пошло не так
Скриптушня с диктами и всякими JSON-схемами куда лучше подготовлена к реальному миру и применению, чем вот это всё
guest # 0 ⇈
Потом пришли смузихлёбы-калоеды и теперь у нас
Fike # 0 ⇈
В принципе, это решается подпихиванием валидации схемы до десериализации, только кто ж их писать будет, и вообще у нас тут всё стат типизированные, мы же не динамические лошки, у меня язык сам по себе схема =))))))) )) )) ) )
guest # 0 ⇈
Fike # 0 ⇈
Fike # 0 ⇈
Fike # 0 ⇈
В ячейку. В одну ячейку. И вообще, зачем в одну, если логично в две?
guest # 0 ⇈
Рекорды были в поскале
guest # 0 ⇈
https://twitter.com/allofmewants/status/1617491182271201280
Fike # 0 ⇈
Desktop # 0 ⇈
– бля
guest # 0 ⇈
кротовуха
фу как можно работать в эдалт сфере будучи квиром? Это нечестно как минимум
Desktop # 0 ⇈
Desktop # 0 ⇈
DypHuu_niBEHb # 0 ⇈
DypHuu_niBEHb # 0 ⇈
Fike # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
-------
Вообще, подросткам иногда правда кажется что их какие-то переживания там про еблю охуенно важны всему миру потому что они неебаца оригинальные и сложные, в моем детстве тоже так было. Но не было твиттера. И квиров.
Fike # 0 ⇈
охуенно
охуенно
охуенно
и ничего ведь в голове не щёлкает
Fike # 0 ⇈
охуенно
охуенно
охуенно
и ничего ведь в голове не щёлкает
секс-рабы миграции
вспоминается та гениальная статья с хабра "меня перевезли в другую страну и выкинули на мороз"
Fike # 0 ⇈
ну слушай, вообще-то это AI-complete задача
Fike # 0 ⇈
а я бы наверное прекратил хрюкать, да только как?
...только спустя пару абзацев приходит понимание, что "мы" - это она про себя. это она так взяла кальку с they/them и перенесла на себя.
Desktop # 0 ⇈
fixed
Desktop # 0 ⇈
fixed
guest # 0 ⇈
Квир-Ленин
Такой молодой
И юный квиртябрь впереди (и в заде тоже)
guest # 0 ⇈
придя домой я весь вечер я рыдала от осознания что а)горизонтальность и общность о которой я так мечтала вылетели в трубу
Desktop # 0 ⇈
guest # 0 ⇈
Desktop # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
ну то есть нет конечно спал
но просто спал вобще без секса
ну то есть что считать за секс
Fike # 0 ⇈
что же произошло у этих?
1) две квир-коммуны не ладят
2) месяц готовили выпуск подкаста, потом разругались каким он должен быть
3) пошла нахуй (семь раз!!!)
4) всё остальное ещё менее примечательно
Fike # 0 ⇈
что же произошло у этих?
1) две квир-коммуны не ладят
2) месяц готовили выпуск подкаста, потом разругались каким он должен быть
3) пошла нахуй (семь раз!!!)
4) всё остальное ещё менее примечательно
https://twitter.com/ed_mechanics/status/1617705848670912513
Fike # 0 ⇈
https://twitter.com/MikeYagupian/status/1617979531977195520
guest # 0 ⇈
Fike # 0 ⇈
https://twitter.com/MikeYagupian/status/1617979531977195520
ISO # 0 ⇈
Да, вот это самый лютый пиздец, конечно.
ISO # 0 ⇈
> + сказал что за непрошенное мнение посылают нахуй и послал нахуй
Бля, тут аж взвизгнул.
JloJle4Ka # 0 ⇈
guest # 0 ⇈
Ну дедов метод это байт плюс энды конечно
Desktop # 0 ⇈
JloJle4Ka # 0 ⇈
Desktop # 0 ⇈
JloJle4Ka # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
Desktop # 0 ⇈
JloJle4Ka # 0 ⇈
Desktop # 0 ⇈
JloJle4Ka # 0 ⇈
Desktop # 0 ⇈
ЧТО ЗА ГОВНО ТЫ НАПИСАЛ ДА ПОШËЛ ТЫ НАХУЙ
🙂
HE_OTBE4Au_YE6KY # 0 ⇈
guest # 0 ⇈
если бы фергана...
guest # 0 ⇈
А как еще можно сделать?
Desktop # 0 ⇈
а где должен счётчик храниться?
типа есть структура со счётчиком и указателем на void, где типа объект?
guest # 0 ⇈
ну либо можно их рядом хранить, но без обобщенного программирования получится очень грязно, так что лучше бы не
guest # 0 ⇈
В Сишке наверное можно через незакрытый массив как-то наебенить но нужно выравнивание и пр
Desktop # 0 ⇈
я как-то делал по-ротоёбски, когда счётчики по разным структурам рядом с данными лежали, чтобы void* не кастовать 😀
guest # 0 ⇈
а можно кстати амкароёбить
guest # 0 ⇈
Всё, теперь в си управление памятью автоматическое, и код стал безопаснее. Продам макрос MK любому разработчику критических важных приложений
Desktop # 0 ⇈
guest # 0 ⇈
Desktop # 0 ⇈
Desktop # 0 ⇈
а то каждый питух сможет счётчик попердолить
guest # 0 ⇈
либо делать непрозрачный тип: алиас для void*, и обратно всегда кастить
ps: но на самом деле конечно не нужно этого ничего делать, а нужно брать Rust или C++
Desktop # 0 ⇈
guest # 0 ⇈
3.14159265 # 0 ⇈
Свифт гораздо менее отвратный и у яблок есть поддержка.
guest # 0 ⇈
Что будет если я хочу передать структуру из двух полей по 4 байта каждый в какую-то функцию?
* куча + Ref Count
* escape analysis при компиляции и передача через RAX
* всем похуй
guest # 0 ⇈
Desktop # 0 ⇈
Работать с указателями можно, но по поводу тонкостей надо курить доку, я редко таким пользовался
guest # 0 ⇈
то есть у вас есть разница между структурой и классом, как в C#?
Desktop # 0 ⇈
Но структуры копируются, классы по ссылке
Desktop # 0 ⇈
Desktop # 0 ⇈
с другой стороны, а зачем в шарпе разделение на value type? коллекции всё равно по ссылке передаются, а кмк это было бы главным бенефитом
guest # 0 ⇈
Я не знаю зачем, предполагаю:
* семантика value types: ты всегда явно копируешь что-то и сравниваешь по всем полям (а не по указателю). Это бывает удобно когда ты знаешь, что callee не засрёт переданное значение и что нет нужды вручную реализовывать Equals
* все таки массив структур будет занимать меньше памяти и меньше нагружать GC. Нет нужны пирдолица с представлением структур или наборов флагов интом (как иногда делают в высоконагруженных кусках яжы)
* ну на мелочевку типа передачи Point тоже не тратится время GC
Мы все вкурсе, что недолго живущие объекты в GC это семечки, но курочка по зёрнышку клюет, а весь двор в дерьме.
Есть конечно всякое лукавство типа если функция принимает интерфейс, то структура боксится (динамический полиморфизм же) то в целом можно много кода написать не тронув GC
Кстати, массивы в сишке тоже не копируются. В крестах копируется std::array и всякие STL коллекции
Desktop # 0 ⇈
– поясните мысль
guest # 0 ⇈
https://curryncode.com/2016/09/28/coding-for-performance-struct-vs-class/
Заголовок объекта в куче занимает 16 байт (на x64): Указатель на RTTI для таблицы методов и вероятно для рефлексии, и какое-то недокументированное говно в котором вероятно хранится хеш (который первый раз выводится из адреса памяти, но потом сохраняется видимо на случай передвижения объекта) и лок (в CLR каждый объект может быть локом для синхронизованных мтеодов как и в JVM)
Не велика беда для одного питуха, но если у тебя есть структура из двух интовых полей, то она занимает 8 байт. А класс занимает 24, плюс сам указатель 8 байт, то есть памяти нужно больше ровно в 4 раза.
Когда у тебя массив из двадцати миллионов таких структур то разница уже есть.
Кроме того, структуры уложены в массив последовательно, и отлично работает префетчер и кеш. А у классов там лежат указатели по которым надо куда-то идти, и в каких-то случаях reference locality может объебаться
Desktop # 0 ⇈
и, возможно, перекрывает оверхед на 100500 копирований (особенно, если там memcpy лол)
guest # 0 ⇈
Desktop # 0 ⇈
или ты про ref?
в свифте кстати так не сработает, там тоже есть out параметр, только вот под капотом, насколько знаю, будет уже два копирования
guest # 0 ⇈
Если ты пишешь свой фреймворк то выбор между структурой и классом должен зависеть от семнатики, а не от перформанса, кмк.
Точно так же как Goвнари выбирают между указателем и копированием thisа в методе.
Desktop # 0 ⇈
просто в тех же крестах ты делаешь этот выбор по месту использования, а в свифте при декларации. угадай, что гибче?
guest # 0 ⇈
К примеру, запретив копирование ты можешь сделать хуйню, которую никогда нельзя передать по значению. А если еще и мув запретить, то будет и вовсе недвижмый класс, который "где родился -- там и пригодился". Такой копролит чтобы за пределы стекфрейма функции вынести, можно только положить в кучу, и работать по указателю: вот и будет почти reference type
Но в целом ситуация конечно намного более гибкая (всё по значению, кроме сишных массивов), и это хорошо.
В дотнете забоксить структуру достаточно легко, типа
(уверен, такой класс уже где-то есть) а вот класс в value type уже не превратить.
В расте, кстати, по умолчанию ничего не копируется, но и куча не трогается: всё мувается только (если ты явно не реализовал трейт для копирования или явно не вызвал клон) а в Go и вовсе решение принимает escape analysis в момент компиляции
TAPAC # 0 ⇈
Чалишься? По какой статье?
Fike # 0 ⇈
С чего бы она здесь забоксится? Вот с интерфейсами действительно может быть проблема, where T : Interface может боксить структуры
guest # 0 ⇈
Box это референс тайп
Fike # 0 ⇈
2. с самой структурой-то ничего не произойдет
guest # 0 ⇈
Речь шла о том, что создавая структуру я вынуждаю работать с ней по значению (hence, копировать). Однако я могу передать ее по референсу используя ключевое слово "ref", а могу обернуть её в такой вот нехитрый класс, тем самым забоксив её и всегда передавая ее по указателю
Desktop # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
https://govnokod.xyz/_28567/#comment-844582
3.14159265 # 0 ⇈
Где там С++, guest6?!
3.14159265 # 0 ⇈
Где там С++, guest6?!
guest # 0 ⇈
3.14159265 # 0 ⇈
Так уже таскали и много раз обсуждали на ГК этого франкенштейна.
https://govnokod.ru/12337#comment165170
Просто не пойму что такого особенного.
Ну уродец-выкрест, жертва инцеста от спаривания близкородственных языков.
3.14159265 # 0 ⇈
Где там С++, guest6?!
3.14159265 # 0 ⇈
На самом деле конечно не нужно этого ничего брать, а нужно писать на Си.
guest # 0 ⇈
3.14159265 # 0 ⇈
Условно g_object_ref() / g_object_unref()
3.14159265 # 0 ⇈
Условно g_object_ref() / g_object_unref()
Просто эти умные рефкаунты имеют смысл только в многопоточной среде.
Сишка никогда не была нацелена на многопоточность.
Буквально вчера писал об этом:
https://govnokod.ru/28528#comment805893
guest # 0 ⇈
3.14159265 # 0 ⇈
Условно g_object_ref() / g_object_unref()
Просто эти умные рефкаунты имеют смысл только в многопоточной среде.
Сишка никогда не была нацелена на многопоточность.
Буквально вчера писал об этом:
https://govnokod.ru/28528#comment805893
3.14159265 # 0 ⇈
На самом деле конечно не нужно этого ничего брать, а нужно писать на Си.
Просто соблюдать паттерн.
guest # 0 ⇈
ВРАГ НЕ ПРОЙДЕТ
HoBorogHuu_nemyx # 0 ⇈
На хузе сейчас эту кнопку лучше не трогать, потому что она распидорашивает текст. Пиши порциями коротких комментариев, как в Твитторе, если боишься потерять несохранённый текст.
[email protected] # 0 ⇈
3.14159265 # 0 ⇈
До сих пор иногда так делаю, когда пишу длинный комментарий.
HoBorogHuu_nemyx # 0 ⇈
guest # 0 ⇈
GoldED
Desktop # 0 ⇈
веб штука опасная
ISO # 0 ⇈
3.14159265 # 0 ⇈
guest # 0
https://i.postimg.cc/KzrJk4mf/image.png
o6AMa_4MO # 0 ⇈
guest # 0
https://pbs.twimg.com/media/FnQCS3QX0AAMdGG?format=jpg&name=medium
o6AMa_4MO # 0
o6AMa_4MO # 0
guest # 0 ⇈
HoBorogHuu_nemyx # 0 ⇈
Desktop # 0 ⇈
HoBorogHuu_nemyx # 0 ⇈
NAMER
JUICE
COZEK
CAPTEK
guest # 0
https://plugins.jetbrains.com/plugin/15865-anime-memes
Desktop # 0 ⇈
можно только картинки поменять
Desktop # 0
интересны два момента:
1.
Voodoo2 - чистый 3D акселератор, идет в PCI slot подключается
кабель монитора и идет loop кабель на AGP ATI карту
2. в 2000-ом году уже был SLI
Desktop # 0
интересны два момента:
1.
Voodoo2 - чистый 3D акселератор, идет в PCI slot подключается
кабель монитора и идет loop кабель на AGP ATI карту
2. в 2000-ом году уже был SLI
guest # 0 ⇈
https://en.wikipedia.org/wiki/3dfx_Interactive#Voodoo_Graphics_PCI
И это не совсем SLI, это паравозик.
> The mechanical relays emitted an audible "clicking" sound when they engaged and disengaged
"барышня, соедините меня с 3Д картой"
Desktop # 0 ⇈
Desktop # 0 ⇈
inkanus_gray # 0 ⇈
3.14159265 # 0 ⇈
> в 2000-ом году уже был SLI
Ничего удивительного, это ж 3dfx и придумала.
А уже потом nVidia выкупила их с потрохами.
3.14159265 # 0 ⇈
> в 2000-ом году уже был SLI
Ничего удивительного, это ж 3dfx и придумала.
А уже потом nVidia выкупила их с потрохами.
guest # 0 ⇈
Да, палишься. Была такая файка у Стертора.
Desktop # 0 ⇈
а voodoodal16
Desktop # 0 ⇈
а voodoodal16
guest # 0 ⇈
guest # 0 ⇈
В моем детстве все знали что 3Д ускоритель вуду от здфкс с API Glide это круто. Ни у кого не было, но все знали.
Desktop # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
Это всё конечно работало если купить у метро книжечку с секретными кодами: зад-зад-вниз вперед-A+B
Desktop # 0 ⇈
– забавно, что именно эта игра привела к появлению возрастных рейтингов в гейдеве
guest # 0 ⇈
o6AMa_4MO # 0 ⇈
o6AMa_4MO # 0 ⇈
Desktop # 0 ⇈
у меня оно с другим ассоциируется
guest # 0 ⇈
из восьми залуп
три покорошено
четыре так брошено
o6AMa_4MO # 0
o6AMa_4MO # 0
o6AMa_4MO # 0
o6AMa_4MO # 0
guest # 0
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 (все так говорят, ага. После питона я уже никому не верю)
что зиговал??
[email protected] # 0 ⇈
Desktop # 0 ⇈
https://govnokod.ru/27159#comment601997
guest # 0
Вероятно у кого-то первым сексуальным переживанием детства была мастурбация на M&M's