Jump to page: 1 2 3
Thread overview
Named multi-imports
Aug 15, 2017
Johnson
Aug 15, 2017
Johnson
Aug 15, 2017
rikki cattermole
Aug 15, 2017
Johnson
Aug 15, 2017
jmh530
Aug 16, 2017
aberba
Aug 16, 2017
Johnson
Aug 16, 2017
jmh530
Aug 17, 2017
aberba
Aug 17, 2017
Johnson Jones
Aug 17, 2017
Timon Gehr
Aug 17, 2017
jmh530
Aug 18, 2017
Timon Gehr
Aug 18, 2017
Johnson Jones
Aug 18, 2017
Timon Gehr
Aug 18, 2017
jmh530
Aug 18, 2017
Olivier FAURE
Aug 16, 2017
Joel Nilsson
Aug 16, 2017
jmh530
Aug 17, 2017
rjframe
Aug 17, 2017
jmh530
New Features [was Named multi-imports]
Aug 16, 2017
Jesse Phillips
Aug 16, 2017
Johnson Jones
Aug 17, 2017
Jesse Phillips
Aug 16, 2017
Gary Willoughby
Aug 16, 2017
Mike Wey
Aug 16, 2017
jmh530
Aug 16, 2017
Johnson Jones
Aug 16, 2017
jmh530
August 15, 2017
Why can't we name multiple imports?

import x = a, b, c;

only a is part of x, b and c are not named!

this can cause some major problems(or the lack of a correctly solution).

For example,

gdk and gtk both have window. Both imports are needed and both define many public imports that create a huge spaghetti of mixed imports. In my code, even without gdk.Window imported, I am getting variables that are of that time, even though I import gtk.Window. I declare the variables as Window because it is automatically generated code and I do not know the actual import(well, unless I manually create a map from all the D imports to the glade types).

But I use gdk in just a few areas.

The only solution is to create a separate pulbic imports file that holds all the imports, but this creates extra files.

Why not something like

import x = {a,b,c};

?


It's a natural extension, makes sense, and should be easy to work out. Avoids having extra files for no other reason that to do the above and should easily solve the conflicts. What's nice about it is that we can even do

import x =
{
 a,
 b,
 c
};

which is like

public
{

}

@{att}
{

}


etc...




See what I mean:



public import gtk.AboutDialog;
public import gtk.AccelGroup;
public import gtk.AccelLabel;
public import gtk.AccelMap;
public import gtk.Accessible;
public import gtk.Action;
public import gtk.ActionableIF;
public import gtk.ActionableT;
public import gtk.ActionBar;
public import gtk.ActionGroup;
public import gtk.ActivatableIF;
public import gtk.ActivatableT;
public import gtk.Adjustment;
public import gtk.Alignment;
public import gtk.AppChooserButton;
public import gtk.AppChooserDialog;
public import gtk.AppChooserIF;
public import gtk.AppChooserT;
public import gtk.AppChooserWidget;
public import gtk.Application;
public import gtk.ApplicationWindow;
public import gtk.Arrow;
public import gtk.ArrowAccessible;
public import gtk.AspectFrame;
public import gtk.Assistant;
public import gtk.Bin;
public import gtk.BindingEntry;
public import gtk.BindingSet;
public import gtk.BooleanCellAccessible;
public import gtk.Border;
public import gtk.Box;
public import gtk.BuildableIF;
public import gtk.BuildableT;
public import gtk.Builder;
public import gtk.Button;
public import gtk.ButtonAccessible;
public import gtk.ButtonBox;
public import gtk.Calendar;
public import gtk.CellAccessible;
public import gtk.CellAccessibleParentIF;
public import gtk.CellAccessibleParentT;
public import gtk.CellArea;
public import gtk.CellAreaBox;
public import gtk.CellAreaClass;
public import gtk.CellAreaContext;
public import gtk.CellEditable;
public import gtk.CellEditableIF;
public import gtk.CellEditableT;
public import gtk.CellLayoutIF;
public import gtk.CellLayoutT;
public import gtk.CellRenderer;
public import gtk.CellRendererAccel;
public import gtk.CellRendererClass;
public import gtk.CellRendererCombo;
public import gtk.CellRendererPixbuf;
public import gtk.CellRendererProgress;
public import gtk.CellRendererSpin;
public import gtk.CellRendererSpinner;
public import gtk.CellRendererText;
public import gtk.CellRendererToggle;
public import gtk.CellView;
public import gtk.CheckButton;
public import gtk.CheckMenuItem;
public import gtk.CheckMenuItemAccessible;
public import gtk.Clipboard;
public import gtk.ColorButton;
public import gtk.ColorChooserDialog;
public import gtk.ColorChooserIF;
public import gtk.ColorChooserT;
public import gtk.ColorChooserWidget;
public import gtk.ColorSelection;
public import gtk.ColorSelectionDialog;
public import gtk.ComboBox;
public import gtk.ComboBoxAccessible;
public import gtk.ComboBoxText;
public import gtk.Container;
public import gtk.ContainerAccessible;
public import gtk.ContainerCellAccessible;
public import gtk.ContainerClass;
public import gtk.CssProvider;
public import gtk.CssSection;
public import gtk.Dialog;
public import gtk.DragAndDrop;
public import gtk.DrawingArea;
public import gtk.EditableIF;
public import gtk.EditableT;
public import gtk.Entry;
public import gtk.EntryAccessible;
public import gtk.EntryBuffer;
public import gtk.EntryCompletion;
public import gtk.EventBox;
public import gtk.EventController;
public import gtk.Expander;
public import gtk.ExpanderAccessible;
public import gtk.FileChooserButton;
public import gtk.FileChooserDialog;
public import gtk.FileChooserIF;
public import gtk.FileChooserNative;
public import gtk.FileChooserT;
public import gtk.FileChooserWidget;
public import gtk.FileFilter;
public import gtk.Fixed;
public import gtk.FlowBox;
public import gtk.FlowBoxAccessible;
public import gtk.FlowBoxChild;
public import gtk.FlowBoxChildAccessible;
public import gtk.FontButton;
public import gtk.FontChooserDialog;
public import gtk.FontChooserIF;
public import gtk.FontChooserT;
public import gtk.FontChooserWidget;
public import gtk.FontSelection;
public import gtk.FontSelectionDialog;
public import gtk.Frame;
public import gtk.FrameAccessible;
public import gtk.Gesture;
public import gtk.GestureDrag;
public import gtk.GestureLongPress;
public import gtk.GestureMultiPress;
public import gtk.GesturePan;
public import gtk.GestureRotate;
public import gtk.GestureSingle;
public import gtk.GestureSwipe;
public import gtk.GestureZoom;
public import gtk.GLArea;
public import gtk.Gradient;
public import gtk.Grid;
public import gtk.HandleBox;
public import gtk.HBox;
public import gtk.HButtonBox;
public import gtk.HeaderBar;
public import gtk.HPaned;
public import gtk.HScale;
public import gtk.HScrollbar;
public import gtk.HSeparator;
public import gtk.HSV;
public import gtk.IconFactory;
public import gtk.IconInfo;
public import gtk.IconSet;
public import gtk.IconSize;
public import gtk.IconSource;
public import gtk.IconTheme;
public import gtk.IconView;
public import gtk.IconViewAccessible;
public import gtk.Image;
public import gtk.ImageAccessible;
public import gtk.ImageCellAccessible;
public import gtk.ImageMenuItem;
public import gtk.IMContext;
public import gtk.IMContextSimple;
public import gtk.IMMulticontext;
public import gtk.InfoBar;
public import gtk.Invisible;
public import gtk.Label;
public import gtk.LabelAccessible;
public import gtk.Layout;
public import gtk.LevelBar;
public import gtk.LevelBarAccessible;
public import gtk.LinkButton;
public import gtk.LinkButtonAccessible;
public import gtk.ListBox;
public import gtk.ListBoxAccessible;
public import gtk.ListBoxRow;
public import gtk.ListBoxRowAccessible;
public import gtk.ListStore;
public import gtk.LockButton;
public import gtk.LockButtonAccessible;
public import gtk.Main;
public import gtk.MainWindow;
public import gtk.Menu;
public import gtk.MenuAccessible;
public import gtk.MenuBar;
public import gtk.MenuButton;
public import gtk.MenuButtonAccessible;
public import gtk.MenuItem;
public import gtk.MenuItemAccessible;
public import gtk.MenuShell;
public import gtk.MenuShellAccessible;
public import gtk.MenuToolButton;
public import gtk.MessageDialog;
public import gtk.Misc;
public import gtk.ModelButton;
public import gtk.MountOperation;
public import gtk.NativeDialog;
public import gtk.Notebook;
public import gtk.NotebookAccessible;
public import gtk.NotebookPageAccessible;
public import gtk.NumerableIcon;
public import gtk.OffscreenWindow;
public import gtk.OrientableIF;
public import gtk.OrientableT;
public import gtk.Overlay;
public import gtk.PadController;
public import gtk.PageSetup;
public import gtk.Paned;
public import gtk.PanedAccessible;
public import gtk.PaperSize;
public import gtk.PlacesSidebar;
public import gtk.Plug;
public import gtk.Popover;
public import gtk.PopoverAccessible;
public import gtk.PopoverMenu;
public import gtk.PopupBox;
public import gtk.PrintContext;
public import gtk.PrintOperation;
public import gtk.PrintOperationPreview;
public import gtk.PrintOperationPreviewIF;
public import gtk.PrintOperationPreviewT;
public import gtk.PrintSettings;
public import gtk.ProgressBar;
public import gtk.ProgressBarAccessible;
public import gtk.RadioAction;
public import gtk.RadioButton;
public import gtk.RadioButtonAccessible;
public import gtk.RadioMenuItem;
public import gtk.RadioMenuItemAccessible;
public import gtk.RadioToolButton;
public import gtk.Range;
public import gtk.RangeAccessible;
public import gtk.RcProperty;
public import gtk.RcStyle;
public import gtk.RecentAction;
public import gtk.RecentChooserDialog;
public import gtk.RecentChooserIF;
public import gtk.RecentChooserMenu;
public import gtk.RecentChooserT;
public import gtk.RecentChooserWidget;
public import gtk.RecentFilter;
public import gtk.RecentInfo;
public import gtk.RecentManager;
public import gtk.RendererCellAccessible;
public import gtk.Requisition;
public import gtk.Revealer;
public import gtk.Scale;
public import gtk.ScaleAccessible;
public import gtk.ScaleButton;
public import gtk.ScaleButtonAccessible;
public import gtk.ScrollableIF;
public import gtk.ScrollableT;
public import gtk.Scrollbar;
public import gtk.ScrolledWindow;
public import gtk.ScrolledWindowAccessible;
public import gtk.SearchBar;
public import gtk.SearchEntry;
public import gtk.SelectionData;
public import gtk.Separator;
public import gtk.SeparatorMenuItem;
public import gtk.SeparatorToolItem;
public import gtk.Settings;
public import gtk.ShortcutLabel;
public import gtk.ShortcutsGroup;
public import gtk.ShortcutsSection;
public import gtk.ShortcutsShortcut;
public import gtk.ShortcutsWindow;
public import gtk.SizeGroup;
public import gtk.Socket;
public import gtk.SpinButton;
public import gtk.SpinButtonAccessible;
public import gtk.Spinner;
public import gtk.SpinnerAccessible;
public import gtk.Stack;
public import gtk.StackAccessible;
public import gtk.StackSidebar;
public import gtk.StackSwitcher;
public import gtk.Statusbar;
public import gtk.StatusbarAccessible;
public import gtk.StatusIcon;
public import gtk.StockItem;
public import gtk.Style;
public import gtk.StyleContext;
public import gtk.StyleProperties;
public import gtk.StyleProviderIF;
public import gtk.StyleProviderT;
public import gtk.Switch;
public import gtk.SwitchAccessible;
public import gtk.SymbolicColor;
public import gtk.Table;
public import gtk.TargetEntry;
public import gtk.TargetList;
public import gtk.TearoffMenuItem;
public import gtk.Testing;
public import gtk.TextAttributes;
public import gtk.TextBuffer;
public import gtk.TextCellAccessible;
public import gtk.TextChildAnchor;
public import gtk.TextIter;
public import gtk.TextMark;
public import gtk.TextTag;
public import gtk.TextTagTable;
public import gtk.TextView;
public import gtk.TextViewAccessible;
public import gtk.ThemingEngine;
public import gtk.ToggleAction;
public import gtk.ToggleButton;
public import gtk.ToggleButtonAccessible;
public import gtk.ToggleToolButton;
public import gtk.Toolbar;
public import gtk.ToolButton;
public import gtk.ToolItem;
public import gtk.ToolItemGroup;
public import gtk.ToolPalette;
public import gtk.ToolShellIF;
public import gtk.ToolShellT;
public import gtk.Tooltip;
public import gtk.ToplevelAccessible;
public import gtk.TreeDragDestIF;
public import gtk.TreeDragDestT;
public import gtk.TreeDragSourceIF;
public import gtk.TreeDragSourceT;
public import gtk.TreeIter;
public import gtk.TreeIterError;
public import gtk.TreeModel;
public import gtk.TreeModelFilter;
public import gtk.TreeModelIF;
public import gtk.TreeModelSort;
public import gtk.TreeModelT;
public import gtk.TreeNode;
public import gtk.TreePath;
public import gtk.TreeRowReference;
public import gtk.TreeSelection;
public import gtk.TreeSortableIF;
public import gtk.TreeSortableT;
public import gtk.TreeStore;
public import gtk.TreeView;
public import gtk.TreeViewAccessible;
public import gtk.TreeViewColumn;
public import gtk.UIManager;
public import gtk.VBox;
public import gtk.VButtonBox;
public import gtk.Version;
public import gtk.Viewport;
public import gtk.VolumeButton;
public import gtk.VPaned;
public import gtk.VScale;
public import gtk.VScrollbar;
public import gtk.VSeparator;
public import gtk.Widget;
public import gtk.WidgetAccessible;
public import gtk.WidgetClass;
public import gtk.WidgetPath;
public import gtk.Window;
public import gtk.WindowAccessible;
public import gtk.WindowGroup;
public import gdkpixbuf.PixbufFormat;
public import gdkpixbuf.Pixdata;
public import gio.AsyncResultIF;
public import gio.Cancellable;
public import gio.IconIF;
public import gio.IconT;
public import gio.InputStream;
public import gio.LoadableIconIF;
public import gio.LoadableIconT;
public import gio.OutputStream;
public import glib.Bytes;
public import glib.ConstructionException;
public import glib.ErrorG;
public import glib.GException;
public import glib.HashTable;
public import glib.ListSG;
public import glib.Str;
public import gobject.ObjectG;
public import gtkc.gdkpixbuf;
public import gtkc.gdkpixbuftypes;


and that's just for gtk(well, mainly).





August 15, 2017
Not only that, but it requires adding more files to the command line.

I currently have 3 import files to separate the gtk from gdk that and the only reason they exist is to combine them in to one named import ;/


Doesn't seem like much but that's 3 extra files that don't really need to exist.

Hopefully D already implements a way to do what I'm asking.


August 15, 2017
On 15/08/2017 2:59 AM, Johnson wrote:
> Not only that, but it requires adding more files to the command line.
> 
> I currently have 3 import files to separate the gtk from gdk that and the only reason they exist is to combine them in to one named import ;/
> 
> 
> Doesn't seem like much but that's 3 extra files that don't really need to exist.
> 
> Hopefully D already implements a way to do what I'm asking.

Or instead of a new language feature, the gtk-d guys could have package files ;)

August 15, 2017
On Tuesday, 15 August 2017 at 03:37:39 UTC, rikki cattermole wrote:
> On 15/08/2017 2:59 AM, Johnson wrote:
>> Not only that, but it requires adding more files to the command line.
>> 
>> I currently have 3 import files to separate the gtk from gdk that and the only reason they exist is to combine them in to one named import ;/
>> 
>> 
>> Doesn't seem like much but that's 3 extra files that don't really need to exist.
>> 
>> Hopefully D already implements a way to do what I'm asking.
>
> Or instead of a new language feature, the gtk-d guys could have package files ;)

But then that only helps with one specific instance. D is full of language features, I do not see why everyone is so against them. Without them, D would be empty, nothing, and no one would use it. Adding language features should be see as something good, cause without them, we wouldn't get anywhere.
August 15, 2017
On Tuesday, 15 August 2017 at 20:33:18 UTC, Johnson wrote:
>>
>> Or instead of a new language feature, the gtk-d guys could have package files ;)
>
> But then that only helps with one specific instance. D is full of language features, I do not see why everyone is so against them. Without them, D would be empty, nothing, and no one would use it. Adding language features should be see as something good, cause without them, we wouldn't get anywhere.

In the past, I've thought it would be convenient to have something like

import io = std.stdio : writeln, write;

and allow someone to write

io.write("foo");
io.writeln("bar");

though I don't know if that causes any kinds of problems to implement.

That being said, the code you refer to above probably could be simplified quite a bit with mixins. I just did a simple version, but I imagine it could be extended. It also might be even easier to accomplish when static foreach is in the language, that would you can just loop through the LowLevels to accomplish it. Some kind of hierarchy to the HighLevels/MidLevels/LowLevels would also need to be established.

import std.meta : AliasSeq;

alias LowLevels = AliasSeq!("writeln", "write");

template GenImport(string TopLevel, string MidLevel, string LowLevel)
{
    const char[] GenImport = "import " ~ TopLevel ~ "." ~ MidLevel
                                                       ~ " : " ~ LowLevel ~ ";";
}

mixin(GenImport!("std", "stdio", LowLevels[0]));
mixin(GenImport!("std", "stdio", LowLevels[1]));

void main()
{
    write("foo");
    writeln("bar");
}
August 16, 2017
On Tuesday, 15 August 2017 at 03:37:39 UTC, rikki cattermole wrote:
> On 15/08/2017 2:59 AM, Johnson wrote:
>> Not only that, but it requires adding more files to the command line.
>> 
>> I currently have 3 import files to separate the gtk from gdk that and the only reason they exist is to combine them in to one named import ;/
>> 
>> 
>> Doesn't seem like much but that's 3 extra files that don't really need to exist.
>> 
>> Hopefully D already implements a way to do what I'm asking.
>
> Or instead of a new language feature, the gtk-d guys could have package files ;)

This! Just create a PR for Gtk-D to add packages.
August 16, 2017
On Tuesday, 15 August 2017 at 21:12:24 UTC, jmh530 wrote:
> On Tuesday, 15 August 2017 at 20:33:18 UTC, Johnson wrote:
>>>
>>> Or instead of a new language feature, the gtk-d guys could have package files ;)
>>
>> But then that only helps with one specific instance. D is full of language features, I do not see why everyone is so against them. Without them, D would be empty, nothing, and no one would use it. Adding language features should be see as something good, cause without them, we wouldn't get anywhere.
>
> In the past, I've thought it would be convenient to have something like
>
> import io = std.stdio : writeln, write;
>
> and allow someone to write
>
> io.write("foo");
> io.writeln("bar");
>
> though I don't know if that causes any kinds of problems to implement.

This looks really clean for code modularity.

import io = std.stdio : {writeln, write}, ...
August 16, 2017
On Tuesday, 15 August 2017 at 21:12:24 UTC, jmh530 wrote:
>
> In the past, I've thought it would be convenient to have something like
>
> import io = std.stdio : writeln, write;
>
> and allow someone to write
>
> io.write("foo");
> io.writeln("bar");
>

This is already in the language: http://dlang.org/spec/module.html#renamed_imports
August 16, 2017
On Wednesday, 16 August 2017 at 10:12:01 UTC, Joel Nilsson wrote:
> On Tuesday, 15 August 2017 at 21:12:24 UTC, jmh530 wrote:
>>
>> In the past, I've thought it would be convenient to have something like
>>
>> import io = std.stdio : writeln, write;
>>
>> and allow someone to write
>>
>> io.write("foo");
>> io.writeln("bar");
>>
>
> This is already in the language: http://dlang.org/spec/module.html#renamed_imports

Well I knew that renamed imports were allowed, but I didn't realize you could do re-named selective imports (the " : writeln, write" part of it). I just double-checked and it worked. I don't recall it working in the past.

I see that there's an example in the spec, but it is a little more complicated than my example.
August 16, 2017
On Wednesday, 16 August 2017 at 09:54:41 UTC, aberba wrote:
> On Tuesday, 15 August 2017 at 21:12:24 UTC, jmh530 wrote:
>> On Tuesday, 15 August 2017 at 20:33:18 UTC, Johnson wrote:
>>>>
>>>> Or instead of a new language feature, the gtk-d guys could have package files ;)
>>>
>>> But then that only helps with one specific instance. D is full of language features, I do not see why everyone is so against them. Without them, D would be empty, nothing, and no one would use it. Adding language features should be see as something good, cause without them, we wouldn't get anywhere.
>>
>> In the past, I've thought it would be convenient to have something like
>>
>> import io = std.stdio : writeln, write;
>>
>> and allow someone to write
>>
>> io.write("foo");
>> io.writeln("bar");
>>
>> though I don't know if that causes any kinds of problems to implement.
>
> This looks really clean for code modularity.
>
> import io = std.stdio : {writeln, write}, ...

Yes, and also

import io = {std.stdio : {writeln, write}, ... }

which allows one to create their own "packages" inline. Group the best functionality they use often. Should be quick, efficient, and easy to implement. D should have this, where do I vote for it?

« First   ‹ Prev
1 2 3