Консольная запускалка скриптов
А ещё бывает стек скриптовой машины.
Почти человекочитабельный:
(+) https://bitbucket.org/lulinalex/mindstream/commits/1a4d170478480bf9822d80f2170d70a70f1c0ff8
Тут дело в том, что КАЖДЫЙ примитив аксиоматики - ПРОТЕСТИРОВАН атомарными тестами.
В Other1.
"Чистой воды" TDD.
ЛЮБАЯ функция - протестирована.
Причём с реверсом через CodeDump.
Тестируем не только функционал, но и то во что он компилируется.
Под любую функцию написан тест, проверяющий основные потоки. При помощи вывода в эталон.
Pascal натянутый на FORTH.
Но проще и Pascal и FORTH.
Писать очень просто.
При должном навыке.
Проще чем на Delphi.
И уж всяко проще классического FORTH.
DUP DROP ROT - это всё как раз наследие классического FORTH
они на самом деле почти не используются на верхнем уровне.
(+) http://www.twirpx.com/file/1364695/
(+)(+) http://www.nncron.ru/download/sf.pdf
(+) http://fforum.winglion.ru/viewtopic.php?t=1280
"Форт - технология программирования с расширяемостью, причём отсутствуют теоретические ограничения на уровень, с которого возможно расширение - от регистров до самых сложных вещей, моделирования любых грамматик ...
только фортеры очень редко этим пользуются, если пользуются вообще."
"Этим Форт отличается от других языков - скажем С - макросами расширяем только с того уровня абстракции, на котором находится сам С, С++ - свои ограничения"
"Форт интересен уже только тем, что позволяет модифицировать сами средства своей модификации, чего не может например ассемблер. Форт по сути это исполняемый в цикле макроассемблер у которого есть доступ к модификации своего движка из входного для него потока. Отсюда все возможности: от изменения "понимания" входного потока(введение новых синтаксисов) и изменения техники компиляции(оптимизация) до повышения семантической мощности
лексических единиц языка до уровня, достаточного для решения задачи практически любой сложности."
"вот с оценкой форта, как макроассемблера я не согласен абсолютно, хотя бы по той причине, что форт навязывает еще и модель взаимодействия внутри себя, а так же существует в рамках некой виртуальной машины, которая достаточно стандартизирована.
Это узкое по моему мнению понимание Форта. Форт может на ходу(в рантайме) сменить и виртуальную машину и модель
взаимодействия."
"Может, с некоторыми оговорками, к скриптовым языкам. И в этом направлении "копать":)
( т.к. у него в базовом варианте нет определения типа оперирируемых данных
при исполнении. Хотя он почти бизтиповый.) Еще можно классифицировать
как язык позволяющий проводить сцепление простых элементов естественным
способом.
P.S. Прочитав статью:Сценарии: высокоуровневое программирование для XXI века http://www.osp.ru/os/1998/03/179470/ где описывается
история и возможности Tcl привело к мысли, что синтаксис и базис
языка должен быть, как можно проще. Форт можно дополнить некоторыми
концепциями из Tcl, не только интерфейсом к GUI.
Еще немного интересного по Tcl http://tclstudy.narod.ru/articles/index.html
Книг на русском языке издано мало ( единицы )"
(+)
(+)
(+)
(+)
А ещё бывает стек скриптовой машины.
Почти человекочитабельный:
i.LULIN-BOOK2 12.08.2015 01:22:45:703 [Stack # 0] : i.LULIN-BOOK2 12.08.2015 01:22:47:634 [Stack # 0] : i.LULIN-BOOK2 12.08.2015 01:22:49:209 Script failed: StackChecking1.ms.script i.LULIN-BOOK2 12.08.2015 01:22:49:209 [Stack # 0] ASSERTS i.LULIN-BOOK2 12.08.2015 01:22:49:209 [Stack # 1] OPERATOR анти-тест (Line 696, kwMain.script) i.LULIN-BOOK2 12.08.2015 01:22:49:209 [Stack # 2] анти-тест (Line 5, StackChecking1.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:49:209 [Stack # 3] (StackChecking1.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:49:661 Script failed: StackChecking2.ms.script i.LULIN-BOOK2 12.08.2015 01:22:49:661 [Stack # 0] ASSERTS i.LULIN-BOOK2 12.08.2015 01:22:49:661 [Stack # 1] OPERATOR анти-тест (Line 696, kwMain.script) i.LULIN-BOOK2 12.08.2015 01:22:49:661 [Stack # 2] анти-тест (Line 5, StackChecking2.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:49:661 [Stack # 3] (StackChecking2.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:49:855 Script failed: StackChecking3.ms.script i.LULIN-BOOK2 12.08.2015 01:22:49:855 [Stack # 0] ASSERTS i.LULIN-BOOK2 12.08.2015 01:22:49:855 [Stack # 1] OPERATOR анти-тест (Line 696, kwMain.script) i.LULIN-BOOK2 12.08.2015 01:22:49:855 [Stack # 2] анти-тест (Line 5, StackChecking3.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:49:855 [Stack # 3] (StackChecking3.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:50:051 Script failed: StackChecking4.ms.script i.LULIN-BOOK2 12.08.2015 01:22:50:051 [Stack # 0] ASSERTS i.LULIN-BOOK2 12.08.2015 01:22:50:051 [Stack # 1] OPERATOR анти-тест (Line 696, kwMain.script) i.LULIN-BOOK2 12.08.2015 01:22:50:051 [Stack # 2] анти-тест (Line 5, StackChecking4.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:50:051 [Stack # 3] (StackChecking4.ms.script) i.LULIN-BOOK2 12.08.2015 01:22:50:282 [Stack # 0] : i.LULIN-BOOK2 12.08.2015 01:22:50:282 [Stack # 1] USES i.LULIN-BOOK2 12.08.2015 01:22:50:517 [Stack # 0] : i.LULIN-BOOK2 12.08.2015 01:22:50:517 [Stack # 1] USES
(+) https://bitbucket.org/lulinalex/mindstream/commits/1a4d170478480bf9822d80f2170d70a70f1c0ff8
Тут дело в том, что КАЖДЫЙ примитив аксиоматики - ПРОТЕСТИРОВАН атомарными тестами.
В Other1.
"Чистой воды" TDD.
ЛЮБАЯ функция - протестирована.
Причём с реверсом через CodeDump.
Тестируем не только функционал, но и то во что он компилируется.
Под любую функцию написан тест, проверяющий основные потоки. При помощи вывода в эталон.
Pascal натянутый на FORTH.
Но проще и Pascal и FORTH.
Писать очень просто.
При должном навыке.
Проще чем на Delphi.
И уж всяко проще классического FORTH.
DUP DROP ROT - это всё как раз наследие классического FORTH
они на самом деле почти не используются на верхнем уровне.
(+) http://www.twirpx.com/file/1364695/
(+)(+) http://www.nncron.ru/download/sf.pdf
(+) http://fforum.winglion.ru/viewtopic.php?t=1280
"Форт - технология программирования с расширяемостью, причём отсутствуют теоретические ограничения на уровень, с которого возможно расширение - от регистров до самых сложных вещей, моделирования любых грамматик ...
только фортеры очень редко этим пользуются, если пользуются вообще."
"Этим Форт отличается от других языков - скажем С - макросами расширяем только с того уровня абстракции, на котором находится сам С, С++ - свои ограничения"
"Форт интересен уже только тем, что позволяет модифицировать сами средства своей модификации, чего не может например ассемблер. Форт по сути это исполняемый в цикле макроассемблер у которого есть доступ к модификации своего движка из входного для него потока. Отсюда все возможности: от изменения "понимания" входного потока(введение новых синтаксисов) и изменения техники компиляции(оптимизация) до повышения семантической мощности
лексических единиц языка до уровня, достаточного для решения задачи практически любой сложности."
"вот с оценкой форта, как макроассемблера я не согласен абсолютно, хотя бы по той причине, что форт навязывает еще и модель взаимодействия внутри себя, а так же существует в рамках некой виртуальной машины, которая достаточно стандартизирована.
Это узкое по моему мнению понимание Форта. Форт может на ходу(в рантайме) сменить и виртуальную машину и модель
взаимодействия."
"Может, с некоторыми оговорками, к скриптовым языкам. И в этом направлении "копать":)
( т.к. у него в базовом варианте нет определения типа оперирируемых данных
при исполнении. Хотя он почти бизтиповый.) Еще можно классифицировать
как язык позволяющий проводить сцепление простых элементов естественным
способом.
P.S. Прочитав статью:Сценарии: высокоуровневое программирование для XXI века http://www.osp.ru/os/1998/03/179470/ где описывается
история и возможности Tcl привело к мысли, что синтаксис и базис
языка должен быть, как можно проще. Форт можно дополнить некоторыми
концепциями из Tcl, не только интерфейсом к GUI.
Еще немного интересного по Tcl http://tclstudy.narod.ru/articles/index.html
Книг на русском языке издано мало ( единицы )"
FORWARD Process : Process STRING IN aDir FORWARD ProcessItem : DoDir STRING IN anItem : DoFile STRING IN anItem anItem . ; // DoFile for [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] ( STRING IN aMask @ DoFile aMask anItem ProcessFilesWithMask ) ; // DoDir : ProcessItem STRING IN anItem anItem DoDir @ ProcessItem anItem ProcessSubDirs ; // ProcessItem aDir ProcessItem ; // Process '..\..\' Process
(+)
: Process STRING IN aDir FORWARD ProcessItem : DoDir STRING IN aDir : DoFile STRING IN anFilePath anFilePath Print ; // DoFile for [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] ( STRING IN aMask IterateFilesWithMask aDir aMask DoFile ) ; // DoDir : ProcessItem STRING IN aDir aDir DoDir IterateDirs aDir ProcessItem ; // ProcessItem aDir ProcessItem ; // Process '..\..\' Process
(+)
PROCEDURE ProcessDirs ^ IN aDir FORWARD ProcessItem PROCEDURE DoDir ^ IN aDir PROCEDURE DoFile STRING IN anFilePath PrintThis anFilePath ; // DoFile for [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] ( STRING IN aMask IterateFilesWithMask aDir aMask DoFile ) ; // DoDir PROCEDURE ProcessItem STRING IN aDir DoDir aDir IterateDirs aDir ProcessItem ; // ProcessItem aDir DO ProcessItem ; // ProcessDirs ProcessDirs '..\..\'
(+)
PROCEDURE ProcessDirs RightParam aDir FORWARD ProcessItem PROCEDURE DoDir RightParam aDir PROCEDURE DoFile STRING IN anFilePath PrintThis anFilePath ; // DoFile for [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] ( STRING IN aMask IterateFilesWithMask aDir aMask DoFile ) ; // DoDir PROCEDURE ProcessItem STRING IN aDir DoDir aDir IterateDirs aDir ProcessItem ; // ProcessItem aDir DO ProcessItem ; // ProcessDirs ProcessDirs '..\..\'
(+)
PROCEDURE ProcessDirs ARRAY IN aMaskArray RightParam aDir PROCEDURE DoDir RightParam aDir PROCEDURE DoFile STRING IN anFilePath PrintThis anFilePath ; // DoFile for aMaskArray ( STRING IN aMask IterateFilesWithMask aDir aMask DoFile ) ; // DoDir PROCEDURE ProcessItem STRING IN aDir DoDir aDir IterateDirs aDir ( this.do ) ; // ProcessItem aDir DO ProcessItem ; // ProcessDirs [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] ProcessDirs '..\..\'
(+)
PROCEDURE ProcessDirs RightParam aDir RightParam aMaskArray RightParam aLambda PROCEDURE DoDir RightParam aDir PROCEDURE DoFile STRING IN anFilePath anFilePath aLambda pop:Word:GetRef DO ; // DoFile for ( aMaskArray |^ ) ( STRING IN aMask IterateFilesWithMask aDir aMask DoFile ) ; // DoDir PROCEDURE ProcessItem STRING IN aDir DoDir aDir IterateDirs aDir ( this.do ) ; // ProcessItem aDir DO ProcessItem ; // ProcessDirs ProcessDirs '..\..\' [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] Print
(+)
PROCEDURE ProcessSubDirsWithMasks RightParam aRoot RightParam aMaskArray RightParam aLambda PRIVATE PROCEDURE DoDir RightParam aDir PRIVATE PROCEDURE DoFile STRING IN anFilePath anFilePath aLambda |@ DO ; // DoFile for ( aMaskArray |^ ) ( STRING IN aMask IterateFilesWithMask aDir aMask DoFile ) ; // DoDir PRIVATE PROCEDURE ProcessItem STRING IN aDir DoDir aDir IterateDirs aDir ( this.do ) ; // ProcessItem aRoot DO ProcessItem ; // ProcessSubDirsWithMasks ProcessSubDirsWithMasks '..\..\' [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] Print
(+)
ProcessSubDirsWithMasks '..\..\' [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' ] Print
(+)
PROCEDURE ProcessAnySubDirsWithMasks RightParam aDirMasks RightParam aFileMasks for ( aDirMasks |^ ) ( STRING IN aDirMask ProcessSubDirsWithMasks aDirMask ( aFileMasks |^ ) Print ) ; // ProcessAnySubDirsWithMasks ProcessAnySubDirsWithMasks [ '..\..\' '..\' ] [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' '*.co' ]
(+)
ProcessAnySubDirsWithMasks [ '..\..\' '..\' ] [ '*.ms.script' '*.ms.dict' '*.pas' '*.txt' '*.inc' '*.fmx' '*.xml' '*.dpr' '*.co' ] Print
Комментариев нет:
Отправить комментарий