我仍在尝试决定我的(home)项目是否应该使用UTF-8字符串(在必要时使用std :: string和其他特定于UTF-8的函数实现)或一些16位字符串(实现为std: :wstring的).该项目是一种编程语言和环境(如VB,它是两者的结合).
有一些愿望/约束:
目前,我正在使用std :: string,目的是仅在必要时使用UTF-8操作函数.它需要更少的内存,似乎是许多应用程序正在进行的方向.
有很多地方可以找到设计异常类的指南.几乎在我看的每个地方,都有异常对象永远不应该做的事情列表,这会影响这些类的设计.
例如,Boost人员建议该类不包含任何std::string成员,因为它们的构造函数可能会抛出,这会导致运行时立即终止程序.
现在,在我看来,这是相当理论化的.如果std::string构造函数抛出,那么它是一个bug(我传入了一个空指针)或一个内存不足的情况(如果我错了,请纠正我).由于我在桌面上,我只是假装我有无限的内存,无论如何,内存耗尽对我的应用程序来说是致命的.
考虑到这一点,为什么我不应该std::string在我的异常类中嵌入对象?事实上,为什么我的异常类不能全功能,并且还要处理日志记录,堆栈跟踪等.我知道一个责任原则,在我看来,这是一个公平的权衡让异常类完成所有这些.当然,如果我的解析器需要报告语法错误,那么功能齐全的异常将比围绕静态分配的字符数组构建的异常更有帮助.
那么:精益C++异常类 - 它在现实世界中有多大的优势?有什么权衡取舍?是否有关于该主题的良好讨论?
我正在为数字媒体编程构建一种编程语言,它应该支持使用无共享消息传递和软实时的并发(即尽量计算音频/视频而不丢失样本或帧并且具有恒定的吞吐量) .
事实证明,这两个特征难以组合,主要是因为一个特定的约束:实时代码不应动态分配内存.
我的语言应该可以很容易地实现这样的事情:
我希望用户设置的新值通过队列发送到合成器引擎.如果我只想发送浮点数和其他原子值,那么问题就不会很有趣了.实际上,我希望任何类型的数据都能够从一个线程流向另一个线程,甚至是复杂的对象或数据结构,这对于线程和优先级的任何配置都应该是可能的.如果没有实时动态内存分配,这就变得非常困难,而不会对程序员施加任何似乎任意的限制.
Erlang经常被宣传为适合实时系统.我的理解是,Erlang从不会禁止内存分配.如果我做了同样的事情,那将会导致许多问题消失,代价是在执行这些分配的代码中引入非确定性时序.
那么是什么让Erlang如此合适呢?它是否实现了特殊的技巧来规避内存分配引起的问题,还是完全忽略了这个问题?它需要另一种实时方法吗?
让我们假设我们在Erlang中编写一个合成器,它必须每50毫秒产生64个样本,否则声音中会出现裂缝和爆裂声.让我们假设当我在字符串上移动一些滑块时,一个小对象(假设它是一个列表或包含参数名称和新值的元组)必须从GUI进程发送到音频进程,其中a副本已创建.这将需要动态内存分配.Erlang如何帮助我确保此分配不会延迟我的音频计算?
Google的新语言Go试图通过明确要求实际使用模块中列出的所有依赖项来简化依赖项管理.编译器将拒绝向模块声明依赖关系的模块,而不使用该模块中的任何内容.
包导入自身或导入包而不引用其任何导出的标识符是非法的.
我可以想到一些明显的优点(例如更清洁的模块),但也许有一些非显而易见的优点.我能想到的唯一缺点是有一个过于迂腐的编译器,在重构过程中抱怨太多,但也许还有更多?
您是否有其他语言执行此操作的经验?这种方法的优点和缺点是什么?
我在Windows上使用Eclipse来使用Cygwin的工具链来编写C++.我也想用它进行调试,但我的问题如下:
D:\Path\To\ExeGDB需要/cygdrive/d/Path/To/Exe.${workspace_loc}那个特定的输入框.有一些我不知道的隐藏选项吗?你以前遇到过这个问题吗?
.gdbinit文件丢弃Eclipse给出的路径并使用posix路径加载真实的可执行文件---尝试过,但不是很难.我想将我最近安装的Mac OS X应用程序版本与某种类型的文件相关联.一些实验表明,在启动应用程序时,操作系统似乎会读取和解释info.plist文件,而不是在将应用程序包拖动到磁盘时.关于运行时配置的Apple文档在该主题上没有多少说明.
有没有办法,使用简单的.dmg图像作为安装媒介,以确保系统将该特定文件类型与我新安装的应用程序相关联,而无需先启动它?
我应该澄清一下,我希望在安装过程中自动完成(我不希望我的用户必须自己完成).
我正处于编程语言的设计阶段,目前正在考虑并发方面.我需要弄清楚一致性模型,即如何用这种语言编程的并发进程处理数据.
有两个重要标准:
我现在的两个候选人一方面是非阻塞软件事务内存,并且在不共享 la Erlang的情况下复制消息传递语义.
我特别担心易用性,所以我将提出我对这两个模型中的每个模型的主要论点.
对于STM,用户必须了解类的成员必须原子地变异并正确地划分原子代码段.这些必须写入,以便它们可以重复不定义的次数,它们可能不执行任何I/O,可能不会调用某些外部函数等.我认为这对于没有经验的程序员来说很容易.
Erlang风格的无共享并发性很有吸引力,但有一个问题:实时进程无法复制它们发送的对象,因为它们无法执行任何内存分配,因此对象必须从一个进程"移动"到另一个进程通过队列.用户必须知道,如果一个实时进程有两个对象的引用,那么如果他将对象发送到另一个进程,那么这两个引用都将被清除.这有点像弱指针,在任何使用点都可能为空,也可能不为空:它可能会令人惊讶.
我倾向于第二个模型,因为它看起来更容易理解,它自然地扩展到分布式系统.
您有什么推荐的吗?
concurrency language-design transactional-memory message-passing
我正在拼命寻找降低家用电脑上构建时间的廉价方法.我刚刚阅读了一篇关于在Windows XP上禁用文件的上次访问时间属性的文章,因此简单的读取不会将任何内容写回磁盘.
这也很简单.在DOS提示符下写:
fsutil behavior set disablelastaccess 1
有没有人在构建C++项目的环境中尝试过它?有什么缺点吗?
[编辑]有关此主题的更多信息.
我正在Windows XP上用C++开发一个应用程序,使用Eclipse作为我的IDE,以及一个基于Makefile的构建系统(使用自定义工具生成Makefile).另外,我正在使用LZZ,它允许我编写一个文件,然后将其拆分为头文件和实现文件.我正在使用TDM的GCC 4端口.
我可以使用哪些工具或技术来确定构建过程的每个部分需要多长时间,以及为什么它很慢?
特别感兴趣的是:
PS:这是我的家庭项目,所以昂贵的工具对我来说是遥不可及的,但如果它们特别相关,可以在这里记录.
我正在挠头,试图找出为什么在我的机器上构建Boost库时不会生成导入库.更具体地说,构建DLL工作正常,但我以前(即在我重新安装我的机器之前)正确生成导入库.
一些规格:
gccMS Dos命令行提示符的工具集构建调用bjam.exe的命令行如下所示:
"C:\.../boost_1_33_1/tools/build/jam_src/bin.ntx86/bjam.exe" --debug-configuration -d2 -q --builddir=C:/.../trunk/XTemp/gcc.debug/boost_1_33_1 toolset=gcc threading=multi define=BOOST_WINDOWS define=_GLIBCXX__PTHREADS linkflags=-shared-libgcc runtime-link=shared variant=debug --v2 linkflags=-out-implib=boost_thread.lib
Run Code Online (Sandbox Code Playgroud)
这曾经很好地工作,并产生了所需的文件boost_thread.lib,但现在不再.我真的不知道发生了什么,我想确切地知道链接器在命令行上收到了什么以及它认为它应该用它做什么.
谢谢,
卡尔
c++ ×4
concurrency ×2
eclipse ×2
bjam ×1
boost ×1
building ×1
cygwin ×1
dependencies ×1
encoding ×1
erlang ×1
exception ×1
file-io ×1
gdb ×1
go ×1
info.plist ×1
installation ×1
macos ×1
makefile ×1
performance ×1
profiling ×1
real-time ×1
stdstring ×1
tdm-mingw ×1
ucs2 ×1
utf-8 ×1
windows-xp ×1