Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Delphi, QIP и быдлокодерство

Автор Алексей Гринь, октября 26, 2009, 22:36

0 Пользователи и 1 гость просматривают эту тему.

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

myst

Цитата: Bhudh от ноября  1, 2009, 18:17
Зато Жабе зачот.
Корка в том, что буквально несколькими сообщениями ранее упоминали паскальную неопределённость. :) Гораздо более неприятную.

Алексей Гринь

Цитата: arseniiv от ноября  1, 2009, 15:24
Кстати, это сказки, что в Pascal (а уже в нём было) and и or сравнение производят до конца. В "0 and A" A вычисляться не будет.
А если я хочу именно a | b, а не a || b? Да-да, я быдлокодер, и у меня куча side-effects! (нопремер)

В Басике же ввели AndAlso и OrElse (в придачу к And и Or).

Цитата: Python от ноября  1, 2009, 16:00
С-шный switch-case, благополучно перекочевавший во все С-клоны - не что иное, как пережиток эпохи царствования оператора goto.
Вы так говорите, как будто goto — это что-то плохое.

Цитироватьсинтаксис описания переменных очень неудобен. Что такое int *a[10][10] - это двумерный массив указателей, массив указателей на массивы, указатель на двумерный массив?
Ну это мелочи и частности. В остальном же очень удобно и лаконично:
  int i; /* 6 знаков */

вместо
  var i: Integer; /* 15 знаков... */

Вот спасибо, из-за случая непоняток с определением двумерного массива указателей на целое (который встречается < 1%) не хочется мне раздувать код и пальцы в 2 раза в ущерб всему остальному (а это будет >90% случаев). Дельфологика такая дельфологика...

И вообще чего вы хотели от Си, там типизация сделана тупо для более простой выборки нужного байта по нужному смещению.
Я бы вообще массивы отменил, только голая pointer arithmetic! :)

Цитата: Python от ноября  1, 2009, 16:27
P.S. Если уж зашла речь о case, наиболее продвинутым по функциональности является select-case в структурированных бейсиках (Quick BASIC, TurboBasic, VBA и под.), предусматривающий диапазоны, идущие в бесконечность (case is>100). Чуть менее продвинуты паскаль и делфи: есть дипазоны в пределах конкретных значений. В С-подобном синтаксисе диапазон можно задать лишь путем перечисления всех значений, входящих в диапазон.
Ну это да, фиговенько. Но на производительности несказыввается, для нелитеральных значений джамп-тейбл вроде как не сделать :'(

Цитата: arseniiv от ноября  1, 2009, 16:48
Case в Delphi, кстати, ещё и оптимизируется, и некоторые операторы case работают быстрее аналогичной системы if.
Да в Си с давних пор так — через джамптейблы делается. В Си вообще любят всякие хитроумные бинарные оптимизации, дельфисты тут в хвосте тянутся.

Цитата: Python от ноября  1, 2009, 16:00
а переход на метку с последующим выходом через break
Брейк вообще тупой — нет возможности нормально выходить из вложенных циклов (в Жабе пофиксили)

Цитата: arseniiv от ноября  1, 2009, 16:48
этот страшный typedef, совершенно нечайно разобрался, как им пользоваться.
А что с ним не так?
Это хорошая, годная вещь.

Цитата: Python от ноября  1, 2009, 16:00
В общем, придраться можно много к чему.
Самый смешной синтаксис — у богомерзкого с++.
Вспоминается из перлов:

Страуструп был так умён, что не смог научить свой токенайзер отличать >> от > >, в итоге вложенные темплейты надо писать так:
   List<List<int> > (с обязательным пробелом! В Сишарпе пофиксили)

Или вот например:

Point p(10, 20); /* это создание в стеке точки */
Point p();          /* это вовсе не создание в стеке точки с нулём параметров */
Point p;            /* а вот это уже оно */

肏! Τίς πέπορδε;

arseniiv

Цитата: Алексей Гринь от ноября  1, 2009, 19:00
А если я хочу именно a | b
Тогда берёте и окружаете ваше условие малюсенькими директивами компилятора, и всё готово - опция настраиваемая. Или можете для всего проекта или модулей включать, как душе угодно! (А если вам побитное нужно - оно тоже, конечно, есть, ну вы сами, наверно, знаете.)

Цитата: Алексей Гринь от ноября  1, 2009, 19:00
В Басике же ввели AndAlso и OrElse (в придачу к And и Or)
Угадайте, чем мне больше всего не нравится Барсик? Громоздкостью конструкций! (А ещё ужасным ООП, но то не касается .NET, в который и добавили эти AndAlso, OrElse и прочую кутерьму. Хотя к .NET'у там переделали ужаснейший оператор Dim, но и в новом варианте он всё же слишком - зачем нужно это дурацкое As!)

Цитата: Алексей Гринь от ноября  1, 2009, 19:00
Я бы вообще массивы отменил, только голая pointer arithmetic! :)
Ну так их там и так нет (в C): a ≡ *(a + i) ≡ i[a] ≡ [a]i ≡ a

Цитата: Алексей Гринь от ноября  1, 2009, 19:00
Это хорошая, годная вещь.
Согласен, но если не касаться его синтаксиса (как и синтаксиса указателей на функции с различнейшими параметрами вроде других указателей на указатель на функцию)

myst

Цитата: arseniiv от ноября  1, 2009, 19:33
Согласен, но если не касаться его синтаксиса (как и синтаксиса указателей на функции с различнейшими параметрами вроде других указателей на указатель на функцию)
Не понял мысль. :what:

arseniiv



Python

Цитата: Алексей Гринь от ноября  1, 2009, 19:00
Вы так говорите, как будто goto — это что-то плохое.
Всю жизнь меня учат, что goto - это что-то плохое. В Џаве от него даже избавились (правда, переложив все его функции на break с меткой :) )
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

arseniiv


arseniiv

Цитата: Python от ноября  1, 2009, 20:34
меня учат, что goto - это что-то плохое
Надо сделать замену в их учениях на "неумеренность - это что-то плохое" :)

myst

Цитата: arseniiv от ноября  1, 2009, 20:34
А вот определите тип посложнее...
Делать это в несколько этапов не позволяет вера или ненависть к читателю? ;)

myst

C плох тем, что ни рыба ни мясо (недостаточно высокоуровневый и недостаточно низкоуровневый). От того и наслаждаемся сегфолтами, эксплойтами на переполнение стека etc., и в то же время невозможно определить целый тип с нужным порядком байт, например.

Python

Цитата: Алексей Гринь от ноября  1, 2009, 19:00
Вот спасибо, из-за случая непоняток с определением двумерного массива указателей на целое (который встречается < 1%) не хочется мне раздувать код и пальцы в 2 раза в ущерб всему остальному (а это будет >90% случаев). Дельфологика такая дельфологика...
Пусть массив будет одномерным - все равно есть риск разночтения, если не помнишь правила описания на все 100%. Синтаксис неочевиден. В бейсике можно вообще описаний не делать - экономия знаков еще больше получится.

Все было бы намного проще, будь оператор указателя не префиксным, а постфиксным:
int a[10][10]@;
int b[10]@[10];
int c@[10][10];
int i;

a[1][0] = &i;
a[1][0]@ = 13;
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Алексей Гринь

Цитата: arseniiv от ноября  1, 2009, 19:33
Согласен, но если не касаться его синтаксиса (как и синтаксиса указателей на функции с различнейшими параметрами вроде других указателей на указатель на функцию)
Да фиг знает, это вам толкьо если при взгляде после долгих лет любви дельфи кажется сложным.

Ничего сложного в каком-нить typedef void(*TimerProc)(Timer* self, long elapsed); ну не вижу я... Я этот синтаксис настолько полюбил, что указатели на функции совсем не тайпдефю, так и оставляю внутри сигнатуры метода целиком (если, конечно, аргументов не очень много), вроде такого:

AGTimer* AGTimer_Create(AGUint interval, AGVoid(*onTick)(AGTimer* self));

Ну ясно же. Если параметров слишком много — это архитектура приложения скорей всего кривая, а не Си.

Цитата: Python от ноября  1, 2009, 20:53
Пусть массив будет одномерным - все равно есть риск разночтения, если не помнишь правила описания на все 100%. Синтаксис неочевиден
Не знаю, зачем может пригодиться массив указателей на целые числа (целое число легче сразу копировать, нежели на него зачем-то ссылаться)... Ситуация надуманная, по-моему.

Цитата: arseniiv от ноября  1, 2009, 19:33
Ну так их там и так нет (в C): a ≡ *(a + i) ≡ i[a] ≡ [a]i ≡ a
Но ведь
   char buf[128];

совсем не то же самое, что и
   char* buff;

На деле отличия от buff = malloc(sizeof(char) * 128) тут мало, единственное, что буфер создаётся не на куче, а in-place: в стеке или как часть структуры... Т.е. можно было бы, по сути, обойти чем-нибудь типа buff = stackalloc(128). Но си лаконичнее, чем мой перфекционизм :)

Цитата: myst от ноября  1, 2009, 20:52
недостаточно низкоуровневый
Шо сие значит?

Цитата: arseniiv от ноября  1, 2009, 19:33
Согласен, но если не касаться его синтаксиса (как и синтаксиса указателей на функции с различнейшими параметрами вроде других указателей на указатель на функцию)
Если вы так боитесь рекурсии, не программируйте вообще :)

Цитата: Python от ноября  1, 2009, 20:34
Всю жизнь меня учат, что goto - это что-то плохое.
Ой, ну так же и с лекарствами: одна таблетка — лечит, двадцать сразу — калечат.
goto хорош в некоторых нетривиальных случаях. Намного забавнее, когда подобные жабисты вместо одного возможного простого и лаконичного goto лепят огромные бессмысленные if-then-ветления с кучей флагов, которые вырвиглаз и ужас (зато goto не употреблено — мы молодцы).

Цитата: arseniiv от ноября  1, 2009, 19:56
typedef int (*Strcomp)(char *, char *);
NO WAY

А вообще, как я заметил, большую любовь к поцкакалю и дельфям испытывают те, кто им баловался в детстве: в школе или в вузе (как первый ЯП, нопремер). Привитая, так скать, с младых ногтей любовь. Меня это как-то обошло стороной, и с басика я сразу перешёл на си. Посмотрел на эту дельфю, поплевался, пошёл дальше. Никакой психоэмоциональной привязки (от этого проги и сегфолтят) к ним нету, и слава богу. Ничего личного, только холодный расчёт :)
肏! Τίς πέπορδε;


Python

Цитата: Алексей Гринь от ноября  1, 2009, 22:02
Не знаю, зачем может пригодиться массив указателей на целые числа
А если не целые числа, а структуры или еще что-то крупногабаритное?
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

myst

Цитата: Алексей Гринь от ноября  1, 2009, 22:02
goto хорош в некоторых нетривиальных случаях.
Ты прав, но теговый break всё равно бы не помешал. :)

myst

Цитата: Алексей Гринь от ноября  1, 2009, 22:02
А вообще, как я заметил, большую любовь к поцкакалю и дельфям испытывают те, кто им баловался в детстве: в школе или в вузе (как первый ЯП, нопремер).
Мне это не помогло. ;)

Алексей Гринь

Цитата: myst от ноября  1, 2009, 22:27
Цитироватьbuff = malloc(sizeof(char) * 128)
Цитата: Алексей Гринь от Сегодня в 00:02
Цитироватьsizeof(char)
:o
Не понял?

Цитата: Python от ноября  1, 2009, 22:28
А если не целые числа, а структуры или еще что-то крупногабаритное?
У крупногабаритного и подход другой. Уж точно не статические массивы...

Цитата: myst от ноября  1, 2009, 22:27
ЦитироватьШо сие значит?
Именно сие и значит.
Не понял.

Цитата: myst от ноября  1, 2009, 22:31
ЦитироватьА вообще, как я заметил, большую любовь к поцкакалю и дельфям испытывают те, кто им баловался в детстве: в школе или в вузе (как первый ЯП, нопремер).
Мне это не помогло. ;)
А я так и не понял твоей позиции. Ненависть?
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от ноября  1, 2009, 22:32
Не понял?
Просто единицу-то низзя было написать? ;)

Цитата: Алексей Гринь от ноября  1, 2009, 22:32
А я так и не понял твоей позиции. Ненависть?
Я не испытываю чувств к языкам программирования. :)

myst

Цитата: Алексей Гринь от ноября  1, 2009, 22:32
Не понял.
Например, описывая структуру, нельзя управлять выравниванием её полей, про порядок байт многобайтовых числовых типов я уже говорил.

Алексей Гринь

Цитата: myst от ноября  1, 2009, 22:35
Просто единицу-то низзя было написать? ;)
В Plain C размер чара вообще-то равен 4 байтам (точнее литерал) :) Вообще писать прямые значения это не труъ и не кроссплатформенно. Авось на каких платформах (особливо, скажем, во встроенных) какие-то свои правила и ограничения. Не надо так. Да и красивее так: точно видим, что это 128 чаров, а не 128 каких-то непонятных четырьбайтов (или однобайтов — поди вот разберись).
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от ноября  1, 2009, 22:38
В Plain C размер чара вообще-то равен 4 байтам :)
Ты это аккуратней, я чуть семечками не подавился. :negozhe:

Цитата: Алексей Гринь от ноября  1, 2009, 22:38
Вообще писать прямые значения это не труъ и не кроссплатформенно.
sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1 по определению. См. стандарт.

Алексей Гринь

Цитата: myst от ноября  1, 2009, 22:42
ЦитироватьВ Plain C размер чара вообще-то равен 4 байтам :)
Ты это аккуратней, я чуть семечками не подавился. :negozhe:
Я сначала пишу, потом думаю. Поэтому у меня почти у каждого поста правки :)

Цитата: myst от ноября  1, 2009, 22:42
ЦитироватьВообще писать прямые значения это не труъ и не кроссплатформенно.
sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1 по определению. См. стандарт.
Ну, блин, можно и функцию назвать, допустим, не GetRelativePosition, а что-нибудь типа getrp. И энумерации не использовать, а сразу везде 1, 2, 3 пихать. Компутеру-то разницы нет, но читаемость человекам разная. Короче, sizeof(char) * n точно указывает, что нам нужно n char'ов, а не байтов или ещё чего натайпдефенного. Вот у таких умных, которые хотят сокращать там, где не надо, потом всякие сегфолты и хип-коррапшны вылазят. А у меня они раз в год вылазят.
肏! Τίς πέπορδε;

Алексей Гринь

У меня ещё такая паранойя из-за разницы в ширине wchar_t на разных платформах, а я перфекционист, поэтому если правило применимо к wchar_t, то я его для симметрии применяю и для char...
肏! Τίς πέπορδε;

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр