GithubHelp home page GithubHelp logo

toolchain-bikeshed's Introduction

toolchain-bikeshed

Discussion area for the Perl 6 toolchain

packaging issues

For packaging you will want to build in a temporary directory with an unprivileged user, package the resulting files and make installation mostly just extracting of the resulting archive.

  • FIXED: precomp files and the .deps files contain absolute paths which during rpm package build contain $RPM_BUILD_ROOT.
  • FIXED: rev-deps have to be re-compiled on installing a package. This needs root and changing of installed files.
  • FIXED: .rev-deps files of installed modules have to be changed when installing new modules.
  • FIXED: existing files in the short/ directory have to be changed when installing new modules.

possible solutions

  • IMPLEMENTED: We're gonna need a way to provide the source file and the path to use as $?FILE separately to the precomp process (requires changes to rather straight forward code in nqp)
  • REMOVED: The .rev-deps files should be replaced by directories where you can simply drop in the additions.
  • IMPLEMENTED: The files in short/ should probably also be replaced by directories which unfortunatly will incure some runtime cost. This cost may be offset by adding enough information (ver, auth, api) to these files so we only need to load the dist file of the final candidate.

open tickets related to this discussion

nice to have

  • FIXED: Non-SHA filenames for installed modules (this doesn't have to be the case on disk, as long as backtraces include the original filenames)
  • IMPLEMENTED: CUR tools to list installed dists, uninstall dists, list dist contents (basically any(rpm|dpkg|pacman) for CUR)
  • (for panda) don't install to ~/.perl6 by default if you don't have access to site installation; that, or at least make this configurable. A really nice-to-have would be --site, --user, and --lib (which would install to a custom CUR, much like P5 local::lib).
  • META6.json could include a doc_requires for modules used only in DOC blocks.
  • The Elm package manager/ecosystem has some notable features I think it would be cool to adopt:
    • The package manager has a diff function that will tell you the differences between two versions of a package (which functions were added or removed, and which functions' signatures changed)
    • The Elm package ecosystem will refuse to accept a package update that changes the interface (removes a function or changes its signature) without bumping the semantic version

toolchain-bikeshed's People

Contributors

niner avatar hoelzro avatar sjn avatar juerd avatar stmuk avatar tony-o avatar lizmat avatar

Stargazers

Sean P. Myrick V19.1.7.2 avatar Zaki Mughal [sivoais] avatar Tommy Stanton avatar Daniel avatar

Watchers

Juan Julián Merelo Guervós avatar H.Merijn Brand avatar Stephen Weeks avatar Shlomi Fish avatar Mike Clarke avatar Marcus Ramberg avatar Brad Clawsie avatar Jonas Kramer avatar Jonathan Scott Duff avatar Andrew Robbins avatar Lance Wicks avatar Mojca Miklavec avatar Stéphane Payrard avatar David Romano avatar Carl Mäsak avatar 唐鳳 avatar Vasily Chekalkin avatar Moritz Lenz avatar Martin Ryan avatar Kris Shannon avatar Ovid avatar Jerry Gay avatar  avatar Adrian White avatar Patrick R. Michaud avatar Martin Berends avatar Jeff Horelick avatar Jimmy Zhuo avatar Dave avatar Nadim Khemir avatar Justin DeVuyst avatar Brad Gilbert avatar Will Coleda avatar Jonathan Worthington avatar Matthew Wilson avatar  avatar Bruce Gray avatar Bálint Szilakszi avatar Jason Cole avatar David Brunton avatar  avatar Nathan Brown avatar Karl Rune Nilsen avatar Philip Mabon avatar Chas. J. Owens IV avatar Scott Penrose avatar  avatar Ronald Schmidt avatar Nova Patch avatar Simon Proctor avatar cono avatar Herbert Breunung avatar Dagur Valberg avatar sorear avatar Jeff Goff avatar David H. Adler avatar Chloë Salzenberg avatar Trey Harris avatar Luc St-Louis avatar lembark avatar Fernando Correa de Oliveira avatar Samuel Sutch avatar Edwin Pratomo avatar Michael avatar Paweł Murias avatar  avatar Brent Laabs avatar Kyle Hasselbacher avatar Cosimo Streppone avatar Flavio Poletti avatar Nuno Ramos Carvalho avatar Sir Robert Burbridge avatar Jared Miller avatar  avatar  avatar Alex avatar Tobias Leich avatar Marc Chantreux avatar Flavio S. Glock avatar Larry Wall avatar Slobodan Mišković avatar  avatar Calvin Schwenzfeier avatar Fritz Zaucker avatar  avatar  avatar Faye avatar Nick Logan avatar  avatar  avatar Patrick Abi Salloum avatar David Warring avatar Lucien Grondin avatar Alexander Hartmaier avatar Peter Rabbitson avatar Richard Hainsworth avatar  avatar Donald Hunter avatar Alexander Moquin avatar Henrique Dias avatar

toolchain-bikeshed's Issues

Early loading of external CompUnit::Repository

Allow an external CompUnit::Repository to be loaded before regular modules such that they are available to attempt loading from an identity matching their short-id. Something like:

perl6 -CCompUnit::Repository::GitHub -e 'require <github#http://github.com/user/repo.git>; ...'

or the example in the old s22:

CompUnitRepo::GitHub#masak/html-template

Can this be accomplished with CompUnit::Loader if the proper initialization bits are placed in ModuleLoader.nqp? Or will such an external CompUnit::Repository require its own CompUnit::Loader as well?

Platform-specific "depends" clause in META.info

On Unix-based platforms, LibraryMake will be used for building the shared library while on others (like windows) the bundled binary will be used. I need a way to declare such platform-specific dependency as below:

...
"depends-by-platform": {
  "win32" => [],
  "*"     => ["LibraryMake"]
},
...

If there is any hook or another way to do it, please advise.

META6.json needs a module identifier syntax cleanup

Here's a few examples of the sort of thing S22 currently contains:

Foo::Bar
Foo::Bar:auth<cpan:*>:ver(1..*)
Foo::Bar:auth<cpan:baz>
Foo::Bar:ver(v1.0 .. *)

It's wildly inconsistent, there's barely any mention of which forms are allowed in which keys, and some of these uses of :ver would be a nightmare to parse in what's supposed to be a declarative file. So let's fix it.

I've got a rough set of ideas to start with:

  • No part of dependency specification should require a bare, unversioned module name like Foo::Bar. That means any part of the toolchain that currently restricts it this way is broken. To name one example, it's not possible with the current state of affairs to publish a package that provides Foo:ver<1> and Foo:ver<2> at the same time: if you're lucky only one of them will fail to install.
  • The various bits like :auth<> and :ver<> should be limited to non-Turing-complete syntaxes so people won't have to load an entire Perl 6 runtime to parse them, which probably means limiting to strings inside angle brackets, and simple ranges. For the sake of argument, I'd consider :ver(v1.9.2 ^..^ v2) simple enough.
  • Foreign libraries exist and we need to deal with them. It wouldn't make sense in Perl 6 code (yet), but META6.info could have some syntax like {"depends":["sqlite3:from<native>:ver<0.8.*>"]} to depend on a system libsqlite3.so.0.8.6. Package installers would then be allowed to reconcile those deps whichever way they see fit (other packages could even list them in provides, if they know how to do so).

Anyway, I'll go ahead and add this to the perl6/specs meta-v1 branch later on if nobody yells "stop".

Option to disable precompilation fallback

I've had a couple of times where I released a module which breaks pre-compilation.
It hits one of the precomp bugs, fails to compile, falls back to compiling the original source, but I don't notice it because prove doesn't show it. I want the ability to disable precomp fallback, so it just dies completely.

I think it might be good idea to disable it for make spectest too and see what comes up.

An environment variable would be handy but I guess a pragma like no precomp-fallback could work too.

I think I am talking wrapping this line in an if statement: https://github.com/rakudo/rakudo/blob/nom/src/core/CompUnit/Repository/FileSystem.pm#L78

Thoughts?

EDIT note: I think I should mention that in general precomp is working great so (@niner)++. It has cut one of my project's startup time from around 40s to 1s. I love it so much that I want to make sure that my changes don't quietly break it!

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.