首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

现代编程语言需要

作者丨 Ayende Rahien 译者丨明知山 策划丨闫园园 几周前,我写了一篇关于编程语言 Hare 及其缺少数据结构的文章。...如今,我不想再讨论这个话题了,我想讨论一些更“”的东西。在我看来,任何以高性能为目标的现代编程语言都应该支持某种形式的,不支持是一个重大错误,也是导致复杂性增加和性能损失的一大原因。...在 Go 语言增加支持时就有过相关的讨论,从基准测试可以看出,版本有了 20% 的性能提升。这是因为避免了调用开销,并为编译器提供了更多的优化机会。...没有意味着用户不得不将性能束之高阁。 实际上,几乎所有关心高性能的现代编程语言都有。我能想到的一个例外是 Java,这是因为它在添加时选择了向后兼容。...我将本文作为上一篇关于数据结构的文章的补充结论,我认为最终的结果是显而易见的。如果你想要高性能的系统,就应该选择一种能让你简洁地表达逻辑的编程语言,而是实现这种简洁性的必要工具。

86320

编程

起源 编程是一种编程风格,其中算法以尽可能抽象的方式编写,而不依赖于将在其上执行这些算法的数据形式。 ? 编程的提出者 这个词并不是通用的,在不同的语言实现中,具有不同的命名。...任何编程方法的发展一定是有其目的,也不例外。的主要目的是加强类型安全和减少强制转换的次数。...Java中的编程 在Java中有类和方法之分,这些都是表现形式的改变,实质还是将算法尽可能地抽象化,不依赖具体的类型。...我们甚至可以遵循前面的定义方式,说: 2.1 编程 对程序的间接控制进一步进行约束和规范,type casting considered harmful. Kotlin中的编程 ?...补充 基于最先分析的通过继承的方式进行编程的缺点:1. 太多强制转换 2. 非类型安全。恰当地引入了T,以期编译期的占位和运行时的替换。 ?

82120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Go语言中的编程

    Go语言中的编程简介A. 的定义编程是一种编程范式,通过使用类型参数,函数和数据结构可以在不指定具体类型的情况下进行定义。允许编写更具通用性和可重用性的代码。B....Go语言中的支持自Go 1.18版本起,Go语言正式引入了对的支持。Go语言通过类型参数(type parameters)和类型约束(type constraints)实现编程。C....Go语言中的语法&&定义型函数**package mainimport "fmt"// 定义型函数func Print[T any](value T) { fmt.Println(value...这样,接口使得不同类型的实现可以通过相同的接口进行调用,增加了代码的灵活性和可扩展性。与并发编程结合在并发编程中使用,可以提高代码的通用性和可维护性。...高级用法与优化和并发编程:在并发编程中使用可以提高代码的灵活性,例如定义通用的并发安全数据结构。

    12300

    效率编程 之「

    第 1 条:请不要在新代码中使用原生态类型 每种都定义了一组参数化类型,其构成格式为:先是类或者接口的名称,接着用尖括号()把对应于形式类型参数的实际类型参数列表括起来。...每个都定义了一个原生态类型,即不带任何实际参数的名称。例如,与List相对应的原生态类型是List。原生态类型就像是从类型声明中删除了所有信息一样。...实际上,原生态类型List与 Java 平台没有之前的接口类型List完全一样。但是,如果使用原生态类型,就失掉了在安全性和表述性方面的所有优势。...数组和不能很好地混合使用,因为数组是协变的、具体的,而只在编译时强化它们的类型信息并在运行时擦除它们的元素类型信息。因此,创建、参数化或者类型参数的数组是非法的。...但是,创建、参数化或者类型参数的列表却是合法的。为了获得带来的类型安全,在面对数组和列表都能解决的问题时,要优先选择列表。

    60940

    编程思想 之「

    在面向对象的语言中,多态算是一种化的机制,因为我们可以将方法的参数类型设为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数。...遗憾的是,虽然 Java 的出现使得 Java 向前迈进了一大步,但是由于 Java 语言是在发行近 10 年后才引入的,为了兼容老代码,Java 的并不纯粹。...除了接口,还有方法,想要定义方法,只需将参数列表置于方法的返回值之前: public class GenericMethod { // 定义方法,只需将参数列表置于方法的返回值之前...如果static方法需要使用能力,就必须使其成为方法。...在基于擦除的实现中,类型被当做第二类处理,即不能在某些重要的上下文环境中使用的类型。类型只有在静态类型检查期间才出现,在此之后,程序中的所有类型都将被擦除,替换为它们的非上界。

    46430

    C语言也能实现编程么?

    今天看到一个有意思的知识点,赶紧记录一下,总所周知,C语言没有,但是C11新增了一种表达式,叫做选择表达式(_Generic),这个是干啥的呢?...它的作用是根据表达式的类型选择一个值,让我们来看一看它具体的语法 选择引入 先看一段代码: int main() { int x = 1; double y = 2.0; char z = '...1.0*d)); printf("%s\n", MYTYPE("string")); return 0; } 运行结果如下: image.png 与宏定义结合是不是感觉好多了,甚至有点C++编程的感觉了...const char* str = "hello _Generic"; PRINT(x); PRINT(y); PRINT(str); return 0; } 运行结果如下: 这样是不是和C++的编程很像了呢...,是不是挺有意思的,当然还是C++的好用一些。

    66720

    原来C语言还可以这样实现“编程”!

    在回答标题问题之前,先了解下什么是编程编程(generic programming)是程序设计语言的一种风格或范式。...也就是说,add函数没有针对特定类型()。 你同样可以使用重载实现上面的功能,但是存在大量重复代码。 C语言支持编程吗?...很遗憾,C语言本身不支持真正意义上的编程,但是却在一定程度上可以“实现编程”。...像这样类似的例子,C语言中还有很多,不过相比于其他语言,如C++中的模板,这种所谓的,确实有些小巫见大巫了。...总结 C语言语法上本身基本不支持编程,但是借助_Generic关键字和一些手段,可以实现编程

    3.4K11

    Golang编程初体验

    序言 众所周知,Golang中不支持类似C++/Java中的标记式,所以对于常用算法,比如冒泡排序算法,有些同学容易写出逻辑上重复的代码,即整型是第一套代码,字符串是第二套代码,用户自定义类型是第三套代码...本文通过一个实际使用的简单算法的演进过程,初次体验了Golang的编程,消除了重复代码,非常自然。...”听说你昨天实现了一个数组切片算法,已支持整型,我现在想用字符串的数组切片算法,你能提供不?"小雷有点着急的问道。...从试用代码中可以看出,字符串数组切片中最多有三个元素[hello golang generic],元素golang插入的第二次应该失败,同理元素golang删除的第二次也应该失败,字符串数组切片最后只剩下一个元素...小结 本文通过一种轻松愉快的方式阐述了实际使用的数组切片算法的演进过程,同时也是笔者使用Golang进行编程的第一次旅行,再次领略了Golang中interface的强大魅力,希望对读者也有一定的启发

    3.2K80

    Golang编程初体验

    序言 众所周知,Golang中不支持类似C++/Java中的标记式,所以对于常用算法,比如冒泡排序算法,有些同学容易写出逻辑上重复的代码,即整型是第一套代码,字符串是第二套代码,用户自定义类型是第三套代码...本文通过一个实际使用的简单算法的演进过程,初次体验了Golang的编程,消除了重复代码,非常自然。...”听说你昨天实现了一个数组切片算法,已支持整型,我现在想用字符串的数组切片算法,你能提供不?"小雷有点着急的问道。...从试用代码中可以看出,字符串数组切片中最多有三个元素[hello golang generic],元素golang插入的第二次应该失败,同理元素golang删除的第二次也应该失败,字符串数组切片最后只剩下一个元素...小结 本文通过一种轻松愉快的方式阐述了实际使用的数组切片算法的演进过程,同时也是笔者使用Golang进行编程的第一次旅行,再次领略了Golang中interface的强大魅力,希望对读者也有一定的启发

    1.4K80

    编程】模板全详解

    编程 1.引入 在c语言中,如果我们想写多类型的,并且是同一个函数出来的函数,我们只能要几个写几个出来,这样子会显得比较冗余,也加大了程序员的代码量,于是c++中就引入了函数重载和编程的概念,大大的简化了我们的工作...仅靠函数重载是完不成编程的需求的,比如说下面的代码: void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; } void Swap(...2.什么是编程 编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是编程的基础。 其中,模板分为两类,一类是函数模板,一类是类模板。 Ⅱ....我们之前c语言中对于一些数据结构比如 stack,我们在设置int类型的时候,只能去 typedef 为 int,然后如果需要 double 则重新去 typedef 为 double,非常麻烦,而且这种方式做不到同时申请一个

    67120

    C#入门类、集合、方法、约束、委托

    不然 集合和ArrayList的装箱拆箱 常见的类型 类和方法 约束 委托 ###很难理解?...第一次接触那还是在大二上学期的时候,那会是学c#面向对象的时候接触过集合,但尴尬的是那会还没有“”这个概念,仅仅只停留在集合的使用。...官方解释: 是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对的支持均不一样。...有关更多信息,请参见使用可以为 null 的类型(C# 编程指南)。 where T : class 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。...,声明的时候还是和类、方法一样加个 站个坑,其实委托使用的时候不是很多,要慎用。

    2.5K30

    【Java 用法 ( 类用法 | 方法用法 | 通配符 ? | 安全检查 )

    文章目录 一、类用法 二、方法用法 三、通配符 四、安全检查 五、完整代码示例 1、类 / 方法 2、main 函数 一、类用法 ---- 类用法 : 使用时先声明 , 如果不声明 , 则表示该类的是 Object...: 指定 类 的为 String 类型 , 那么在该类中凡是使用到 T 类型的位置 , 必须是 String 类型 , 类的 声明 , 使用时在 类名后面 声明 ; /...getData2(T arg){ T data = arg; return data; } 指定的方法 : 指定 方法 的类 , 方法 的声明...个数 , 的个数可以有很多个 * 多个之间 , 使用逗号隔开 * * 方法指定的 T 与类中的 T 没有任何关系 *

    10.2K30

    Go语言技巧 - 16.【Go】何时使用

    先提炼一下,它的T体现在两块: 数据结构的命名 - Tree[T any]和 node[T any],这里的不做任何限制,只表示数据结构; 关键性的计算功能 - cmp func(T, T) int...在这个例子中,T表示任意类型。由于它的数据结构的不确定性,自然就无法进行计算;这时引入的cmp函数,则是将T的计算逻辑作为输入 中更倾向于用函数,而不是方法 上面示例二明显比示例一更具通用性。...与接口 和接口有不少相似之处,比如上面的需要传入cmp这个一个对比函数,而如果用接口,往往也需要自己实现接口相关的方法。 但是,我们切勿混淆两者。...; 所以,更多的是从数据结构来思考共同特征,会偏向于过程性思维,适合底层的基础工具库;而接口则是用方法来抽象各种对象,是面向对象的思维,适合中、高层的编程。...这里有2个特点: 反复性:如果只是写两三次就能解决的,就没必要使用了; 非逻辑类问题:如果是计算逻辑有差异,那也不能使用; 换一句话来说,先写重复性代码,再提炼成,不要过早引入

    63940

    【Java 简介 ( 类 | 方法 | 静态方法的 | 类与方法完整示例 )

    文章目录 一、简介 二、类 三、方法 四、静态方法的 五、类与方法完整示例 一、简介 ---- 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上...; java 与 C++ 模板 : Java 中的 , 是仿照 C++ 中的 模板 开发的 , 目的是让开发者可以写出 通用 , 灵活 的代码 ; 伪 : Java 中的 , 是 伪..., Java 开发好之后 , 在 编译阶段 就 将相关的信息消除 了 , 不会留到运行时 ; 类型 : 方法 : 方法有参数 , 方法的参数 可以指定成一些 ; 类 :...---- 方法 : 在方法的 返回值前 , 使用 声明的方法 , 是方法 ; 将某个类型作为参数传入 ; 个数 : 该方法是方法 , 且指定了 2 个 , 的个数可以有很多个..., 多个之间 , 使用逗号隔开 ; 方法 与 类 中的 : 不同 : 方法指定的 T 与 类中的 T 没有任何关系 , 这两个 T 可以是不同的类型 ; 相同

    14K30

    擦除)【java基础—-

    1.3 定义(类、方法(方法返回值是的,方法在普通类和类里)): 1.4特点: 对于特点(1)举个例子 : 没有使用时的异常抛出 对于特点(2)访问时不需要类型转换...(拆箱),举例子List list = new ArrayList(); 对于特点(3)不同之间不能相互赋值,举例 对于特点(3)不存在多态,举例 2.类、接口、方法...2.1类 2.2接口与类相似,不举例子了 2.3方法 2.4.疑惑,为什么有类了,还要有方法,类与方法有什么区别,方法有什么好处?...3.为什么要使用的好处: 3.1的好处 3.2类的好处 4.使用注意点: 4.1不同之间不能相互赋值,不存在多态((检查机制)特点(3)) 4.2要注意擦除...1.3 定义(类、方法(方法返回值是的,方法在普通类和类里)): 10、的定义是(带尖角号的T), 例如定义一个类:public class Stu{ }

    2.4K51

    接口,类和通配符

    接口和接口的定义,public interface man{...}。在接口名后面加上类型参数T,这样就定义了一个接口。 ?...,在类名后面加上类型参数T,这样就定义了一个类。 ? 类 和接口不同,类有构造器,并且构造器也可以使用类型参数。...2.再看另一个问题,如果父类是类型,如何定义子类? ? 类的子类 如果将一个类定义为类,那么在创建该类的子类的时候不能将子类直接继承该类,而是需要指定父类的类型。...使用 由于方法中的需要在定义类的时候就指定,所以如果需要使用含有的方法,必须在创建该类对象的时候就需要指定类型,因为使用的时候必须指定类型,不论是普通参数还是参数。...提供了一个通配符用于接收所有类型的类型。 的通配符 ? 通配符 的通配符可以很好的解决所有类型父类的问题,使用来作为类或接口的参数,这样就可以抽象出类的父类。

    2.3K20

    【Kotlin】 ① ( 类 | 参数 | 型函数 | 多参数 | 类型约束 )

    文章目录 一、类 二、参数 三、型函数 四、多参数 五、类型约束 一、类 ---- 定义一个 类 , 将 参数 T 放在 尖括号 中 , 该参数放在 类名后...下面的代码中 , 声明了 Student 类 , 该类 接收 T 类型的参数 , 在主构造函数中接收 T 类型的参数 , 在该类中声明了 T 类型的成员属性 ; class Student...---- 通常情况下 , 参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 参数 , 但是 约定俗成 都使用 T 来表示 ; 在下面的代码中 , 使用 M 作为 参数...---- 型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都是 的话 , 在该型函数 中可能需要使用多个 , 使用不同的字母表示不同的 ; 如果函数中 引入了新的类型...R 的类型是 Boolean 类型 ; 3.14 true 五、类型约束 ---- 在 类 , 型函数 中 , 使用前 , 需要声明 参数 : 参数 声明 : 如果类中

    2.8K10

    Java进阶:【】认识方法,类,接口和通配符

    什么是就相当于标签 形式: jdk1.5之后,用来解决元素类型不确定的数据保存操作, 例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做...对应的类型都是引用类型不能是基本类型 类和接口 声明类时传入类型实参 创建类对象时,传入类型实参 类型实参为空时,默认为Object类型 继承类: 1.父类不传入类型实参...,默认为Object类型 2.父类传入类型实参,子类既可以是类,也可以不是 3.父类传入类型实参,则子类必须是类,且子类的类型形参列表必须包含父类的类型形参列表 类的定义和实例化...类的构造器写法: 不同的引用类型不可以互相赋值 如果不指定,就会被擦除,例子就是 类中的静态方法不能使用类的 不能直接使用数组的创建,如果非要创建 方法 什么是方法...,不是带的方法就是方法,方法有要求:这个方法的参数类型要和当前类的方法的无关 换个角度:方法对应的那个参数类型和当前所在的这个类,是否为类,是啥,无关 方法定义的时候

    3.4K10
    领券