Исходя из фона Matlab и R, где процесс разработки очень интерактивен (выберите, запустите выбор, исправьте, выберите, запустите выбор, исправить и т. Д.), Я пытаюсь понять, как F # обрабатывает этот стиль развития, что представляется весьма важным в научных приложениях. Вот несколько вещей, которые просто сразу приходят на ум, чтобы кто-нибудь новые для F #:F # интерактивное развитие
Выбор несколько строк дают различные результаты, чем по одной строке за раз.
let add x y = x + y add 4.1 2.3
Выбор обеих линий результатов в то время как
float -> float -> float
выбирая первые результаты строки вint -> int -> int
. В более общем плане, пользователи Matlab/R используются для распечатки результатов после каждого утверждения, а не в конце.Теневое копирование может стать обременительным.
let file = open2GBfile('file.txt') process file
Если запустить эту интерактивно снова и снова, файл 2 Гб является теневой скопированой, и вы быстро запустить из памяти. Создание файла mutable не похоже на подходящее решение, так как окончательный запуск программы никогда не изменит его.
Учитывая эти проблемы, это невозможно для системы, основанной fsi.exe
для поддержки Matlab/R стиль интерактивного развития?
[Edit: Я предполагаю, что около 2. Do объекты получают помечаются для удаления, как только они затенены]
Я имел в виду открытый стиль Matlab/R. Он, например, открывает файл csv и помещает его в большой массив/матрицу. Мое беспокойство заключается в том, что если я затем снова заберу и запустим этот код, что происходит в интерактивном стиле разработки, у меня будет две большие матрицы, одна из которых будет затенена. Я прав? – Tristan
@Tristan: сборка мусора .Net должна избавиться от лишних «теневых копий», когда вы ссылаетесь на них. Оригинальный пост звучал так, будто вы пробовали это, и это было проблемой. Теперь, похоже, вы просто догадываетесь, что это будет проблемой. Не могли бы вы это понять? –
@ Джон: Да, я угадываю. Я пытаюсь выяснить, '' let = x 1 ;; пусть x = 2 ;; '' это то же самое, что 'x 'выходит за рамки. Оставляет ли объект x = 1 помечен для удаления, как только я 'let x = 2''? Книга Криса Смита относится к этому как к тени. – Tristan