Чего мне не хватает в FreePascal

Любые обсуждения, не нарушающие правил форума.

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

Ответить
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Чего мне не хватает в FreePascal

Сообщение vada »

Общество пользователей Free Pascal весьма многочисленно. Кто-то командой делает проект, кто-то фрилансер одиночка, кто-то работает на дядю...
Мне кажется что практически всем чего-то не хватает в СИНТАКСИСЕ языка. Хочу поговорить имено о базовом синтаксисе. Библиотеки это немного другая облость.

Мне вот, на пример, ОЧЕНЬ не хватает нормальных множеств. Множество ограниченное байтом уже как-то морально устарело. Простое дело UTF символы уже мимо SETов. А так красиво можно было бы сделать с SETами.
А еще мне очень не хватает хитрого IF-а. Вот такого:
A := IF <условие> : <действие при TRUE> : <действие при FALSE>;
Мне скажут, так напиши функцию

Код: Выделить всё

function IF_R(A: Boolean; Result1, Result2: Real): Real;

Кстати, я так и делаю. Но вот какая штуковина получается

Код: Выделить всё

A := IF_R(abs(R)>0.0001, C/R, 0);

Если R будет равно нулю, я полюбасу деление на ноль получу. :)

Кто еще на что пожалуется?
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Именованных массивов в стиле PHP иногда очень не хватает. И не всяких левых библиотек, реализующих подобный функционал, а именно нативной поддержки.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Nik писал(а):Именованных массивов в стиле PHP иногда очень не хватает.

Хэшей что ли?
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Именованных массивов в стиле PHP иногда очень не хватает.


Не все пых-пых знаю. Можно поподробнее. Может и мне надо :)
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Это массивы, к элементами которых можно обращаться не по индексам (как в Pascal'е), а по именам. Как-то так, например:

Код: Выделить всё

var
 peoples: array;

begin
 array['name']:='Иван'
 array['age']:='12';


PS. Название немного попутал - не именованный, а ассоциативный это правильно называется.
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

Nik писал(а):Именованных массивов в стиле PHP иногда очень не хватает

Код: Выделить всё

var
peoples: array;

begin
array['name']:='Иван'
array['age']:='12';



Хм... Ну не знаю, когда встает такая задача я все же делаю через массив записей (Record). Да и приходится бегать через индекс... Так что если задача именно стоит в том, чтобы не пробегать массив вручную, в поисках индекса в записи которой поле name='Иван'. и уже менять его возраст.. То конечно Вы правы. (хотя как я понимаю это все равно сведется к пробеганию всего массива, но уже это будет делать сам компилятор) и пускай делал бы тоже самое, просто в коде это выглядело бы более компактно и более лаконично... ИМХО :D

Вот что мне нравится из всего языка С++ так это его конструкция For, в которой можно задать функцию приращения аргумента... Да я знаю что это можно реализовать в цикле While но иногда For был бы более красив :)...

Хотя весь язык С++ меня реально убивает, Вот скажем скобочки {}вместо begin end; реально раздражают ну не знаю вот меня они прям убивают на большом мониторе их вообще можно проглядеть а начать читать другой блок кода :(... (кто то скажет увеличь шрифт :mrgreen: :mrgreen: )
Или скажем Конструкция сравнения адресов на (C++) :

Код: Выделить всё

&A && &B

и тоже самое на Паскале:

Код: Выделить всё

@A and @B

Ну просто прелесть :D Даже собачка (@) Созвучна с Адрес
Такое чувство что у Ритчи а потом и Страуструпа не хватило фантазии и они использовали ограниченное количество значков…

А так меня Free Pascal устраивает полностью. Хоть возможно мне и придется на будущей работе программировать только под Си и скорее всего Асме… Free Pascal мой любимый язык.
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Nik писал(а):Это массивы, к элементами которых можно обращаться не по индексам (как в Pascal'е), а по именам.


А! Понятно. Это Hashtable в JAVA. Удобная штука. В JAVA работает чрезвычайно быстро.
Вернее даже не Hashtable, а более интересная штука.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Nik писал(а):array['name']:='Иван'
array['age']:='12';

"Есть такая партия!" (С) В.И. Ленин. :D
Именно таким образом организовано общение в TStringList. ;)
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

Vadim: +1, подтверждаю
:!: мне не хватает полноценной поддержки шаблонов. Хотелось бы, чтобы они были попродвинутее.
:!: алсо, хотелось бы ещё макроподстановку, чтобы как в С++ можно было делать

Код: Выделить всё

#define sum(a, b) (a)+(b)

Впрочем, если бы хотя-бы одно из перечисленного было бы реализовано, то я был бы уже очень доволен. Ибо, если будут полноценные шаблоны, то макроподстановку можно фтопку отправлять
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

"Есть такая партия!" (С) В.И. Ленин.
Именно таким образом организовано общение в TStringList.

Хм... Можно примерчик в студию? Что-то не заметил ничего похожего в TStringList.
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

Ну наверное типо про это имеется ввиду...

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var L:TStringList;
    B,B2:TButton;
begin
    L:=TStringList.Create;
    B:=TButton.Create(Self);
    B.Caption:='Привет';
    B.Tag:=1;

    B2:=TButton.Create(Self);
    B2.Caption:='Привет2';
    B2.Tag:=2;

    L.AddObject('Button',B);
    L.AddObject('Button2',B2);

    L.Values['Button']:='123';

    Caption:=L.Values['Button']; //Считываем значение Value, строковое, согласно Имени ='Button'
                                              //Это короче идет еще со TStrings там короче хранится Name + разделитель + Value - все в одной строке.

    //Ну и через объекты, поиск по имени
    Caption:=Caption+'  '+TButton(L.Objects[L.IndexOf('Button')]).Caption;
    Caption:=Caption+'  '+TButton(L.Objects[L.IndexOf('Button2')]).Caption;

    B2.Free;
    B.Free;
    L.Free;
end;
Аватара пользователя
evd
новенький
Сообщения: 21
Зарегистрирован: 13.09.2009 09:42:28
Откуда: Вологда
Контактная информация:

Сообщение evd »

Скорее всего про это

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var
   SL: TStringList;
begin
     SL:=TStringList.Create;
     SL.Values['Test1']:='Value1';
     SL.Values['Test2']:='Value2';

end;
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Скорее всего про это

Вот про эту фишку не знал :( Век живи - век учись :) Хотя массивы всё равно удобнее - там можно не только строки хранить (без преобразования типов).
devels
постоялец
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Сообщение devels »

Так люди, TStringList это вам не хеш-таблица, и скорость поиска в нем в 1000 раз медленнее чем в хеш таблице, для начала нужно собраться и реализовать быструю хеш-таблицу, то что есть в fpc - это быстрая реализация конечно, но все равно ее скорость работы нужно увеличить в 2-3 раза. Поэтому считаю что встроенного типа для хеш-таблиц не должно быть, для чего созданы классы и объекты?

Добавлено спустя 2 минуты 25 секунд:
vada писал(а):Общество пользователей Free Pascal весьма многочисленно. Кто-то командой делает проект, кто-то фрилансер одиночка, кто-то работает на дядю...
Мне кажется что практически всем чего-то не хватает в СИНТАКСИСЕ языка. Хочу поговорить имено о базовом синтаксисе. Библиотеки это немного другая облость.

Мне вот, на пример, ОЧЕНЬ не хватает нормальных множеств. Множество ограниченное байтом уже как-то морально устарело. Простое дело UTF символы уже мимо SETов. А так красиво можно было бы сделать с SETами.
А еще мне очень не хватает хитрого IF-а. Вот такого:
A := IF <условие> : <действие при TRUE> : <действие при FALSE>;
Мне скажут, так напиши функцию

Код: Выделить всё

function IF_R(A: Boolean; Result1, Result2: Real): Real;

Кстати, я так и делаю. Но вот какая штуковина получается

Код: Выделить всё

A := IF_R(abs(R)>0.0001, C/R, 0);

Если R будет равно нулю, я полюбасу деление на ноль получу. :)

Кто еще на что пожалуется?


Это называется тернарный оператор, присутствует в си, X = True ? 0 : 1;

В ruby сделано так как вы придумали, через if.
Аватара пользователя
*vmr
постоялец
Сообщения: 168
Зарегистрирован: 08.01.2007 00:46:07
Откуда: Киев
Контактная информация:

Сообщение *vmr »

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

Та ну нафиг, нафик. :)
Не хватало еще в нативную поддержку пихать то, что должно быть библиотекой.
Сами используем собственный класс с перферансом и поэтессами, и очень довольны. И не нужно никаких нативных — там не будет перферанса :D

Код: Выделить всё

var
  dl: TDataList;
begin
   ...
  dl['foo'] := 'bar';
  dl.Int['foobar'] := 234;
  if dl.Bool['foobar'] then Caption := dl.WideStr['foo'];
end;
Ответить