четверг, 22 июня 2017 г.

ToDo

Try..finally..end заменить на:

Try_finally ( a ) ( b )
Try_except ( a ) ( b )

И пихать begin в поток токенов.

Чтобы try a finally b end разворачивалось в:

Try_finally begin a end begin b end

Ну и try a except b end соответственно:

Try_except begin a end begin b end

Убрать FirstHalf и DualCompilingWord.

ToDo

Для слов сделать экземпляры, а не классы.

С event'ами.

среда, 21 июня 2017 г.

ToDo

Сделать Bind. С проверкой типов:

A pop:Word:Name
- типы не проверяются

A .Bind pop:Word:Name
- типы проверяются

И алиас ¦-> с подстановкой "pop:":

A ¦-> pop:Word:Name
- типы проверяются

A ¦-> Word:Name
- типы проверяются (производится постановка)

И "выбор типа":

A ¦¦-> Name
- типы проверяются (и производится выбор типа).

Для этого сделать на ValueTypes метод SelfName.

пятница, 16 июня 2017 г.

Написали...

"Привет! Есть вопрос один рядом с программированием. Я поддерживаю прогу одну, ранее участвовал в ее разработке. Обычно запускали ее на полноценных ноутах и разницы с настольным компом не видели. А вот сейчас запустили ее на мини-ноуте и работает в два раза медленнее. На мини ноуте проц стоит Atom x5-z8350? памяти 4Гб. графика не знаю какая, система 10-ка домашняя 64разряда. Обычно мы работали на Core i5 4570 или старше, оперативки 16Гб, система 7-ка профессиональная. Программа использует .net  При запуске программы на мини ноуте проц нагружается процентов на 10, память - суммарно со всеми службами - процентов на 50. Собственно вопрос - как выяснить, где узкое место? Проц/память/графика/система/платформа/все вместе? Никогда просто этим не занимался - и попал в тупик."

Алгоритм маляра - одна из ПЕРВЫХ причин:
http://russian.joelonsoftware.com/Articles/BacktoBasics.html

По моему скромному мнению - в алгоритме маляра" наблюдается 80% проблем.

Вторая проблема - фрагментированность памяти. "Давить аллокации" - как писал мой друг Максим Лапшин.

Третья проблема - неудачная сортировка в контейнерах. Возможно надо использовать дихотомию (бинарную сортировку) вместо сортировки "пузырьком" (на контейнерах больше 1000 элементов, если верить Кнуту). Ну или использовать "мапы" вместо "векторов".

Ну и как советут Степанов - "сначала набираем данные, потом их фильтруем, , потом трансформируем, потом опять фильтруем, потом сортируем, потом ищем".

Add, Reduce, Map, Reduce, Sort, Find.

Array
.join> [ 1 2 3 "a" ]
.join> [ 3 2 1 "b" ]
.removeDuplicates>
.filter> .ItemIsInteger
.map> .ToString
.filter> .ItemNot "1"
.sort> .AsText
.find> "2"

Четвёртая проблема - работа с файлами, вместо работы с файлами. Кеширование - наше всё.

Пятая проблема связана со второй. "Множество мелких и короткоживущих объектов". Которые часто распределяются. Тут нам поможет шаблон LightWeight:
https://ru.m.wikipedia.org/wiki/Приспособленец_(шаблон_проектирования)

Ну и с этим же связана проблема выделения Mutable и Immutable объектов.

Ну и всяческие "фабрики" и "кеши".

Кешируемые Immutable объекты - "это хорошо".

Опять же - "давить аллокации".

http://www.gamedev.ru/code/forum/?id=205093&page=2

Навскидку - всё.

Ну и профайлер надо конечно использовать.

Больше проблем на своём опыте - я не встречал.