Go tiene un sistema de concurrencia inspirado en el artículo Comunicando Procesos Secuenciales de CAR Hoare. El sistema de concurrencia de Erlang tiene más en común con el modelo Actor de Carl Hewitt. Vamos a explorar brevemente los artículos académicos que forman la base de estos dos lenguajes, y luego compararemos y contrastaremos las primitivas de concurrencia entre Erlang y Go usando demostraciones en vivo y código de muestra.
domingo, 25 de diciembre de 2022
sábado, 24 de diciembre de 2022
Erlang en ejemplos (4)
Seguimos con esta serie.
Para obtener información del compilador/emulador de Erlang tecleamos:
man erl
Abrimos una terminal y comenzamos a realizar algunas pruebas:
erl Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns] Eshell V13.0.4 (abort with ^G) 1> A="abc". "abc" 2> string:to_upper(A). "ABC" 3> B="ABC". "ABC" 4> string:to_lower(B). "abc" 5> erlang:is_number(B). false 6> erlang:is_number(A). false 7> erlang:is_number(66). true 8> erlang:is_binary(A). false 9> erlang:is_binary(54). false 10> erlang:is_port(54). false 11> erlang:is_port(8080). false 12> erlang:is_list(B). true 13> erlang:is_tuple(B). false 14> Suma = fun(X,Y)-> X+Y end. #Fun<erl_eval.41.3316493> 15> Suma(43,32). 75 16> MiSuma= Suma(8,5). 13 17> elang:is_function(Suma). ** exception error: undefined function elang:is_function/1 18> erlang:is_function(Suma). true 19> 45 + "32". ** exception error: an error occurred when evaluating an arithmetic expression in operator +/2 called as 45 + "32" 20> 23*43/(21+32+43+44)-45. -37.93571428571428 21> 89+(32*4/32). 93.0 22> 33=33. 33 23> 12=9. ** exception error: no match of right hand side value 9 24> N=43. 43 25> N+43. 86 26> (N+43)/2. 43.0 27> erlang:is_list(N). false 28> erlang:is_number(N). true 29> erlang:is_integer(N). true 30> erlang:is_float(N). false 31> Lista=[1,2,3,4,5]. [1,2,3,4,5] 32> erlang:is_list(Lista). true 33> erlang:is_tuple(Lista). false 34> Division= fun(X,Y)-> X div Y end. #Fun<erl_eval.41.3316493> 35> Division(23,32). 0 36> erlang:is_integer(Division(8,3)). true 37> Residuo=fun(X,Y)-> X rem Y end. #Fun<erl_eval.41.3316493> 38> Resisuo(220,200). * 1:1: variable 'Resisuo' is unbound 39> Residuo(220,200). 20 40> erlang:is_number(Residuo(220,200)). true 41> Perfil={1,"Fernando"}. {1,"Fernando"} 42> erlang:is_tuple(Perfil). true 43> Message = {"MX",true,345,Perfil}. {"MX",true,345,{1,"Fernando"}} 44> {Id,Name}=Perfil. {1,"Fernando"} 45> Id. 1 46> Name. "Fernando" 47> {Code,Available,Numer,User}=Message. {"MX",true,345,{1,"Fernando"}} 48> Code. "MX" 49> Available. true 50> Numer. 345 51> User. {1,"Fernando"} 52> {_,MyName}=Perfil. {1,"Fernando"} 53> MyName. "Fernando" 54>q().
Como se puede observar Erlang tiene ciertas particularidades y funciones propias para realizar cosas como tratamiento de cadenas, verificar si una variable es de determinado tipo (integer, float, etc.), si alguna declaración es una lista, una tupla, una función. Así como declarar funciones, crear tuplas, etc.
Algunas funciones de Erlang
Función | Uso |
---|---|
is_atom/2 | Verificar si es atom |
is_binary/2 | Verificar si es binary |
is_bitstring/1 | Verificar si es bitstring |
is_boolean/1 | Verificar si es boolean |
is_float/1 | Verificar si es float |
is_function/1 | Verificar si es function |
is_port/1 | Verificar si es port |
is_integer/1 | Verificar si es integer |
is_number/1 | Verificar si es number |
is_record/1 | Verificar si es record |
is_tuple/1 | Verificar si es tuple |
Cosas importantes para no olvidar
Obtener informacíon del módulo.
$ erl > c(programa). > programa:module_info().
Con esto se mostrará la información del módulo
Documentación, exportación e importación de módulos/funciones. Definición de constantes y macros.
%% @doc Fundamentos en Erlang %% @copyright Codemonkey Junior 2022 -module(fundamentos). -author("Codemonkey Junior"). -version("1.0.0"). -export([start/0]). -import(io, [fwrite/1]). -compile(export_all). % Para exportar todas las funciones -compile(nowarn_export_all). % Para exportar todas las funciones sin warnings -define(MAX, 1000). %% constante -define(CUADRADO (X), X*X). %% macro, similar a C
Continuaremos en próximos post.
https://codemonkeyjunior.blogspot.com/2021/12/erlang-constuir-aplicaciones-erlang-con.htmlComposer, un administrador de dependencias para PHP
Composer es un administrador de dependencias para PHP que rastrea las dependencias locales de sus proyectos y bibliotecas. Para ...

-
Progress ABL es un lenguaje de programación vinculado al entorno Progress OpenEdge , su base de datos y las utilidades que lo rodean. Es s...
-
En esta ocasión veremos como crear un archivo CSV a partir del resultado de una consulta en GCP BigQuery. ¿Qué haremos? Crearemos una...
-
En una pasada entrega vimos cómo calcular el biotipo de una persona en Java . Ahora lo haremos usando el lenguaje de programación C. ...
Etiquetas
- .NET
- 100
- abl
- abstract
- abstractas
- ada
- agile
- algoritmos
- alternativa
- android
- angular
- angularjs
- apache
- apex
- api
- appserv
- aprender
- aprender java
- aprender jsf
- aprender python
- aprendizaje
- area
- args
- aserciones
- asm
- asp
- assembly
- assert
- awk
- aws
- ayuda
- azure
- ballerina
- base de datos
- bases de datos
- bash
- bat
- bd
- beam
- bigquery
- biotipo
- bleam
- blockchain
- blog
- bq
- bucket
- bundle
- c
- c#
- c++
- calculo
- case
- celsius
- ceylon
- cgi
- charp
- chatgpt
- cherrypy
- chino
- clases
- cli
- cliente
- clojure
- closures
- cloud
- cmd
- cmd.bat
- coalesce
- cobol
- codeblocks
- codeigniter
- codes
- código
- códigos
- comando
- comandos
- commit
- comparativa
- compartir
- compilador
- compile
- composer
- comprobación
- computación
- computing
- conceptos
- concurnas
- concurrente
- condicionales
- conectividad
- configuration
- consejos
- const
- constantes
- consultas
- contenedores
- contenedores web
- control de versiones
- conversion
- conversor
- convertidor
- cpan
- cplus
- cpp
- crear
- cripto
- criptomoneda
- CrowdStrike
- crystal
- csharp
- cshtml
- css
- css3
- csv
- curso
- d
- dancer2
- datastage
- datos
- deepseek
- delphi
- deploy
- desarrollo
- determinar
- dev c++
- developer
- devops
- días
- directivas
- disparejo
- distribuido
- django
- dlang
- doc
- docker
- document
- documentación
- dotnet
- driver
- dsl
- dylan
- easyphp
- eclipse
- eclipse y scala
- economica
- editor
- ejb
- ejecutar
- ejemplos
- ejemplos cpp
- ejemplos de csharp
- ejemplos de scala
- ejemplos java
- ejemplos python
- ejmeplo
- elixir
- elixir.
- en línea
- encapsulación
- ensamblador
- enum
- erlang
- error
- errores
- es6
- escribir
- esproc
- esprocsqpl
- estructuras
- ethereum
- euler
- excepciones
- expando
- export
- externa
- f#
- faces
- fahrenheit
- feliz año
- fetch
- filosofía
- firebase
- flask
- foreach
- framework
- fsharp
- funcional
- funciones
- functions
- futuro
- gcc
- gcp
- geany
- gem
- gemfile
- generador de proyectos
- genie
- gestor de proyectos
- github
- glassfish
- gleam
- gnu
- go
- golang
- google web toolkit
- gosu
- gradle
- grapes
- graven
- grok
- grooscript
- groovy
- groovyeConsole
- grpc
- gson
- gui
- gwt
- gwtext
- hashmap
- haskell
- haxe
- herencia
- hibernate
- hola
- hola en ceylon
- horoscopo
- HTA
- html
- html5
- http-server
- ia
- iaas
- iac
- ibm
- IDE
- ide scala
- if
- ifnull
- imc
- import
- importar
- ingeniería
- iniciar glassfish
- iniciar tomcat
- inicio
- inicio en ceylon
- IntelliJ IDEA pycharm
- interface
- interfaces
- interfaz
- interna
- interoperabilidad
- interprete
- interview
- inversión de control
- inyección de dependencias
- ionic
- ios
- jabaco
- java
- java swing
- java y ceylon
- JAVA_HOME
- javadoc
- javascript
- javaserver
- jaxb
- jdbc
- jdbi
- jdk
- jdk8
- jpa
- jpql
- jquery
- jre
- jruby
- jscript
- jsf
- jsni
- json
- juego
- julia
- jvm
- jvm y ceylon
- jython
- kanban
- katas
- kate
- koltin
- kotlin
- kubernetes
- la path
- langchain
- laravel
- learn
- lectura
- lenguaje
- lenguaje scala
- lenguajes
- let
- leyes
- libro
- linux
- list
- lista
- listas
- livescript
- llm
- lua
- macro
- major
- mapas
- maven
- maven y eclipse
- mensajes
- menú
- mercurial
- messagebox
- metaClass
- microsoft
- mix
- mobile
- modularidad
- módulo
- mojo
- mojolicious
- mono
- monodevelop
- ms-dos
- mu
- mvc
- mybatis
- mysql
- netbeans
- nexus
- ng
- nicon notify
- nimrod
- node
- nodejs
- notificaciones
- npm
- nube
- nuevo
- nuget
- nullif
- numericas
- ocaml
- ollama
- online
- opendylan
- openedge
- operaciones
- oracel
- oracle
- orientación a objetos
- otp
- paas
- paas iaas
- package
- packages
- padrino
- pascal
- path groovy
- path java
- patrones de diseño
- pdf-parser
- perl
- phoenix
- php
- pl/1
- plot
- plsql
- pom.xml.build.gradle
- poo
- powershell
- pregunta
- problema
- problemas al ejecutar programa en ceylon
- procedimientos
- procedures
- programa
- programacion
- programación
- programador
- programadores
- programar
- programas
- programas java
- programming
- progress
- proyectos maven
- prueba
- pseint
- pulsaciones
- pyramid
- python
- pyzenity
- questions
- r
- rebar3
- record
- recursos
- regex
- regiones
- remix
- repl
- replace
- repositorios
- REST
- reverse
- romanos
- ruby
- run
- rust
- ruta
- saas
- sanic
- sap
- sas
- sbt
- scala
- scripting
- scripts
- scrum
- sdkman
- semántica
- sentencias
- servidor
- shell
- show
- simplej
- sinatra
- sintaxis
- sitios
- slim
- sms
- smslib
- solidity
- solución
- spark
- spl
- spring
- spring framework
- spring-boot
- spyder
- sql
- standard
- storage
- stored
- strawberry
- struts
- style
- svn
- swift
- symfony
- system
- tarot
- tdd
- técnicas
- terminal
- terraform
- the maven integration requires that eclipse be running in a jdk
- tiempo
- tips
- tomcat
- top-down
- tornadoweb
- tratamiento xml
- triggers
- turbogears
- tutoriales
- type
- typescript
- udf
- unsupported
- usar jdk
- uso
- uwamp
- variables
- vba
- vbscript
- ventanas
- verificar
- version
- version_52.0
- versiones
- videojuegos
- vistazo
- visual code
- visual csharp
- visual studio
- vscode
- wampserver
- web
- web2pybottle
- window
- windows
- wisp
- xampp
- xml
- youtube
- zenity
Archivo del blog
-
►
2024
(58)
- ► septiembre (1)
-
►
2023
(12)
- ► septiembre (1)
-
▼
2022
(10)
- ► septiembre (1)
-
►
2021
(26)
- ► septiembre (1)
-
►
2020
(9)
- ► septiembre (2)
-
►
2019
(26)
- ► septiembre (3)
-
►
2015
(24)
- ► septiembre (4)
-
►
2014
(36)
- ► septiembre (1)
-
►
2013
(40)
- ► septiembre (5)
-
►
2012
(46)
- ► septiembre (3)