大多数编程语言都对Unicode 有一些支持,但是所有编程语言都有一些或多或少的记录的极端情况,其中的东西将无法正常工作.
例子
Java: StringBuilder/StringBuffer中的reverse()正常工作.但是如果一个字符需要超过16位进行编码,那么String中的length(),charAt()等就不会出现.
C#: 没有找到正确的反向方法,长度和索引访问返回错误的结果.
Perl:同样的问题.
PHP: 根本没有Unicode的想法,mbstring有一些更好的工作替代品.
我想知道是否有一种编程语言,它具有完整和正确的Unicode支持?那里必须做出什么妥协才能实现这样的目标?
它是如何在内部实施的?
我看到Python 3在这方面有一些很大的变化.Python 3现在与正确的实现有多接近?
language-agnostic string unicode encoding programming-languages
我想知道这里的原因是什么(implicit ev: Null <:< A1):
sealed abstract class Option[+A] extends Product with Serializable {
def orNull[A1 >: A](implicit ev: Null <:< A1): A1 = this getOrElse null
...
}
Run Code Online (Sandbox Code Playgroud)
岂不
def orNull[A]: A = this getOrElse null
Run Code Online (Sandbox Code Playgroud)
考虑到它似乎甚至不适用于像这样的值类型
Option(1).orNull
Run Code Online (Sandbox Code Playgroud)
但
Option(1).getOrElse(null)
Run Code Online (Sandbox Code Playgroud)
呢?
Option的源代码
集合框架的大部分实现复杂性源于这样一个事实:Scala可以 - 不像C#的LINQ或其他集合框架 - 返回高阶函数的"最佳"集合类型:
val numbers = List(1,2,3,4,5)
numbers map (2*) // returns a List[Int] = List(2, 4, 6, 8)
val doubles = Array(1.0, 2.0, 3.0)
doubles filter (_ < 3) // returns Array[Double] = Array(1.0, 2.0)
Run Code Online (Sandbox Code Playgroud)
为什么这个原则不能保持类似的方法seq,par,view,force?
numbers.view.map(2*).force
// returns Seq[Int] = List(2, 4, 6, 8)
numbers.seq
// returns scala.collection.immutable.Seq[Int] = List(1, 2, 3, 4)
doubles.par.seq
// returns scala.collection.mutable.ArraySeq[Double] = ArraySeq(1.0, 2.0, 3.0)
Run Code Online (Sandbox Code Playgroud)
是否有技术限制阻止其工作?或者这是设计/意图?考虑到LINQ基本上是懒惰的,Scala的等价物(view,force)不是更加类型安全的(只有在使用严格的方法时),对吧?
考虑这部分语法:
def expression = SimpleExpression ~ opt(relation ~ SimpleExpression)
def relation = "=" | "#" | "<=" | "<" | ">=" | ">" | "IN" | "IS"
def SimpleExpression = opt("+" | "-") ~ rep1sep (term, AddOperator)
def AddOperator = "+" | "-" | "OR"
def term = factor ~ rep(MulOperator ~ factor)
def MulOperator = "*" | "/" | "DIV" | "MOD" | "&"
def factor: Parser[Any] = number | "(" ~ expression ~ ")" | "~" ~ factor …Run Code Online (Sandbox Code Playgroud) parsing scala operators operator-precedence parser-combinators
似乎必须在使用某些特定于Eclipse的配置或"Maven项目"的"AspectJ项目"之间进行选择,然后尝试正确获取AspectJ的XML配置.
是否有一些我缺少的Eclipse功能,或者是否有一个"预制"/教程项目,我可以作为一个开始使用?
PS:我正在使用Eclipse 3.7(Indigo).
可以在没有包含适当Unicode字符的键盘的情况下使用scalaz,或者每个Unicode标识符是否也具有等效的"ASCII"(如果是,是否保证它保持这种方式)?是否有特殊的键盘布局用于scalaz?
什么是最佳做法?直接输入Unicode标识符或使用ASCII替换并使用脚本在提交之前用Unicode替换它们?
F#3.0添加了类型提供程序,这使得基本上不必手动编写或生成DB(或其他数据提供程序)与语言/类型系统之间的映射,因为该语言可以直接使用类型提供程序从数据库本身查询结构信息.
从语言实现的角度来看,为语言添加这样的功能有什么必要?
它需要一个完全可插拔的类型系统吗?或者它更像是一些集成到编译器中的隐藏代码生成器?
为F#实现新类型提供程序需要什么?
F#附带了对测量单位系统的特殊支持,该系统提供静态类型安全性,同时编译为数字类型,而不是通过包装/展开操作增加运行时的负担.
是否有可能使用一些Scala的类型系统魔法来实现与之相当的东西?
我想知道async/ awaitpattern(从Scala,F#,C#等已知)和continuation 之间的关系是什么:
async/ await模式全面爆发延续的一个有限的子集?(如果是真的,那么延续更具表现力?)async/ await?(如果是,那么还有其他实现方法吗?)async/ await和/ 和延续只是正交概念,其中唯一的共同点是它们都能实现控制流/数据流的一些抽象?concurrency continuations asynchronous async-await delimited-continuations
scala ×5
f# ×3
java ×2
types ×2
unicode ×2
aop ×1
apl ×1
async-await ×1
asynchronous ×1
c# ×1
collections ×1
concurrency ×1
database ×1
eclipse ×1
encoding ×1
implicit ×1
linq ×1
maven ×1
operators ×1
parameters ×1
parsing ×1
scala-option ×1
scalaz ×1
string ×1