Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/117: Рейтинг темы: голосов - 117, средняя оценка - 4.64
2 / 2 / 2
Регистрация: 20.01.2015
Сообщений: 70

Почему все так не любят Delphi

24.04.2015, 08:22. Показов 26195. Ответов 324
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Объясните мне пожалуйста почему все так не любят Delphi? Я сам новичок в программировании и как любой другой новичок я озадачивался вопросом "Какой же ЯП начинать учить?" и посещая различные форумы, вопросники, читая разные статейки с советами на данную тему, я был маленько удивлен, что во всех постах выбор Delphi (ну или Odject Pascal, хотя если не ошибаюсь до Delphi уже давненько считается ЯП) даже не рассматривают, там все сводится современным полезностям всяких яв, питонов и тп...А про Delphi вообще не упоминают. Бывали вопросы конкретно по ЯПу для работы с Windows Forms, и тут опять лидируют всякие C# и С++. Решил поковыряться в C# Windows Forms (VS Express 2013), тоже довольно не плохо все там организовано, но вот по сложности самого кода, Delphi будет в самый раз новичку. Написал простенький кликер для онлайн игры на Delphi, трудностей почти не возникло, решил тоже самое реализовать на C# и просто сразу бросил это дело за невозможностью написать "Клик ЛКМ в определенных координатах"...Если в Delphi все решалось одной строчкой, то в c# там целое произведение. Ведь delphi проще новичку получается? Решил глянуть во возможностям писанины для Android OS, для всех остальных ЯПов "в коробке" (надо догоняться всякими Xamarin'ами и dot42) отсутствуют возможности быстро и просто писать такие приложение, в Delphi опять были приятные фичи, с XE5 и выше есть довольно хорошая организация разработки приложений для Android платформы, со своим эмулятором, возможностью "на лету" забросить собранное на свой девайс по USB. Это все опять добавило +++ по моим критериям к Delphi. Единственное что RAD Studio стоит огромных денег (около 200 кусков), это все на порядок дороже всяких Ultimate версий VS. Ребят, может я что-то не понимаю во всем этом, но может мне делфоводы в двух словах расскажут почему же Delphi такой не уважаемый? Да и вообще я очень даже уверен что многие из матёрых тутошних делфоводов смогут реализовать любую задачу на Delphi. По мне это самый достойный инструмент для новичка с кучей готовых компонентов и интуитивно понятным и удобным интерфейсом, а для работы с Windows Forms мне кажется много кому даст прикурить в плане юзабильности! Хотя у меня еще есть большое подозрение что многие кто активно помогает в ветке Delphi сам отдаст предпочтение другому ЯПу, а заходит в ветку Delphi ради фана чтоль))) Знатоки Delphi или ярые противники, внесите пожалуйста ясность в мой разум, я буду очень признателен. Большое спасибо заранее!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2015, 08:22
Ответы с готовыми решениями:

Почему все так не любят Баскова?
Слышал про его планирующийся грандиозный концерт с Кабалье в Лужниках в июне, кому ни скажу- все нос морщат. ну разве что кроме родителей-...

Почему все так не любят tkinter?
Почему, по вашему мнению, не нужно использовать стандартную библиотеку графического интерфейса tkinter? Перечислите конкретные причины,...

[Cocos2d-x] Clion + cocos2d-x почему так не любят друг - друга ? (Mac OS X)
Доброе врем суток уважаемые формучане. Кто имел опыт подружить эти два чуда меду собой, поделитесь пожалуйста опытом. У меня вот какая...

324
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
29.04.2015, 22:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от castorsky Посмотреть сообщение
как структуры данных можно использовать векторы с доступом O(1).
Но их же нельзя модифицировать. А пересоздавать целиком ради изменения одного элемента накладно.

Добавлено через 2 минуты
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Простой пример с метапрограммированием уже есть в этой теме. Это было обобщённое программирование (я про find).
Я правильно понимаю, что функцию find нельзя скомпилировать в общем виде (то есть, можно скомпилировать только с уже подставленными типами)?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.04.2015, 22:30
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но их же нельзя модифицировать. А пересоздавать целиком ради изменения одного элемента накладно.
По умолчанию нельзя, но можно явно создать mutable.

Добавлено через 1 минуту
у DR опять зуд и он уже навалил кирпичей
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
29.04.2015, 22:44
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
что лучше вернуть элемент, который требуется найти, чем индекс элемента в массиве
Конечно лучше, болезный. Нормальный find не ограничивается поиском точного совпадения. Часто нужна функция трансформатор и конкретный компаратор. Например, поиск в векторе списка, 2-ый элемент которого = 666:
Lisp
1
2
(find 666 #((:foo 1) (:bar 666 42) (:baz 10)) :key #'second)
;; => (:BAR 666 42)
Добавлено через 4 минуты
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Может быть, такую глупость Маккарти придумал или какой-то другой упоротый лиспер?
Это классический ФВП, неуч. Посмотри, что в D возвращает find и удивись.

Добавлено через 4 минуты
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
через вариадные переменные
Если под "вариадными переменными" в данном случае понимается optional type, то нормально. Но в Common Lisp всё равно удобнее через multiple values. Это уже объяснялось вроде.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.04.2015, 22:47
nullxdth, тут как бы пр delphi
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
29.04.2015, 23:00
Цитата Сообщение от castorsky Посмотреть сообщение
тут как бы пр delphi
Чёрт, точно

Добавлено через 4 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но их же нельзя модифицировать.
Короче, я делаю так в функциональном OCaml, оп:
Code
1
2
# let xs = [|1;2;3|] in xs.(1) <- 666; xs;;
- : int array = [|1; 666; 3|]
Записал мои шестёрочки шестёрки во 2-й элемент. И пока ещё раптор не откусил мне мою пустую голову.
Любой ФЯП может стать ИЯП когда это нужно.

Добавлено через 3 минуты
Цитата Сообщение от nullxdth Посмотреть сообщение
мне мою пустую голову
Грешную пустую голову.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
29.04.2015, 23:04
Цитата Сообщение от Shamil1 Посмотреть сообщение
Я правильно понимаю, что функцию find нельзя скомпилировать в общем виде (то есть, можно скомпилировать только с уже подставленными типами)?
Дык, как бы можно (никто не запрещает её компилировать):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
auto ref find(T1, T2)(T1 required_element, T2 array) {
    import std.variant;
    
    foreach (e; array)
    if (required_element == e) {
        return Variant(e);
    }
    
    return Variant("-1_fuckLisperam");
}
 
void main() {
 
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.04.2015, 23:06
Dennis Ritchie, придурок, не lisperam, а lispers.
0
29.04.2015, 23:09

Не по теме:

castorsky, сам такой. Это англо+транслит. :D

0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
29.04.2015, 23:14
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Дык, как бы можно (никто не запрещает её компилировать):
Скомпилировать в отдельный модуль и дальше использовать в виде исполняемого кода (или промежуточного - что там в Д), а не в виде исходников.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.04.2015, 23:15
Цитата Сообщение от Shamil1 Посмотреть сообщение
Скомпилировать в отдельный модуль и дальше использовать в виде исполняемого кода
Он не знает как это делается и для чего. Уже был подобного рода разговор.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
29.04.2015, 23:24
Цитата Сообщение от Shamil1 Посмотреть сообщение
Скомпилировать в отдельный модуль и дальше использовать в виде исполняемого кода (или промежуточного - что там в Д), а не в виде исходников.
Можно скомпилировать в отдельный модуль и использовать в виде исполняемого кода. Кто же вам это запрещает?
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
29.04.2015, 23:30
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Можно скомпилировать в отдельный модуль и использовать в виде исполняемого кода. Кто же вам это запрещает?
И вызвать из этого модуля фукцию find(T1,T2)(T1 e, T2 arr), подставив туда свои типы?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
30.04.2015, 04:00
P.S. В этой статье описано, как это сделать:
DMD Compiler for Windows
Цитата Сообщение от Shamil1 Посмотреть сообщение
И вызвать из этого модуля фукцию find(T1,T2)(T1 e, T2 arr), подставив туда свои типы?
А зачем их подставлять, если они могут быть практически любыми?

Добавлено через 4 часа 20 минут
Цитата Сообщение от nullxdth Посмотреть сообщение
Посмотри, что в D возвращает find и удивись.
О, да! Обобщённое программирование ярко сверкает пятками
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
R1 find(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle)
if (isRandomAccessRange!R1 && isForwardRange!R2 && !isBidirectionalRange!R2 &&
    is(typeof(binaryFun!pred(haystack.front, needle.front)) : bool))
{
    static if (!is(ElementType!R1 == ElementType!R2))
    {
        return simpleMindedFind!pred(haystack, needle);
    }
    else
    {
        // Prepare the search with needle's first element
        if (needle.empty)
            return haystack;
 
        haystack = .find!pred(haystack, needle.front);
 
        static if (hasLength!R1 && hasLength!R2 && is(typeof(takeNone(haystack)) == R1))
        {
            if (needle.length > haystack.length)
                return takeNone(haystack);
        }
        else
        {
            if (haystack.empty)
                return haystack;
        }
 
        needle.popFront();
        size_t matchLen = 1;
 
        // Loop invariant: haystack[0 .. matchLen] matches everything in
        // the initial needle that was popped out of needle.
        for (;;)
        {
            // Extend matchLength as much as possible
            for (;;)
            {
                import std.range : takeNone;
 
                if (needle.empty || haystack.empty)
                    return haystack;
 
                static if (hasLength!R1 && is(typeof(takeNone(haystack)) == R1))
                {
                    if (matchLen == haystack.length)
                        return takeNone(haystack);
                }
 
                if (!binaryFun!pred(haystack[matchLen], needle.front))
                    break;
 
                ++matchLen;
                needle.popFront();
            }
 
            auto bestMatch = haystack[0 .. matchLen];
            haystack.popFront();
            haystack = .find!pred(haystack, bestMatch);
        }
    }
}

P.S. Если бы я написал такую функцию, то и смотреть бы её никто не стал, ибо никто не смог бы её осилить (ну, кроме лисперов ).
0
Эксперт Pascal/Delphi
2389 / 1301 / 1492
Регистрация: 29.08.2014
Сообщений: 4,669
30.04.2015, 08:01
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Если бы я написал такую функцию, то и смотреть бы её никто не стал, ибо никто не смог бы её осилить (ну, кроме лисперов )
- потому что нафиг никому не нужна.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
30.04.2015, 12:26
Индексы не нужны. Но если уж зачем-то они вдруг таки понадобятся, то всегда есть возможность zip'ануть контейнер с бесконечным списком от 0.

Добавлено через 1 минуту
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
uint find(T1, T2)(T1 required_element, T2 array) {
Вот это что называется обобщил так обобщил, Александр Степанов плачет кровавыми слезами
Или может просто в D ничего кроме массивов не существует?

Добавлено через 8 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Какая вам польза в получении элемента, когда вы ищете 'c' в строке "akdfjeird"?
Лучшие умы CS дали им монаду Maybe, но нет, хотят индексы. Ты какой индекс вернешь в случае отсутствия элемента?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
30.04.2015, 12:41
Цитата Сообщение от Voivoid Посмотреть сообщение
Или может просто в D ничего кроме массивов не существует?
Voivoid, я думаю, что когда я освою настоящие темплайты и ООП в D, то с красными глазами забегают все пользователи данного форума (и Степановы, и Лаптевы, и даже Бьярны).
Цитата Сообщение от Voivoid Посмотреть сообщение
Индексы не нужны.
Ага. Мир спасут тупые указатели и указатели вариадные (ну и указатели на указатели указателей)!
Цитата Сообщение от Voivoid Посмотреть сообщение
Вот это что называется обобщил так обобщил, Александр Степанов плачет кровавыми слезами
Дык, это меня Степанов и научил...
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
30.04.2015, 12:46
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Ага. Мир спасут тупые указатели и указатели вариадные (ну и указатели на указатели указателей)!
Дениска, тебе уже дважды или даже трижды повторили - optional type. Ты же продолжаешь тупить. Можешь даже не пытаться написать что-нибудь обобщённое, ты не сможешь. Ну не умеешь ты программировать. D не D разницы никакой.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
30.04.2015, 12:56
Цитата Сообщение от volvo Посмотреть сообщение
Есть решение без классов и прочей лабуды? В стиле
В таком стиле решения нет. Есть решение без классов, но с лабудой:
Вариант с частичным запретом арифметики с типами int и Balance
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import std.exception, std.stdio;
 
struct CustomInteger(T, T minValue, T maxValue)
{
    T value_;
    
    alias value this;
    
    @property T value() const
    {
        enforce((value_ >= minValue) &&
                (value_ <= maxValue));
        
        return value_;
    }
    
    @property void value(T v)
    {
        value_ = v;
    }
}
 
void main()
{
    alias Balance = CustomInteger!(int, -32_000, 32_000);
    
    auto b = Balance(42);
    
    // b += 5; // Error: 'b += 5' is not a scalar,
    // it is a CustomInteger!(int, -32000, 32000)
    
    writeln(b); // 42
 
    b = 40_000;
 
    writeln(b); // object.Exception@acm.d(11): Enforcement failed
}
http://ideone.com/lcOi3A

Вариант с полным разрешением арифметики с типами int и Balance
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import std.exception, std.stdio;
 
struct CustomInteger(T, T minValue, T maxValue)
{
    T value_;
    
    alias value this;
    
    @property T value() const
    {
        enforce((value_ >= minValue) &&
                (value_ <= maxValue));
        
        return value_;
    }
    
    @property void value(T v)
    {
        value_ = v;
    }
 
    ref CustomInteger opOpAssign(string op, T2)(T2 rhs)
    {
        static if (is (T2 == CustomInteger)) {
            mixin("value_ " ~ op ~ "= rhs.value_;");
            return this;
            
        } else {
            return opOpAssign!op(CustomInteger(rhs));
        }
    }
 
}
 
void main()
{
    alias Balance = CustomInteger!(int, -32_000, 32_000);
    
    auto b = Balance(42);
    
    b += 5; // OK
    
    writeln(b); // 47
}
http://ideone.com/Ekx0wC

Цитата Сообщение от nullxdth Посмотреть сообщение
тебе уже дважды или даже трижды повторили - optional type.
Андрюша, я тебе уже 10 раз сказал, что optional type характерен для динамически типизированных Lisp'ов, в статически типизированных языках это называется variant. Какой смысл от вариадного типа, если я хочу изменить элемент в массиве и мне нужен индекс или указатель? Лисперы совсем уже допились до ручки? Какой толк от элемента? Ответь, пожалуйста.
P.S. Ну и что вы сделали за 27 лет прожитой жизни на своём динамическом лиспе?
0
112 / 100 / 13
Регистрация: 18.04.2015
Сообщений: 813
Записей в блоге: 2
30.04.2015, 13:00
паскаль задумывался как язык для обучения, но переходить с него на другой язык очень сложно, я старшеклассникам вместо паскаля давал c#, от него можно шагнуть с js, c/c++ из - за схожести синтаксиса.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
30.04.2015, 13:05
Цитата Сообщение от ivaska Посмотреть сообщение
паскаль задумывался как язык для обучения, но переходить с него на другой язык очень сложно
Да, многие так и остаются плавать в детстве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2015, 13:05

Почему партнерские программы и поисковики так не любят сайты о заработке в инете?
почему то везде таким сайтам красный свет, при том, что неважно даже какие способы заработка они описывают или предлагают...

За что так не любят Goto?
Может я такой непонятливый, но объясните кто может - почему у многих не самое чучшее отношение к оператору Goto. Я этого не понимаю, в...

Почему девушки не любят баянистов?
Я - экс-баянист с В/O и небольшим стажем работы в качестве артиста АПП ВДВ РФ. Девушек в моей жизни (физически) не было вообще. Наверное...

Почему девушки не любят программистов?
Вроде программисты обеспеченные, умные, настоящие интеллектуалы, многие следят за своим внешним видом, а некоторые даже занимаются спортом....

Почему любят одних, а женятся... ?
К сожалению или к радости, не все браки свершаются на небесах. Если верить статистике, только 10 из 100 браков заключаются по большой и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
260
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru