Жораев Тимур Юлдашевич@TimurZhoraev
Доцент института МПСУ им. Л. Н. Преснухина
Информация
- В рейтинге
- 3 107-й
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Hardware Engineer, Research Scientist
Senior
От 300 000 ₽
Applied math
Software development
Code Optimization
C
Assembler
Python
Algorithms and data structures
Object-oriented design
Multiple thread
Verilog HDL
Это из разряда "я мыслю значит я существую", на самом деле абстракцией является и электрическая схема, так как физически это металлизация, последствия ионной имплантации и прочих планаризаций. И нет там никаких "0" и "1" а есть переход уровня напряжения. Да и уровень этот тоже абстрактный - измеряемое число. "Объективная реальность данная нам в ощущениях". Как раз речь идёт ширине окна этих абстракций, что есть определённый уровень когда человек уже не может вобрать в себя модель полного поведения, однако есть нюанс - это всякие О большое, которое может сделать прогноз исходя из основополагающих величин. Мне не нужно знать защищённый режим и механизмы кеширования, если есть грубо говоря нечто
, где D - запаздывание вычислений, C - размер кода, H - размер кеша, в определённых границах разумеется. То есть любая абстракция может быть сведена к математическим оценкам с точки зрения оценки быстродействия и принятия решений. А на этом уровне уже и выбирается парадигма, инструмент будь то ассемблер или даже VHDL чтобы сделать сопроцессор для ASIC-а, а может это будет такой хитрый алгоритм на обычном Питоне под Pentium Pro который превзойдёт эти все асики вместе взятые. Вот тут и начинается собственно синтез, который вычёркивает любые классы и оставляет только разметку данных и последовательность оптимальной по заданному критерию их обработки. Время таких синтезаторов собственно и подоспело, так как вмещают в себя гораздо большее окно чем человек. Это как оптимизирующий компилятор - на ассемблерном уровне весьма неплох, особенно для ветвлений, что же касается векторных расширений SIMD, там да, необходимо додумывать иногда вручную, так как важен глобальный контекст.
Там проблема была искусственная - это попытка прикрутить ООП к пакетной обработке данных, летящих к интерпретатору. Иерархия и классы - железобетонно прибиты идентификаторами к архитектуре. Веб-поведение динамично, объекты могут мутировать до состояния байта. Тем более это для поведения форм - полуфабрикат, который связывается дополнительно с разметкой документа (декларативное представление), которая как-то должна уживаться со спецификацией. Поэтому он ушёл в чисто поведенческую нишу ФП для разметки, фактически став знаком "=" в эксцеле.
Класс внутри себя ничего не хранит - это абстракция. Хранит физическая ячейка памяти располагаемая в условном массиве, который где-то на листе программиста размечен как класс. Класс может знать о том что он вообще существует, если его ID есть ячейка памяти. Класс может знать что у него есть методы, если есть таблица методов, располагаемых статически или как указатели на функции. Класс знает что он-часть иерархии, если есть таблица виртуальных функций и опять-таки его ID в ней как в линейном массиве или часть switch-case в зависимости от типа объекта при динамическом поведении.
и
), которая вообще может не знать какие объекты она использует а работает с их хешами, идентификаторами или правилами обработки типов данных. В этом случае под катом может быть любой язык программирования, так как это всё генерируется автоматически, тем же ИИ-агентом.
В этом случае действительно разнести класс как спецификацию данных и бизнес-логику (оперирует состоянием автоматов
То что класс может быть в топе - то есть на вершине стека, можно над этим подумать, действительно, иерархия может быть обработана как стек при размещении туда наследуемых объектов.
ООП нужен лишь человеку, чтобы иерархия или глубина вызовов функций влезали в его контекстное окно из 12-15 одновременно располагаемых в голове сущностей. Сложность самой программы от этого не меняется. Любую можно свести на ассемблер. Самое важное что не ввели ни в одном таком языке - это нативная поддержка статического управления, позволяя кодогенераторам или скан-ботам выявлять структуры и управлять ими на этапе разработки, то есть не вручную править классы а соответствующей IDE/редактором по спецификации объектов. По сути все изменения именно в этом механизме. На Питоне по крайней мере что-то сдвинулось с этой точки PEP 729 например. На С++/Java это замороженный 2004 год, когда упёрлись тактовой частотой в потолок и больше одиночным вычислителем уже не подчеркнуть "быстрее, выше, сильнее". Оттого и появилась "компилируемая безопасность" в попытке реализовать эти 5%. В итоге имеем интерпретируемые JSON/XML на все случаи жизни, для виду приправленные ООП, который в контексте пакетной обработки и приведения типов выворачивается наизнанку.
Да именно последовательное применение итераций есть суть кодогенерации с LLM. Не спецификация! Как это принято. А это как из куска глины гончар или скульптор начинает делать то что необходимо. Иными словами, это предсказуемость начальных условий и формирование граничных значений. Если описать всё и сразу - получим парадоксальное поведение (если не влазит в контекстное окно). Вообщем это из разряда энтропия суммы и суммарная энтропия. Диалог фактически устанавливает связи некой микро-виртуальной машины, которая вполне себе реальная в виде элементов памяти весов и пройденных путей активации нейрона по заданному уровню. В этом случае возможен выход из контекстного окна и "забытие" предыдущего результата, однако такая последовательность приводит к синтезу уже гораздо большего кода, причём он может самокорректироваться агентами по ходу генерации а также тестироваться, то есть фактически самособираться. Осталось только добавить в компиляторы вменяемые отклики, пригодные для ИИ (не на человеческом языке) а адаптированные для агентов в виде уже токенизированных идентификаторов.
Уровень синьора - это позвонить разработчикам этих языков и поставить вопрос об унификации требований на основании запросов трудящихся джунов/мидлов всех стран что это одно и то же, организовать симпозиум ISO/IEC с последующим вынесением вопросов на пленарное заседание, голосованием видных деятелей стандартизации метрологии и сертификации по приведению кодовой базы ЭВМ к актуальному уровню. А то как-то не солидно получается.
вот это кстати идея. То есть представлять не цифры, а их заменители, позволяющие быстро считать. Например, треугольники, N-угольники и их пересечение, как некий код который можно преобразовать в число. Кстати интересный вопрос - есть ли не геометрическое доказательство что
Самый хороший тест - это промпт написать виртуальную машину для абстрактного языка и промоделировать её. В принципе +- все модели делают одно и тоже так как датасеты для претрейна одинаковые. Разница в масштабировании, пока что это удаётся, но там есть предел. Много токенов не равно оптимизация большого проекта. Должны быть уже архитектурные изыскания на предмет понимания состояния контекста. Вывод для Гигачата.
make a python script that interpret virtual machine with code "a" add "s" substract, "m" for multiply accumulator and "p" to push var to stack and "u" pop from stack for string "a10s3m6p7p2a3usum" without argument use acc by default and vaue from top of stack
После чего необходимо "допилить" согласно обратной связи от ошибок интерпретатора, потребовалось 8 итераций. в ходе чего получается... не рабочйи вариант
ВайбVM
В этом примере есть ключевой момент для ИИ - несмотря на весьма маленький код, имеется генерация кода по описанию и кода по данным (которые необходимо интерпретировать). По всей видимости ИИ-модели крайне неэффективно "представляют" внутри интерпретацию данных, то есть "делай на примере", хотя запрос и сам промпт сформулирован довольно точно чтобы ИИ автоматом определил граничные значения и форматы. Строка-пример, по всей видимости, существенно ломает контекст.
Тут другой ключевой аспект - стандарты ЯП и вот эти самые данные содержат все предыдущие 50+ лет становления IT в том виде котором оно сейчас есть. Фактически привнесение новых элементов в код или данные это синтаксический сахар уровня дообучения или даже RAG. В некотором смысле подведена черта под дальнейшим развитием языков и будет некий промпт-инженеринг, заключающийся просто в мониторинге синтаксических деревьев и синтетических тестов. То есть задача формализуется поведением и границами чем непосредственной её реализацией.
10 ГБ репа из них 99.9% данные, вспомогательный UI и 0.00001% непосредственно математического аппарата (ядра) кода. Так вот ИИ позволит эти микропроценты соптимизировать так, что они будут определять 99% быстродействия и функционала всей системы. Там "коэффициенты усиления" просто колоссальные. А уровень понимания и матаппарата для оптимизации код-данные-память-вычислитель уже практически как PhD Computer Sciense а не джуниор.
Очень важно при этом предоставлять инфу из вывода терминала-логов итд. Мы буквально недавно отладили очевидную ошибку, но скрывшуюся за inlcude. Компилятор не указал что нет прототипа функции и возвращал значение через регистр аккумулятора в DSP, вместо стека или вспомогательного FPU регистра. Скормив ему вывод дизассемблера (с включённой опцией кода), состояние регистров, map-файл размещения в памяти, порядка линковки библиотек удалось выловить комплексную проблему и с памятью, и с тем что инклудить, как вызывать матфункции, какие аргументы double-float итд итп. То есть фактически проблема должна содержать сам тест и результаты теста, а также инлайны от ИИ, которые он предлагает. Желательно инлайны делать не текстом а в виде придуманных для себя идентификаторов тест 0xA,тест 0xB, чтобы сэкономить контекстное окно. Уже не представляю эмбеддед разработку без ИИ. Причём уровень хоть в машинных кодах хоть на ассемблере хоть на питоне для МК. Там могут быть даже чудеса из микса C в контроллере + описание логики на Verilog/VHDL.
Кто бы что не говорил но плагины к VSCode от Сбера (GigaCode) и Яндекса (SourceCraft) вполне себе рабочие решения с приличным окном в 128 килотокенов или ~полмегабайта данных. Сильных глюков не обнаруживается даже на 1000 строках. Отличный вариант для уже структурированных вручную проектов. Контекст можно "скармливать" в виде файлов или вывода терминала. Желательно общаться на английском, так как, естественно, датасеты для претрейнинга это гитхабы, стэкэксченджы итд. Скорее всего даже чаты и форумы со всего мира переводятся на английский автоматом а уже потом идут как трейнингсэт, даже в этом случае вполне приемлемый результат по коду. Вообщем не важно какой язык фактически оперирование идёт с неким пока ещё "виртуальным" абстрактным синтаксическим деревом, включающим общую спецификацию всех языков программирования, включая HDL/SQL релейную логику и прочую экзотику.
Самый краткий пример. Заходим на Сбер-Гигачат и просим сгенерировать объекты в общем виде. Например, задать массив начальных координат окружностей и их диаметров, располагаемых внутри квадрата 640x480, причём диаметры случайные и не превышают от 1/10 до 1/3 величины экранной области. Координаты внутри области. Сетка только целочисленная. Итак.
Промпт 1. Make a python script contains screen size of 640 x 480 with array of array of [x0,y0 and d] of some circles
Вполне рабочий вариант. Мы создали объекты в виде массива в массиве. Теперь просим инкапсулировать данные в объект. Объект - это формальный контейнер для данных, имеющий неявный идентификатор. Методы объекта - имеют неявный идентификатор - указатель на объект (его местоположение). Пишем.
Промпт 2. make cirles as class incapsulate x0 y0 and diameter
Получили всё тоже самое. Теперь модернизируем объекты в иерархию - добавим обычные круги и цветные а также сделаем итерацию по объектам динамическую - то есть вызов функции по указателю, являющимся фактически идентификатором объекта (таблица виртуальных функций с индексом/списком switch-case как угодно)
make a colored circle as subclass to base circle without color and make dynamic behaviour
В этой схеме мне важно указать не абсолютные данные в объекте а относительные, то есть что привносится, а что удаляется (на C++ это private) а то как реализовать поведение - отдельный вопрос. В коде видно, что ИИ разделил поведение без виртуальных функций (и правильно сделал) с отдельными экземплярами контейнеров, заставим собрать "как в учебнике" объекты в единый контейнер. То есть несмотря на наличие иерархии это ещё не ООП (!), т.к. нет поведенческого полиморфизма. ООП = состояние+поведение+идентичность+полиморфизм.
make base_circles and colored as single array with different objects
Теперь если посмотреть то фактически мы описываем не сами объекты, а то что они содержать и как взаимодействовать с окружением. То есть нам без разницы что это - список, класс, иерархия, полиморфизм или нет. Нам важно чтобы это влезло в контекстное окно. Теперь добавим ограничение в сами объекты. Пишем
make restricion of coordinates at each circle object constructor no more than 320x200 by x0 and y0 and saturate these values. Generate circles with random diameter from 1/10 to 1/3 of screen size
Вообщем теперь любой (!) язык собственно становится ассемблером для промптов, которые рано или поздно будут приведены к поведению некоего универсального языка запросов и формирования данных. А парадигма и всё остальное выбирается исходя из заданных ограничений и архитектурных особенностей. Включая оптимальную по разным критериям оптимизацию (память, быстродействие, отклик, пропускная канала связи итд).
Можно также умножать на 11 - посредине сумма крайних цифр
и прочие приёмы, чтобы свести к данным правилам, равно как для цифр, близких к 10 сложением-вычитанием
как сумма-разность квадратов итд. Ну и конечно же
(логарифмическая линейка), включая поиск по LUT. То есть достаточно запомнить хотя бы 2,4,8,16...65536. Включая метод последовательных итераций с остатками от деления, метод Ньютона применимо к умножению и др.
,
, найти
приближающее дробь к
за минимум итераций.
Визуально все ОС уже в браузере, включая ИИ. Так что как то так незаметно HTML-рендер стал фактически движком для всего остального что есть в ОС для пользователя.
Лучше привести какие-либо численные параметры. Или более точные формулировки. Например, работа по регламенту
, или если работа с изменяющимися условиями работодателем то
.
Вот тут у многих недопонимание. Программировать - это фактически рисовать элементы абстрактного синтаксического дерева в виде блок-схем по ГОСТ 19.701-90. Вне этого - просто изучение синтаксиса языков программирования для ввода в ЭВМ этой блок-схемы. В подавляющем большинстве бухгалтерских задач хватит Fortran образца конца 50-х, собственно он и есть - транслятор формул. Всё остальное строго говоря программированием не является а есть реализация протоколов и API согласно некоего коллективного ТЗ. Тот же самый С создан Риччи и Керниганом образно говоря в курилке Bell Labs просто как хороший и удобный инструмент. И куда не ткни везде примерно такой подход. Это уже потом накрутили это как общепромышленный или международный стандарт. Вообщем нарочно не придумаешь. Так вот ИИ и предлагает принципиально новую парадигму минуя этап структурирования и проектирования объектов (это в подавляющем большинстве случаев справочный шаблон) а непосредственную реализацию последовательности действий или конечного результата и не важно на какой платформе или фреймворке это сделано.
Самое главное в C23 для эмбеддинга это типизированные enum-ы и битовые поля на их основе. Теперь наверняка можно нормально в отладчике просматривать текст а не цифры регистров.
Боюсь это уже несколько старомодно.
Слишком долго изучать то где есть синтаксис, когда проще использовать С-ассемблер
make simple application on C winapi for SDL 1.2 please
Add error and exception catch using C
Тот кто составлял маршрут и загружал его в датасет для обучения ИИ скорее всего ехал на FPV-дроне.
Простой проект уровня например, монитора порта с выводом на экран и общением по usbtty вполне можно теперь делать промптами без единой сточки кода вручную, сам себе сделал несколько мониторов. Плюс по мелочам различного рода генерировалки изображений, парсеры, утилиты, обработчики, тесты. То есть вот эта вся возня и занимает порой пожалуй 95% времени, когда ключевой аспект алгоритма или матаппарат делается за 5 в виде пары формул. ИИ позволяет в существенной мере автоматизировать эту рутину, особенно что касается рефакторинга а уж тем более генерации доков, графиков, обработки данных, приведение данных в формат для последующей итерации. Незаменимый инструмент вот уже более двух месяцев. Перефразируя классику: 128 кБ контекстного окна хватит всем.