Thread overview | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
August 15, 2017 Named multi-imports | ||||
---|---|---|---|---|
| ||||
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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johnson | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johnson | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to rikki cattermole | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johnson | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to rikki cattermole | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to jmh530 | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to jmh530 | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joel Nilsson | 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 Re: Named multi-imports | ||||
---|---|---|---|---|
| ||||
Posted in reply to aberba | 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?
|
Copyright © 1999-2021 by the D Language Foundation