Coder Social home page Coder Social logo

arturo-lang / arturo Goto Github PK

View Code? Open in Web Editor NEW
688.0 17.0 31.0 46.7 MB

Simple, expressive & portable programming language for efficient scripting

Home Page: http://arturo-lang.io

License: MIT License

Shell 0.01% Nim 51.70% Objective-C 0.15% C 29.97% C++ 17.84% HTML 0.04% Batchfile 0.24% JavaScript 0.05%
programming-language arturo interpreter language bytecode virtual-machine stack-based functional-programming homoiconic

arturo's Introduction

Arturo

Simple, expressive & portable
programming language for efficient scripting

License Language Build Status Chat on Discord



The Language

Arturo is an independently-developed, modern programming language, vaguely related to various other ones - including but not limited to: Logo, Rebol, Forth, Ruby, Haskell, D, Smalltalk, Tcl, and Lisp.

The language has been designed following some very simple and straightforward principles:

  • Code is just a list of words, symbols and literal values
  • Words and symbols within a block are interpreted - when needed - according to the context
  • No reserved words or keywords - look for them as hard as you can; there are absolutely none
factorial: function [n][
	if? n > 0 -> n * factorial n-1
	else 	  -> 1
] 

loop 1..19 [x]->
	print ["Factorial of" x "=" factorial x]

➤ Want to see more?

For more - working - examples, just have a look at the Examples in the official website.

Documentation

For more information about the language and access to the library reference, please visit the official Arturo Programming Language documentation website.

Getting Started

In A Nutshell

Language

Command Line

Library

Examples

Installation

Pre-built binaries

Arturo comes with its own pre-built binaries - for, practically, all OSes - so, technically, it doesn't require any "installation". All you have to do is download one of them and run it - that's it!

    

    

➤ Wanna be as up-to-date as possible?

Head over to the Nightlies repo and simply download the latest release!

The alternative way

curl -sSL https://get.arturo-lang.io | sh

For Unix/Mac, you may also copy-paste the code above in your terminal and Arturo's most recent stable version will be automatically installed. To get the most recent (nightly) build, just use: curl -sSL https://get.arturo-lang.io/latest | sh

Manually

In order to build Arturo manually, you may have a look here at the instructions here.

Other methods

Docker

Although it won't cut it, if what you need is the real-deal compiler for everyday use, if you just need a taste of it, the Docker image will absolutely do.

Just use the existing docker image:

docker run -it arturolang/arturo

or (to run a specific local script):

docker run -it -v $(pwd):/home arturolang/arturo <yourscript.art>

Homebrew

If you are on macOS, you can easily install Arturo using Homebrew as well - although I cannot guarantee it will be the latest version:

brew install arturo

➤ Trouble with the installation?

If there is any issue with the installation, just let me know (by opening an issue) and I'll try to fix it. In any case, it would be safer to try one of the pre-built binaries.*

Showcase

Portable, Serverless & Lightweight
SQLite-based Graph Database


Modern cross-platform webview-based desktop apps
without HTML/CSS/JS

Community

In case you want to ask a question, suggest an idea, or practically anything related to Arturo - feel free! Everything and everyone is welcome.

For that, the most convenient place for me would be the GitHub Issues page.

For questions, quick ideas, and discussing generally the language, there is also a dedicated Discord Server for all things Arturo.

FAQ

What's in a name?

In case you're wondering why I went for a programming language with a... Spanish male name, let me shed some light: Arturo was the name of my little pet Emperor Scorpion - hence the logo -, or Pandinus Imperator, who passed away in early 2020.

Despite being seemingly intimidating - as most scorpions do to those who don't know about the species - he was a very quiet, totally docile, easy-going and noble creature.

So, the name is a subtle hommage to him; and also a hint as to what this programming language aspires to be.

Contributing

Please read docs/CONTRIBUTING.md for more details and the process for submitting pull requests.

Donations

Given that Arturo is written and maintained by people for free, in their own free time, that also have their daily jobs, any donation would give the project the help it needs to get to the next level. And for that, we'd also need you help.

So...

How can I donate?

We have different options for you:

You may also donate via Bitcoin:

License

MIT License

Copyright (c) 2019-2024 Yanis Zafirópulos (aka Dr.Kameleon)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

arturo's People

Contributors

beef331 avatar drkameleon avatar erikschierboom avatar fawazahmed0 avatar feihong avatar g3rwy avatar iacore avatar jiro4989 avatar jpaquim avatar mbarkhau avatar rickbarretto avatar ringabout avatar sumim avatar yewzir avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arturo's Issues

[Core\var] add example for documentation

[Core\var] add example for documentation

# TODO(Core\var) add example for documentation

        attrs       = NoAttrs,
        returns     = {Any},
        # TODO(Core\var) add example for documentation
        #  labels: library,documentation,easy
        example     = """
        """:
            ##########################################################
ndex 79e9cd7c..639f901f 100644
++ b/src/library/Crypto.nim

0fbe2f1be20eafc5cd9cdb5fda677cbc306259dc

How to compile without GTK?

The documentation says that GTK is required only for “complete” builds, but it doesn't specify how non make a non-“complete” build. Any help?

Error with load/push/store

Describe the bug
The load/store/mechanism seems broken.

To Reproduce

print add 1 8
print 1+8
m: 2
add 'm 3
print m

print sub 2 1
print 3-2

Expected behavior
Should print:

9
9
5
1
1

Current behavior
Prints:

9
9
5
4
-2

Additional context

print sub 2 1

generates:

exec: opIPush1
exec: opIPush2
exec: opSub

but executes:

5-1

(opIPush2 seemingly push 5, which is the last result on stack...)

General questions & thoughts

Cool take on Rebol/Spry/Tcl like language! I'll follow to see where it goes.

  1. Any plans for ahead-of-execution correctness checking? E.g. compile-time checks, or some "assert" run before the actual main function gets executed, or some static analyzer tool, ...

  2. Seeing the stack is "reified" (i.e. can be read & manipulated explicitly by the programmer) I wonder whether you thought about adopting more from concatenative languages (see also https://concatenative.org/ ) to get rid of the lambda calculus curse (requiring labeling all variables and/or functions)?

  3. I'd be interested if you could list which features from this list does Arturo implement and how. Could you comment on that?

  4. Have you thought of transpiling Arturo to C like e.g. V does (to get performance "for free" as well as sub-second compilation times allowing for "interpreted language" experience)?

    Note I read #3 , but I'm still convinced it makes sense as V gracefully proves. Benefits include:

    1. Significantly lower development effort (full standard library for free, bindings do not have to be manually/automatically generated but just "used" as e.g. Visual Basic allows to use DLLs on Windows, etc.).
    2. Full interoperability with any ecosystem (from Android/iOS through Windows/macOS/... up to embedded) "for free" as nowadays everything has bidirectional integration with C (or at least FFI if C is not directly supported).
    3. Partial ahead-of-execution correctness checking "for free".
    4. Very high performance of the resulting program "for free".
    5. Speed of compilation "for free".
  5. Why does Arturo have a three-state logic (true false null)? And how is null handled compared to true and false (neither Core nor Comparison don't say anything about it)?

    Yeah, I know that lambda calculus kind of pushes one to return "null" but it's a trap (it prevents chaining, it totally clutters the code and it's highly error-prone due to three-state logic). Even optionals (i.e. "always return two values - one primary and one secondary whereas primary is the intended result and the secondary is an automatically propagated alternative result with stop_propagation&read&discard manual operation") are a better way.

Removing keys and values from dictionary

Great! Thanks for your reply!

I should also have asked how to:

  • add a second value to a key:

a #[ children: “John" "Joan”]

  • remove a single value from a multi-value key by name

  • remove a key and its values altogether

(tried… remove.key a … both as string and literal, but to no avail.)

Thanks!

I have been looking for a new language after learning that Rebol/Red would not work on my new 64-bit OS, and Arturo seems to fit the bill!

Originally posted by @MichaelCMcCann in #23 (comment)

[Core\let] Do we really need an alias for that?

[Core\let] Do we really need an alias for that?

Currently, the alias is : - acting as an infix operator. But this could lead to confusion with existing label: or path\label:.

# TODO(Core\let) Do we really need an alias for that?

            stack.push(x)

    # TODO(Core\let) Do we really need an alias for that?
    #  Currently, the alias is `:` - acting as an infix operator. But this could lead to confusion with existing `label:` or `path\label:`.
    #  labels: library,open discussion
    builtin "let",
        alias       = colon, 
        rule        = InfixPrecedence,

cb2964bd63859610d4e4531bcf0f623e7257fea6

[Core\continue] add example for documentation

[Core\continue] add example for documentation

# TODO(Core\continue) add example for documentation

        attrs       = NoAttrs,
        returns     = {Block},
        # TODO(Core\continue) add example for documentation
        #  labels: library,documentation,easy
        example     = """
        """:
            ##########################################################

a8a8c441112f646d816d16da3eba7b0135196ca6

Functions missing from the Documentation

Describe the bug

There are missing functions in the Library Reference wiki, mainly the ones implemented directly in src/exec.nim.

E.g. size, odd?, even?, set?, symbols, stack, call

Repl crashing on errors

Describe the bug
REPL seems to crash when an error occurs.

Expected behavior
Handle the error nicely without crashing

Screenshots
aa

[Collections\extend] add example for documentation

[Collections\extend] add example for documentation

# TODO(Collections\extend) add example for documentation

        attrs       = NoAttrs,
        returns     = {Dictionary},
        # TODO(Collections\extend) add example for documentation
        #  labels: library,documentation
        example     = """
        """:
            ##########################################################

6d8655dab4fdcf43001d5820de94d5186d456116

Dictionary values not correctly "stringified"

Describe the bug
The $ function for Dictionary-type values doesn't seem to be working right. (Not enough spacing between the keys)
However, the print function seems to be working fine (since it is using a different backend implementation)

To Reproduce

Screenshot 2021-01-11 at 06 55 21

[Core\new] add example for documentation

[Core\new] add example for documentation

# TODO(Core\new) add example for documentation

        attrs       = NoAttrs,
        returns     = {Any},
        # TODO(Core\new) add example for documentation
        #  labels: library,documentation,easy
        example     = """
        """:
            ##########################################################

16e1aed20930b6750aa7ad6feb19337f7c05cc4b

[Arithmetic\neg] Add alias `_`?

[Arithmetic\neg] Add alias _?

Current implementation has no alias. Should we add one? (Given that - is already reserved for subtraction and the function sub)

# TODO(Arithmetic\neg) Add alias `_`?

            else                : stack.push(x*y)

    # TODO(Arithmetic\neg) Add alias `_`?
    #  Current implementation has no alias. Should we add one? (Given that `-` is already reserved for subtraction and the function `sub`)
    #  labels: library,open discussion
    builtin "neg",
        alias       = unaliased, 
        rule        = PrefixPrecedence,
ndex 82130eac..a7f08fab 100644
++ b/src/library/Collections.nim

88ffa48dc6e052bb4e515f2f1db6319bd89d7bfe

[Core\break] add example for documentation

[Core\break] add example for documentation

# TODO(Core\break) add example for documentation

        attrs       = NoAttrs,
        returns     = {Block},
        # TODO(Core\break) add example for documentation
        #  labels: library,documentation,easy
        example     = """
        """:
            ##########################################################

bf7f96f1f4ab455b29a73bea47759ea266197547

[Numbers\acos] add example for documentation

[Numbers\acos] add example for documentation

# TODO(Numbers\acos) add example for documentation

        attrs       = NoAttrs,
        returns     = {Floating},
        # TODO(Numbers\acos) add example for documentation
        #  labels: library,documentation,easy
        example     = """
        """:
            ##########################################################

32abe09e850a24a0372c83b0434e2c41535386b2

arturo 0.9.5 test failure

👋 trying to build the latest arturo 0.9.5, but run into some issue as below:

==> /usr/local/Cellar/arturo/0.9.5/bin/arturo /private/tmp/arturo-test-20201106-97824-1mzoxo2/hello.art
could not load: (libmysqlclient|libmariadbclient)(|.20|.19|.18|.17|.16|.15).dylib
(compile with -d:nimDebugDlOpen for more information)

To me, I dont understand why it depends on mysql client stuff. Can you help me understand a bit?

Thanks,

relates to Homebrew/homebrew-core#64264

[Question] Why the rewrite to C? Also, did you get Bison to work with Nim?

Hi, I come from the Nim forum. There i saw your post about integrating Bison with Nim, checked out your repo, and was surprised to find that the code is entirely rewritten in C. Out of curiosity, can I ask why? Also, did you ever manage to fix the Bison integration problems? The problems were dealing with the Nim GC garbage collecting Bison strings.

No Value overloads for common operators

Currently, most common arithmetics operations are done directly in the Arithmetic module:

template Add*():untyped =

This is quite complicated.

One: it leads to code bloating.
Two: it's not very portable. E.g. when an add operation is performed between different :integer types, NormalInteger and BigInteger, it will be handled correctly only when using the function add (in the Arithmetic module), but not when used in a different context.

[Crypto\hash] add example for documentation

[Crypto\hash] add example for documentation

# TODO(Crypto\hash) add example for documentation

        },
        returns     = {Integer,String},
        # TODO(Crypto\hash) add example for documentation
        #  labels: library,documentation,easy
        example     = """
        """:
            ##########################################################
ndex fc7b7f68..e9344ec4 100644
++ b/src/library/Databases.nim

0314ff733135fd429e804f31f8dc19f7fef4393b

Dictionaries including keys from outer scope

Describe the bug
When we construct a new dictionary: #[ ... ], the resulting dictionary contains keys that are symbols of the outer scope - and should not be there.

To Reproduce

In the REPL:

user: #[
    name: "John"
]

Build errors with current Nim

Just found this nice project and tried to build it with current Nim 1.2.6 on Arch Linux. Got several failures:

There are allover the project custom error types like OverflowDefect, IndexDefect etc. which the compiler does not recognize. For a quick fix I replaced them with OSError (I am new to nim and don't know better atm unfortunately)

src/vm/bytecode.nim, line 2283, proc readBytecode - f.readStr(s, t) appears not to exist anymore with three parameters but only two (the stream and length). Don't know how to fix that, at least in the documentation I found that specific procedure so a strange one.

src/extras/parsetoml.nim, line 1898: undeclared identifier: deepCopy

Do you require a certain version of Nim?

Thanks for reply!

[Core\pop] add example for documentation

[Core\pop] add example for documentation

# TODO(Core\pop) add example for documentation

        },
        returns     = {Any},
        # TODO(Core\pop) add example for documentation
        #  labels: library,documentation,easy
        example     = """
        """:
            ##########################################################

4c256242b4f1347c94b4aa7379373710fb1262a8

[Databases] Add support for MongoDB

[Databases] Add support for MongoDB

Currently, the only supported database is Sqlite

# TODO(Databases) Add support for MongoDB


# TODO(Databases) Add support for MySQL
#  Currently, the only supported database is Sqlite
#  labels: library,enhancement

# TODO(Databases) Add support for MongoDB
#  Currently, the only supported database is Sqlite
#  labels: library,enhancement

proc defineSymbols*() =

ndex 6abe0235..f8fba1ac 100644
++ b/src/library/Dates.nim

bc0417f7f076909ddc45d79a0ad427f283d64344

UI library like Jasonelle

Is your feature request related to a problem? Please describe.

No. Well, yes, kinda. Arturo wants to have UI, so here are some bits for the puzzle 😉.

Describe the solution you'd like

Have a UI library which works top-down (more like "sculpting" - i.e. first something rough and later the details) and not bottom-up (e.g. VID dialect of Red/Rebol).

Maybe Jasonelle (and subsequently Jasonette) could be a good source of inspiration.

Describe alternatives you've considered

Mostly-immediate-mode libraries (Nuklear, ImGui, Quarks, microui, ...), mostly-retained-mode libraries (99% of currently existing GUI libraries), streaming libraries (Flyd, S), etc. See also this whole thread.

This top-down approach shall allow for later fine-grained improvement.

Additional context

Shall be built around "everything live" principle (i.e. streams/reactivity). Otherwise it'll become yet another boring verbose complicated library.

For stuff Jasonelle-approach can't (or shouldn't) express I'd recommend trying SRP (synchronous reactive programming) rather then FRP (functional reactive programming) due to much lower complexity, much lower verbosity and generally simpler structure making it easier to reason about.

[Core\continue] Not working - needs fix

[Core\continue] Not working - needs fix

The implementation was broken after cleaning up the standard library and eval/parse.

# TODO(Core\continue) Not working - needs fix

            stack.push(newBoolean(false))

    # TODO(Core\continue) Not working - needs fix
    #  The implementation was broken after cleaning up the standard library and eval/parse.
    #  labels: library,bug,critical
    builtin "continue",
        alias       = unaliased, 
        rule        = PrefixPrecedence,

158ecb9b813016acdd55cbd069bd69146862993a

[Core\globalize] Do we really need this functionality?

[Core\globalize] Do we really need this functionality?

Already there are other options like the .import attribute

# TODO(Core\globalize) Do we really need this functionality?

            if not y.b: discard execBlock(x)

    # TODO(Core\globalize) Do we really need this functionality?
    #  Already there are other options like the `.import` attribute
    #  labels: library,open discussion
    builtin "globalize",
        alias       = unaliased, 
        rule        = PrefixPrecedence,

5d5db4d29e09407e8dae9fbf862c970e67ca0ff0

VM push/store/load/call ops not supporting indexes > 255

Describe the bug
Currently pushX, storeX, loadX, callX take a byte (8-bit) parameter, which means that values above 255 are not supported. The solution would be to introduce a separate set of opCodes (e.g. pushY, storeY, loadY, callY) taking a uint16 (16 bit) parameters, split/joined using shl/shr.

To Reproduce
Use any range or map/select with over 255 elements. The elements seem to be repeated.

Expected behavior
The array should be created successfully without element repetitions.

[Core\globalize] Do we really need an alias for that?

[Core\globalize] Do we really need an alias for that?

Currently, the alias is : - acting as an infix operator. But this could lead to confusion with existing label: or path\label:.

# TODO(Core\globalize) Do we really need an alias for that?

                    break

    # TODO(Core\globalize) Do we really need an alias for that?
    #  Currently, the alias is `:` - acting as an infix operator. But this could lead to confusion with existing `label:` or `path\label:`.
    #  labels: library,open discussion
    builtin "var",
        alias       = unaliased, 
        rule        = PrefixPrecedence,

cb932d69d872103753e71a56938593cc10d7f06b

Benefits/features and vision

Hi @drkameleon , impressive project :)! I like how simple Arturo is, and on the other hand I know how much work it takes to implement a project like this, very cool.

I like documentation, it is pretty clear and to the point (I liked ASCII art of interpreter architecture :D!).

While I am guessing this project is in big part for your own satisfaction and learning, I do presume it is also intended for real usage by others potentially, in production?
If so, it might be attractive to dedicate a part of documentation to explaining why would somebody want to use Arturo. Maybe list a few benefits -> maybe that it is very easy to learn, or that it is readable, compare it to other languages. I understand that it is still in early phase compared to other languages out there so it might be hard to have solid claims of why is it better than another language, but this is where vision comes in, as additional part of documentation -> you can explain where do you want Arturo to be and how do you want to make it different / better / special. This then also serves as guidance for future design, not just for you but for others who want to contribute and join you in building Arturo. And it also helps people place Arturo -> what should I use it for, what is it good for? Although I am guessing you are also still figuring out the use cases?

Anyway, very cool, I am looking forward to future developments!

Cannot use multi-line input in REPL

Is your feature request related to a problem? Please describe.
When using the REPL, pressing enter/return always "completes" the command - even when the command may not be complete.

Describe the solution you'd like
Enable multi-line commands.

[Comparison] Add function to check for "identity"?

[Comparison] Add function to check for "identity"?

Currently, we have only equal?. Should we add another like identical??

# TODO(Comparison) Add function to check for "identity"?

#=======================================

# TODO(Comparison) Add function to check for "identity"?
#  Currently, we have only `equal?`. Should we add another like `identical?`?
#  labels: library,open discussion

proc defineSymbols*() =

ndex 185bf0ea..2f33ef1f 100644
++ b/src/library/Core.nim

46bc73c5eb14dd77d4e13b31fd4d14641072a9ac

[Databases] Add support for MySQL

[Databases] Add support for MySQL

Currently, the only supported database is Sqlite

# TODO(Databases) Add support for MySQL

#=======================================

# TODO(Databases) Add support for MySQL
#  Currently, the only supported database is Sqlite
#  labels: library,enhancement

# TODO(Databases) Add support for MongoDB
#  Currently, the only supported database is Sqlite
#  labels: library,enhancement

proc defineSymbols*() =

ndex 6abe0235..f8fba1ac 100644
++ b/src/library/Dates.nim

2d88f1b98d4f7956dd8caf99f7b24cf4094c51ec

[Core\break] Not working - needs fix

[Core\break] Not working - needs fix

The implementation was broken after cleaning up the standard library and eval/parse.

# TODO(Core\break) Not working - needs fix

        echo "- Importing: Core"

    # TODO(Core\break) Not working - needs fix
    #  The implementation was broken after cleaning up the standard library and eval/parse.
    #  labels: library,bug,critical
    builtin "break",
        alias       = unaliased, 
        rule        = PrefixPrecedence,

87cef13e9c141c119fb55e987413682012fdd025

[Core\pop] verify functionality

[Core\pop] verify functionality

# TODO(Core\pop) verify functionality

            VNULL

    # TODO(Core\pop) verify functionality
    #  labels: library, unit-test,easy
    builtin "pop",
        alias       = unaliased, 
        rule        = PrefixPrecedence,

56b192e37bc6e6d5d326a41e7de388310b57ced1

Couple of Improvements and Fixes

First of all, thank you for this project. It seems like a very great programming language.

I have a couple of minor issues that I'd like to document:

  • Build Script does not error out properly, when something goes wrong.
  • Build Script does not get all needed compile time dependencies (libgmp-dev is currently missing).
  • Build Script uses non-standard installation directory (/usr/local/bin) which is, for example, not included in Debian's PATH by default.
  • README does not mention, that you need the newest devel version of Nim to be able to successfully compile this project.

If you don't mind, I'd like to fix these issues myself. I also would be glad to solve some of the goals mentioned in the README, at some point.

[Core\new] verify functionality

[Core\new] verify functionality

# TODO(Core\new) verify functionality

            Syms[x.s] = y

    # TODO(Core\new) verify functionality
    #  labels: library, unit-test,easy
    builtin "new",
        alias       = unaliased, 
        rule        = PrefixPrecedence,

c6af99086eba06cd4c8b46829fbf496b4e105acf

Self-update not working

Describe the bug
When using the -u or --update switch, to self-update the app, the result is not the expected one.

To Reproduce
Steps to reproduce the behavior:
sudo arturo -u

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.