我刚刚开始使用FAKE.我真的很喜欢这个主意.在教程中,设置构建和部署目录.
// Directories
let buildDir = "./build/"
let testDir = "./test/"
let deployDir = "./deploy/"
Run Code Online (Sandbox Code Playgroud)
然后引用那些很好的,但是可以将其作为参数传递吗?也许作为我可以在以后使用它的任务?
在我当前的配色方案中,F#交互式shell在Visual Studio中是不可读的.我已经完成了所有颜色设置,但我找不到它正在使用的设置.
如何在Visual Studio中更改F#交互式shell的颜色设置?
目前已在F#中添加了对反射的支持,但它不适用于度量类型.是否可以在F#中使用反射来测量类型?我读过这个.它是在2008年,但是如果你在ildasm中查看一些像bellow这样的代码你就看不出任何东西了Units of Measure.
// Learn more about F# at http://fsharp.net
[<Measure>] type m
[<Measure>] type cm
let CalculateVelocity(length:float<m> ,time:float<cm>) =
length / time
Run Code Online (Sandbox Code Playgroud)
ildasm输出:
.method public static float64 CalculateVelocity(float64 length,
float64 time) cil managed
{
// Code size 5 (0x5)
.maxstack 4
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldarg.1
IL_0003: div
IL_0004: ret
} // end of method Program::CalculateVelocity
Run Code Online (Sandbox Code Playgroud)
所以有些东西无法在F#中反映出来.这是真的吗?看到评论:CLR中的单位实际上根本没有被看到......在文章中.
所以我在C中写了一些数字代码,但是想从F#中调用它.然而它的运行速度非常慢.
时报:
作为参考,c代码是
int main(int argc, char** argv)
{
setvals(100,100,15,20.0,0.0504);
float* dmats = malloc(sizeof(float) * factor*factor);
MakeDmat(1.4,-1.92,dmats); //dmat appears to be correct
float* arr1 = malloc(sizeof(float)*xsize*ysize);
float* arr2 = malloc(sizeof(float)*xsize*ysize);
randinit(arr1);
for (int i = 0;i < 10000;i++)
{
evolve(arr1,arr2,dmats);
evolve(arr2,arr1,dmats);
if (i==9999) {print(arr1,xsize,ysize);};
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我遗漏了函数的实现.我正在使用的F#代码是
open System.Runtime.InteropServices
open Microsoft.FSharp.NativeInterop
[<DllImport("a.dll")>] extern void main (int argc, char* argv)
[<DllImport("a.dll")>] extern void setvals (int _xsize, int _ysize, int _distlimit,float _tau,float _Iex)
[<DllImport("a.dll")>] extern …Run Code Online (Sandbox Code Playgroud) 我正在尝试恢复我在vs 2008工作的旧f#解析器项目与vs 2013一起工作.它使用FsLexYacc.
我通过使用预建步骤使其构建正常:
fslex --unicode "$(ProjectDir)XpathLexer.fsl"
fsyacc --module XpathParser "$(ProjectDir)XpathParser.fsy"
Run Code Online (Sandbox Code Playgroud)
但这并不理想,因为无论输入是否发生变化,它总是会执行.
然后我尝试使用旧的MsBuild操作:
<FsYacc Include="XpathParser.fsy">
<FsLex Include="XpathLexer.fsl">
Run Code Online (Sandbox Code Playgroud)
但这些在构建过程中似乎完全被忽略了.是对的吗?以某种方式删除了这些构建任务吗?
然后我发现在vs C++下记录的一些我觉得可能有用的东西:
<CustomBuild Include="XpathParser.fsy">
<Message>Calling FsYacc</Message>
<Command>fsyacc --module XpathParser "$(ProjectDir)XpathParser.fsy"</Command>
<Outputs>$(ProjectDir)XpathParser.fs</Outputs>
</CustomBuild>
Run Code Online (Sandbox Code Playgroud)
和
<PropertyGroup>
<CustomBuildBeforeTargets>CoreCompile</CustomBuildBeforeTargets>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
(我检查了Microsoft.Fsharp.Targets文件以提出"CoreCompile"目标.)
唉,还是没有雪茄.
是否有人能够确定是否确实可以将fslex/yacc正确地集成到vs 2013解决方案中,如果是,如何?
我有一大段代码,-flto只在某些版本的gcc上编译时会产生错误.我将在下面总结一下
在file1.h
extern char A [100];
Run Code Online (Sandbox Code Playgroud)
在file1.c中
#include "file1.h"
char A[100];
Run Code Online (Sandbox Code Playgroud)
我也有一些使用变量的c ++代码A.C++代码被编译成一个.o文件,然后整个事情被编译成类似的东西
gcc file1.c cpp.o
Run Code Online (Sandbox Code Playgroud)
在archlinux(5.2.0)上使用gcc版本,无论是否有问题都没有-flto.但是在Ubuntu 14.04(4.8.4)上使用gcc时,编译代码时-flto,A会成为局部变量.我用nm证实了这一点:
这些是有nm a.out问题变量的输出
Ubuntu,没有lto(拱门类似,有不同的编号):
00000000006162e0 B A
Run Code Online (Sandbox Code Playgroud)
Ubuntu,lto
00000000006092c0 b A.2722
Run Code Online (Sandbox Code Playgroud)
我的理解是,它B是一个全局变量,而b不是.
A即使我-flto在Ubuntu上使用,如何确保将其保持为全局变量?
我试图用加速器V2写在F#的生活,但对于一些奇怪的原因,我的输出是不是尽管我所有的数组是方方 - 看起来一切,但一个矩形区域的矩阵的左上角被设置为假.我不知道这是怎么发生的,因为我的所有操作都应该平等对待整个阵列.有任何想法吗?
open Microsoft.ParallelArrays
open System.Windows.Forms
open System.Drawing
type IPA = IntParallelArray
type BPA = BoolParallelArray
type PAops = ParallelArrays
let RNG = new System.Random()
let size = 1024
let arrinit i = Array2D.init size size (fun x y -> i)
let target = new DX9Target()
let threearr = new IPA(arrinit 3)
let twoarr = new IPA(arrinit 2)
let onearr = new IPA(arrinit 1)
let zeroarr = new IPA(arrinit 0)
let shifts = [|-1;-1|]::[|-1;0|]::[|-1;1|]::[|0;-1|]::[|0;1|]::[|1;-1|]::[|1;0|]::[|1;1|]::[]
let progress (arr:BPA) = let …Run Code Online (Sandbox Code Playgroud) I created a list in f# named tickets that contains 10 records called Ticket.The records are all initialized with their specific seat number and empty customer name.
type Ticket = {seat:int; customer:string}
let mutable tickets = [for n in 1..10 -> {Ticket.seat = n; Ticket.customer = ""}]
Run Code Online (Sandbox Code Playgroud)
I want to write a function to book a specific seat in the list(add a customer name to the seat). How can i edit an item in the list and have other items …
我正在尝试使用最近引入的F#3.0查询理解语法来定义Bill of Materials类型的查询.虽然可以使用yield!seq comprehensions为内存中的集合定义这些类型的查询,但我并不缺乏将它们转换为针对远程IQueryable源的查询理解.我想最困难的部分是"训练"提供者从递归模式中识别公用表表达式.
有任何想法吗?
所以我试图做一个类似的数组操作
for (int i=0;i++i<32)
{
output[offset+i] += input[i];
}
Run Code Online (Sandbox Code Playgroud)
其中output和input是float数组(由于16位字节对齐malloc).但是,我无法保证这一点offset%4=0.我想知道如何解决这些对齐问题.
我有点像
while (offset+c %4 != 0)
{
c++;
output[offset+c] += input[c];
}
Run Code Online (Sandbox Code Playgroud)
然后是一个对齐的循环 - 显然这不起作用,因为我们现在需要一个未对齐的访问权限input.
有没有办法对我的原始循环进行矢量化?
f# ×8
c ×2
accelerator ×1
c# ×1
c++ ×1
compilation ×1
f#-fake ×1
fsyacc ×1
gcc ×1
gpu ×1
list ×1
mono ×1
msbuild ×1
mutable ×1
optimization ×1
reflection ×1
simd ×1
sse ×1