Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Самый сложный язык программирования, но не эзотерический 
:(
    Опции темы
UniBomb
Дата 10.6.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Добрый день. Вот тут на форуме полно вопросов, о том какой ЯП быстрее, функциональнее, круче и т.д. А мне вот стало интересно - какой язык программирования из ныне востребованных самый сложный?

Что я имею в виду по сложностью - сложность освоения, сложность выражения алгоритмов и т.д. Скажем так язык для мазохистов))

Но при этом этот ЯП был бы вполне востребованным или хотя бы позволял создавать приложения, не уступающие по функциональности приложениям, написанным скажем на C++ или Java. Про "нетормознутость" приложения я не говорю, ибо это в принципе неважно.


--------------------
PM MAIL ICQ Skype   Вверх
Фантом
Дата 10.6.2009, 18:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 1
Всего: 49



Цитата(UniBomb @  10.6.2009,  17:27 Найти цитируемый пост)

Что я имею в виду по сложностью - сложность освоения, сложность выражения алгоритмов и т.д. Скажем так язык для мазохистов))

Но при этом этот ЯП был бы вполне востребованным или хотя бы позволял создавать приложения, не уступающие по функциональности приложениям, написанным скажем на C++ или Java.


Если речь идет об используемом языке (а не придуманном "хохмы ради", вроде Brainfuck), то ответ уже назван - это C++. 

P.S. Это совершенно серьезно.
PM   Вверх
kemiisto
Дата 10.6.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 7
Всего: 160



Цитата(Фантом @  10.6.2009,  16:13 Найти цитируемый пост)
P.S. Это совершенно серьезно.

Фантом, а бесполезно! smile 
Цитата( Снова Он =))
Люди по ошибке принимают сложность за изощренность.


UniBomb, да, это C++. smile

Добавлено @ 18:23
Цитата(UniBomb @  10.6.2009,  15:27 Найти цитируемый пост)
Скажем так язык для мазохистов))

 smile Ну, тогда точно он!

Это сообщение отредактировал(а) kemiisto - 10.6.2009, 18:23


--------------------
PM MAIL WWW GTalk Jabber   Вверх
UniBomb
Дата 10.6.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Я то думал будут говорить про какой-нибудь Ruby или Haskel :(

На самом деле субъективно С++ мне не кажется таким уж сложным. Может это потому, что я и С++ не так уж хорошо знаю, но в принципе в процессе использования его в том объёме, в котором мне позволяет моя подготовка, мне всё кажется простым и логичным. Трудности возникают в основном в алгоритмах, а не в реализации...


--------------------
PM MAIL ICQ Skype   Вверх
kemiisto
Дата 10.6.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 7
Всего: 160



Цитата(UniBomb @  10.6.2009,  16:32 Найти цитируемый пост)
Я то думал будут говорить про какой-нибудь Ruby или Haskel :(

Ruby? smile Неудачная шутка... A Haskell то тут причём?
Цитата(UniBomb @  10.6.2009,  15:27 Найти цитируемый пост)
из ныне востребованных

Это кто писал? smile 


Цитата(UniBomb @  10.6.2009,  16:32 Найти цитируемый пост)
На самом деле субъективно С++ мне не кажется таким уж сложным. Может это потому, что я и С++ не так уж хорошо знаю,

А может это потому, что ничего кроме С++ ты и не видел? Тока без обид. Всё познаётся в сравнении. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
UniBomb
Дата 10.6.2009, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Цитата(kemiisto @  10.6.2009,  18:50 Найти цитируемый пост)
А может это потому, что ничего кроме С++ ты и не видел? Тока без обид.


Какие тут моуть быть обиды... Я действительно окромя С++ ничего практически не видел. Немного php, немного pascal, немного avr-asm. Поэтому и ляпнул про раби и хаскель (кстате непонял к чему претензии к хаскелю - он ведь тоже язык программирования, правда о его назначении я не знаю). Вот и хочу расширить свой кругозор и занятся ещё каким-нибудь ЯПом. Но я не хочу идти по пути "учи то-то и то-то, ибо больше пригодится".... Вот как то так.


--------------------
PM MAIL ICQ Skype   Вверх
Lazin
Дата 10.6.2009, 19:10 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



мне ничего сложнее delphi не встречалось smile 
удивительно нелогичный и не интуитивный дизайн
PM MAIL Skype GTalk   Вверх
kemiisto
Дата 10.6.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 7
Всего: 160



Цитата(UniBomb @  10.6.2009,  17:06 Найти цитируемый пост)
к чему претензии к хаскелю

Он пока не настолько востребован, чтобы обращать на него внимание. Кроме того, ФП - специфическая область. С позиции большинства императивных программистов = это сплошной мозохизм. smile

Цитата(UniBomb @  10.6.2009,  17:06 Найти цитируемый пост)
Вот и хочу расширить свой кругозор и занятся ещё каким-нибудь ЯПом. Но я не хочу идти по пути "учи то-то и то-то, ибо больше пригодится".... Вот как то так. 

Я бы посоветовал Component Pascal.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
UniBomb
Дата 10.6.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Lazin, если честно, то несовсем с тобой соглашусь. Мне пару раз приходилось переписывать куски кода с делфей на С++ и в принципе никаких трудностей связанных с самими языками я не испытывал. Трудности возникали из-за представления этих языков компаниями борланд, кодгеар и кто там ей сейчас владеет. Трудности эти были в типах данных, в том что vcl-классы должны иметь один тип (непомню какой), корый не понимают некоторые винапишные функции и т.д. Вот это да - изврат. Но он присущь как делфи, так и билдеру, так что в принципе я к этому привык...


Цитата(kemiisto @  10.6.2009,  19:10 Найти цитируемый пост)
Он пока не настолько востребован, чтобы обращать на него внимание

Вот этого я не знал.


Цитата(kemiisto @  10.6.2009,  19:10 Найти цитируемый пост)
Component Pascal

Надо глянуть что это такое))


--------------------
PM MAIL ICQ Skype   Вверх
unicuum
  Дата 10.6.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: нет
Всего: 8



UniBomb, попробуй Visual Prolog, по сравнению с ним BrainFuck совсем не е...т мозги.


--------------------
user posted image
обычный день на винграде
PM   Вверх
Фантом
Дата 10.6.2009, 20:40 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 1
Всего: 49



Цитата(UniBomb @  10.6.2009,  18:32 Найти цитируемый пост)
Я то думал будут говорить про какой-нибудь Ruby или Haskel :(


С чего? Два достаточно аккуратных языка, Haskell более компактный и логичный. Вы путаете сложность языка и непривычность принципов, которые в него заложены. 

Цитата(UniBomb @  10.6.2009,  18:32 Найти цитируемый пост)
На самом деле субъективно С++ мне не кажется таким уж сложным. Может это потому, что я и С++ не так уж хорошо знаю,


Я бы сказал, что C++ в полном объеме знают очень немногие люди в мире (если таковые вообще имеются, в чем я совсем не уверен).  smile Из-за попыток затащить в язык сразу несколько парадигм в C++ появилось море языковых конструкций и особенностей их интерпретации, которые достаточно сложно связаны. 

Другое дело, что подавляющее большинство тех, кто использует C++, de facto пишет на некотором существенно упрощенном подмножестве языка (Вы наверняка не исключение), однако полностью проблему это не решает. Во-первых, у каждого человека подмножество свое, поэтому поддерживать чужой код или работать в группе достаточно неудобно, во-вторых, банальные синтаксические ошибки (с точки зрения "подмножества") могут оказаться корректными (но неправильными по смыслу) конструкциями для языка целиком.

PM   Вверх
Lazin
Дата 10.6.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(UniBomb @  10.6.2009,  19:22 Найти цитируемый пост)
Lazin, если честно, то несовсем с тобой соглашусь. Мне пару раз приходилось переписывать куски кода с делфей на С++ и в принципе никаких трудностей связанных с самими языками я не испытывал.

ну это смотря что писать, если писать приложение для работы с БД, то да, просто, а если программировать, то полная *опа smile 
вот простой пример, у нас есть массив чисел типа double, нужно их отсортировать и вывести на экран
вариант на с++

Код

template<class ForwardIter>
void print_data(ForwardIter begin, ForwardIter end)
{
    typedef typename std::iterator_traits<ForwardIter>::value_type value_type;
    std::copy( std::ostream_iterator<value_type>(std::cout), data.begin(), data.end() );
}
..
std::sort(data.begin(), data.end());
print_data(data.begin(), data.end());

ф-я print_data будет работать с любым контейнером и даже с обычным массивом или строкой
вариант на паскале пишите сами, мне страшно представить что у вас получится smile 

еще вариант, выбор из массива N разных, случайных элементов, вариант на с++
Код

template<class T, class InsIter>
void shuffle_select( std::vecotr<T>& data, int N, InsIter& iter )
{
    for (int i = 0; i < N; ++i)
   {
        int r = rand() % (data.size() - i) + i;
        std::swap(data[i], data[r]);
        *iter++ = data[i];
   }
}

попробуйте сделать лучше на delphi smile 

Это сообщение отредактировал(а) Lazin - 10.6.2009, 21:51
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 10.6.2009, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



Цитата(Lazin @  10.6.2009,  20:50 Найти цитируемый пост)
ф-я print_data будет работать с любым контейнером и даже с обычным массивом или строкой

  Для универсального вывода можно использовать тип Variant. Динамический массив есть свой родной.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 10.6.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(Alexeis @  10.6.2009,  21:58 Найти цитируемый пост)
Для универсального вывода можно использовать тип Variant

даже для своего класса?

Цитата(Alexeis @  10.6.2009,  21:58 Найти цитируемый пост)
Динамический массив есть свой родной

а как он мне поможет, если я написал свой контейнер, со своими итераторами, или массив тупо не подходит для той или иной задачи smile 
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 10.6.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



Цитата(Lazin @  10.6.2009,  21:06 Найти цитируемый пост)
а как он мне поможет, если я написал свой контейнер, со своими итераторами, или массив тупо не подходит для той или иной задачи smile  

  Вектор тоже может не подойти для той или иной задачи, и что?

Цитата(Lazin @  10.6.2009,  21:06 Найти цитируемый пост)
даже для своего класса?

  Для типов есть стандартное преобразование в строку, для объектов можно переопределить ToString и юзать как альтернативу.

Вариант это и массив и объект и интерфейс и ком объект.

Добавлено через 7 минут и 8 секунд
  Вот только Variant это все ран тайм фичи, как я уже говорил, разная направленность у языков.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 11.6.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Вектор тоже может не подойти для той или иной задачи, и что?

в этом и дело, я могу вместо vector<double> написать vector<long> или list<complex>, все будет работать одинаково, первая ф-я ожидает на вход пару forward итераторов, в качестве forward итератора может выступать все что угодно, начиная от указателя и заканчивая файловым итератором. 
Вторая ф-я принимает vector<T>, но можно ее переписать так, что она будет принимать пару random access итераторов.

Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Для типов есть стандартное преобразование в строку, для объектов можно переопределить ToString и юзать как альтернативу.

а можно тупо добавить каждому объекту метод WriteMe и все, че париться smile 

Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Вариант это и массив и объект и интерфейс и ком объект.

а если я написал класс complex, который не имеет таблицы вирт. функций, это просто пара чисел, не массив, не интерфейс и не ком объект, и выводить их нужно не просто так, а перед мнимой частью еще вывести "j". Писать убер-функцию которая будет выводить все что угодно?

Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Вот только Variant это все ран тайм фичи, как я уже говорил, разная направленность у языков.

вот мы наконец и вернулись к сабжу, почему я считаю что delhpi - сложный язык программирования
- код на delphi жутко не гибкий, написать простую ф-ю - просто, но сложную, как например ф-ю вывода на экран содержимого любого контейнера, "правильно" реализовать очень сложно, так как все решения принимаются в рантайме, эта ф-я должна быть невероятно могучей и знать о всех типах, которые ей могут быть переданы. Проблемы с отладкой и сопровождением такого кода будут обязательно. Плюсовый вариант, который я привел, просто сгенерирует множество реализаций ф-ии print_data, для всех типов аргументов, причем у нас есть полный контроль за тем, как это будет происходить. Можно специализировать шаблон для определенных аргументов.

- язык имеет статическую типизацию, но, при этом он в основном ориентирован на "ран тайм фичи", что приводит к раздуванию кода. К примеру ф-я print_data на динамическом ЯП будет выглядеть по настоящему просто:
Код

    def print_data(iterable):
        for x in iterable:
            print(x)

в принципе эту ф-ю можно и не писать, настолько она простая, вот что значит "ран тайм фичи" smile 
а в delphi, для того, что-бы работали ран  тайм фичи, нужно прелюбодействовать с технологией COM и интерфейсами, а это даже не intermediate, это сложно в реализации и в сопровождении, в этом очень сложно искать ошибки
вот почему я считаю delphi сложным языком программирования, несмотря на поверхностную простоту smile

Добавлено через 8 минут и 5 секунд
еще одна сложность, возможно надуманная - освобождение памяти
в delphi нет GC, поэтому все нужно удалять вручную, но не всегда, часть объектов управляют временем жизни объектов, которые им передают, к примеру так поступает большинство VCL классов, но некоторые этого не делают, и перед тем как удалить, скажем TList, нужно сначала удалить его содержимое, это неудобно и не интуитивно. А из-за того, что delphi не поддерживает deterministic destruction как с++, то и написать smart pointer, который будет следить за памятью - невозможно, ну а реализовать сборщик мусора на delphi думаю вообще не реально...
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 11.6.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: нет
Всего: 207



соглашусь по поводу руби
не скажу, что язык сложный, но некоторые вещи не совсем интуитивны


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Void
Дата 11.6.2009, 14:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Цитата(MAKCim @  11.6.2009,  10:38 Найти цитируемый пост)
некоторые вещи не совсем интуитивны

Почти всегда «интуитивный» в отношении ЯП означает «похожий на то, что я видел ранее».

Если считать мерой сложности количество ad hoc решений в языке, не выводимых из неких базовых принципов, то C++ здесь вне конкуренции, пожалуй smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
gcc
Дата 12.6.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



сложный ли такой код? (вроде бы ничего сложного)

Код

#perl/bin/perl -w

        #${$a[3][2]{ass}}[7]='MOTHER';
        #print $#{$a[3][2]{ass}}+1;
        #${$a[3][2]{ass}}{zxc}='MOTHER';
        #${$a[3][2]{ass}}{xcv}='FUCKER';
        #$a=(($#{[%{$a[3][2]{ass}}]})+1);
        #print $a/2-1;

        $aaaaa='DOT';
        $aaaa=\$aaaaa;
        $aaa=\$aaaa;

        $a[0]=1;
        $a[1]{'A'}='as1s';
        $a[1]{'E'}='as4s';
        $a[2]=2;
        $a[3][0]='Zs1s';
        $a[3][1]='Zs2s';
        $a[3][2]='Zs3s';
        $a[3][3]=\$aaa;
        $a[4]='Ludka';
        #$a[3][4][2][5]='Zs3s';

        #print $#{[@{$a[3]}]};
        #$z=$#{$a[3][4][2]};
        #print $z;

        #__END__
        # @a - сложная структура
        # @b - массив с текущей позицией в дереве
        # $z - значение текущего элемента

        @b=(0,'a');
        $f=0;
        while ($f==0)
                {

                print "\n";
                ($z,$ss)=_Array2String();
        #       print "($z,$ss)=Array2Srting()\n";
        #       $z - содержимое текущего элемента
        #       $ss- количество элементов
        #       print "Begin _StepForward \@b=";
        #       print @b;
        #       print "\n";
        #       print "5.1 ref(z)=".ref($z)."  z=$z\n";
                if (!ref($z))   
                        {
                        $f=0;
                        @c=@b;
                        $r=_StepForward();
                        if ($r eq 'end') {print "END of structure\n";$f=1;}
                        print "Element=$z\n" if $f!=1;
                        print "\@c=";
                        print @c;
                        print "\n";
                        }
        #       print "5.2 ref(z)=".ref($z)."  z=$z\n";
                if (ref($z) eq 'ARRAY')
                        {
        #print "z-ARRAY ref!\n";
                        push @b, 0; push @b, 'a';
                        }
                elsif (ref($z) eq 'HASH')
                        {
                        push @b, 0; push @b, 'h';
        #print "z-HASH ref!\n";
                        }
                elsif (ref($z) eq 'REF' || ref($z) eq 'SCALAR')
                        {
                        push @b, 0; push @b, 's';
        #print "z-SCALAR ref!\n";
                        }
                #if (ref($z) eq 'SCALAR') {push @b, 0; push @b, 'a';}

                }

        print "END!\n";

        # передвигается по структуре на 1 шаг (найти следующий элемент - НЕ ССЫЛКУ
        sub _StepForward
                {
                #print "Begin _StepForward \@b=";
                #print @b;
                #print "\n";
                if ($f==1) {return}
                if ($#b<=0) {return 'end';}
        #       print '1.$b[$#b]='.$b[$#b]."\n";
        #       print '2.$b[$#b-1]='.$b[$#b-1]."\n";
                if ($b[$#b] eq 'a' || $b[$#b] eq 'h')
                        {
                        ($sz,$ss)=_Array2String();
                        # если массив не перебран весь, то инкремент позиции
        #               print "3. ss=".$ss."\n";
        #               print '3.1 $b[$#b-1]='.$b[$#b-1].'<ss='.$ss."\n";
        #       print "3.2 In _StepForward \@b=";
        #       print @b;
        #       print "\n";
                        if ($b[$#b-1]<$ss) {$b[$#b-1]++;}#
                        else
                                {
        #                       print "4.\@b=pop\n";
                                pop (@b);
                                pop (@b);
                                _StepForward();
        #
                                }
                }
                elsif ($b[$#b] eq 's')
                        {
                        pop@b;pop@b;
                        _StepForward();
        #
                        }
        #       print "3.3 In _StepForward \@b=";
        #       print @b;
        #       print "\n";
            return;
                }

        # Парсит массив @b в строку, которую возвращает
        sub _Array2String
                {
                $s='$a';
                for (my $i=0;$i<$#b;$i+=2)
                        {
                        if ($b[$i+1] eq 'a') {$s.='['.$b[$i].']'}
                        elsif ($b[$i+1] eq 'h')
                                {
                                $ss='$zz=\\'.$s;
                                eval $ss;
                                $zz=$$zz;
                                @keys=sort keys %$zz;
                                $s.='{'.$keys[$b[$i]].'}'
                                }
                        elsif ($b[$i+1] eq 's') {$s='${'.$s.'}';}
                        }

                $ss=$s;
        #       print "2.1 ss=$ss\n";
                #print "b=".$b[$#b]."\n";
        # подсчет количества элементов в $ss
                if ($b[$#b] eq 'a')
                        {
        #               print "2.2 Array ss=$ss\n"; # $z= $#{$a[3]};
                        if ($#b>1)
                                {
                                $ss=~s/^\$/\$#\{\$/;
                                $ss=~s/\[\d+\]$/}/;
                                }
                        else
                                {
                                $ss=~s/^\$/\$#/;
                                $ss=~s/\[\d+\]$//;
                                }

                        $ss='$ss='.$ss;
                        #print "2.3 Array ss=$ss\n";
                        eval $ss;
                        #print "2.4 Array ss=$ss\n";
                        }
                elsif ($b[$#b] eq 'h')
                        {
                        $ss=~s/^\$/\$#\{\[%\{\$/;
                        $ss=~s/\{[a-zA-Z0-9_]+\}$/}]}/;
                        $ss='$sz='.$ss;
                        eval $ss;
        #               print "2.3 hash sz=$sz\n";
                        $sz++;
                        $sz=$sz/2;
                        $sz--;
                        $ss=$sz;
                        }
                else {undef $ss;}

                $s='$sz=\\'.$s;
                eval $s;
        #       print "2.9 ss=$ss\n";
                $sz=$$sz;
                return ($sz,$ss);
                }


PM WWW ICQ Skype GTalk Jabber   Вверх
kemiisto
Дата 12.6.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 7
Всего: 160



gcc, читать сложно. smile

Добавлено через 2 минуты и 8 секунд
А, так это Perl! Read-only language! smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Alexeis
Дата 12.6.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



Цитата(Lazin @  11.6.2009,  07:23 Найти цитируемый пост)
а можно тупо добавить каждому объекту метод WriteMe и все, че париться

  Разница есть. ToString есть у общего предка TObject притом виртуальная.

Цитата(Lazin @  11.6.2009,  07:23 Найти цитируемый пост)
а если я написал класс complex, который не имеет таблицы вирт. функций, это просто пара чисел, не массив, не интерфейс и не ком объект, и выводить их нужно не просто так, а перед мнимой частью еще вывести "j". Писать убер-функцию которая будет выводить все что угодно?

  Если бы это было самой большой проблемой программирования, то я бы согласился. Чтобы вывести массив чисел и функции не нужно, можно просто так написать smile . 

Цитата(Lazin @  11.6.2009,  07:23 Найти цитируемый пост)
в этом и дело, я могу вместо vector<double> написать vector<long> или list<complex>, все будет работать одинаково, первая ф-я ожидает на вход пару forward итераторов, в качестве forward итератора может выступать все что угодно, начиная от указателя и заканчивая файловым итератором. 

  А вот с этим как раз проблем нет, в VCL есть универсальная система потоков пронизанная через весь VCL. Есть унифицированный интерфейс для чтения и записи в файл, память, ресурс, строку и т.д. Есть также объекты умеющие писать в поток стандартные вещи. Короче на все есть свое альтернативное решение. Просто ты мыслишь в терминах С++, от того не находишь аналога.

Добавлено через 1 минуту и 13 секунд
  И главное, синтаксис в десятки раз проще.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 13.6.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
Разница есть. ToString есть у общего предка TObject притом виртуальная.

в паскале все объекты являются наледниками TObject? видимо нет, тоесть ради приведения к строковому типу, я должен наследовать свой класс от TObject? А если мне нужно создать несколько миллионов экземпляров моего класса, не будет-ли дорогим удовольствием наличие дополнительных данных и таблицы вирт. функций в моем классе?

Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
Если бы это было самой большой проблемой программирования, то я бы согласился. Чтобы вывести массив чисел и функции не нужно, можно просто так написать

ну это частный случай общей проблеммы, это может быть не вывод на экран, а к примеру сериализация в xml

Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
А вот с этим как раз проблем нет, в VCL есть универсальная система потоков пронизанная через весь VCL. Есть унифицированный интерфейс для чтения и записи в файл, память, ресурс, строку и т.д. Есть также объекты умеющие писать в поток стандартные вещи. Короче на все есть свое альтернативное решение. Просто ты мыслишь в терминах С++, от того не находишь аналога.

Кажется мы разговариваем на разных языках, поток данных != итератор на элемент из набора данных.
Существует ли в delphi поток для записи в двухсвязный список, или в бинарное дерево поиска? Вероятно - нет.
Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
И главное, синтаксис в десятки раз проще.

Може он и проще, но зато он многословней, и простота синтаксиса != простота программирования smile 
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 13.6.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 2
Всего: 459



Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
в паскале все объекты являются наледниками TObject? видимо нет, тоесть ради приведения к строковому типу, я должен наследовать свой класс от TObject? А если мне нужно создать несколько миллионов экземпляров моего класса, не будет-ли дорогим удовольствием наличие дополнительных данных и таблицы вирт. функций в моем классе?

  Все объекты его наследники.

Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
Може он и проще, но зато он многословней, и простота синтаксиса != простота программирования

  А вот это уже новости smile . С++ намного более многословный, особенно при работе с шаблонами.
  Сравни dynamic_cast<TObject>(SomeObj) == NULL и SomeObj is TObject .

Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
ну это частный случай общей проблеммы, это может быть не вывод на экран, а к примеру сериализация в xml

  С сериализацией как раз мощнее и удобнее на порядок ввиду того что RTTI на голову выше.

Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
Кажется мы разговариваем на разных языках, поток данных != итератор на элемент из набора данных.
Существует ли в delphi поток для записи в двухсвязный список, или в бинарное дерево поиска? Вероятно - нет.


  Если подумать, то использование итератора это ни что иное как вызов виртуального метода. Работают же с деревьями, например с тем же TreeView или TXMLDocument. Вся проблема сводиться к тому что вместо It++/It-- нужно записать ChNode := RNode.Next; или ChNode := RNode.Prev;
  Скажу честно, мне не приходилось в Delphi работать с деревьями, но наверняка, те работал имеют свои наработки. Нельзя ждать, что в поставке будет все все, на все случаи жизни. Есть много сторонних классов.

  На счет 4х байтов адреса VMT, а ты знаешь какие накладные расходы на однократное выделение  
памяти? По меньшей 10-30 байт, только на служебную информацию, потом выравнивание на границу 4х байт, потом выравнивание структур на границу 8ми или даже 16ти байт. Сейчас 4 байта ничего не значат, это не вопрос оптимизации. Это крошечная плата за ту полноту фич, которые можно использовать. Например в С++ нельзя по указателю достоверно узнать какой это на самом деле класс, потому что нет ни какой гарантии что у этого класса есть VMT. А тут такая гарантия есть и на это можно всегда рассчитывать, будь то свой или чужой класс. Точно также работа с памятью. Возникают куча проблем с тем чтобы сначала выделить память и потом вернуть в ней результат, потому что объект может быть статическим, стековым или в куче. Нельзя быть уверенным что его можно уничтожить из вне или создать во вне и вернуть ссылку, так чтобы получатель мог его сам удалить при необходимости. А тут запросто, передавай куда хош, возвращай из функции, создавай и уничтожай где хош, потому что все объекты динамические. Это очень просто, других объектов быть не может. Собственный метод free() удалит его, каким бы способом он не создавался, кроме того если объект создавался во вне, а получен был лишь его интерфейс, то объект автоматически будет уничтожен как только переменная интерфейса выйдет из области видимости.
  Чего ни говори, но работа в динамике на порядок удобнее.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Void
Дата 13.6.2009, 11:10 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Традиции Винграда: любую тему о ЯП здесь превращают в холивар Delphi vs C++. Добро пожаловать в 2009 год, что ли...


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Logo
Дата 14.6.2009, 09:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата(kemiisto @ 12.6.2009,  23:04)
gcc, читать сложно. smile

Добавлено @ 23:07
А, так это Perl! Read-only language! smile

Write-only smile 
PM MAIL   Вверх
Lazin
Дата 14.6.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Все объекты его наследники

ужас какой, а еще у вас нет стековых объектов
Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
А вот это уже новости smile . С++ намного более многословный, особенно при работе с шаблонами.
  Сравни dynamic_cast<TObject>(SomeObj) == NULL и SomeObj is TObject

ну знаешь, в с++ этой конструкцией почти не приходится пользоваться, так как есть шаблоны, а в Delphi нужно постоянно использовать downcast-ы, так-как все контейнеры и все классы VCL, хранят указатели на TObject, там, где нужно хранить произвольные пользовательские данные.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
С сериализацией как раз мощнее и удобнее на порядок ввиду того что RTTI на голову выше.
но на голову ниже чем в C# smile 
Вообще, в с++ это то-же возможно, есть фреймверки для сериализации, которые сильно это упрощают.  smile 
Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Если подумать, то использование итератора это ни что иное как вызов виртуального метода. Работают же с деревьями, например с тем же TreeView или TXMLDocument. Вся проблема сводиться к тому что вместо It++/It-- нужно записать ChNode := RNode.Next; или ChNode := RNode.Prev;

неа, возьмем к примеру std::vector<int>, после инстанциировния и оптимизации компилятором, итератор на элемень вектора сведется к указателю на int, а все операции над итератором - к операциям над указателем, никаких вирт. ф-ий, все максимально эффективно smile 

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
На счет 4х байтов адреса VMT, а ты знаешь какие накладные расходы на однократное выделение  
памяти? По меньшей 10-30 байт, только на служебную информацию, потом выравнивание на границу 4х байт, потом выравнивание структур на границу 8ми или даже 16ти байт. Сейчас 4 байта ничего не значат, это не вопрос оптимизации. Это крошечная плата за ту полноту фич, которые можно использовать.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Чего ни говори, но работа в динамике на порядок удобнее.

ну знаешь, выравниванием можно управлять, и очень часто, приходится работать с объектами, размер которых сопостовим с размером указателя на VMT, так-что это не аргумент. К примеру, мне нужно проводить вычисления над кватернионами, в С++ можно написать класс, который будет иметь семантику значений, полиморфизм такому объекту не нужен, но в delphi это сделать нельзя. Придется размещать объекты этого класса в куче, а это во первых медленней, так как повышается уровень косвенности при обращении, к тому-же, рано или поздно это приведет к фрагментации памяти.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Например в С++ нельзя по указателю достоверно узнать какой это на самом деле класс, потому что нет ни какой гарантии что у этого класса есть VMT. А тут такая гарантия есть и на это можно всегда рассчитывать, будь то свой или чужой класс.

Вообще-то можно, это называется RTTI. Но это как правило не нужно и обычно вызвано ошибками проектирования. Как правило, нам нужно наоборот, не знать с объектм какого класса работает программа, обращаясь к нему через указатель(ссылку) на базовый класс.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Точно также работа с памятью. Возникают куча проблем с тем чтобы сначала выделить память и потом вернуть в ней результат, потому что объект может быть статическим, стековым или в куче. Нельзя быть уверенным что его можно уничтожить из вне или создать во вне и вернуть ссылку, так чтобы получатель мог его сам удалить при необходимости.
Ну, эти проблемы возникают обычно у нубов и это не проблемы вовсе. Такие ошибки достаточно легко обнаруживаются, так-как вызывают падение программы. К тому-же, моно сделать так, что с объектами некоторго класса будет можно работать только через указатель(нельзя будет создать на стеке), или только через смарт поинтер определенного типе. Можно сделать наоборот, так, что-бы объект можно было создать только на стеке и нельзя - в динамической памяти. В конце концов, можно написать сборщик мусора, а еще лучше - использовать готовую библиотеку smile 
PM MAIL Skype GTalk   Вверх
ToshaCh
Дата 14.6.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: нет
Всего: 26



Цитата(Void @  13.6.2009,  11:10 Найти цитируемый пост)
Традиции Винграда: любую тему о ЯП здесь превращают в холивар Delphi vs C++. Добро пожаловать в 2009 год, что ли...

Намана. Хорошо холиварят, даже читать приятно. smile Берите пиво и попкорн!
Правда увлеклись vcl, а вопрос был про язык, а не библиотеки. А то знаете ли можно и MFC вспомнить или GTK 1.

Синтаксически С++ самый тяжёлый. А читабельность исходников сильно зависит от того насколько хороший профессионал их писал, в отличии от скажем python'а. 


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
Stolzen
Дата 16.12.2013, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: нет
Всего: 48



Можете мне помочь решить эту проблему путем публикации своего мнения в этой гуглоформе. Со своей стороны готов поделиться результатами по окончанию опроса smile

(пардон за некропостинг)


--- 

UPD
Итог
* визуализация ответов http://goo.gl/xzyV1x
* итоговая оценка сложности http://goo.gl/F3hk4k

Спасибо всем ответившим!

Это сообщение отредактировал(а) Stolzen - 24.12.2013, 15:27


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Разные вопросы"
Smartov

Сюда нужно постить только темы, которые нельзя отнести ни к одному из существующих разделов. Если вы не уверены, то просмотрите еще раз заголовки форумов, карту форума или попробуйте воспользоваться поиском.
Если вы все же не смогли найти подходящего раздела - создавайте тему здесь.


С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разные вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1735 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.