- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
private void cb_activated(TreePath path, TreeViewColumn column) {
Totem.Object t = (Totem.Object)this.object;
uint selected = path.get_indices()[0];
uint current = t.get_playlist_pos();
if (selected > current) {
for (int i = 0; i < selected - current; i++)
t.remote_command(RemoteCommand.NEXT, "");
} else if (current > selected) {
for (int i = 0; i < current - selected; i++)
t.remote_command(RemoteCommand.PREVIOUS, "");
}
}
Vala. Тормозит эта хуйня жутко, так как Totem открывает все файлы в плейлисте, пока не доберётся до выбранного.
guesto 17.04.2016 02:51 # +2
CYB3R 17.04.2016 09:45 # 0
Тут смысл не в ЯП, а в ущербности биндингов.
bormand 17.04.2016 09:47 # 0
Нету команды для перехода к i элементу плейлиста?
CYB3R 17.04.2016 15:17 # 0
wvxvw 17.04.2016 15:18 # 0
guesto 18.04.2016 15:42 # 0
wvxvw 19.04.2016 15:41 # 0
3.14159265 19.04.2016 15:44 # +1
>кастовать можно что угодно во что угодно
Есть еще unionы и void*
И если юнион таки удобная и годная штука, void* (да-да-да, в сишке есть не только автовывод типов, но и генерики).
См также: "очень полезный тип указатель", "единственно верный тип данных массив"
guest 19.04.2016 15:49 # 0
Ну типа все что угодно это указатель на какой-то char?)
guest 19.04.2016 15:47 # +1
да, в си достаточно слабая типизация. Но именно это и было нужно так как программист должен управлять памятью. Например, он знает что в памяти лежит 2 байта определенного формата, и кастит int с этими байтами в структуру).
Понятное дело что писать бизнес-логику на этом грустно. Но это не говнистость, а особенность ЯП для конкретных задач. Иначе можно сказать что и ассемблер говнист.
>>Отсутствием инкапсуляции.
Инкапсуляция прекрасно достигается в сях! static функции + opaque types.
>> Плохо продуманый синтаксис.
да, синтаксис мог бы быть и по-лучше, согласен.
>> Куча каких-то безумных и ненужных правил работы со знаковыми / беззнаковыми числами.
Каких это?
Блин, как я люблю когда человек не понял зачем нужен инструмент, не осилил его и начал рассказывать про говнистость.
Молоток это говно! Им неудобно накалывать макароны (в той же вилке это в тысячу раз лучше решено!!). Им очень легко сломать себе ногу, если по ней ударить (заметьте: ни палка для селфи, ни мочалка такими проблемами на обладают!) и наконец молотком совершенно неудобно чесаться
roman-kashitsyn 19.04.2016 16:06 # +2
Как я люблю, когда языки программирования сравнивают с отвёртками и молотками!
> Молоток это говно!
Конкретно у этого молотка могла бы и не отваливаться ручка через раз.
Сишка могла бы быть проще и удобней.
Не втыкать все эти неявные касты, упростить синтаксис, предоставить вменяемую альтернативу макросам, изначально продумать модульную систему (теперь-то мы модулей уже никогда не увидим) и т.п.
TarasB 19.04.2016 16:14 # 0
guest 19.04.2016 16:34 # 0
Касперски как-то приводил пример: ему нужно было повторить код N раз. Причем именно один и тот же код (не цикл, не вынос в функцию итд). В сях это почти никак не сделать, а в MASM делается макрос, коий параметризуется кол-вом повторений
defecate-plusplus 19.04.2016 16:40 # 0
BOOST_PP
но вообще нахуй такие упражнения
guest 19.04.2016 16:33 # 0
и сразу же сам сравнил:
>>Конкретно у этого молотка могла бы и не отваливаться ручка через раз.
Причем заметь: я в своем сравнении указал на конкретную глупость: товарищ ждет от инструмента не того, для чего он был задуман.
А о чем говорит твое сравнение? что такое "ручка отвалилась"? что-то перестало работать? компилятор упал? что такое ручка?
>>Сишка могла бы быть проще и удобней.
Разумеется!
А теперь скажи мне: есть-ли такой язык, который идеален и не мог бы вот уже быть проще и удобней?
>>упростить синтаксис, предоставить вменяемую альтернативу макросам, изначально продумать модульную систему
Тогда это будет уже другой язык, правда?
А что вы все доебались до модульности? Что не так с модульностью то?
Неймспейсов нет, это плохо, а еще что?
guest 19.04.2016 16:37 # 0
вы о том что знание о депенденсах пишется 2 раза: сначала в виде импорта, затем в виде ключика в Make файле?)
roman-kashitsyn 19.04.2016 17:12 # 0
Ну так это намеренно, чтобы было понятней, как херово выглядят подобные размытые аналогии.
> А о чем говорит твое сравнение?
А что означает накалывать макароны молотком? Что здесь макароны?
> Что не так с модульностью то?
Её нет. Ваш кэп.
Извольте соблюдать ODR ручками, надейтесь, что обезяны, написавшие какую-нибудь библиотеку, не используют те же символы, что и ты, или те же символы, что другие обезьяны.
Ну и текстовые инклюды с перекомпиляцией хедеров раз за разом - это божественно.
guest 19.04.2016 17:18 # +2
Вы правда не поняли моей аналогии? Глупо ждать от "переносимого ассемблера" строгой типизации, правда?
Серьезно, говорить что минус сей в том, что "кастовать можно что угодно во что угодно" может только человек, который совершенно не понял зачем си нужны, и когда их нужно использовать.
>>, не используют те же символы,
да, в сях нету неймспейсов и это плохо. Но эту проблему решают префиксами. И, в целом, она решается.
>>Ну и текстовые инклюды с перекомпиляцией хедеров
А есть percompiled headers вообще-то.
Пляски с include guards это правда оцтой, но например в Objc эту проблему решили конструкцией #import (не путать с VCшным #import).
>>Её нет. Ваш кэп.
Дайте пожалуйста определение модульности.
roman-kashitsyn 19.04.2016 17:30 # 0
Нет, не глупо. Слабую типизацию сделали исключительно потому, что создателям было лень писать явные касты руками.
> А есть percompiled headers вообще-то.
Костыль.
guest 19.04.2016 17:32 # 0
стоп! Так претензия в _неявном_касте_ или в физической возможности скастовать поинтер в int _в_принципе_ ?
Это важно. Потому что если проблема в неявности, то я согласен (хотя и так компилятор выдаст варнинг)
>>Костыль.
все, короче я понял чего вы хотите
Вот этого:
https://stoneofarc.wordpress.com/2013/06/25/introduction-to-objective-c-modules/
да?
roman-kashitsyn 19.04.2016 17:35 # 0
> стоп! Так претензия в _неявном_касте_ ... ?
читать умеешь, гест?
> (хотя и так компилятор выдаст варнинг)
Не всегда. Нуль, к примеру, прекрасно кастится к указателю даже в плюсах, на это запросто можно наступить.
> все, короче я понял чего вы хотите
Хотим модулей хотя бы в том виде, в котором они реализованы в D.
guest 19.04.2016 17:40 # 0
Посмотри выше.
guest 19.04.2016 17:47 # 0
Хочется верить что в 2016м году попытка его разыменовать приведет к ошибке в большинстве сред)
резюмируя:
В сях много говнистости (неявные касты, модульность реализуемая в полуручном режиме, путаный (в сложных случаях) синтаксис). Это правда.
Но ни ручное управление памятью, ни возможность кастить что угодно во что угодно *НЕ* являются проблемами сей, ибо это именно то, ради чего они были сделаны.
Ну и инкапсуляция, очевидно, так же не является особенностью языка (это особенность кода)
1024-- 19.04.2016 21:05 # 0
Язык задаёт тон. Или плясать с гирей на ноге, или с ленточкой. Конечно, это особенность танцора, но гиря мешает.
В том же жс можно так спрятать функцию в функции, что даже её имя никто не узнает, не то что вызовет. Можно разделить задачу на мелкие части и вкладывать функции в функции так, чтобы более мелкие куски из одной подсущности не знали своих двоюродных братьев, не имели к ним доступ без воли бабушки. В C для такого же эффекта (точно такого же? если в 2х файлах одно и то же имя неэкспортируемой сущности, не бомбанёт?) нужно создавать несколько файлов.
roman-kashitsyn 19.04.2016 21:09 # 0
Нет. JS, вообще говоря, не самый удачный пример модульности :) Образцом я лично считаю StandardML.
guest 19.04.2016 21:13 # 0
Даже за импортить модуль в языке нельзя, нужны левосторонние либы.
1024-- 19.04.2016 21:25 # 0
guest 19.04.2016 21:40 # 0
инкапсуляция есть сокрытие внутренней структуры с использованием публичного интерфейса
в сях это прекрасно работает, это те самые opque types о которые я уже изык разбил
HANDLE в w32api
ну чем не инкапсуляцы?
1024-- 19.04.2016 23:28 # 0
> ну чем не инкапсуляцы?
Инкапсуляция, не спорю.
Но в JS инкапсулировать легче. function в function через function и уже не то, что в одном и том же файле, в одной и той же функции питушня сокрыта.
guest 19.04.2016 21:12 # 0
Точнее сказать язык дает инструменты.
Сишечка позволяет модульность, но модули нужно поддерживать руками:
1) в .h файле
2) в .c файле
3) во всех местах испольхования
4) в сборщике (передать нужные опции линкеру и компилятору)
5) следить за ODR
6) следить за неймингом
В сях не бомбанет если две функции статик
wvxvw 19.04.2016 22:19 # −4
Инкапсуляция нуждается в инструментах, для того, чтобы ее можно было реализовать. Возможно, авторы Си не представляли себе необходимости писать большие / модульные программы, вот они и не заморачивались этим вопросом.
guest 19.04.2016 22:23 # 0
>> Практических бонусов каких-то от этой фичи нет.
Нет.
В спецификации вот даже на IBM PC есть знания о том, по каким адресам в памяти доступен, например, BIOS.
Очевидно что в си именно для этого можно пойти в память по определенному адресу.
>>Инкапсуляция нуждается в инструментах, для того, чтобы ее можно было реализовать.
И снова: В Win32API _прекрасно_ реализована инкапсуляция. И не только в нем.
wvxvw 19.04.2016 22:29 # 0
guest 19.04.2016 22:31 # 0
Она есть, я не спорю. Но реально она решается путем конвенции: давайте функциям префиксы, и все будет работать.
wvxvw 19.04.2016 22:35 # 0
guest 19.04.2016 22:36 # 0
Инкапсуляция прекрасно реализуется без неймспейсов. Разгребайте уже кашу в голове
roman-kashitsyn 19.04.2016 22:48 # +3
Ну так-то сишка на удивление мультипарадигменный язык. При должном усердии и внимании, в нем прекрасно реализуется модульность, инкапсуляция, полиморфизм, наследование, обобщённое программирование, функциональное программирование и даже автоматическая сборка мусора!
guest 19.04.2016 22:54 # +1
Во-вторых неймспейсы это просто способ нейминга, к инкапсуляции он отношения не имеет.
В ObjC нету неймспейсов, а инкапсуляция в Cocoa прекрасная.
В PHP 6 есть неймспейсы, а инкапсуляции обычно никакой нет.
3_dar 19.04.2016 23:00 # +1
Именно поэтому он не вышел в релиз?
guesto 19.04.2016 23:01 # 0
когда там у вас эти спейсы появились?
Vasiliy 20.04.2016 11:36 # 0
Он не т в 5.4 трейты появились неймспейсы значит еще раньше в 5.3. а это 9 год.
wvxvw 19.04.2016 22:34 # 0
bormand 19.04.2016 22:50 # +1
А как мне обратиться к пачке memory mapped регистров по адресам 0xEFFF0000 .. 0xEFFF0007?
wvxvw 19.04.2016 23:15 # 0
bormand 19.04.2016 23:18 # +2
Друг с другом их и не дают складывать. Только с числом. И умножать-делить не дают. Только вычитать ещё можно (получается знаковое число). И указатели в числа и обратно не кастуются, если явно этого не захочешь...
Вот у меня есть адрес начала блока 32-битных регистров. Как мне получить адрес i'го регистра в блоке? Кроме как прибавить число к адресу?
guesto 19.04.2016 23:22 # 0
вот у тебя есть знание о том, что волшебное яйцо лежит по адресу 0x1234.
Как тебе по этому адресу обратиться не используя int? Ведь литерал 0x1234 будет иметь тип int, а значит придется int кастить в pointer!
bormand 19.04.2016 23:23 # 0
А вот от арифметики над адресами один хуй никак не избавиться. Ну и от желания указывать адреса в конфигах, собирать их из байтиков по кускам и творить прочие непотребства...
guesto 19.04.2016 23:24 # 0
bormand 19.04.2016 23:25 # 0
guesto 19.04.2016 23:27 # 0
wvxvw 19.04.2016 23:29 # 0
В любом случае нужно прибавлять не число, а расстояние от одного адресса до другого. Как именно это сделать - проблема компилятора. В итоге это все-равно будет сложение чисел, вот только смысл будет другой с точки зрения программиста.
Просто числа в Си плохие изза того, что их решили использовать для представления памяти, ну а потом поняли, что может это было не самым удачным решением, но поезд уже ушел.
К слову об замечательных инкапсуляциях в ВинАПИ: чет у них не очень получилось заинкапсулировать способ адрессации памяти, и врезультате такой замечательной инкапсуляции, 32-битные программы будут еще очень долго поддерживаться отдельными костылями.
guesto 19.04.2016 23:31 # 0
>> не очень получилось заинкапсулировать
Очевидно что дело тут в кривых руках пользователей. Если не использовать знание о размере поинтера, то проблем нет.
guesto 19.04.2016 23:19 # 0
cl.exe: error C2110: '+' : cannot add two pointers
gcc: error: invalid operands to binary + (have ‘char *’ and ‘char *’)
Знаешь, почему я не рассуждаю об истории Суахили?
Потому что ничерта в ней не понимаю.
wvxvw 19.04.2016 23:33 # 0
guesto 19.04.2016 23:35 # 0
Ну тогда возвращаемся к первому вопросу:
>>лол, какие есть способы описать некое расстояние не прибегая к числам?
roman-kashitsyn 18.04.2016 10:43 # +3
А в Vala типа не ручное? Там ещё хуже - если в сишке понятно, что за всё сам отвечаешь, то с валой надо понимать, где какой сишный код сгенерится, что там управляемое, а что нет.
Пытался ради интереса посмотреть эту порнографию, но уж лучше на C++ писать, и с "биндигами" проблем не будет.
Даже Canonical забросил эту унылую Vala и фигачит новые проекты на Qt.
CYB3R 18.04.2016 11:48 # 0
Dummy00001 18.04.2016 12:10 # 0
с другой стороны, кто в нынешние времена вообще что-то новое на gtk писать начинает? все нормальные люди давно на WxWidgets или Qt пересели.
https://www.youtube.com/watch?v=ON0A1dsQOV0
CYB3R 18.04.2016 13:08 # 0
guesto 18.04.2016 17:16 # +1
например тот же reference counting легко организовать и в C, и например в ObjC (до ARC) люди прекрасно себе жили с полуручным управлением
3_14dar 19.04.2016 15:50 # 0
guest 19.04.2016 15:53 # 0
о чем ты?
ты видел как RefCount сделан с COM или Objc?
3_14dar 20.04.2016 04:54 # 0
guesto 18.04.2016 17:13 # 0
зачем пользоваться очевидно нестабильным, сырым, и при этом не развивающимся инструментом?
CYB3R 18.04.2016 21:27 # 0
guesto 18.04.2016 22:04 # 0
конечно, ЯП за 10 лет прошедший путь от 0.0 до 0.3 быстро развивающийся
kerman 19.04.2016 01:44 # +1
Цифры версии вообще ничего не значат. Могут три мажорные версии поменять и поправить два минорных бага. А могут с 0.1 дойти до 0.2 и поменять вообще всё.
Цифры. Цифры ничего не значат.
kurwa 19.04.2016 08:48 # +1
dxd 19.04.2016 10:01 # 0