精华内容
下载资源
问答
  • Elixir

    2019-11-22 12:52:35
    首页 安装 指南 服务器 学习 文档 发展 博客 包 ...Elixir是一种函数式动态语言,用于构建可...要了解更多关于Elixir的信息,请查看我们的入门指南和学习资源. 或者继续阅读以获得平台、语言和工具的概述。...

    Elixir Logo

    Elixir Sample

    Elixir是一种函数式动态语言,用于构建可伸缩、易维护的应用程序。

    Elixir是基于Erlang VM的,其广为人知的特点是运行低延时、分布式、可容错的系统,并成功用于Web开发与嵌入式软件领域。

    要了解更多关于Elixir的信息,请查看我们的 入门指南 和 学习资源. 或者继续阅读以获得平台、语言和工具的概述。

    平台特性

    可伸缩

    所有Elixir代码运行于相互隔离的轻量级线程中,相互间通过message通信:

    current_process = self()
    
    # Spawn an Elixir process (not an operating system one!)
    spawn_link(fn ->
      send current_process, {:msg, "hello world"}
    end)
    
    # Block until the message is received
    receive do
      {:msg, contents} -> IO.puts contents
    end

    由于它们的轻量特性,在同一台机器上同时运行数十万个进程并不少见。隔离允许独立地对进程进行垃圾收集,减少系统范围内的暂停,并尽可能高效地使用所有机器资源(垂直扩展)。

    进程还可以与同一网络中不同计算机上运行的其他进程通信。这为分发提供了基础,允许开发人员协调跨多个节点的工作(水平缩放)。

    容错性

    关于软件运行在产品环境的一个无法避开的真相:总是会出错,加上网络、文件系统及其他第三方资源的问题会更多。.

    为了应对各种失误,Elixir提供了supervisor - 描述当事情变得扭曲时如何重启你的系统的某些部分,返回已知的能保证正常运行的初始状态:

    children = [
      TCP.Pool,
      {TCP.Acceptor, port: 4040}
    ]
    
    Supervisor.start_link(children, strategy: :one_for_one)

    语言特性

    函数式编程

    函数式编程提升了编码风格、帮助开发者写出简短、快速及可维护的代码。例如,模式匹配允许开发者轻易就能结构数据并访问它的内容:

    %User{name: name, age: age} = User.get("John Doe")
    name #=> "John Doe"

    当你想加入guard时,模式匹配允许我们优雅的匹配与声明某些代码执行的特定条件:

    def drive(%User{age: age}) when age >= 16 do
      # Code that drives a car
    end
    
    drive(User.get("John Doe"))
    #=> Fails if the user is under 16

    Elixir强烈依赖那些特性,来确保你的软件运行于预期的约束下。如果没有,也别担心,supervisors会支持你的!

    可扩展性 和 DSLs

    Elixir被设计成了可扩展的语言,让开发者自然的扩展语言到特定领域,以便增加他们的生产力。

    举个例子,让我们使用Elixir的测试框架-ExUnit来写个简单的测试用例:

    defmodule MathTest do
      use ExUnit.Case, async: true
    
      test "can add two numbers" do
        assert 1 + 1 == 2
      end
    end

    async: true 选项允许测试运行在并行模式,尽可能使用更多的CPU核,同时断言函数可以内省(introspect)你的代码,提供失败情况下的强大报告。那些特性是用Elixir的宏来构建的,让其可以添加新的结构并作为语言本身的一部分存在。

    工具特性

    发展中的生态系统

    Elixir发布了整套工具来简化开发。 Mix是一套build工具,它让你很简单的就能创建项目、管理任务、运行测试以及更多:

    $ mix new my_app
    $ cd my_app
    $ mix test
    .
    
    Finished in 0.04 seconds (0.04s on load, 0.00s on tests)
    1 tests, 0 failures

    Mix is also able to manage dependencies and integrates nicely with the Hex package manager, which provides dependency resolution and the ability to remotely fetch packages.

    交互式开发

    IEx (Elixir的交互式shell)能提供语言和平台各方面的特性,如自动完成、调试工具、代码重新载入、良好格式化的文档:

    $ iex
    Interactive Elixir - press Ctrl+C to exit (type h() ENTER for help)
    iex> h String.trim           # Prints the documentation for function
    iex> i "Hello, World"        # Prints information about the given data type
    iex> break! String.trim/1    # Sets a breakpoint in the String.trim/1 function
    iex> recompile               # Recompiles the current project on the fly

    兼容Erlang

    Elixir运行于Erlang VM,给开发者提供了Erlang生态系统的完整访问能力,HerokuWhatsAppKlarna 等等很多公司都在使用它来构建分布式、高容错的应用程序。Elixir程序员可以调用Erlang函数并且没有任何运行时开销:

    iex> :crypto.hash(:md5, "Using crypto from Erlang OTP")
    <<192, 223, 75, 115, ...>>

    To learn more about Elixir, check our 入门指南。我们还提供在线文档 ,并提供Erlang开发人员速成课程

    展开全文
  • elixir

    千次阅读 2013-07-10 08:30:41
    http://elixir-lang.org

    http://elixir-lang.org


    Elixir Sample

    Elixir is a functional meta-programming aware language built on top of the Erlang VM. It is a dynamic language with flexible syntax with macros support that leverages Erlang's abilities to build concurrent, distributed, fault-tolerant applications with hot code upgrades.

    Elixir also provides first-class support for pattern matching, polymorphism via protocols (similar to Clojure's), aliases and associative data structures (usually known as dicts or hashes in other programming languages).

    Finally, Elixir and Erlang share the same bytecode and data types. This means you can invoke Erlang code from Elixir (and vice-versa) without any conversion or performance hit. This allows a developer to mix the expressiveness of Elixir with the robustness and performance of Erlang.

    To install Elixir or learn more about it, check our getting started guide. We also have online documentation available and a Crash Course for Erlang developers.

    Highlights

    Everything is an expression

    defmodule Hello do
      IO.puts "Defining the function world"
    
      def world do
        IO.puts "Hello World"
      end
    
      IO.puts "Function world defined"
    end
    
    Hello.world
    

    Running the program above will print:

    Defining the function world
    Function world defined
    Hello World
    

    This allows a module to be defined in terms of many expressions, programmable by the developer, being the basic foundation for meta-programming. This is similar to what Joe Armstrong (creator of Erlang) proposes with his erl2 project.

    Meta-programming and DSLs

    With expressions and meta-programming, Elixir developers can easily create Domain Specific Languages:

    defmodule MathTest do
      use ExUnit.Case
    
      test "can add two numbers" do
        assert 1 + 1 == 2
      end
    end
    

    DSLs allow a developer to write abstractions for specific domains, often getting rid of boilerplate code.

    Polymorphism via protocols

    Protocols allow developers to provide type-specific functionality at chosen extension points. For example, the Enum module in Elixir is commonly used to iterate collections:

    Enum.map([1,2,3], fn(x) -> x * 2 end) #=> [2,4,6]
    

    Since the Enum module is built on top of protocols, it is not only limited to the data types that ship with Elixir. A developer can use his own collections with Enum as long as it implements the Enumerableprotocol. For example, a developer can use all the convenience of the Enum module to easily manipulate a file, line by line:

    file  = File.iterator!("README.md")
    lines = Enum.map(file, fn(line) -> Regex.replace(%r/"/, line, "'") end)
    File.write("README.md", lines)
    

    Documentation as first-class citizen

    Documentation is supported at language level, in the form of docstrings. Markdown is Elixir's defacto markup language of choice for use in docstrings:

    defmodule MyModule do
      @moduledoc """
      Documentation for my module. With **formatting**.
      """
    
      @doc "Hello"
      def world do
        "World"
      end
    end
    

    Different tools can easily access the documentation. For instance, IEx (Elixir's interactive shell) can show the documentation for any module or function with the help of the function h:

    iex> h MyModule
    # MyModule
    
    Documentation for my module. With **formatting**.
    

    There is also a documentation generator for Elixir called ExDoc that can produce a static site using docstrings extracted from the source code.

    Pattern matching

    Pattern matching allows developers to easily destructure data and access its contents:

    { User, name, age } = User.get("John Doe")
    

    When mixed with guards, it allows us to easily express our problem:

    def serve_drinks({ User, name, age }) when age < 21 do
      raise "No way #{name}!"
    end
    
    def serve_drinks({ User, name, age }) do
      # Code that serves drinks!
    end
    
    serve_drinks User.get("John")
    #=> Raises "No way John!" if John is under 21
    

    Erlang all the way down

    After all, Elixir is still Erlang. An Elixir programmer can invoke any Erlang function with no runtime cost:

    :application.start(:crypto)
    :crypto.md5("Using crypto from Erlang OTP")
    #=> <<192,223,75,115,...>>
    

    Since Elixir compiles to the same bytecode, it is fully OTP compliant and works seamlessly with all the battle-tested techniques Erlang/OTP is famous for. Erlang type specifications, behaviors and module attributes are all supported. It is easy to add Elixir to your existing Erlang programs too (including rebar support)!

    To install Elixir or learn more about it, check our getting started guide. We also have online documentation available and a Crash Course for Erlang developers.


    展开全文
  • Elixir-源码

    2021-03-15 18:57:49
    Elixir
  • var elixir = require ( 'laravel-elixir' ) ; var ElixirGroup = require ( 'laravel-elixir-group' ) ; 然后,您可以添加一个名为“ taskA”的任务组,如下所示: ElixirGroup . register ( 'taskA' , function...
  • elixir安装

    2018-10-15 15:58:49
    elixir是一个新语言,不是也不是它基于erlang的虚拟机,也就是没有erlang就没有elixir,elixir是一个面向并发的编程思想。
  • elixir-socket:Elixir的套筒包装
  • elixir-dns:Elixir的DNS库
  • Elixir 交叉参考 Elixir 是受启发的源代码交叉引用器。 它是用 Python 编写的,其主要目的是索引 C 或 C++ 项目(如 Linux 内核)的每个版本,同时保持最小的占用空间。 它使用 Git 作为源代码文件存储,使用 ...
  • Programming Elixir

    2017-10-11 21:28:32
    You’re also investigating designs that help you maximize uptime and manage security., This book is your guide to Elixir, a modern, functional, and concurrent programming language. Because Elixir ...
  • elixir-cassandra:Apache Cassandra的Elixir客户端
  • elixir-xxhash:xxHash的纯Elixir实现
  • plaid-elixir:用于格子的Elixir
  • elixir-gmail:Elixir的Gmail API客户端
  • stripe-elixirElixir的Stripe API客户端
  • 基于Elixir语言服务器扩展,用于 。 安装 CocInstall 确保$PATH有elixir和mix elixir 。 在(neo)vim内部运行以下命令: :CocInstall coc-elixir vim插件 确保$PATH有elixir , mix和yarn 。 里面的plug#begin/...
  • Introducing Elixir

    2016-11-28 09:58:23
    By the end of your journey, you’ll understand why Elixir is ideal for concurrency and resilience., - Get comfortable with IEx, Elixir's command line interface, - Become familiar with Elixir’s basic...
  • Elixir Docker图片 Elixir的Docker基础映像打包
  • Elixir是一种动态的功能语言,旨在用于构建可伸缩和可维护的应用程序。 有关Elixir,安装和文档的更多信息,。 政策规定 新版本在中。 您可以通过发送电子邮件到并回复确认电子邮件来进行订阅。 所有安全发行版 。...
  • dnsimple-elixirElixir的DNSimple API客户端
  • ** 待办事项:添加描述 ** Elixir 中的 #IRC 记录器 按照上述教程使用 Elixir 的第一个小游戏。 为了运行执行以下 iex - S mix state = %{ host: " irc.freenode.net " , port: 6667 , chan: " #elixir-lang " , ...
  • elixir-stellar-client:Stellar的Elixir客户
  • elixir嵌入:o嵌入Elixir的消费者库
  • algolia-elixir:Algolia搜索API的Elixir实现
  • elixir_agent:New Relic的开源Elixir代理
  • elixir-json:Elixir的本机JSON库
  • Elixir Base是Flatstack上使用的基本Elixir库模板。 它基于Elixir 1.6。 应用库 从Erlang / OTP执行和控制OS进程 用于Elixir的应用程序发布管理 Monadic,轻柔的,可扩展的效果处理 宏扩展为可以在Guard子句中安全...
  • Programming_Elixir:我在使用“编程Elixir 1.6”和“程序员Elixir”课程时正在使用的Repo
  • Elixir Rethinkdb 驱动程序 不幸的是,此驱动程序不再维护,我们建议使用 原因如下: 它是使用 Records 系统为Elixir 0.10.2编写的,该系统在该语言的最终版本1.0中已过时; 为了支持通信,通过库使用了 Google ...
  • ticker-elixirElixir OTP股票行情应用程序(IEX集团)| 当前分支:elixir_1.8_iex
  • elixir-learning:用于Elixir学习的通用存储库

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,558
精华内容 3,423
关键字:

elixir