Универсальный язык программирования

Тема в разделе "WASM.LANGS", создана пользователем Dmitriy1973, 9 окт 2026.

  1. Dmitriy1973

    Dmitriy1973 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2026
    Сообщения:
    5
    Привет, WASM.
    Работаю над средой разработки, где высокоуровневый код, ассемблер и машинный код — это три синхронизированные колонки (похоже на Hiew, но с двусторонним редактированием). Изменение в любой колонке автоматически пересчитывает остальные.
    Идея не в том, чтобы заменить существующие инструменты, а в том, чтобы дать единую поверхность для разных задач:
    • Для опытных разработчиков и при разборе чужого кода: можно выделить интересный низкоуровневый фрагмент в первых двух колонках и в редакторе третьего столбца оформить его как свою пользовательскую команду. Дальше она используется как обычная абстракция, но без потери прозрачности: всегда можно развернуть и посмотреть, что там внутри. Это способ фиксировать и переиспользовать низкоуровневые трюки.
    • Для проектирования железа и разговора с производителями: через редактор первой колонки можно проектировать собственную логику команд и формировать спецификацию: «хочу вот такие команды, вот сколько тактов они занимают, вот сколько логических элементов нужно». Четвёртая (сейчас скрытая) колонка даёт прогноз стоимости: такты, логические элементы, энергозатраты.
    • Для обучения и перехода от высокого уровня к железу: студент видит не абстрактную теорию, а прямой путь: высокоуровневая абстракция → ассемблер → машинный код → стоимость в тактах и элементах. Это помогает сформировать интуицию о цене каждой строчки кода.
    Хочу услышать мнение сообщества не про сам язык, а про такой подход к инструменту:
    1. Насколько востребована возможность создавать свои команды поверх существующего ISA именно в реальной разработке (не в экспериментах)? В каких задачах это реально экономит время?
    2. Есть ли подводные камни в самой идее двустороннего редактирования (изменение машинного кода → пересчет ассемблера и высокоуровневой абстракции)? Где такая модель ломается на практике?
    3. Насколько реалистично использовать такую среду как спецификацию для проектирования железа? Какие метрики и данные в ней были бы действительно полезны для разговора с производителем чипов?
    4. Как вы видите место такого инструмента в современном рабочем процессе? Это дополнение к существующим IDE/ассемблерным средам, или отдельная ниша?
    Не ищу похвалы. Мне нужны жёсткие контраргументы: где эта идея упирается в реальные ограничения компиляторов, ISA или производственных процессов.
    Спасибо за любые мысли.
     
  2. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
    Если я не ошибаюсь, компиляция - это процесс с потерями. Информация об именах переменных, типах данных, структурах управления (циклы, условия) безвозвратно теряется, если только компилятор специально не сохранил её в отладочных символах.
     
  3. ml64

    ml64 Active Member

    Публикаций:
    0
    Регистрация:
    29 окт 2017
    Сообщения:
    146
    GUI
    Как человек, работающий с графикой, скажу: колонки - это не всегда удобно.
    Количество строк на ЯВУ всегда будет меньше количества инструкций, поэтому первая колонка будет полупустая.
    Как изменять размер окна/колонок? Тот же вопрос для случая, когда у пользователя два монитора.
    А если у кого-то один, но маленький (например, ноутбук у студента).

    Содержание
    1. ЯВУшники пишут код лесенкой по поводу и без повода, поэтому в первой колонке будет видно только начало строки,
    тогда строку придётся переносить, и их драгоценная лесенка потеряет смысл.
    2. Какой смысл в колонке машинного языка без состояния регистров и дампа памяти?

    Имхо
    По описанию Ваша концепция похожа на "визуальное программирование".
    Я уже живо представил себе Dynamo из Revit, Param-O из ArchiCAD или Grasshopper для Rhinoceros 3D.
    Ну или Scratch для студентов MIT.
    Имхо, такое представление было бы вполне современным: кликабельный нод с кодом ЯВУ, а по клику появляется тег с пояснением
     
  4. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
    Как человек иногда пишущий на dephi 7, скажу. Надо сделать в виде 3 отдельных вкладок.
    Все это можно добавить в последней вкладке. Они не обязательно должны быть одинаковыми по инструментарию.

    Имхо, добавить точки останова в эту вашу ide, тогда будет благодать.
     
  5. ml64

    ml64 Active Member

    Публикаций:
    0
    Регистрация:
    29 окт 2017
    Сообщения:
    146
    Кстати, предлагаемый подход исключает оптимизацию
    --- Сообщение объединено, 9 окт 2026 ---
    Tabbed-interface. Тоже вариант. Но современные студенты - это уже даже не зумеры. Это альфы. Им надо красивые картиночки, они без картиночек не могут
     
  6. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
    creating-simple-tabbed-interface-with-pure-css.jpg
     
    Dmitriy1973 нравится это.
  7. ml64

    ml64 Active Member

    Публикаций:
    0
    Регистрация:
    29 окт 2017
    Сообщения:
    146
    Вообще идея хорошая.
    Интерпретатор языка BASIC - это банальность. Интерпретатор Явы, Питона - тоже не удивишь.
    А вот интерпретатор C++26 - это что-то свежее. Стоит попробовать.
    Ещё между ЯВУ и ассемблером надо предусмотреть таб с байт-кодом. Ну, как бы. Для полноты
     
  8. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
    Всегда было интересно можно ли написать норм компиль C/C++ на питоне.
    Там есть хорошие средства парсинга. Без длинных портянок кода как в gcc.
     
  9. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    922
    ml64,

    Тот что был в спекки(zx) - гениальность.
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.456
    Лучше средства для парсинга С/С++, чем libclang, ты не сделаешь. И в принципе мечтать об интерпретаторе С++26 - это утопия, хотя бы с точки зрения того, что придется в какую-то сторону завернуть все возможные undefined/unspecified behaviour, в какую-то сторону определить все зависимые от платформы вещи int/long/long int и многие еще непростые вещи.
     
  11. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
    Тогда для ассемблера (fasm/masm синтаксис). Имхо, там гораздо проще чем парсинг С/С++. Open Source компилятор в 1000-1500 строк. Python выигрывает не в скорости, а в том, что задача ложится на его сильные стороны.
     
  12. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    922
    Application,

    Ты хочешь не интерпретировать язык, а эмулировать компилятор. A=B, C=B, out=C. В двух случаях результат разный, до компиляции есть переменные и taint, после компиляции этих сущностей нет.
    Раньше нужно было понять язык, это недалеко от совершенства делают бям и могут символическое исполнение и восстановить логику. Теперь же нужно наоборот, какой то невнятный изврат с компиляцией, wtf?. Это какая то плохая школа.

     
    Последнее редактирование: 11 окт 2026
  13. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
  14. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    604
    Вот вы тут все что-то обсуждаете, а вы все поняли, что имел в виду топикстартер? Я вообще не понял, чего он хочет сделать и как вообще видит себе, как это будет работать и как и кем будет использоваться.
     
  15. Dmitriy1973

    Dmitriy1973 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2026
    Сообщения:
    5
    Привет уважаемое сообщество WASM.
    Спасибо за Ваши отзывы. Мне понравилась Ваша идея с внешнем видом языка. Это не главное в языке, в конце концов, можно сделать изменяемый вид (для эльфов), но вот только не пойму, почему Вы игнорируете название темы «универсальный язык программирования». Я считаю, что получиться действительно универсальный язык (который может всё). Я понимаю, что для Вас универсальный язык программирования, это как красная тряпка для быка, но я прошу отнестись к этой идеи без эмоций, а с холодным расчетом. Я уже писал – «Работаю над средой разработки», поэтому план реализации такого языка готов. Рассмотрим эту реализацию. Есть три столбца. Первый столбец это машинный код. Второй столбец это команды ассемблера (выглядит пока как программа hiew и та же взаимосвязь между столбцами). Третий столбец это ассоциации программиста. Есть еще и нулевой столбец (пока думаю сделать скрытым и показывать по желанию) который считает количество тактов, количество транзисторов, затраты энергии. У всех столбцов есть свой редактор (их тоже четыре). Рассмотрим работу третьего столбца с его редактором. Допустим, Вы описали (есть возможность загрузить готовые) логику работы первого и второго столбца для x86 процессора. Дальше вы пишите во втором столбце (на ассемблере) свои программы и Вы замечаете что часто используете один и тот же код. Например очистку экрана для реального режима текстовый режим экрана (это для примера, чтобы понять логику работы, поэтому не судите строго)
    Код (ASM):
    1. PUSH BX
    2. PUSH CX
    3. PUSH DX
    4. PUSH BP
    5. MOV BP, SP ; для корректного доступа, если нужно
    6. MOV AH, 06h ; функция BIOS: прокрутка окна (очистка)
    7. XOR CX, CX ; (0,0) — левый верхний угол
    8. MOV DX, 184Fh ; (24,79) — правый нижний угол (80x25)
    9. INT 10h ; BIOS видео-сервис
    10. ; Возврат курсора в (0,0)
    11. MOV AH, 02h ; функция: установка курсора
    12. XOR BX, BX ; страница 0
    13. XOR DX, DX ; DH=строка, DL=столбец -> (0,0)
    14. INT 10h
    15. POP BP
    16. POP DX
    17. POP CX
    18. POP BX
    19. RET
    И получаете одну и туже последовательность цифр
    Код (ASM):
    1. 53 ; PUSH BX
    2. 51 ; PUSH CX
    3. 52 ; PUSH DX
    4. 55 ; PUSH BP
    5. 89 E5 ; MOV BP, SP
    6. B4 06 ; MOV AH, 06h
    7. 29 C9 ; XOR CX, CX
    8. BA 4F 18 ; MOV DX, 184Fh
    9. CD 10 ; INT 10h
    10. B4 02 ; MOV AH, 02h
    11. 33 DB ; XOR BX, BX
    12. 33 D2 ; XOR DX, DX
    13. CD 10 ; INT 10h
    14. 5D ; POP BP
    15. 5A ; POP DX
    16. 59 ; POP CX
    17. 5B ; POP BX
    18. C3 ; RET
    В редакторе третьего столбца пишите название команды. Например «очистить экран». Дальше пишите такой код.
    Код (ASM):
    1. ClearTextCode DB 53h, 51h, 52h, 55h, 89h, 0E5h ; PUSH BX, CX, DX, BP; MOV BP, SP
    2. DB 0B4h, 06h ; MOV AH, 06h
    3. DB 29h, 0C9h ; XOR CX, CX
    4. DB 0BAh, 4Fh, 18h ; MOV DX, 184Fh
    5. DB 0CDh, 10h ; INT 10h
    6. DB 0B4h, 02h ; MOV AH, 02h
    7. DB 33h, 0DBh ; XOR BX, BX
    8. DB 33h, 0D2h ; XOR DX, DX
    9. DB 0CDh, 10h ; INT 10h
    10. DB 5Dh, 5Ah, 59h, 5Bh, 0C3h ; POP BP, DX, CX, BX; RET
    11. CopyClearTextCode PROC
    12. PUSH AX
    13. PUSH CX
    14. PUSH SI
    15. PUSH DI ;Настраиваем SI на начало константы
    16. MOV AX, CS ; код и данные в одном сегменте (CS)
    17. MOV DS, AX ; используем DS для доступа к ClearTextCode
    18. LEA SI, ClearTextCode ; SI = смещение константы
    19. MOV CX, 23 ; длина копирования
    20. CLD ; направление вперёд
    21. REP MOVSB ; копируем CX байт: [DS:SI] -> [ES:SI]
    22. POP DI
    23. POP SI
    24. POP CX
    25. POP AX
    26. RET
    В будущем Вы пишите в третьем столбце очистить экран и после нажатия ENTER язык ищет в редакторе третьего столбца название очистить экран и делает прыжок, на Ваш код, записанный в редакторе (через CALL) и уже ваш код заполняет первый столбец. Ну а первый столбец делает всю оставшуюся работу.
     
    Последнее редактирование модератором: 15 окт 2026
  16. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    922
    Dmitriy1973,

    Вы самостоятельно, без знания прочих макросред" прог-я изобрели макрос, поздравляю :preved:
    Но он не дает универсальности и вообще что это ?
     
  17. ml64

    ml64 Active Member

    Публикаций:
    0
    Регистрация:
    29 окт 2017
    Сообщения:
    146
    Универсальный язык программирования (далее - УЯП) - это концепция кроссплатформенного многозадачного языка.

    Классифицирующие признаки УЯП:
    1) По уровню абстракции
    Язык высокого уровня: Абстрагирован от аппаратного обеспечения, использует человекочитаемый синтаксис.
    2) По способу исполнения (трансляции)
    JIT-компиляция: Код сначала переводится в промежуточное представление (байт-код), а затем во время выполнения компилируется в машинный код «на лету».
    3) По парадигме программирования
    Декларативный: Программист описывает что нужно получить, а не как.
    4) По системе типов
    Динамическая типизация: Тип переменной определяется во время выполнения.
    5) По области применения
    Системное программирование, Игровая индустрия, Мобильная разработка, Научные вычисления и Data Science, Встраиваемые системы и IoT, Веб-разработка.
    6) По поколениям
    5-е поколение: Языки логического программирования.
     
    Последнее редактирование: 11 окт 2026
  18. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
    Может надо сузить фокус? Не «универсальный язык», а «визуальный макроассемблер для обучения», например.
     
    Mikl___ нравится это.
  19. ml64

    ml64 Active Member

    Публикаций:
    0
    Регистрация:
    29 окт 2017
    Сообщения:
    146
    Интерфейс:
    0) нулевой столбец, который считает количество тактов, количество транзисторов, затраты энергии
    0,5) столбец, который трассирует микрокод; <--- надо добавить, иначе не получится перехода от транзисторов к опкодам;
    0,75) столбец, который трассирует кэш в рантайме;
    1) машинный код;
    2) ассемблерный код;
    3) УЯП.
    4) Четвёртая (сейчас скрытая) колонка даёт прогноз стоимости
     
    Последнее редактирование: 11 окт 2026
  20. Dmitriy1973

    Dmitriy1973 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2026
    Сообщения:
    5
    Ahimov, Вы не прочитали, а только посмотрели код. Жаль. тогда вот Вам другой пример
    Код (ASM):
    1. model small
    2. .stack 100h
    3. .data
    4. exeName  db 'MYPROG.EXE', 0  ; имя создаваемого файла
    5. handle  dw 0
    6. errMsg  db 'Oshibka sozdaniya EXE!$'
    7. okMsg  db 'EXE sozdan!$'
    8. ; --- Заголовок MZ (32 байта) + код создаваемой программы ---
    9. ; поля: подпись, байты последней страницы, страницы, релокации,
    10. ; размер заголовка, min/max память, SS, SP, CS, IP и т.д.
    11. exeImage  db 4Dh,5Ah  ; 'MZ'
    12.   db 26h,00h  ; байты последней страницы: 38 (32 заголовок + 6 код)
    13.   db 01h,00h  ; число страниц по 512: 1
    14.   db 00h,00h  ; число релокаций: 0
    15.   db 02h,00h  ; размер заголовка в параграфах: 2 (32 байта)
    16.   db 00h,00h  ; мин. доп. память
    17.   db 0FFh,0FFh  ; макс. доп. память
    18.   db 00h,00h  ; смещение SS
    19.   db 00h,01h  ; SP = 0100h
    20.   db 00h,00h  ; контрольная сумма (не проверяется)
    21.   db 00h,00h  ; IP = 0
    22.   db 00h,00h  ; смещение CS
    23.   db 1Eh,00h  ; смещение таблицы релокаций
    24.   db 00h,00h  ; номер оверлея
    25.   db 00h,00h,00h,00h,00h,00h ; резерв
    26.  
    27. exeLen  equ $ - exeImage  ; длина всего образа = 38 байт
    28. .code
    29. start:
    30.   mov ax, @data
    31.   mov ds, ax
    32.   ; ---- 1. Создать файл MYPROG.EXE ----
    33.   mov ah, 3Ch
    34.   xor cx, cx
    35.   lea dx, exeName
    36.   int 21h
    37.   jc  error
    38.   mov handle, ax
    39.   ; ---- 2. Записать образ EXE (заголовок + код) ----
    40.   mov ah, 40h
    41.   mov bx, handle
    42.   mov cx, exeLen  ; сколько байтов писать
    43.   lea dx, exeImage  ; откуда писать
    44.   int 21h
    45.   jc  error
    46. error:   lea dx, errMsg
    47.   mov ah, 09h
    48.   int 21h
    ну еще надо перенести EXE заголовок в первый столбец. это не макрос, а часть компилятора. Вы в редакторе третьего столбца пишите не макрос, а часть компилятора будущего языка (если захотите), а можно брать из готовых языков конструкции и соединять несколько языков вместе и если надо то добавить свои конструкции или менять конструкции готовых языков.
     
    Последнее редактирование модератором: 15 окт 2026