우리는 깊은 함수 호출 종속성 그래프를 사용하는 F #의 응용 프로그램을 사용합니다. 계층 적 방식으로 재무 계산을 수행합니다.F # 함수 호출 종속성 그래프
종속성 호출 그래프를 어떻게 추출 할 수 있습니까? 우리는 완전한 AST, 모듈/함수 간의 의존성에만 관심이 없습니다.
목적은 도메인 전문가와의 대화에서 사용할 수있는 간단한 코드 버전을 사용하는 것입니다.
우리는 깊은 함수 호출 종속성 그래프를 사용하는 F #의 응용 프로그램을 사용합니다. 계층 적 방식으로 재무 계산을 수행합니다.F # 함수 호출 종속성 그래프
종속성 호출 그래프를 어떻게 추출 할 수 있습니까? 우리는 완전한 AST, 모듈/함수 간의 의존성에만 관심이 없습니다.
목적은 도메인 전문가와의 대화에서 사용할 수있는 간단한 코드 버전을 사용하는 것입니다.
Scott Wlaschin은 그의 'Cycles and modularity in the wild' 기사에서 유사한 작업을 수행했습니다. His approach은 Mono.Cecil을 메타 데이터 리더로 사용하고 SVG에서 종속성 그래프를 추출합니다. 최근 기사 인 'Analysis of Roslyn vs. the F# compiler'은 the same method을 사용합니다.
귀하의 목적에 맞게이 스크립트를 수정할 수 있습니다. 단점은 접근 방식이 정확하지 않다는 것입니다. 코드가 일리노이로 컴파일 될 때 일부 F # 관련 정보가 손실 될 수 있습니다.
또 다른 접근법은 FSharp.Compiler.Service을 메타 데이터 판독기로 사용하는 것입니다. 장점은 유연성이지만, FSharp.Compiler.Service API에 익숙해 지려면 약간의 시간이 걸릴 수 있습니다. 어셈블리 서명에서 시작하여 전체 계층 구조를 탐색하여 시작할 수 있습니다. 다음은 relevant example과 documentation입니다.
동일한 정신으로, 함수에 ReflectedDefinitionAttribute를 사용하여 주석을 추가하면 Reflection, Quotations 및 Pattern 모듈을 사용하여 종속성 그래프를 검색 할 수 있습니다. 이 접근법은 FSharp Journal에 설명되어 있습니다.
예. 그렇습니다. 그러나 현재의 사양은 매우 어색하고 복잡합니다. 일부 POC에서 프로토 타입을 작성한 것처럼 도메인을 더 간단하게 설명 할 수 있습니다. 그래서 계획은 도메인 전문가 (모델 설계 전문가가 아닌)와 더 나은 모델을 고안하는 것입니다. – jruizaranguren
소스를 제어 할 수 있고 리팩토링에 신경 쓸 필요가없는 경우 프리즘이 한 일을 수행하고 함수를 감싸는 래퍼를 작성하여 그래프를 추출 할 수 있습니다 (http://www.infoq.com/presentations/Graph- Clojure-Prismatic). F #에서는이 표현식 (또는 단순히 "장식"함수)에 대한 계산식을 사용할 수 있다고 생각합니다. – Grundoon
Prismatic/Schema에 대한 비슷한 접근법이 꼭 필요한 것입니다. (이 특정 질문은 좁혀졌지만 그 범위 내에서 정확하게 응답되었습니다). 나는 그것을하는 가장 fsharpest 방법 일 것 인 (더 이상의 질문) 확실한 I 'm. 기본적으로 Prismatic/Schema는 함수의 입력 - 출력에 대한 선언적 지정을 정의하고 특수 키워드를 통해 구현과 관련시킵니다. 그리고 간단한지도를 사용하여 그래프를 5 개의 LOC에 만들 수 있고 정말 흥미로운 것을 쉽게 만들 수 있습니다 (조롱, 부분 그래프 작성, 테스트 등). – jruizaranguren