• программирование яп FORTH torth Подумал как потоки можно реализовать наиболее простым образом.

    Пока по запуску потоков есть идеи:
    есть специальный набор суффиксов, которые указывают что слово нужно запустить в отдельном потоке, а также из стека извлечь его аргументы и это будет новый стек. Если стек реализован двусвязным списком, то создание нового стека из куска имеющегося — очень быстрая операция, но вообще и из массива можно копировать довольно быстро (на МК это можно поручить DMA).

    Классический подход такой что запущенному потоку присваивается токен, и его уже программа может использовать для управления потоком и обменом с ним данными, однако можно ввести суффикс, который сохранит токен под именем. Например, как-то так:
    в слове Й’хан-тлеи корень хан исполнится в отдельном потоке (префикс й), а токен сохранится под именем тлеи. Точнее даже не так, хан-тлеи будет возвращать токен, а различные суффиксы помогут собрать слово ожидания результата, остановки потока, пересылки потока на другую машину, и т.д.

Replies (41)

  • @Renha, точнее, в основном то идеи по синтаксису конечно
  • @Renha, У потока есть собственный стэк, независимый от других. Учти это.
  • @Renha, Почему ты не хочешь использовать библиотечную функцию CreateThread вместо костылей?
  • @mabu, покажи это библиотеку под atmega 168
  • @mabu, ну понятно что во время работы потока его стек никто не должен трогать. Но вот после — на своём стеке он оставляет результаты работы, и нужно иметь возможность перенести их на другой стек (вообще говоря, не обязательно на стек родителя, и не обязательно на то же устрйство вычислительной сети)
  • @Renha, Ну и что, зачем там потоки, если ядро всё равно одно?
  • @Renha, В стеке потока хранятся локальные переменные и адресы возврата из функций, ты вообще уверен, что на другой машине эти адресы будут действительны?
  • @mabu, одно там, одно сям. Хочу на этой ноде поток пускаю, хочу на другой. Если у меня смарт-штора подключена к stm32, то там я задачу, задвигающую штору и запущу, и пофиг мне сколько там ядер, и не занят ли МК ещё чем-то.
  • @Renha, И локальные переменные, которые уничтожены при уничтожении потока — они тоже должны внезапно воскреснуть? Но зачем? Там же мусор.
  • @mabu, на стеке данных храняться аргументы и результаты вызова FORTH-слов, никаких адресов там нет
  • @mabu, не нужно оставлять на стеке мусор, для удаления верхних элементов со стека есть слово DROP
  • @Renha, Я там создал переменную, которая больше не нужна. Сейчас в ней мусор. Что ты предлагаешь с мусором?
  • @mabu, где там? если на стеке, то DROP'аешь её и все
  • @Renha, Так ты сам её предлагаешь на другую машину тянуть.
  • @mabu, А данные в ней уже ложные!
  • @mabu, если ты её дропнул то её на стеке нет
  • @Renha, Она в любом случае будет уничтожена при завершении потока.
  • @mabu, а если ты перенёс на другую машину незавершённую задачу, то логично перенести переменную тоже
  • @mabu, да, на стеке по завершении останутся только результаты работы. Только они и переносятся.
  • @Renha, вообще по поводу синтаксиса я рассуждаю в рамках концепции слов и суффиксов, хотя на страничке torth заявлены эксперименты над заменой слов предложениями. Однако в рамках /0 не суть важно, ну будет прилагательное вместо суффикса, ну и ладно.
  • @Renha, А деепричастий нет! Непорядок.
  • @mabu, всё будет по мере надобности
  • @Renha, Ну вот нужно деепричастный оборот выделять запятыми. Ты выделяшь?
  • @mabu, вот без знаков препинания лишних можно обойтись, программа не должна лишний раз препинаться
  • @Renha, Скажи это точке с запятой.
  • @mabu, Лишних же
  • @Renha, Они тоже лишние, потому что дублируют символы с кодами 13 и 10, которые уже ставит любой текстовый редактор по нажатию на Enter.
  • @mabu, Запили текстовый редактор под atmega 168
  • @Renha, Ты прямо там собрался компилировать?
    Постой‐ка, у тебя же там нет компилятора, у тебя же там виртуальная машина, которая будет исполнять твой текстовый файл.
  • @Renha, Текстовый редактор к тому, к чему даже клавиатуру не подключить? Ахахахахахахахахахахахахаха
  • @mabu, нет, хочу компиляцию в байткот
  • @Renha, Который будет исполняться виртуальной форт‐машиной, которая будет исполняться на процессоре?
  • @mabu, да
  • @Renha, А память где? А монитор?
  • @mabu, Память на борту, монитор вот он winstar.com.tw
  • @Renha, У тебя в схеме её нет.
  • @mabu, Внутри потому что
  • @Renha, Внутри процессора?
  • @mabu, Внутри контроллера
  • @Renha, The high-performance, low-power Microchip AVR RISC-based CMOS 8-bit microcontroller combines 16KB ISP flash memory with read-while-write capabilities, 512B EEPROM, 1KB SRAM, 23 general purpose I/O lines, 32 general purpose working registers, three flexible timer/counters with compare modes, internal and external interrupts, serial programmable USART, byte-oriented 2-wire serial interface, SPI serial port, 6-channel/10-bit A/D converter (8-channel in TQFP and QFN packages), programmable watchdog timer with internal oscillator, and five software selectable power saving modes. By executing powerful instructions in a single clock-cycle, the device achieves throughputs approaching 1 MIPS per MHz, balancing power consumption and processing speed.