当你拥有的是一对断线钳和一瓶伏特加酒时,一切看起来就像是Wolf Blitzer船库门上的锁.(如果你不读xkcd,用锤子和钉子代替)
我目前正在编写Clojure,Python,Java和PHP,所以我熟悉C和LISP语法以及空白事物.我知道命令式,功能性,不可变性,OOP和几种类型的系统和其他东西.现在我想要更多!
什么是采用不同方法的语言,对实际工具选择或理论理解有用?
我不想学习另一种函数式语言(Haskell)或其他命令式OOP语言(Ruby),也不想练习像Brainfuck这样不切实际的有趣语言.
我发现自己的一个非常有趣的事情是基于单声道堆栈的语言,如Factor.
只有当我觉得我理解了大多数概念并对我的所有问题都有答案时,我才想开始考虑我自己的玩具语言,以包含我所有的个人喜好.
因此,例如,Python和Java有VM,C和Haskell没有.(如我错了请纠正我)
考虑到线路两侧有哪些语言,我找不到原因.Java在很多方面都是静态的,而Haskell提供了许多动态功能.
我需要在命令行处理Markdown,因此没有真正的语言限制.
额外的功能,如漂亮的报价和破折号是一个受欢迎的补充.代码块是必须的,但它们是我认为的核心的一部分.
我想只输出到HTML,而且我在Unix环境中.
除了Azul之外,我所知道的所有GC都有点并发,但至少有一些小的世界组件.为什么没有更像GC的像Azul?
Azul是否已将其技术申请专利,以至于无法做到这一点?
或者,无休止操作所需的读/写障碍会产生如此大的开销,以至于它们对大多数工作负载来说都是不切实际的?
我知道有很多这样的事情,但要么他们不能递归地工作,要么他们是巨大的.
这就是我得到的:
find . -name "*.so" -exec mv {} `echo {} | sed s/.so/.dylib/` \;
Run Code Online (Sandbox Code Playgroud)
当我运行查找部分时,它会给我一个文件列表.当我运行sed部分时,它用.dylib替换任何.so.当我一起运行它们时它们不起作用.
我用echo替换了mv,看看发生了什么:
./AI/Interfaces/C/0.1/libAIInterface.so ./AI/Interfaces/C/0.1/libAIInterface.so
Run Code Online (Sandbox Code Playgroud)
什么都没有被取代!
怎么了?
这个问题与此有关
在过去的几年里,我一直在思考我喜欢的东西,而不喜欢我使用的语言.我一直想写自己的语言,但从未这样做过.
我也拥有乐高RCX和NXT,但大多数时候我从来没有让我的机器人做任何事情,因为他们的视觉编程环境比较严格.
我想我会为NXT设计我的编程语言,因为已经有很多通用语言,NXT给了我一套具体的问题和目标,希望能有一个很好的沙箱.
怎么办?我从哪里开始?我需要知道什么?
如果可能的话,我会用Python或Clojure编写编译器.有一个用于NXT的SDK,但也有汇编语言.什么是最好/最简单的路线?
Lego NXT有一个小屏幕,USB和蓝牙,它有4个数字和模拟传感器端口,3个输出端口和2个ARM处理器,一个主处理器和一个协处理器.http://mindstormsnxt.blogspot.com/2006/08/whats-inside-nxt-brick.html
编程NXT将涉及处理数据和事件,所以某种单声道数据流/反应式似乎是合适的.它也应该很好地处理并行任务,所以我认为功能.我目前正在考虑基于堆栈.
在我的脑海中,我已经尝试统一这些概念并考虑示例代码.我正在考虑树而不是堆栈,其中功能分支可以并行运行.一个例子:
# implicit main stack
5 5 +
# 10
# quoted branch or list
[1 -]
# 10 [1 -]
# eval list and recur until false
loop
# [9 8 7 6 5 4 3 2 1 0]
# define stack as a function
[1 = [1 8 motor] [1 0 motor] if] fn
# [9 8 7 6 5 …Run Code Online (Sandbox Code Playgroud) 有几十个SO问题和博客文章描述了用C API包装C++类.示例为C消耗包装C++类API
大多数这些答案和博客文章都是这样的:
typedef void* CMyClass;
Run Code Online (Sandbox Code Playgroud)
但其他人说这很糟糕,因为它没有提供类型安全.他们提出了不透明结构的各种变化,没有任何解释.我可以复制上面的片段并继续我的生活(我会在此期间做),但我想知道一劳永逸
void*?在关于通信顺序进程的书中,花费了大量时间来定义事件,这些事件没有方向,可能涉及多个独立的进程.
仅在第4章中介绍了引导的渠道,这些渠道是针对2个流程的.
然而,包括occam,Go,LuaCSP和clojure.core.async在内的所有CSP实现仅实现了通道.
尽管大多数实际问题都可以用(广播)频道解决,但我想知道为什么这本书花费了很多时间在他们身上而没有人使用它们.
与我可以找到的其他每个问题不同,我不想从同构的Numpy数组创建DataFrame,也不想将结构化数组转换为DataFrame。
我想要的是为每列从单个1D Numpy数组创建一个DataFrame。我尝试了visible DataFrame({"col": nparray, "col": nparray}),但是它显示在我的个人资料的顶部,因此它的运行速度确实很慢。
据我了解,Pandas DataFrames是在纯Python中实现的,每个列均由Numpy数组支持,因此我认为有一种有效的方法。
我实际上想做的是从Cython高效地填充DataFrame。Cython具有允许有效访问Numpy阵列的内存视图。所以我的策略是分配一个Numpy数组,将其填充数据,然后将其放入DataFrame中。
相反的效果很好,可以从Pandas DataFrame创建一个memoryview。因此,如果有一种方法可以预分配整个DataFrame,然后仅将列传递给Cython,这也是可以接受的。
cdef int32_t[:] data_in = df['data_in'].to_numpy(dtype="int32")
Run Code Online (Sandbox Code Playgroud)
我的代码配置文件的一部分如下所示,其中通过在最后创建DataFrame完全使代码所做的一切相形见war。
1100546 function calls (1086282 primitive calls) in 4.345 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 4.345 4.345 profile:0(<code object <module> at 0x7f4e693d1c90, file "test.py", line 1>)
445/1 0.029 0.000 4.344 4.344 :0(exec)
1 0.006 0.006 4.344 4.344 test.py:1(<module>)
1000 0.029 0.000 2.678 0.003 :0(run_df)
1001 0.017 0.000 2.551 0.003 frame.py:378(__init__)
1001 0.018 0.000 2.522 …Run Code Online (Sandbox Code Playgroud) 我需要在用Python编写的应用程序中监听Mac上的全局鼠标事件(未绑定到应用程序).
我正在使用PyObjC,但我无法弄清楚如何做到这一点.简单的ObjC示例或其他Python技术也很受欢迎.
我的代码到目前为止:
from Quartz import *
def MyFunction(proxy, type, event):
print event
CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction)
Run Code Online (Sandbox Code Playgroud)
==分段错误
我知道我需要稍后将它添加到事件源中,但我需要首先使用它.
[更新]
使用PyObjC形式Macports解决了段错误,所以现在我写了这个:
from Quartz import *
def MyFunction(p, t, e, c):
print e
tap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction, None)
runLoopSource = CFMachPortCreateRunLoopSource(None, tap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopDefaultMode);
CGEventTapEnable(tap, True);
CFRunLoopRun();
Run Code Online (Sandbox Code Playgroud)
但这只是永远运行而且不响应鼠标事件,有什么不对?