小编Car*_*org的帖子

C++字符串:UTF-8还是16位编码?

我仍在尝试决定我的(home)项目是否应该使用UTF-8字符串(在必要时使用std :: string和其他特定于UTF-8的函数实现)或一些16位字符串(实现为std: :wstring的).该项目是一种编程语言和环境(如VB,它是两者的结合).

有一些愿望/约束:

  • 如果它可以在有限的硬件上运行,例如内存有限的计算机,那将会很酷.
  • 我希望代码能够在Windows,Mac和(如果资源允许的话)Linux上运行.
  • 我将使用wxWidgets作为我的GUI层,但我希望与该工具包交互的代码限制在代码库的一角(我将拥有非GUI可执行文件).
  • 在处理用户可见文本和应用程序数据时,我想避免使用两种不同的字符串.

目前,我正在使用std :: string,目的是仅在必要时使用UTF-8操作函数.它需要更少的内存,似乎是许多应用程序正在进行的方向.

如果你推荐一个16位编码,哪一个:UTF-16UCS-2?另一个?

c++ encoding ucs2 utf-8 stdstring

12
推荐指数
4
解决办法
2万
查看次数

我的C++异常类真的需要多精益?

有很多地方可以找到设计异常类的指南.几乎在我看的每个地方,都有异常对象永远不应该做的事情列表,这会影响这些类的设计.

例如,Boost人员建议该类不包含任何std::string成员,因为它们的构造函数可能会抛出,这会导致运行时立即终止程序.

现在,在我看来,这是相当理论化的.如果std::string构造函数抛出,那么它是一个bug(我传入了一个空指针)或一个内存不足的情况(如果我错了,请纠正我).由于我在桌面上,我只是假装我有无限的内存,无论如何,内存耗尽对我的应用程序来说是致命的.

考虑到这一点,为什么我不应该std::string在我的异常类中嵌入对象?事实上,为什么我的异常类不能全功能,并且还要处理日志记录,堆栈跟踪等.我知道一个责任原则,在我看来,这是一个公平的权衡让异常类完成所有这些.当然,如果我的解析器需要报告语法错误,那么功能齐全的异常将比围绕静态分配的字符数组构建的异常更有帮助.

那么:精益C++异常类 - 它在现实世界中有多大的优势?有什么权衡取舍?是否有关于该主题的良好讨论?

c++ exception

11
推荐指数
1
解决办法
2554
查看次数

是什么让Erlang适合软实时应用?

一些背景

我正在为数字媒体编程构建一种编程语言,它应该支持使用无共享消息传递和软实时的并发(即尽量计算音频/视频而不丢失样本或帧并且具有恒定的吞吐量) .

事实证明,这两个特征难以组合,主要是因为一个特定的约束:实时代码不应动态分配内存.

我的语言应该可以很容易地实现这样的事情:

  • 一个线程根据参数计算音频样本.例如,这些可以是合成器的不同控制的值.该线程"实时"运行.
  • 一个线程接收来自用户或另一台计算机的输入以更改这些值.这可以是GUI线程,例如,对用户用鼠标转动旋钮作出反应.

我希望用户设置的新值通过队列发送到合成器引擎.如果我只想发送浮点数和其他原子值,那么问题就不会很有趣了.实际上,我希望任何类型的数据都能够从一个线程流向另一个线程,甚至是复杂的对象或数据结构,这对于线程和优先级的任何配置都应该是可能的.如果没有实时动态内存分配,这就变得非常困难,而不会对程序员施加任何似乎任意的限制.

Erlang经常被宣传为适合实时系统.我的理解是,Erlang从不会禁止内存分配.如果我做了同样的事情,那将会导致许多问题消失,代价是在执行这些分配的代码中引入非确定性时序.

这个问题

那么是什么让Erlang如此合适呢?它是否实现了特殊的技巧来规避内存分配引起的问题,还是完全忽略了这个问题?它需要另一种实时方法吗?

举例说明这个问题

让我们假设我们在Erlang中编写一个合成器,它必须每50毫秒产生64个样本,否则声音中会出现裂缝和爆裂声.让我们假设当我在字符串上移动一些滑块时,一个小对象(假设它是一个列表或包含参数名称和新值的元组)必须从GUI进程发送到音频进程,其中a副本已创建.这将需要动态内存分配.Erlang如何帮助我确保此分配不会延迟我的音频计算?

concurrency erlang real-time message-passing

11
推荐指数
2
解决办法
4172
查看次数

Go的优点和缺点是拒绝未使用的依赖项

Google的新语言Go试图通过明确要求实际使用模块中列出的所有依赖项来简化依赖项管理.编译器将拒绝向模块声明依赖关系的模块,而不使用该模块中的任何内容.

包导入自身或导入包而不引用其任何导出的标识符是非法的.

我可以想到一些明显的优点(例如更清洁的模块),但也许有一些非显而易见的优点.我能想到的唯一缺点是有一个过于迂腐的编译器,在重构过程中抱怨太多,但也许还有更多?

您是否有其他语言执行此操作的经验?这种方法的优点和缺点是什么?

dependencies language-design go

11
推荐指数
1
解决办法
1229
查看次数

如何让Eclipse为Cygwin的GDB提供可执行文件的posix路径?

我在Windows上使用Eclipse来使用C​​ygwin的工具链来编写C++.我也想用它进行调试,但我的问题如下:

  • 要调试的可执行文件位于工作区的子文件夹中(非常标准,我猜)但不是构建可执行文件的实际项目.
  • Eclipse和GDB具有不同的路径格式:Eclipse使用Windows路径,而GDB使用posix路径.Eclipse知道D:\Path\To\ExeGDB需要/cygdrive/d/Path/To/Exe.
  • Eclipse 坚持认为,当我在"Debug configurations ..."对话框中输入路径时,它可以找到要调试的可执行文件."调试"按钮被禁用,直到路径正确为止.
  • Eclipse似乎没有接受${workspace_loc}那个特定的输入框.

有一些我不知道的隐藏选项吗?你以前遇到过这个问题吗?

到目前为止我尝试过的

  • 强制Eclipse传递我输入到GDB的路径--- 不起作用.
  • 摆弄源查找路径和路径映射--- 不起作用,它实际上只适用于源文件.
  • 为可执行文件所在的输出文件夹创建一个C++项目,所以我可以在项目中有一个相对的exe路径--- 不起作用.

我仍然可以尝试的事情

  • 使用该.gdbinit文件丢弃Eclipse给出的路径并使用posix路径加载真实的可执行文件---尝试过,但不是很难.
  • 指定包装器作为GDB的参数---污染我工作区的根.
  • 提供我自己的插件来处理这个案例---添加另一段代码来维护另一种语言.

eclipse cygwin gdb

9
推荐指数
2
解决办法
8858
查看次数

如何在不首先启动文件类型与MacOS X App的情况下将其关联?

我想将我最近安装的Mac OS X应用程序版本与某种类型的文件相关联.一些实验表明,在启动应用程序时,操作系统似乎会读取和解释info.plist文件,而不是在将应用程序包拖动到磁盘时.关于运行时配置的Apple文档在该主题上没有多少说明.

有没有办法,使用简单的.dmg图像作为安装媒介,以确保系统将该特定文件类型与我新安装的应用程序相关联,而无需先启动它

我应该澄清一下,我希望在安装过程中自动完成(我不希望我的用户必须自己完成).

macos installation info.plist file-association

7
推荐指数
1
解决办法
1万
查看次数

为并发编程语言选择一致性模型

我正处于编程语言的设计阶段,目前正在考虑并发方面.我需要弄清楚一致性模型,即如何用这种语言编程的并发进程处理数据.

有两个重要标准:

  • 我更喜欢易用性而不是性能,只要一致性模型允许良好的缩放,
  • 我不能使用需要阻塞或动态内存分配的一致性模型.

我现在的两个候选人一方面是非阻塞软件事务内存,并且在不共享 la Erlang的情况下复制消息传递语义.

我特别担心易用性,所以我将提出我对这两个模型中的每个模型的主要论点.

对于STM,用户必须了解类的成员必须原子地变异并正确地划分原子代码段.这些必须写入,以便它们可以重复不定义的次数,它们可能不执行任何I/O,可能不会调用某些外部函数等.我认为这对于没有经验的程序员来说很容易.

Erlang风格的无共享并发性很有吸引力,但有一个问题:实时进程无法复制它们发送的对象,因为它们无法执行任何内存分配,因此对象必须从一个进程"移动"到另一个进程通过队列.用户必须知道,如果一个实时进程有两个对象的引用,那么如果他将对象发送到另一个进程,那么这两个引用都将被清除.这有点像弱指针,在任何使用点都可能为空,也可能不为空:它可能会令人惊讶.

我倾向于第二个模型,因为它看起来更容易理解,它自然地扩展到分布式系统.

您有什么推荐的吗?

  • 非阻塞软件事务内存?
  • Erlang风格的并发性与实时约束的困难?
  • 我没有考虑过的其他事情?

concurrency language-design transactional-memory message-passing

7
推荐指数
1
解决办法
421
查看次数

XP上的文件:关闭"上次访问时间"安全吗?

我正在拼命寻找降低家用电脑上构建时间的廉价方法.我刚刚阅读了一篇关于在Windows XP上禁用文件的上次访问时间属性的文章,因此简单的读取不会将任何内容写回磁盘.

这也很简单.在DOS提示符下写:

fsutil behavior set disablelastaccess 1

有没有人在构建C++项目的环境中尝试过它?有什么缺点吗?

[编辑]有关此主题的更多信息.

c++ performance file-io windows-xp

6
推荐指数
2
解决办法
2456
查看次数

如何分析完整的C++构建?

我正在Windows XP上用C++开发一个应用程序,使用Eclipse作为我的IDE,以及一个基于Makefile的构建系统(使用自定义工具生成Makefile).另外,我正在使用LZZ,它允许我编写一个文件,然后将其拆分为头文件和实现文件.我正在使用TDM的GCC 4端口.

我可以使用哪些工具或技术来确定构建过程的每个部分需要多长时间,以及为什么它很慢?

特别感兴趣的是:

  • 需要花多少时间来解析Makefile,找出依赖关系,检查时间戳等?
  • Eclipse在构建之前和之后需要多长时间?
  • GCC花费多少时间来解析系统和提升标头?

PS:这是我的家庭项目,所以昂贵的工具对我来说是遥不可及的,但如果它们特别相关,可以在这里记录.

c++ eclipse profiling build-process makefile

6
推荐指数
1
解决办法
525
查看次数

如何查看Boost.Build调用的g ++命令行(1.33.1)

我正在挠头,试图找出为什么在我的机器上构建Boost库时不会生成导入库.更具体地说,构建DLL工作正常,但我以前(即在我重新安装我的机器之前)正确生成导入库.

一些规格:

  • 提升1.33.1
  • g ++ 4.3.3适用于Windows的TDM-1版本
  • 使用gccMS Dos命令行提示符的工具集构建
  • UnxUtils(14-04-03之后)

调用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,但现在不再.我真的不知道发生了什么,我想确切地知道链接器在命令行上收到了什么以及它认为它应该用它做什么.

谢谢,

卡尔

boost bjam building import-libraries tdm-mingw

5
推荐指数
1
解决办法
4354
查看次数