Форум: "Прочее";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
ВнизЕсть интересная задача Найти похожие ветки
← →
oxffff © (2011-02-01 16:16) [0]Продолжаю пилить свой язык JAR и смотреть вперед.
Уже есть компилятор командной строки, правда он весит 2,6 МБ неупакованный(но в нем есть части которые нужно разнести, вообщем должен быть меньше). :)
Сейчас есть генерация кода для .NET.
Есть задача использовать LLVM в качестве генерации кода на x86 и ряд других платформ.
Кому интересно заняться этой задачей welcome.
Есть задачи писать документацию и организовать сайт.
Свое внимание я бы хотел сосредоточить на front end и выразительной части языка.
Собственно можно поставить дополнительную задачу,организовать совместимость с текущими версиями Delphi на x86 насколько это возможно. Знаю что на этом форуме есть большое количество светлых и умных голов.
Для чего это все: по большей части это мое хобби и огромное желание недеградировать на работе. Возможно если удалось бы поднять проект, то из него можно извлекать выгоду ввиде денег и хорошего портфолио.
Спасибо.
P.S.
Сегодня допилил вывод типов. Например
program myprogram;
Tproc=function (a:integer):integer;
ProcEx:Tproc;
function pf<T>(a:T):integer;
begin
result:=1;
end;
begin
ProcEx:=pf;
write ProcEx(1);
end
← →
oxffff © (2011-02-01 16:26) [1]Я смогу привлечь студентов к части работ летом. Есть договоренность с зав. кафедрами на летную практику. Сейчас курсовые уже раздали.
А в качестве дипломного проекта не хочется подставлять студентов нашего вуза. Потянут единицы, но не факт что приемная коммисия оценит. Им нужны инновации в программах. Вообщем клюют на всякие рюшечки.
← →
KilkennyCat © (2011-02-01 16:34) [2]а где можно глянуть вообще все?
← →
oxffff © (2011-02-01 16:41) [3]
> KilkennyCat © (01.02.11 16:34) [2]
> а где можно глянуть вообще все?
http://santonov.blogspot.com/
← →
Кто б сомневался © (2011-02-01 16:41) [4]
> Продолжаю пилить свой язык JAR и смотреть вперед.
А зачем он нужен? Или это просто для практики?
← →
Кто б сомневался © (2011-02-01 16:43) [5]Имхо если есть свободное время, то не помешала бы помощь в KOL-CE для WinCE.
Это дело.
← →
oxffff © (2011-02-01 16:44) [6]
> Кто б сомневался © (01.02.11 16:41) [4]
>
> > Продолжаю пилить свой язык JAR и смотреть вперед.
>
>
> А зачем он нужен? Или это просто для практики?
1.Хобби
2. Возможности языка:
а) вывод типов в Delphi ограничен. В YAR он более продвинут.
б) хотелось бы generics либо адаптировать, либо сделать иную реализацию. с прямой поддержкой операторов.
в)....
← →
Кто б сомневался © (2011-02-01 16:46) [7]
> вывод типов в Delphi ограничен. В YAR он более продвинут.
Ну или присоеденится к разработке Free Pascal\Lazarus и там это реализовать (может это и есть там).
← →
Кто б сомневался © (2011-02-01 16:48) [8]Согласитесь, Вашими разработками (Free Pascal\Lazarus\KOL-CE) будут пользоваться тысячи - и это действительно нужно и полезно.
← →
oxffff © (2011-02-01 16:53) [9]
> Кто б сомневался © (01.02.11 16:48) [8]
> Согласитесь, Вашими разработками (Free Pascal\Lazarus\KOL-
> CE) будут пользоваться тысячи - и это действительно нужно
> и полезно.
Думаете дадут просто так переписать парсер Free Pascal для некоторых вещей например LINQ?
← →
oxffff © (2011-02-01 16:59) [10]Код для примера на MSIL
.assembly extern mscorlib { auto }
.assembly project {}
.field public static native int ProcEx
.method public static int32 pf<T>(!!T a) cil managed
{
ldc.i4 1
ret
}
.method public static void main() cil managed
{
.entrypoint
ldftn int32 pf<int32>(!!0 a)
stsfld native int ProcEx
ldc.i4 1
ldsfld native int ProcEx
calli int32 (int32 a)
call void [mscorlib]System.Console::Write(int32)
ret
}
← →
Кто б сомневался © (2011-02-01 17:18) [11]
> Думаете дадут просто так переписать парсер Free Pascal для
> некоторых вещей например LINQ?
Вы можете сделать расширенный синтаксис, который будет работать от директив.
А так вы напишите свой компилятор и язык, потратите 15 лет и он будет валяться у вас в архиве. Какой смысл? Один человек все равно не сможет его развивать и поддерживать. Это огромнейший проект.
← →
Sergey Masloff (2011-02-01 17:36) [12]Кто б сомневался © (01.02.11 17:18) [11]
А на фиг его (язык самописный) развивать - человек развивает свои скилы (и правильно делает) совсем необязательно это делать в рамках проекта для практического применения (и даже наоборот - творчества больше при писании "в стол")
← →
Кто б сомневался © (2011-02-01 18:21) [13]
> (и даже наоборот - творчества больше при писании "в стол")
В большом и сложном проекте, в котором работают десятки людей, опыта получишь гораздо больше, чем если разрабатываешь его в одиночку.
Всегда можно обсудить с коллегами как лучше.
← →
И. Павел © (2011-02-01 18:37) [14]
> А зачем он нужен? Или это просто для практики?
Многие серьезные вещи в ИТ начинали делать в гаражах и на коленке и, скорее всего, без расчета на мегаприбыли а ради удовольствия. Поживем увидим :)
← →
Кто б сомневался © (2011-02-01 18:56) [15]
> Многие серьезные вещи в ИТ начинали делать в гаражах и на
> коленке
И многие серьезные вещи так и остались в гаражах. Еденицы только увидели свет.
← →
oxffff © (2011-02-01 19:58) [16]
> Кто б сомневался © (01.02.11 17:18) [11]
>
> > Думаете дадут просто так переписать парсер Free Pascal
> для
> > некоторых вещей например LINQ?
>
>
> Вы можете сделать расширенный синтаксис, который будет работать
> от директив.
> А так вы напишите свой компилятор и язык, потратите 15 лет
> и он будет валяться у вас в архиве. Какой смысл? Один человек
> все равно не сможет его развивать и поддерживать. Это огромнейший
> проект.
Я много не прошу. Собственно нужно из моего промежуточного представления перевести в представление LLVM.
Backend для .NET занимает 2500 cтрок.
По моим расчетам для LLVM он будет побольше, но не намного.
Я не ковырял LLVM, однако думаю что полное интанцирование параметризованных типов и методов нужно будет делать на уровне frontend в данном случае. Я могу это сделать. Сейчас весь проект занимает чуть больше 30000 строк.
← →
Игорь Шевченко © (2011-02-01 20:11) [17]
> Многие серьезные вещи в ИТ начинали делать в гаражах и на
> коленке
умилило слово "многие". Примеры в студию,кроме Джобса и Возняка
← →
И. Павел © (2011-02-01 20:38) [18]
> > Многие серьезные вещи в ИТ начинали делать в гаражах и
> на
> > коленке
>
>
> умилило слово "многие". Примеры в студию,кроме Джобса и
> Возняка
Говоря "cерьезные" я не имел ввиду "прибыльные". ИМХО Джобс сейчас уже скорее просто успешный коммерсант.
Многие основополагающие вещи в ИТ разрабатывали не НИИ и корпорации, а отдельные люди, даже студенты. Клод Шеннон, например, дал вторую жизнь булевой алгебре будучи студентом. Ведь в любой науке так. Корпорации нацелены на получение прибыли, и поэтому не поворачивают на те тропинки, за которыми могут скрываться настоящие золотые жилы. Просто ИТ тем и хороши, что часто позволяют экспериментировать даже без серьезных денежных вложений.
← →
Leonid Troyanovsky © (2011-02-01 20:52) [19]
> Игорь Шевченко © (01.02.11 20:11) [17]
> умилило слово "многие". Примеры в студию,кроме Джобса и
> Возняка
Митник?
--
Regards, LVT.
← →
KilkennyCat © (2011-02-01 21:05) [20]
> Игорь Шевченко © (01.02.11 20:11) [17]
я. и не только начинал - я там (так) и закончу :)
← →
Игорь Шевченко © (2011-02-01 21:08) [21]И. Павел © (01.02.11 20:38) [18]
> Клод Шеннон, например, дал вторую жизнь булевой алгебре
> будучи студентом.
На коленке в гараже ? Не смешно.
> Корпорации нацелены на получение прибыли, и поэтому не поворачивают
> на те тропинки, за которыми могут скрываться настоящие золотые
> жилы.
А если без пафоса ?
← →
И. Павел © (2011-02-01 21:36) [22]
> На коленке в гараже ? Не смешно.
Конечно, он работал в Массачусетском институте, ему был 21 год и он был ассистентом-исследователем. Но занимался он там явно не внедрением булевой математики в вычислительную технику (тогда этим еще никто не мог заниматься). Это ОН увидел связь между техникой и булевой математикой. Т.е. это не результат многолетнего труда сотни штатных инженеров выполняющих четко свое ТЗ.
← →
И. Павел © (2011-02-01 21:49) [23]Бернерс Ли написал программу «Enquire» "Для собственных нужд" (c) википедия. Так что и всемирная паутина обязана рождением "коленке" :)
← →
TUser © (2011-02-01 22:08) [24]
> Игорь Шевченко © (01.02.11 20:11) [17]
>
>
> > Многие серьезные вещи в ИТ начинали делать в гаражах и
> на
> > коленке
>
>
> умилило слово "многие". Примеры в студию,кроме Джобса и
> Возняка
паскаль, перл, пхп, mysql - изначально некомерческие проекты
перл и пхп - именно так, дай-ка сотворю что-нибудь свое, а потом оказалось, что вырастает индустрия
← →
Игорь Шевченко © (2011-02-01 22:37) [25]
> перл и пхп - именно так, дай-ка сотворю что-нибудь свое,
> а потом оказалось, что вырастает индустрия
не озвучен процент сотворенного своего, из которого индустрия не выросла. Без этого приведенные примеры несерьезны.
Язык С, например, тоже был придуман одним человеком и для одной цели. Но у языка С были истоки, предшественники, которым не повезло стать стандартом для индустрии. Из этого вовсе не следует, что С был сделан в гараже и на коленке, а его предшественники - по заказу корпораций, жаждущих прибылей :)
← →
KilkennyCat © (2011-02-01 23:07) [26]Давайте вспомним шутку линукс, и вообще то, что компы чуть ли не для бухгалтера только позиционировались, а теперь в игрушки играть можно еще.
Игорь прав, "гаражно-коленный" вариант - редкостная редкость.
В большинстве случаев имеются варианты серьезной работы серьезных людей с побочными эффектами (этой работы).
← →
TUser © (2011-02-02 06:52) [27]
> не озвучен процент
Ну ноль, и что? Мы не можем так вот а приори не попробовав сказать - вот это будет хорошо, нужно и полезно, а то - плохо и бессмысленно. В мире людей возникает много новых штук, часть выживает.
← →
oxffff © (2011-02-02 07:00) [28]Помогать кто будет? или только ...
:)
← →
Дмитрий С © (2011-02-02 07:34) [29]Программирование ради программирования. Увлечение что ли такое?
Я бы помог с удовольствием, но не умею ничего :(
← →
И. Павел © (2011-02-02 08:04) [30]> [28] oxffff © (02.02.11 07:00)
Так мы вам в пример таких людей приводим. Чем не моральная поддержка? :)
А если серьезно: если вы работаете в ВУЗе, то, ИМХО, тут лучше умных студентов с первого курса присмотреть и самому их обучить. Организовать своего рода кружек, где заниматься разработкой нового языка. Первоначально мотивировать автоматами по экзаменам, а потом сами втянутся.
← →
oxffff © (2011-02-02 08:57) [31]
> И. Павел © (02.02.11 08:04) [30]
> > [28] oxffff © (02.02.11 07:00)
>
> Так мы вам в пример таких людей приводим. Чем не моральная
> поддержка? :)
> А если серьезно: если вы работаете в ВУЗе, то, ИМХО, тут
> лучше умных студентов с первого курса присмотреть и самому
> их обучить
Я работал в ВУЗе пока учился в аспирантуре.
Но наши пути разошлись и слава богу. Печально такое говорить, но это так.
Однако поддерживаю связь с кафедрами.
← →
oxffff © (2011-02-02 08:59) [32]
> тут лучше умных студентов с первого курса присмотреть и
> самому их обучить
Я не бог. Об этом пусть господин Медведев думает.
Студент закончил учиться и забыл все как страшный сон.
← →
oxffff © (2011-02-02 09:06) [33]
> Первоначально мотивировать автоматами по экзаменам, а потом
> сами втянутся.
У меня в отделе работали студенты, мотивировать их универскими копейками я не мог.
Однако пытался мотивировать другим, охотно рассказывая и делясь своими знаниями. Но им это было не нужно. Теперь разработкой занимаются на кафедре и поэтому зав. кафедрой очень просто выписывать мотивометры ввиде сложностей в сдаче. Да и студент просто боится. Вообщем это было давно и всё такое.. :)
Рассказывал в декабре в рамках семинара в качестве гостя в предприятий на кафедрах о JAR и его устройстве. Понял только зав. кафедрой. Студенты смотрели как на новые ворота.
← →
oxffff © (2011-02-02 09:33) [34]
> Дмитрий С © (02.02.11 07:34) [29]
> Программирование ради программирования. Увлечение что ли
> такое?
>
> Я бы помог с удовольствием, но не умею ничего :(
Так и я не умею всего. :)
Приходиться учится.
Собственно если бы тебе удалось разобраться как описать например функцию с 2 параметрами(функция складывает эти числа и возвращает в качестве результата), а сама программа просто вызывает эту функцию.
Я гуглил, есть русскоязычные примеры как это сделать.
То остальное дело техники.
← →
oxffff © (2011-02-02 09:35) [35]
> Собственно если бы тебе удалось разобраться как описать
> например функцию с 2 параметрами(функция складывает эти
> числа и возвращает в качестве результата), а сама программа
> просто вызывает эту функцию.
В рамках LLVM.
← →
Alkid © (2011-02-02 09:36) [36]То есть YAR - это такой паскаль в блекджеком и выводом типов? :)
← →
TUser © (2011-02-02 09:51) [37]
> Я не бог. Об этом пусть господин Медведев думает.
жжжжесть
то-то его всуе тут упоминать не дают
)))
← →
oxffff © (2011-02-02 09:52) [38]
> Alkid © (02.02.11 09:36) [36]
> То есть YAR - это такой паскаль в блекджеком и выводом типов?
> :)
Пока немного, но я быстро учусь.
← →
Alkid © (2011-02-02 10:16) [39]
> oxffff © (02.02.11 09:52) [38]
> Пока немного, но я быстро учусь.
А чем был обусловлен выбор Паскаля, как отправной точки?
← →
oxffff © (2011-02-02 10:22) [40]
> Alkid © (02.02.11 10:16) [39]
>
> > oxffff © (02.02.11 09:52) [38]
> > Пока немного, но я быстро учусь.
>
> А чем был обусловлен выбор Паскаля, как отправной точки?
>
Мне нравится begin ... end, а не {....}.
:)))))))))))))
← →
Alkid © (2011-02-02 10:23) [41]
> oxffff © (02.02.11 10:22) [40]
> Мне нравится begin ... end, а не {....}.
> :)))))))))))))
Сурово! А мне нравится, когда нет ни begin/end, ни когда {...}
:)
← →
И. Павел © (2011-02-02 10:28) [42]> Сурово! А мне нравится, когда нет ни begin/end, ни когда {...}
Если совсем без end/endif, то, наверное, только так:if ...
goto A
else
goto B
A:
...
goto C
B:
...
C:
:)
← →
Омлет © (2011-02-02 10:35) [43]Могу помочь с сайтом. В язык вникать пока нет времени..
← →
Alkid © (2011-02-02 10:36) [44]
> И. Павел © (02.02.11 10:28) [42]
> Если совсем без end/endif, то, наверное, только так:
Долой statements!
Даешь комбинацию выражений!
← →
Дмитрий С © (2011-02-02 13:52) [45]
>
> Собственно если бы тебе удалось разобраться как описать
> например функцию с 2 параметрами(функция складывает эти
> числа и возвращает в качестве результата), а сама программа
> просто вызывает эту функцию.
> Я гуглил, есть русскоязычные примеры как это сделать.
> То остальное дело техники.
>
Мы, похоже, даже разговариваем на разных языках. Для меня то что ты сказал, это лишьfunction (a,b:integer):integer; begin exit(a+b); end;
Но, немного зная тебя, не все так просто..
← →
Ega23 © (2011-02-02 14:05) [46]
> Для меня то что ты сказал, это лишь
А RangeCheck как же?
← →
Alkid © (2011-02-02 14:21) [47]Кстати, а почему не использовать как back-end обычный паскаль?
Free pascal тот же. Или б-гмерзкий C, например.
← →
oxffff © (2011-02-02 14:22) [48]
> Дмитрий С © (02.02.11 13:52) [45]
>
> >
> > Собственно если бы тебе удалось разобраться как описать
>
> > например функцию с 2 параметрами(функция складывает эти
>
> > числа и возвращает в качестве результата), а сама программа
>
> > просто вызывает эту функцию.
> > Я гуглил, есть русскоязычные примеры как это сделать.
> > То остальное дело техники.
> >
>
> Мы, похоже, даже разговариваем на разных языках. Для меня
> то что ты сказал, это лишь function (a,b:integer):integer;
> begin exit(a+b); end;
> Но, немного зная тебя, не все так просто..
Попробую прояснить.
Вот функция генерации кода для конструкции FOR в YAR. В качестве параметра абстрактный класс backend(.NET, LLVM, JAVA....)
Получается в каком то смылсе это обобщенный алгоритм ( метакод :) )
procedure TForToStatement.ToBackEnd(BackEnd: TAbstractBackEnd);
var
CmpValue: TTemporaryLocation;
IntValue: TCodeGenValueObject;
BodyHandle, EndHandle: Cardinal;
begin
CmpValue := TTemporaryLocation.create("",IntegerType,ValueFlagValue);
IntValue := CodeGenConstantInt_One;
BodyHandle := BackEnd.LabelAlloc;
EndHandle := BackEnd.LabelAlloc;
TExpressionCodeGenerator.CodeGeneratorAssign(BackEnd, Counter, ExprFrom,
OpAssign);
TExpressionCodeGenerator.CodeGeneratorAssign(BackEnd, ActualTo,
ExprTo, OpAssign);
BackEnd.LabelInitialize(BodyHandle);
BackEnd.CompareGreater(Counter, ActualTo, CmpValue);
BackEnd.CJmpOnTrue(CmpValue, EndHandle);
TExpressionCodeGenerator.CodeGeneratorOp(BackEnd, ExprBody);
BackEnd.Add(Counter, IntValue, Counter);
BackEnd.Jmp(BodyHandle);
BackEnd.LabelInitialize(EndHandle);
end;
Собственно в LLVM есть нечто схожее.
http://habrahabr.ru/blogs/programming/102597/#habracut
← →
oxffff © (2011-02-02 14:32) [49]
> Alkid © (02.02.11 14:21) [47]
> Кстати, а почему не использовать как back-end обычный паскаль?
>
Сейчас я формирую текстовый IL файл для .NET и отдаю его ILASM.
Собственно можно напрямую формировать PE файл(знания и опыт есть однако я не мазохист) и таблицы метаданных .NET, либо частично упростить себе жизнь использовав
.NET unmanaged API
Попросив меня
http://santonov.blogspot.com/2010/07/working-with-net-unmanaged-api.html
Можно все. Однако над LLVM работает не один человек.
И есть готовые оптимизации кода. Бери и используй. Love it, fu.. it.
← →
TUser © (2011-02-02 14:38) [50]пока пишешь
begin
, можно мысль думать
а на{
я не не успеваю
← →
jack128_ (2011-02-02 14:43) [51]Я перестал любить begin end после такого кода:
FBranchName := TLazy<string>.Create(function (): string
begin
Result := TIBDataModule.Execute<string>(function (DM: TIBDataModule): string
begin
Result := DM.BranchName
end);
end);
для сравнения C#branchName = new Lazy<string>(() => IBDataModule.Execute(dm => dm.BranchName));
← →
И. Павел © (2011-02-02 14:46) [52]> branchName = new Lazy<string>(() => IBDataModule.Execute(dm => dm.BranchName));
И это по вашему читабельный код?
← →
oxffff © (2011-02-02 14:51) [53]Лямбда выражения - это просто другая запись + вывод типов
← →
oxffff © (2011-02-02 16:42) [54]Сегодня добавил:
getmem,freemem (на базе heapalloc,heapcreate,heapdestroy,heapfree)
и pointer math
Теперь можно так
program myprogram;
procedure dosample();
p:pointer;
pinteger:^integer;
i:integer;
begin
GetMem(p,100);
pinteger:=p;
for i:=0 to 99 do pinteger[i]^:=i;
for i:=0 to 99 do write pinteger[i]^;
FreeMem(p);
end;
begin
dosample();
end
← →
Styx (2011-02-02 18:33) [55]
> Если совсем без end/endif, то, наверное, только так:
Это Python
← →
Alkid © (2011-02-02 19:52) [56]
> И. Павел © (02.02.11 14:46) [52]
> > branchName = new Lazy<string>(() => IBDataModule.Execute(dm
> => dm.BranchName));
>
> И это по вашему читабельный код?
Да, это вполне читабельный код. Синтаксис вида ... => ... для анонимных функций намного лучше, чем function (...) : ... begin Result := ...; end;
← →
oxffff © (2011-02-03 11:55) [57]
> GetMem(p,100);
Никто не заметил.
GetMem(p,400).
Кстати в Delphi сигнатура метода GetMem неправильная.
GetMem(var p:pointer;size:integer).
Однако позволяет делать так
a:pointer;
b:^integer;
GetMem(a,100);
GetMem(b,1); <-это ошибка.
Поскольку типы var параметра должны быть идентичны. Однако для псевдофункции сделано исключение. :)
← →
DiamondShark © (2011-02-03 13:24) [58]
> pinteger[i]^:=i
Бред какой.
> Кстати в Delphi сигнатура метода GetMem неправильная.
"Это головушка у тебя деревянная, а палочка-то волшебная"
Для типизированных указателей есть встроенная процедура/функция new().
← →
oxffff © (2011-02-03 14:12) [59]
> DiamondShark © (03.02.11 13:24) [58]
>
> > pinteger[i]^:=i
>
> Бред какой.
Учите мат. часть.
>
>
> > Кстати в Delphi сигнатура метода GetMem неправильная.
>
> "Это головушка у тебя деревянная, а палочка-то волшебная"
>
> Для типизированных указателей есть встроенная процедура/функция
> new().
Вдыхайте глубже. Тут про Ерему, а не про Фому.
← →
DiamondShark © (2011-02-03 15:06) [60]Удалено модератором
← →
oxffff © (2011-02-03 15:18) [61]
> DiamondShark © (03.02.11 15:06) [60]
Pointer Math (Delphi)
Switch
Syntax
{$POINTERMATH ON} or {$POINTERMATH OFF}
Remarks
Pointer math is simply treating any given typed pointer in some narrow instances as a scaled ordinal where you can perform simple arithmetic operations directly on the pointer variable. It also allows you to treat such a pointer variable as an unbounded array using the array [] operator.
← →
oxffff © (2011-02-03 15:20) [62]Удалено модератором
← →
DiamondShark © (2011-02-03 15:41) [63]
> It also allows you to treat such a pointer variable as an
> unbounded array using the array [] operator
Выражениеpinteger[i]
уже имеет тип integer.
Оператор разыменования (крышка "^") там нафиг не упал.
Если в твоём квадратноколёсном велосипеде требуется разыменование, то ты явно что-то не то курил, потому в трезвом уме невозможно представить, к чему там можно применить разыменование:
-- оператор [] УЖЕ трактует поинтер как массив, без явного разыменования
-- оператор [] возвращает ЭЛЕМЕНТ массива, к которому разыменование не применимо
В общем, учи матчасть, ага.
← →
oxffff © (2011-02-03 15:51) [64]
> DiamondShark © (03.02.11 15:41) [63]
>
> > It also allows you to treat such a pointer variable as
> an
> > unbounded array using the array [] operator
>
> Выражение pinteger[i] уже имеет тип integer.
> Оператор разыменования (крышка "^") там нафиг не упал.
>
> Если в твоём квадратноколёсном велосипеде требуется разыменование,
> то ты явно что-то не то курил, потому в трезвом уме невозможно
> представить, к чему там можно применить разыменование:
> -- оператор [] УЖЕ трактует поинтер как массив, без явного
> разыменования
> -- оператор [] возвращает ЭЛЕМЕНТ массива, к которому разыменование
> не применимо
>
> В общем, учи матчасть, ага.
Поменять в сигнатуре метода результат как Byref мне не составить труда.
Однако пока выбор сделан в пользу того, чтобы возвращался такой же неразыменованный указатель. Так что различия есть.
Однако я рад, что ты ознакомился с мат. частью.
← →
DiamondShark © (2011-02-03 16:06) [65]
> Однако пока выбор сделан в пользу того, чтобы возвращался
> такой же неразыменованный указатель.
Щито?
Выражениеpinteger[i]
возвращает^integer
?
Не. Колёса у тебя не квадратные. Они у тебя в форме бутылки Клейна.
← →
oxffff © (2011-02-03 16:21) [66]
> DiamondShark © (03.02.11 16:06) [65]
Это не существенное отличие.
Если будет неудобно, изменить на возврат ссылки несложно.
← →
DiamondShark © (2011-02-03 16:48) [67]
> oxffff © (03.02.11 16:21) [66]
Ну, если СЕМАНТИКА выражения -- несущественное отличие, то я не знаю тогда, что будет существенным отличием. Наверное, фигурная скобка от бегина.
Пока же можно констатировать два с половиной факта:
1. Блэкджек и шлюхи детектед.
2. Типовые сценарии использования языковых конструкций не рассматривались ваще.
2.5 Сколь-нибудь систематический дизайн языка отсутствует.
Налегайте, налегайте на матчасть. У вас ещё остались непристроены нестирающиеся шины и регенерирующий реактор на субтепловых нейтронах.
← →
oxffff © (2011-02-03 17:21) [68]
> DiamondShark © (03.02.11 16:48) [67]
Переделал, как привыкли люди. [] - возвращает ссылку.
По остальному. Доктором работаешь?
← →
DiamondShark © (2011-02-03 17:55) [69]
> Доктором работаешь?
Угу. Эвтаназиологом.
Есть ещё хорошее предложение.
Если уж реализовывать указательную арифметику, неплохо бы поддержать типизированные указатели. Для чего расширить синтаксис интринсикаNew
:
type
PMyType = ^TMyType;
var
p: PMyType;
begin
//функциональный вариант
p := New(PMyType, N); // распределяет N элементов TMyType
//проседурный вариант
New(p, N); // распределяет N элементов TMyType
А возможность использовать типизированный указатель вGetMem
выпилить к свиньям.
← →
oxffff © (2011-02-03 19:47) [70]
> DiamondShark © (03.02.11 17:55) [69]
Предложения я люблю
Типизированные указатели уже есть.
Однако не смысла усложнять. Можно по старинке.
TStaticArray<T>= array[0..99] of T;
PStaticArray<T>= ^TStaticArray<T>;
p:PStaticArray<integer>;
New(p);
Либо массивы
> А возможность использовать типизированный указатель в GetMem
> выпилить к свиньям.
Сомнительно. Оставлю.
← →
oxffff © (2011-02-04 12:09) [71]Добавил sizeof.
Теперь можно так
program myprogram;
procedure pf<T> (cnt:integer);
p:pointer;
ptype:^T;
valueA:T;
i:integer;
begin
GetMem(p,cnt*sizeof(T));
ptype:=p;
for i:=0 to cnt-1 do ptype[i]:=valueA;
FreeMem(p);
end;
begin
pf<boolean> (100);
pf<integer> (200);
pf<double> (300);
end
← →
DiamondShark © (2011-02-04 20:26) [72]
> GetMem(p,cnt*sizeof(T));
Сюда просится расширенный синтаксисNew(ptype, cnt);
GetMem для типизированных указателей выпилить.
Выпилить неявную совместимость по присваиванию указателей.
type
PType = ^_Type;
var
pt: PType;
p: Pointer;
pt:=p; // Нельзя
p:=pt; // Можно
pt:=PType(p); // Можно
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
Память: 0.67 MB
Время: 0.005 c