memory heap
395 subscribers
2.74K photos
577 videos
53 files
3.37K links
science ∩ art = wonder

all memory blocks here are allocated by @a_v_p

GitHub: https://github.com/artyom-poptsov
Mastodon: https://fosstodon.org/@avp

https://memory-heap.org/~avp/
Download Telegram
В коммитах на master в Guile-SMC добавил standalone-режим для компилятора машин состояний, теперь все необходимые модули копируются в отдельный каталог.

$ tree
.
├── context.scm
├── fsm.puml
├── main.scm
└── README.org

0 directories, 5 files

Далее выполняем компиляцию в standalone-режиме:

$ cat fsm.puml | /usr/bin/smc compile -L . -U "((context))" -m "(custom-fsm)" \
-t guile-standalone --debug > custom-fsm.scm

Содержимое каталога теперь выглядит так:
$ tree
.
├── context.scm
├── custom-fsm
│ ├── context.scm
│ └── smc
│ ├── context
│ │ ├── char-context.scm
│ │ └── context.scm
│ ├── core
│ │ ├── common.scm
│ │ ├── log.scm
│ │ ├── stack.scm
│ │ ├── state.scm
│ │ └── transition.scm
│ └── fsm.scm
├── custom-fsm.scm
├── fsm.puml
├── main.scm
└── README.org

4 directories, 14 files

Обратите внимание, что появился каталог с именем модуля, в котором указано расположить целевой ДКА — "custom-fsm". В этот каталог были скопированы модули Guile-SMC, необходимые для работы целевого ДКА, плюс зависимости из списка дополнительных модулей (-U "((context))").

При копировании в модулях происходит замена зависимостей так, чтобы они все указывали на скопированные модули. Например, было:
$ head -4 context.scm
(define-module (context)
#:use-module (oop goops)
#:use-module (ice-9 textual-ports)
#:use-module (smc context char-context)

Стало:
$ head -4 custom-fsm/context.scm
(define-module (custom-fsm context)
#:use-module (oop goops)
#:use-module (ice-9 textual-ports)
#:use-module (custom-fsm smc context char-context)

Такой автомат можно запускать без наличия Guile-SMC в системе.

#guile #smc #dev #lisp #fsm
Пример профилирования ДКА в Guile-INI 0.3.0 через Guile-SMC профилировщик.

Тестовая программа:
$ cat test.scm 
#!/usr/bin/guile-3.0 \
-L modules -e main -s
!#

(use-modules (ice-9 pretty-print)
(oop goops)
(logging logger)
(smc core log)
(ini))

(define (main args)
(log-clear-handlers!)
(log-add-handler! (make <port-log/us>
#:port (open-output-file "ini.log")))
(let ((data (ini->scm (current-input-port) #:debug-mode? #t)))
(pretty-print data)
(scm->ini data)))

Запуск парсера с выводом лога в файл:
$ cat /etc/php/7.4/apache2/php.ini | ./test.scm

Лог:
$ wc ini.log 
3528 21168 280750 ini.log
$ head ini.log
2022-01-07 17:06:27.338353 (DEBUG): [*] -> [read]
2022-01-07 17:06:27.339380 (DEBUG): [read] -> [read_section_title]
2022-01-07 17:06:27.339982 (DEBUG): [read_section_title] -> [read_section_content]
2022-01-07 17:06:27.340274 (DEBUG): [read_section_content] -> [read_comment]
2022-01-07 17:06:27.340710 (DEBUG): [read_comment] -> [read_section_content]
2022-01-07 17:06:27.340888 (DEBUG): [read_section_content] -> [read_comment]
2022-01-07 17:06:27.341363 (DEBUG): [read_comment] -> [read_section_content]
2022-01-07 17:06:27.341504 (DEBUG): [read_section_content] -> [read_comment]
2022-01-07 17:06:27.341728 (DEBUG): [read_comment] -> [read_section_content]
2022-01-07 17:06:27.341860 (DEBUG): [read_section_content] -> [read_comment]

Собственно профилирование:
$ smc profile ini.log
Total transitions: 3528
Total time: 630510 us
Stats:
read_comment: 416994 us (66.1360 %)
read_section_content: 153088 us (24.2800 %)
read_section_property_value: 17230 us (2.7327 %)
read_section_property_key: 16376 us (2.5973 %)
trim_section_property_key: 14990 us (2.3774 %)
trim_section_property_value: 6673 us (1.0583 %)
read_section_title: 4132 us (.6553 %)
read: 1027 us (.1629 %)

#guile #smc #dev #lisp #fsm #profiling
Со студентами программированием музыки занимаемся.

(Болт на динамик положен для улучшения звучания.)
This media is not supported in your browser
VIEW IN TELEGRAM
Ещё одно видео с практики -- изучали со студентами широтно-импульсную модуляцию (ШИМ.)
А так мы разбирали инкремент и декремент на практике по Arduino в НРТК.

Случай из практики прошлых лет: пришёл студент на задачу экзамена, говорю ему -- напиши цикл. Он написал. Спрашиваю, а что такое у тебя в коде за i++. Отвечает -- это, мол, "экскремент". С тех пор всем студентам эту байку рассказываю -- помогает в запоминании.

Чтобы в коде небыло "экскрементов" учите термины правильно! :-)
Сравнение вычислительной мощности современных компьютеров и компьютеров прошлого: https://spectrum.ieee.org/ibm-mainframe
memory heap
Photo
(Печатаю куски MPCNC.)
Выпустил релиз Guile-DSV 0.5.1 с возможностью вывода данных в формате DSV/CSV в формат таблиц Markdown, и также возможностью применять произвольный код на Scheme на каждую ячейку таблицы, и фильтровать строки/столбцы табличных данных.

#guile #scheme #projects #dsv
Суперкомпьютер Cray X-MP из 1982 г. выглядит так, как будто пришёл с ретро-футуристических обложек журналов.

До 117МГц частота центрального процессора, 128Мб ОЗУ, 38.4 Гб на 32-х жёстких дисках 5.12 тонн — всё вместе 5.12 тонн веса за 15 миллионов долларов (без учёта стоимости дисков.)

Потреблял 345 КВт.

Фото отсюда:
https://computing.llnl.gov/about/machine-history

#computing #history
👍1