首页
学习
活动
专区
圈层
工具
发布

Elixir和ScyllaDB教你创建CRUD CLI,惊人的效率提升!

另一方面,Elixir 是一种编程语言,以很好地处理并发和容错等概念的适用性而闻名,这要归功于 Erlang 生态系统,在这种情况下,Elixir 使用名为 BEAM 的虚拟机,专为与大容量消息传递应用程序配合使用而设计...本文的目的是介绍如何使用这两种技术创建您的第一个应用程序,通过这两种令人难以置信的技术进行开发,为您的未来打开大门和可能性。启动项目事先我们需要安装 Elixir 和 ScyllaDB。...如果返回的是:ok,则表示一切顺利,那么我们返回完整的结果(查询的完整地图);如果返回是:error则说明执行查询时出现错误,那么我们检查具体的错误;{:ok, result}一个重要的细节是关于使用and...(查询的完整地图);如果返回是:error则说明执行查询时出现错误,那么我们检查具体的错误;如果您想了解有关该Xandra.Cluster.execute功能如何工作的更多信息,请单击此处。...好吧,run_query返回一个完整的映射列表及其各自的值,因此我们用它Enum.each来处理列表中的每个索引。

1.4K30

我为什么两次放弃了函数式编程,却依然感谢它

而且 模式匹配 和 管道操作符 让我眼前一亮:[1, 2, 3, 4]|> Enum.map(&(&1 * 2))|> Enum.filter(&(&1 > 4))这段代码意思是: 取一个列表 → 每个元素乘以...中,变量一旦绑定,就不能修改。...在命令式语言里(Python、Java、Go),我们习惯“改变状态”:> 设置一个变量 → 修改它 → 在循环中继续修改它。...在 Reddit 上,关于 Elixir vs Go 的讨论很有意思。 很多程序员提到:Elixir/BEAM 的优势:并发和容错(OTP)、语法优雅、Phoenix/LiveView 体验好。...2)混合使用,而不是极端纯粹在 Python、Java、Go 里用纯函数、不可变思路,就能收获一部分好处:避免全局变量;优先返回新值而不是就地修改;利用 map/filter/reduce 或者流式 API

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

    (译) Understanding Elixir Macros, Part 2 - Micro Theory

    这个过程是渐进的 — 一个宏可以返回调用其他宏(甚至它本身)的 AST. 编译器会再次扩展, 直到不可以扩展为止. 调用宏使得我们有机会修改代码的含义....一个典型的宏会获取输入的 AST 并修改它, 在它周围添加一些代码. 那就是我们使用宏 trace 所做的事情....那么我们是如何返回 state 的呢?这是因为 defcall 宏生成了一个隐藏的state 变量, 它之后将被 reply 宏明确使用....然而, 对于许多常量(原子, 数字, 字符串), 引用(quoted)形式和输入值完全一样. 此外, 二元元组和列表会在被引用(quoted)时保持它们的结构....第二个例子证明了复杂的部分(例如调用 x和 y)会是 quoted 形式. 但是列表还保持着它的形状. 这仍然是一个键为 :a 和 :b 的关键词列表. 将它们放在一起 为什么这些都很重要?

    51040

    Go 编程 | 连载 11 - 复杂数据类型 Slice

    第二种定义方式 使用 make 函数也可以定义切片,make 函数还可以定义 map 以及 channel 数据类型并返回这些数据类型的实例。...使用 make 函数定义切片时,切片中的元素为元素类型的默认值,切片是动态数组,也可以通过索引对元素进行修改。...make 函数和 new 函数都可以定义切片,它们的区别如下: make 和 new 都是用来分配内存的內建函数,且在堆上分配内存,make 即分配内存,也初始化内存;new只是将内存清零,并没有初始化内存...make 返回的还是引用类型(实例)本身;而 new 返回的是指向类型的指针(内存地址)。 make 只能用来分配及初始化类型为 slice,map,channel;new 可以分配任意类型的数据。...Scala Ruby] [ELIXIR SCALA RUBY] [ELIXIR SCALA RUBY] 原切片中的元素被修改,说明切片是引用类型。

    68020

    (译) Understanding Elixir Macros, Part 5 - Reshaping the AST

    # 返回参数名称列表 (arg1, arg2, ...)...最后, 在推导式的末尾, 我们返回一个元组, 该元组由临时的名称和 quoted 的完整模式组成 - (例如 _ = arg1, 或 0 = arg2)....使用 unzip 和 to_tuple 进行推导之后确保 decorate_args以 {arg_names, decorated_args} 的形式返回结果. decorate_args 辅助变量就绪后...要注意, 我们需要做到以下几点: 递归遍历输入函数头的 AST 找到指定函数名和参数的位置 用修饰过的参数的 AST 替换原始(输入)参数 如果我们使用宏, Macro.postwalk/2 这个处理可以被合理地简化掉...递归地遍历 AST head = Macro.postwalk( head, # lambda 函数处理输入 AST 中的元素, 返回修改过的 AST fn #

    35630

    (译) Understanding Elixir Macros, Part 1 Basics

    虽然不常见, 但对一个 quoted expression 求值也是可以的: iex(2)> Code.eval_quoted(quoted) {3, []} 返回的元组中包含了表达式的结果, 以及一个列表...:a, Elixir}, 1}]} 再次看到, 求值结果由一个表达式结果 (3), 一个变量绑定列表构成....| | 表达式结果 变量名称 变量的值 从这个绑定列表中我们可以看出, 该表达式绑定了两个变量 a 和 b, 对应的值分别为 1...我们通常对输入 AST 的内容和结构不感兴趣, 相反, 我们使用 quote 生成和组合输入片段, 并生成经过修饰的代码. Unquoting unquote 在这里出现了....然后我们使用某种格式来打印它们(借助Macro.to_string/1), 最后返回结果. 展开一个 AST 在 Shell 观察其是如何连接起来是很容易的.

    63130

    markdown编辑器实现代码高亮

    前言:笔者之前是使用富文本编辑器,现在转用markdown编辑器,但是在写文章的时候发现即使博客主页设置用上了代码高亮皮肤,但还是在插入代码段的时候不起作用,查阅了他人的博客才发现要加上key描述 类似这样...代码块高亮) 修改查找元素 对列表的主要操作是增删改查 a=[1,2,3,4,5,6] print(a.index(5)) 输出4,表示5在这个列表中,第一次出现的下标为4, 对于index方法而言...方法表示查找指定元素出现次数,与index方法不同的是,如果要查找的元素没有出现则输出零,不会报错 一个小技巧 e.g a=["周一","周二","周三","周四","周六","周五","周日"] #很明显列表中周六和周五位置反了...,我们现在要交换它们 a[4],a[5]=a[5],a[4] #这样操作即可,和C语言表达有所差别 赋值也可这样 a,b,c=1,2,3 s="周一,周二,周三,周四,周六,周五,周日" a=s.split...(",") print(a)# 形成的a是一个列表,这样就实现了字符串转列表 #我们还可以将列表转成字符串 a1="*".join(a) #前面可填连接的填充物,不填则“”,注意使用join方法必须保证

    1.9K30

    来来来,咱们元编程入个门

    不懂 clojure / elixir 不要紧,领会概念和思想要比会写代码重要得多。...,所以返回的结果是一个 if 语句相关的 AST。 注意这里当我们要获取原始表达式的值时,我们需要使用 unquote 来获取表达式的值,而非表达式的 AST。...在这个函数里,我们可以任意使用和操作变量 b,因为 b 的值在传入函数时,已经得到计算。...多次使用b 并不会带来负面影响,但在 macro 里,对一个 expression 多次使用 unquote 会导致其多次运算。我们把之前 unless 的例子稍微修改一下,加一句打印: ?...lisp 没有提供类似于 bind_quoted 的方法,但是,我们可以使用 let-binding 对 unquoted AST 进行绑定和重复使用。

    1.2K100

    懒惰的力量

    如果接下来程序需要使用这个函数的返回值,那么计算才真正开始。 听上去似乎没太多好处。...而求值的过程是:从 [1, 2, 3, 4] 里取出 1,依次调用 funs 列表里的函数,得到的返回值,再送给 Enum.reduce 进行计算。...比如说在某些情况下,代码根本没有使用某次计算的返回值,这样就可以节省运算。 Lazy evaluation的另一个极大的好处是很容易并发。...每计算完一个值,就会返回给 reduce 处理,假设 reduce 是个耗时的操作,这样就不会block前面的运算。 这代码太美,和之前的描述方式几乎一样,但同步的动作就变成了异步。...小结一下,lazy evaluation: 把计算和计算发生的时间decouple,避免了不要要的计算 把计算和计算发生的空间decouple,提供了并发的可能 回过头来我们再好好想想这里处理问题的思路

    93880

    如何在Ubuntu 18.04上安装Elixir和Phoenix Framework

    本教程将向您展示如何在Ubuntu 18.04服务器实例上安装Elixir和Phoenix frameworks以进行开发。...安装 Elixir 使用 apt-get安装 Elixir: sudo apt-get install elixir 现在您可以验证Elixir安装: linuxidc@linuxidc:~/www.linuxidc.com...使用以下命令安装所需的版本: nvm install 8.12.0 注意:如果您想使用其他版本,请将8.12.0替换为您想要的版本。...sudo apt-get install inotify-tools 创建Phoenix应用 创建一个新的应用程序: mix phoenix.new ~/phoenix_project_test 如果命令返回以下错误...phoenixframework/archives/master/phx_new.ez 现在重新运行命令创建一个测试Phoenix应用程序: mix phoenix.new ~/phoenix_project_test 使用上一步设置的密码修改配置文件中的

    1.9K30

    Elixir: 编程语言的未来

    Java、 C 编译很慢,不适合频繁修改的项目。但是 PHP 、Node.js 修改即可见,可以极大提高开发效率。...用户和请求量的多少由于业务逻辑的不同很难比较,只能比较机器数量了。 并发之进程模型 PHP 既是典型的这种模式。曾经见过某异步 PHP 框架 CS 高居不下,甚至比业务逻辑的 CPU 使用更高。...强静态类型系统会执行很快,比如 Java,但是也可以在有必要的时候使用反射,比如很多 RPC 框架的实现 (当然也有更进一步的字节码修改技术)。 每个语言的类型系统都有自己的特点。...小任务可以立刻创建一个脚本执行,而不需要修改、编译部署现有运行的应用。 这点对于小任务非常重要。Erlang 和 Elixir 都支持这样运行,escript 或者 Elixir 脚本。...并且很多 Erlang 下工具也是可以直接使用。比如 entop 。 另外 Elixir 比 Erlang 多出的好处在于更加友好的语法、工具链、社群。

    3.4K40

    【Rust日报】 2019-05-18:使用 Rust 來加速 Elixir 服務1100萬用戶

    #[momo] 讓轉型更簡單,編譯更快 Read more 使用 Rust 來加速 Elixir 服務1100萬用戶 discord過去一直使用erlang來做為主要服務的程式語言現在他們使用了rustler...这意味着当有人加入服务器(内部称为公会)并拥有100,000名成员的成员列表时,他们必须构建一个包含100,001名成员的新列表。 BEAM VM非常快,并且每天都在变得更快。...因此团队在erlang和elixir提供的各种高性能数据结构中寻找解决办法,试过MapSet、List、OrderedSet到他们自己实现的SortedSet,终于找到了一个解决方案,但是在超过250,000...这不是Discord团队第一次使用Rust了,在他们的游戏商城里也大量用到了Rust,但Discord的核心服务是Elixir,主要是因为Elixir比较适合他们的场景。...为了为Elixir加速,他们预留了一周时间使用Rustler(提供了安全的NIF绑定,方便为elixir编写rust扩展)进行概念验证,最终发现,Rust支持的NIF提供了巨大的性能优势,而无需牺牲易用性或内存

    1.3K10

    教程 | 如何使用Elixir语言实现深度学习?剖析多层神经网络的构建和训练

    在这篇文章中,我们将使用 Elixir 编程语言创建一个标准的 3x3 深度学习神经网络。...我们引用了 List.flatten/1 函数,旨在将我们的多维列表改为单个列表,使计算更加容易。 最后,我们通过使用神经网络新的错误率来更新代理。...首先,我们取输入列表和目标列表。然后,我们将输入和目标都转换成二维列表。然后我们用目标更新我们的代理,使它不再为零。最后,我们开始前馈过程。 学习自动化 如前所述,学习过程是一个循环。...Elixir 是一种功能语言,这使得我们能够使用函数来处理循环。在我们的循环中,我们需要收集输入和目标,并将其传入到网络中。网络训练数据并计算错误率。我们希望得到的错误率最小。...在本文中,我们没有介绍所有的算法和这些网络架构不同的方式。未来的自动化目标是继续为 Elixir 社区提供如何使用神经网络解决各种各样的问题的精彩例子。

    1.4K130

    年度最大黑马出现了?一个为讲PPT临时造的语言,热度碾压Go、Python,直逼Rust,Stack Overflow特别点赞!

    它可编译为 Erlang 和 JavaScript,因此与其他“BEAM”语言,如 Erlang 和 Elixir 具有直接的互操作性。...但现在看来这想法挺烂的,因为你根本没法做测试初始化,只能输入一个参数看返回值,除了反转列表这种小玩意儿,几乎没啥用。”Louis 说道。...而当请求没有请求体、服务器只是简单返回 OK 时,Go 的吞吐量则更高。 “总体而言,在 IO 密集型任务中,BEAM 和 Go 在吞吐量方面非常接近,都是非常优秀的选择。”...已经在生产环境中使用 Gleam 的公司则强调了其良好的开发者体验和可维护性。...在一个由社区维护的“在生产中使用 Gleam 的公司列表”中,有 19 家企业选择了 Gleam,其中包括 Web 开发咨询公司 CroCoder、AI 马匹护理助手 HayHay、会计自动化软件 Ottimizza

    48010
    领券