добавить ключ расширения (.myfile) в ветку реестра
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfile
там еще нужно в нужную подветку это засунуть, но это уже погуглить надо, их там несколько
Ок ну с расширением я так и думал что с реестром придётся заморочиться, но что насчёт чтения документа файлом? По идее оно должно как {$resource ‘…’} работать?
@admin, у паскаля то своё расширение есть, может сознаетесь как сделали?
И ещё 1, можно ли запускать новые потоки из процедур с параметрами или ещё как то передавать им данные при запуске не прибегая к глобальным переменным и лямбдам? Я находил System.Threading.ParameterizedThreadStart
но так и не понял как получить дескриптор процедуры.
Можно ли как то делать сложные константы, что то типа
{$reference System.Drawing.dll}
uses System.Drawing;
const
p=PointF.create(0,0);
begin
end.
не создавая по функции на каждую константу? И является ли ошибкой, то что этот код не компилируется(ожидалось константное выражение)?
Есть ли какой то аналог unchecked
в паскале?
Нет. А зачем Вам?
Думаю, нельзя делать сложные константы. Нет, ошибкой не является.
Непонятно, для чего может понадобиться сложная константа. Когда-то константы в программировании служили средством a) экономии памяти вследствие прямого заполнения соответствующих адресов бинарным кодом, б) защитой от “самих-себе-злобных-буратинок”, которые кривыми ручонками портили собственный код присваиванием. Сейчас осталось только б). Рассматривается именно такое назначение констант?
в pascale все unchecked. указатели (на размерные типы) можно использовать без всяких флажков.
- Константы не
unchecked
. - Есть не мало случаев когда как раз надо
checked
, я его как само собой прилагающееся имел в виду. Ну а вообще можно написать функцию для этого и будет вполне вменяемо работать. Можете подсказать как оно работает, чтоб не изобретать велосипед?
В языках как C++ массивы передаются указателем на элемент, есть какой то аналог такому в паскале?
Насколько помню, в PascalABC.NET указатели с особеностями. Но вот вопрос: к чему они вообще в ссылочной модели? К чему они в системе, где сбором мусора управляет системная служба - чтобы висячими объектами с убитыми предками “от криворуких программистов” кушать память? Честно говоря, я вообще не могу представить, зачем в PascalABC.NET могут быть нужны указатели…
К сожелению криворукие не только программисты а и сборка мусора) К примеру 2 объекта ссылающиеся не соберутся с мусором. Ну это так себе пример, отследить такие случаи не сложно, но я вот сейчас у себя борюсь в программе чтоб они не жрала гигабайт оперативки на ровном месте, и знаете, как то не помогает то что за меня что то заранее продумали, всё равно приходится абсолютно всё изучать и много тестировать.
помогает. ибо надо думать о задаче, а не изобретать очередной неработающий велосипед.
Имеется код, написанный “злобным преподавателем”, считающим, что “все эти нововведения в стиле функционального программирования - зло”.
type tMas=array[1..100] of integer;
var
N:integer;
a:tMas:=(520,46904,58684,2215,83967,66560,96722,41600,16921,
99150,1151,86738,63634,71238,13216,32406,49880,1558,75516,
73929,7482,58804,47776,65890,47698,18548,26752,98776,82750,
87389,23938,55437,86701,10204,93551,24241,16244,44138,25003,
22798,83587,70257,65030,83983,81229,67478,78077,42619,73533,
41772,49635,31721,77620,34630,63560,41716,99129,92794,54518,
65419,39808,97947,58850,29532,75212,45715,37,53430,77687,
88976,16163,5742,76556,52718,90343,37226,93774,63793,84661,
80220,40472,84134,25243,40979,37755,92218,77818,52072,46645,
51836,25112,23450,89621,59584,82991,85640,11407,35498,8771,35515);
function In3(n:integer):boolean;
begin
var F:boolean:=False;
while n<>0 do begin
if n mod 10=3 then F:=True;
n:=n div 10;
end;
In3:=F;
end;
begin
var k:=1000000;
N:=100;
Milliseconds;
loop k do begin
var max:=-1;
var p:=1;
var Y:=False;
for i:integer:=1 to N do
if (a[i]>max) and (In3(a[i])) then begin
max:=a[i]; p:=i; Y:=True;
end;
if Y then begin
//writeln(max);
//writeln('i=',p);
end
else
//writeln('Элементы, содержащие цифру 3 отсутствуют')
end;
var t:=MillisecondsDelta;
Writeln(t/k);
end.
Имеется попытка показать, что функциональное программирование по крайней мере не хуже тридиционного для языка Паскаль:
function Has3(n:Integer):boolean;
begin
while n<>0 do begin
if n mod 10=3 then begin Result:=True; Exit end;
n:=n div 10;
end;
Result:=False
end;
begin
var a:=Arr(520,46904,58684,2215,83967,66560,96722,41600,16921,
99150,1151,86738,63634,71238,13216,32406,49880,1558,75516,
73929,7482,58804,47776,65890,47698,18548,26752,98776,82750,
87389,23938,55437,86701,10204,93551,24241,16244,44138,25003,
22798,83587,70257,65030,83983,81229,67478,78077,42619,73533,
41772,49635,31721,77620,34630,63560,41716,99129,92794,54518,
65419,39808,97947,58850,29532,75212,45715,37,53430,77687,
88976,16163,5742,76556,52718,90343,37226,93774,63793,84661,
80220,40472,84134,25243,40979,37755,92218,77818,52072,46645,
51836,25112,23450,89621,59584,82991,85640,11407,35498,8771,35515);
var k:=1000000;
Milliseconds;
loop k do begin
var b:=a.Where(t->Has3(t)).ToArray;
if b.Length>0 then begin
var max:=b.Max;
var kk:=a.IndexOf(max);
//writeln('a[',kk+1,']=',max);
end
else
writeln('Элементы, содержащие цифру 3 отсутствуют');
end;
var t:=MillisecondsDelta;
Writeln(t/k);
end.
Увы, но время выполнения данного кода в пять (!) раз больше, чем у традиционного. Можно ли тут что-то сделать, сохранив прозрачность алгоритма?
Ну, существенно не ускоришь. В задачах поиска индекса последовательности не так эффективны - нужны массивы.
И конечно основное время съедает запрос a.Where(Has3).Max
Давайте ещё раз: последовательности - не для всех задач, и не для всех задач они одинаково эффективны. Последовательности позволяют хорошо масштабировать некоторые задачи средней сложности где ручные алгоритмы плохо справляются .
Вас погубило создание массива b
. Я попытался заменить массив на список, задавая ему изначальную длину =a.Length
но это едва ли помогло(0.009->0.007). Вообще в производительности разумеется будет выигрывать написанное методами, которые делают только самое необходимое и ничего лишнего. А преимущество у функционального программирования только 1:[quote=“ibond, post:240, topic:263”]
ибо надо думать о задаче
[/quote] Вряд ли удастся переубедить человека который привык что эта программа выполняется не пол секунды а пол минуты ;).
Кстати я вроде всё старался прочитать, но не помню примера когда последовательности оказываются лучше чем ручной алгоритм. Вы только показали как с ними можно сделать красивый код вроде такого:
uses GraphABC;
function RandomPoints: sequence of Point;
begin
while True do
yield Pnt(Random(Window.Width),Random(Window.Height));
end;
begin
RandomPoints.ForEach(p->Circle(p.x,p.y,Random(3,6)));
end.
Здравствуйте! Прежде всего позвольте мне выразить восхищение вашей работой (ABCPascal). Меня интересует несколько вопросов.
- Вы позиционируете свое творение как платформу (или язык?) для .NET программирования. Возможности вашей IDE - это подключение .Net классов и создание .Net класса я правильно понял? Т.е. .NET проекты IDE не создает. Все ограничивается WinForm, Concole и DLL.
- “Близким по идеологии к PascalABC.NET является язык RemObjects Oxygene”… К сожалению я так и не нашел НОРМАЛЬНОЙ и ПОЛНОЙ документации по этому языку. Даже на сайте RemObject (возможно, подскажите где ее найти?), но копаясь в этой теме наткнулся на пару интересных моментов. а) В превый раз Oxygene упоминается в DELPHI PRIZM (2009) как язык схожий с DELPHI для .NET Начиная с X6 версии RAD studio (embarcadero) мне не удалось найти в ее составе Prizm, возможно ее нет и в более ранних версиях (Этот вопрос сейчас уточняется мной у embarcadero как и вопрос о том поддерживают ли они .NET программирование). Я пока не знаю ответа, но если поддержки .net нету, то боюсь Pascal (Delphi) отойдет в небытие. б) Как ОБУЧАЮЩИЙ язык ABCPascal хорош. Правда…TP -> ABCPascal -> C++ Изумительная лестница от простого к сложному. Учитывая что в ABCPascal есть ну почти все что и в С++. Для меня не совсем понятно зачем ABCPascal связали с .net… Но это субъективный взгляд. —Под какую версию .Net Framework заточен ABCPascal??? p.s. Извиняюсь за несвязность изложенного, начинающий программист. От себя добавлю - хорошие библиотеки. Мне нравится ваш проект. Удачи в развитии.