Здравствуйте, D. Mon, Вы писали:
DM>Я что-то многопоточное да дельфе делал году в 1999-м, все там было. До этого в основном под ДОС писал, поэтому настоящая многопоточность была мне тогда в диковинку.
А что там удивительного? Учитывая, что это было лишь обёрткой над winapi'шным CreateThread.
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, ylem, Вы писали:
Y>>Че-то у вас не те претензии к Delphi Y>>Операторы там перегружаются, коллекции какие-никакие есть. С читаемостью же, имхо, все очень не плохо.
N>Это ещё старые претензии. С другой стороны, все эти плюшки стали появляться только недавно.
N>Перегрузка операторов в каком году? Судя по логу, в 2013-м году это работало только для Андроида. А на десктопе?
Перегрузка операторов для винды где-то 2005-2007
В Delphi.Net раньше
N>Объявление переменных в месте использования в 2018.
Малонужная вещь, иногда полезная
N>А коллекции с произвольными типами когда появились?
>Допускаю, что я за неделю не успел нормально изучить язык, но всё равно уверен, что такого компактного и при этом хорошо читаемого кода, как на С++, получить бы мне не удалось принципиально.
Я тут не понимаю. Почему код на C++ более компактен и лучше читаем?
>А на Делфи это был ужасный кустарный код, полный велосипедов.
А здесь мне всё понятно. Действительно, я профессиональный велосипедист), и мне всегда было проще придумать алгоритм самому, чем искать сторонние библиотеки.
Я вот думаю, если на Delphi главная проблема — нехватка библиотек, может дельфисты из России захотят объединиться и обмениваться библиотеками? Я планирую написать об этом на геймдеве.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, Nuzhny, Вы писали:
N>>Грубо говоря, на С++ быстренькой реализовывались классы матриц и векторов, перегрузить арфметические операторы, для коллекций использовать STL. А на Делфи это был ужасный кустарный код, полный велосипедов. Допускаю, что я за неделю не успел нормально изучить язык, но всё равно уверен, что такого компактного и при этом хорошо читаемого кода, как на С++, получить бы мне не удалось принципиально.
AG>Это так, на Delphi сложно писать программу, которая что-либо считает
AG>Вот, кстати, темы Химика вполне иллюстрируют проблему
AG>https://rsdn.org/forum/philosophy/7306082.1
K>Я вот думаю, если на Delphi главная проблема — нехватка библиотек, может дельфисты из России захотят объединиться и обмениваться библиотеками? Я планирую написать об этом на геймдеве.
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, Khimik, Вы писали:
K>>Мне вот не очень понятно, почему сейчас гораздо чаще пишут на C++ чем на Delphi. По-моему это принципиально достаточно похожие языки, но в C++ многое сложилось исторически как напластование рудиментов, а Delphi всё гораздо красивее. Сейчас мне кажется, что основная причина упадка Delphi – мало библиотек и нет нормальной поддержки Linux и Android/Ios.
N>Всё не так, Делфи исторически предназначался для написания десктопных программ под Windows, в том числе интерфейсов. Из этой области Делфи и С++ выпер .Net + C#. С++ и Делфи мало конкурировали. N>Мне как-то давно (год 2005 или около того) надо было написать диплом для девочки по машинной графике на Делфи. Как раз твоя область: всякое 3D без применения аппаратного ускорения, а пиксели ручками. Это было настоящее мучение, потому что не было шаблонов и аналогов STL. Поначалу я просто не понимал, как на этом языке что-то писать. Грубо говоря, на С++ быстренькой реализовывались классы матриц и векторов, перегрузить арфметические операторы, для коллекций использовать STL. А на Делфи это был ужасный кустарный код, полный велосипедов. Допускаю, что я за неделю не успел нормально изучить язык, но всё равно уверен, что такого компактного и при этом хорошо читаемого кода, как на С++, получить бы мне не удалось принципиально.
Мдя, я тут неделю назад начал осваивать сноуборд, и при прыжках с трамплина почему-то падаю, хотя на горных лыжах умею это уже 20 лет.
Здравствуйте, Khimik, Вы писали:
K>Я тут не понимаю. Почему код на C++ более компактен и лучше читаем?
Потому что вся логика реализуется в более понятных абстракциях. Перегрузка арифметических операций позволяет писать единообразный код для перемножения и сложения матриц, векторов, скаляров. Не надо помнить, какие там функции для этого (типа MatMulToVect(M, V)), а писать просто: M * V.
Самое крутое, что можно в таком стиле писать большие выражения, а они уже будут вычисляться не по частям, а как единое целое. Так умеет Eigen, OpenCV и множество других библиотек.
Здравствуйте, swame, Вы писали:
S>Мдя, я тут неделю назад начал осваивать сноуборд, и при прыжках с трамплина почему-то падаю, хотя на горных лыжах умею это уже 20 лет.
Ещё хуже: сноуборд пришлось предварительно самому выстругать из доски.
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, swame, Вы писали:
S>>Мдя, я тут неделю назад начал осваивать сноуборд, и при прыжках с трамплина почему-то падаю, хотя на горных лыжах умею это уже 20 лет.
N>Ещё хуже: сноуборд пришлось предварительно самому выстругать из доски.
Ну поскольку за неделю блужданий в горах не удалось найти магазин со сноубордами пришлось выстругать из елки.
А может так и надо было по замыслу диплома
Здравствуйте, Nuzhny, Вы писали:
DM>>Я что-то многопоточное да дельфе делал году в 1999-м, все там было. До этого в основном под ДОС писал, поэтому настоящая многопоточность была мне тогда в диковинку.
N>А что там удивительного? Учитывая, что это было лишь обёрткой над winapi'шным CreateThread.
Да просто очень непривычно после ДОСа-то однозадачного.
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, Khimik, Вы писали:
K>>Я тут не понимаю. Почему код на C++ более компактен и лучше читаем?
N>Потому что вся логика реализуется в более понятных абстракциях. Перегрузка арифметических операций позволяет писать единообразный код для перемножения и сложения матриц, векторов, скаляров. Не надо помнить, какие там функции для этого (типа MatMulToVect(M, V)), а писать просто: M * V. N>Самое крутое, что можно в таком стиле писать большие выражения, а они уже будут вычисляться не по частям, а как единое целое. Так умеет Eigen, OpenCV и множество других библиотек.
Ну вот в Delphi XE8 есть рекорды с процедурами и функциями. По-моему, их можно назвать статическими классами.
Скажем, есть у меня рекорд — вектор (три координаты):
type
TVect=record
x,y,z:double;
function VectRad:double;//Длина вектора
function VectRad2:double;//Квадрат длины
function IsNil:boolean;//Равен ли нулю
function MinVect:tvect;//Поменять все знаки
end;
Так что в коде можно писать, например:
CurRadius:=myvector1.VectRad;
На самом деле, я только начал понемногу переписывать старый дерьмокод, который писал без этих возможностей. Для суммы векторов у меня пока есть функция:
function SumVects(vect1,vect2:tvect):tvect;
begin
result.x:=vect1.x+vect2.x;
result.y:=vect1.y+vect2.y;
result.z:=vect1.z+vect2.z;
end;
Когда дойдут руки, заменю её на это:
TVect=record
...
class operator Add(self, othervect:tvect):tvect;
end;
И можно будет в коде писать так:
MyVector3:=MyVector1+MyVector2;
Хотя уже на этом примере видно, что такой подход далеко не всегда применим: скажем, умножать два вектора можно по-разному (скалярное или векторное умножение).
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Khimik, Вы писали:
K> Я как программист скорее непрофессионал, поскольку у меня только один проект — графическая программа для химиков
Кстати а что за программа, если не секрет? Химическое моделирование? Насколько глубоко нужно знать химию чтобы такую написать? Много ли конкурентов?
Я вот думаю (в связи со спорами с Shmj о происхождении жизни, и также с некоторыми высказываниями в соцсетях), может ознакомиться с областью софтостроения в органической химии и биологии...
Нет такого преступления, на которое не пошло бы суверенное родоплеменное быдло ради продления своего бессмысленного рода и распространения своего бессмысленного генома.
K>Хотя уже на этом примере видно, что такой подход далеко не всегда применим: скажем, умножать два вектора можно по-разному (скалярное или векторное умножение).
Согласен, выражение реальной математики в виде перегруженных операторов ограничивается малым числом операторов в программировании, в которые можно отобразить математические символы, которых намного больше. Получается только +, -, частично *, /.
Я писал с использованием перегрузок большую библиотеку для 2D графики, там например нужно четко проводить границу между вычислениями с плавающей точкой и целочисленными вычислениями, это далеко от математических формул.
Все равно получаются цепочки вызовов функций типа такого
Оператор сложения для массивов векторов просто побоялся написать — что он будет означать — объединить эти массивы в один один за другим или попарно сложить в них точки?
Здравствуйте, Khimik, Вы писали:
K> Я знаю действительно мало конкретики про C++, C#, и это наверно действительно моя проблема, надо наверстать. Мне вот не очень понятно, почему сейчас гораздо чаще пишут на C++ чем на Delphi. По-моему это принципиально достаточно похожие языки, но в C++ многое сложилось исторически как напластование рудиментов, а Delphi всё гораздо красивее.
Это у тебя совсем не верное представление о языках и их похожести. На самом деле схема такая:
— Язык Pascal (который древний, без всяких префиксов) с точностью до синтаксических мелочей равен по возможностям языку C. Оба языка почти не развиваются в данное время (хотя C всё же чуть лучше чувствует в этом смысле). При этом C используется очень много где, а про чистый Паскаль я давно не слышал.
— В середине 90-ых язык Borland Pascal (ранее Turbo Pascal) был приблизительно равен по возможностям языку C++ . Но ветка развития Turbo Pascal остановилась в этих самых 90-ых, а C++ активно развивался все эти годы, так что сейчас никакого сравнения естественно быть не может. Однако если бы тогда Borland не слил это направление и его продолжили активно развивать, то возможно это был бы равный C++ конкурент. Потенциал во всяком случае был, но этого не случилось — полностью умерло.
— а вот язык Delphi (в девичестве Object Pascal) относится совсем к другой категории языков (рефлексия, динамика, подсчёт ссылок, свойства и т.п.) и из семейства C-подобных напоминает большего всего убогий Objective-C с небольшой примесью VisualBasic (в смысле RAD возможностей).
Ну а C# это уже третья категория языков (виртуальная машина, байт-код, сборщик мусора и т.д и т.п.), который является копией Java, а в семействе языков Pascal никого похожего нет (портирование Паскаля под JVM/.Net естественно не считаем — это вообще другие языки выходят).
Так вот эти три категории языков принципиально разные (причём я совсем не про синтаксис говорю!) и применяются для совсем разных целей.
K>Сейчас мне кажется, что основная причина упадка Delphi – мало библиотек и нет нормальной поддержки Linux и Android/Ios.
Основная причина упадка Delphi в том, что эта платформа была хороша только для очень узкой категории ПО: только десктоп, только винда, желательно что-нибудь с кучей формочек и без требования производительности. Сейчас же сами десктопные приложения в упадке на массовом рынке и используется преимущественно профессионалами (всяческие CAD'ы и т.п., требующее производительность и 3D графику, причём ещё желательно кроссплатформенно, т.е. опять же не для Delphi). А основной рынок переехал в веб и на мобилки.
K> В последней теме есть ссылки на бенчмарки Delphi vs C++, и написали что сейчас вроде по скорости Delphi не должен ему уступать.
Здравствуйте, D. Mon, Вы писали:
DM>Я что-то многопоточное да дельфе делал году в 1999-м, все там было. До этого в основном под ДОС писал, поэтому настоящая многопоточность была мне тогда в диковинку.
Дело не просто в многопоточности. А примитивы синхронизации, какие то гарантии при конкуррентном обращении к области памяти, всякие атомарные операции, барьеры и тому подобное. Плюс легкое распараллеливание, всякие пулы потоков и тому подобное. Или это все ручками нужно лисапедить по прежнему?
Здравствуйте, anonymouse2, Вы писали:
A>Кстати а что за программа, если не секрет? Химическое моделирование? Насколько глубоко нужно знать химию чтобы такую написать? Много ли конкурентов? A>Я вот думаю (в связи со спорами с Shmj о происхождении жизни, и также с некоторыми высказываниями в соцсетях), может ознакомиться с областью софтостроения в органической химии и биологии...
anonymouse2, а давайте обмен — услуга за услугу? Найдите мне на rsdn пост мыщъх-а, где он писал, что в США серьёзные компании переходят с C++ на C. Был же вроде такой пост...
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, D. Mon, Вы писали:
DM>>Я что-то многопоточное да дельфе делал году в 1999-м, все там было. До этого в основном под ДОС писал, поэтому настоящая многопоточность была мне тогда в диковинку. E>Дело не просто в многопоточности. А примитивы синхронизации, какие то гарантии при конкуррентном обращении к области памяти, всякие атомарные операции, барьеры и тому подобное. Плюс легкое распараллеливание, всякие пулы потоков и тому подобное. Или это все ручками нужно лисапедить по прежнему?
async/await там нет и близко. Есть threadvar. Пула потоков еще пару лет назад не было. Есть сторонние реализации, но на то они и сторонние, что качество и вероятность развития не известны.
Реально Делфи пригоден только для разработки десктопного софта под виндовс. Но эта ниша полностью перекрывается C#+WiunForms/WPF.
Здравствуйте, Khimik, Вы писали:
K>Найдите мне на rsdn пост мыщъх-а, где он писал, что в США серьёзные компании переходят с C++ на C. Был же вроде такой пост...
Он чего только не писал, нет смысла доверять всему. Про С/С++ было например здесь
Здравствуйте, Khimik, Вы писали:
K>На самом деле, я только начал понемногу переписывать старый дерьмокод, который писал без этих возможностей. Для суммы векторов у меня пока есть функция:
K>function SumVects(vect1,vect2:tvect):tvect; K>begin K>result.x:=vect1.x+vect2.x; K>result.y:=vect1.y+vect2.y; K>result.z:=vect1.z+vect2.z; K>end;
K>Когда дойдут руки, заменю её на это:
K>TVect=record K>... K>class operator Add(self, othervect:tvect):tvect; K>end;
K>И можно будет в коде писать так:
K>MyVector3:=MyVector1+MyVector2;
Да! Как раз так и надо писать.
Но С++ всё таки умеет больше, например, expression templates в том же Eigen может оптимизировать матричные операции на этапе компиляции, объединяя их в одно выражение. Это позволяет писать математическую логику очень оптимально и при этом очень читабельно.
K>Хотя уже на этом примере видно, что такой подход далеко не всегда применим: скажем, умножать два вектора можно по-разному (скалярное или векторное умножение).
Умножать можно только одним способом, рассматривая вектора, как одномерные матрицы. Векторное и скалярное произведения уже не должны кодироваться арифметическими операциями.