Author Topic: Delphi, QIP и быдлокодерство  (Read 29293 times)

0 Members and 1 Guest are viewing this topic.

Offline Bhudh

  • Posts: 54841
  • Gender: Male
  • aka 蝎
    • Сайты по языкознанию
Зато Жабе зачот.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Offline myst

  • Posts: 35581
Зато Жабе зачот.
Корка в том, что буквально несколькими сообщениями ранее упоминали паскальную неопределённость. :) Гораздо более неприятную.

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

  • Blogger
  • *
  • Posts: 24117
  • Gender: Male
Кстати, это сказки, что в Pascal (а уже в нём было) and и or сравнение производят до конца. В "0 and A" A вычисляться не будет.
А если я хочу именно a | b, а не a || b? Да-да, я быдлокодер, и у меня куча side-effects! (нопремер)

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

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

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

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

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

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

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

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

а переход на метку с последующим выходом через break
Брейк вообще тупой — нет возможности нормально выходить из вложенных циклов (в Жабе пофиксили)

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

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

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

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

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

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

Offline arseniiv

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

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

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

Это хорошая, годная вещь.
Согласен, но если не касаться его синтаксиса (как и синтаксиса указателей на функции с различнейшими параметрами вроде других указателей на указатель на функцию)

Offline myst

  • Posts: 35581
Согласен, но если не касаться его синтаксиса (как и синтаксиса указателей на функции с различнейшими параметрами вроде других указателей на указатель на функцию)
Не понял мысль. :what:

Offline arseniiv

  • Posts: 14931
    • ::
Code: [Select]
typedef int (*Strcomp)(char *, char *);Ну страшно же!

Offline myst

  • Posts: 35581
Ну страшно же!
Что же здесь страшного?

Offline Python

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

Offline arseniiv

  • Posts: 14931
    • ::
Что же здесь страшного?
А вот определите тип посложнее...

меня учат, что goto - это что-то плохое
Надо сделать замену в их учениях на "неумеренность - это что-то плохое" :)

Offline myst

  • Posts: 35581
А вот определите тип посложнее...
Делать это в несколько этапов не позволяет вера или ненависть к читателю? ;)

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

Offline Python

  • Posts: 39678
  • Gender: Male
  • Aluarium agent
Вот спасибо, из-за случая непоняток с определением двумерного массива указателей на целое (который встречается < 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

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

  • Blogger
  • *
  • Posts: 24117
  • Gender: Male
Согласен, но если не касаться его синтаксиса (как и синтаксиса указателей на функции с различнейшими параметрами вроде других указателей на указатель на функцию)
Да фиг знает, это вам толкьо если при взгляде после долгих лет любви дельфи кажется сложным.

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

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

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

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

Ну так их там и так нет (в C): a ≡ *(a + i) ≡ i[a] ≡ [a]i ≡ a
Но ведь
   char buf[128];

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

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

недостаточно низкоуровневый
Шо сие значит?

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

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

typedef int (*Strcomp)(char *, char *);
NO WAY

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


Offline Python

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

Offline myst

  • Posts: 35581
goto хорош в некоторых нетривиальных случаях.
Ты прав, но теговый break всё равно бы не помешал. :)

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

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

  • Blogger
  • *
  • Posts: 24117
  • Gender: Male
Quote
buff = malloc(sizeof(char) * 128)
Цитата: Алексей Гринь от Сегодня в 00:02
Quote
sizeof(char)
:o
Не понял?

А если не целые числа, а структуры или еще что-то крупногабаритное?
У крупногабаритного и подход другой. Уж точно не статические массивы...

Quote
Шо сие значит?
Именно сие и значит.
Не понял.

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

Offline myst

  • Posts: 35581
Не понял?
Просто единицу-то низзя было написать? ;)

А я так и не понял твоей позиции. Ненависть?
Я не испытываю чувств к языкам программирования. :)

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

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

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

Offline myst

  • Posts: 35581
В Plain C размер чара вообще-то равен 4 байтам :)
Ты это аккуратней, я чуть семечками не подавился. :negozhe:

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

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

  • Blogger
  • *
  • Posts: 24117
  • Gender: Male
Quote
В Plain C размер чара вообще-то равен 4 байтам :)
Ты это аккуратней, я чуть семечками не подавился. :negozhe:
Я сначала пишу, потом думаю. Поэтому у меня почти у каждого поста правки :)

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

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

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Note: this post will not display until it's been approved by a moderator.
Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
√49 Напишите ответ строчными буквами:
«Сто одёжек, все без застёжек» — что это?: