skalogryz
> крестопроблемы не нужны.
Да? А утечки памяти и потерпеть можно типо?
Вот смотри в С++/С#/Java/Js unordered_set/unordered_map какого-то типа:
{
std::unordered_set<int> v={1,2,3,4};
v.insert( 5);
if( v.contains( 4)){
// do things
}
}А чё в паскале?
Dmitry_Milk
> Там другое - по невнимательности легко можно напортачить.
Это и есть капризность языка. Ах да, прогу на чистом ассемблере антивирусы любят удалять.
samrrr
> А утечки памяти и потерпеть можно типо?
для утечек там есть try...finally
но не RAII ни try..finally от кривых рук не спасут
но, если тебе религия запрещает память высвобождать, можешь написать решение на рекордах, и дин масивах. Компилятор их за тебя успешно почистит.
samrrr
> Вот смотри в С++/С#/Java/Js
дженерики там тоже уже есть 100 лет
в википедии язык который используется для иллюстрации этой статьи: https://en.wikipedia.org/wiki/Heap%27s_algorithm
procedure generate(k : integer, A : array of any): if k = 1 then output( A) else for i := 0; i < k; i += 1 do generate( k - 1, A) if k is even then swap( A[i], A[k-1]) else swap( A[0], A[k-1]) end if end for end if
Заметьте, как заблистал паскаль когда из него begin удалили.
Чётко! Вот на таком бы писал и писал.
=A=L=X=
> Заметьте, как заблистал паскаль когда из него begin удалили.
и добавили конкретизацию end
а если цикл for вложен в другой, то встреченный "end for" кого из них закрывает...
такой вариант зайдёт: https://ideone.com/TY3A8V ?
skalogryz
Не, уже по ключевому слову procedure можно было догадаться, что этот язык не про тех кому лень символы печатать.
Ненужность begin обусловлена не количеством букв в слове, а именно полной его ненужностью. Он только замусоривает поток лексем и даже может отнимать от программы одну строку на себя снижая плотность кода по совершенно необоснованным причинам. Ведь then и do вполне себе открывают блок без всяких прочих подсказок. А однострочные if/while бывают сравнительно редко чтобы на них пытаться экономить - как раз себе же дороже выйдет, как и случилось с begin.
А end for вполне себе обоснован и ничем не плох.
skalogryz
> дженерики там тоже уже есть 100 лет
А что по хеш-таблицам то?
skalogryz
> но, если тебе религия запрещает память высвобождать, можешь написать решение на
> рекордах, и дин масивах. Компилятор их за тебя успешно почистит.
Хеш таблицу на паскале покажешь кодом?
0iStalker
> ... ждём KPG, с комментарием про Forth и пачкой ссылок на статьи, репозитории,
> маргинальные виды процессоров и микроконтроллеров, а также на поделки сделанные
> фортерами.
:) Как вариант да, но это если сразу не строить иллюзий что сможешь его использовать.,
(хотя есть и достаточно попсовые Форт-системы как Win32Forth)
Но, комментарий 0iStalker выше , как понимаю, был полон сарказма. :)
Более приземлённые варианты языков, к примеру TCL/Tk,
но в текущем моменте меня заинтересовал Rebol и последователь его Red как мультиплатформенные и сразу всё из коробки.
P.S. Посоветовал бы ещё Factor, но думаю с ним более длительный период его освоения будет,
но он прилично развивается сообществом.
А, вообще, самое простое что придумало IT это, как ни странно Бейсик.
=A=L=X=
> Заметьте, как заблистал паскаль когда из него begin удалили.
> Чётко! Вот на таком бы писал и писал.
Begin вместо скобок не такая мозг напрягающая сущность. :)
к тому же, в возможностях какого нибудь редактора можно заменять её на более короткие символ/ы
к примеру [ квадратной скобкой ]
Freakazoitt
Что хоть за задача?
Может такой язык подойдёт Evolve 4.0
samrrr
> А что по хеш-таблицам то?
FPC, Delphi
> Хеш таблицу на паскале покажешь кодом?
влом писать, но в доках есть примеры.
лол! но скажу, что в паскале можно сделать строки длинее 255 символов ;)
=A=L=X=
> А однострочные if/while бывают сравнительно редко чтобы на них пытаться экономить
не-не-не. Они не однострочные, а одно командные.
если делать вложенные if и/или циклы, то внешние циклы не редко бывают однострочными, т.к. основная работа в самом внутренеем цикле.
=A=L=X=
> Ненужность begin обусловлена не количеством букв в слове, а именно полной его
> ненужностью
ну т.е. как-то так?
{$macro on}
{$define doit:=do begin}
{$define thenb:=then begin}
var
i : integer;
begin
for i := 0 to 10 doit
if i and 1 <> 0 thenb
writeln( i);
end;
end;
end.skalogryz
> ну т.е. как-то так?
Ну там не только же в do/then отличия в синтаксисе - приглядись к примеру повнимательнее.
=A=L=X=
> Ну там не только же в do/then отличия в синтаксисе - приглядись к примеру
> повнимательнее.
в примере синтаксис же условный. язык, который там "используется" не существует.
первые вопросы разруливания синтаксиса начнутся именно с одинаковыми вложенными структурами If-if или for-for. Каким образом компилятор должен угодать, какой именно if или for закончился.
По отступам? ну это такой питоно-паскаль получает, с избыточными end-ами.
а вообще я придолбался к фразе "Заметьте, как заблистал паскаль когда из него begin удалили"
и стало интересно, можно ли используя существующие методы, и не меняя комплиятора (языка) заставить его "блистать", припрятав begin. (так где получится)
ЗЫ: чисто хохмы ради, вполне можно поменять компилятор сам, благо есть FPC.
причём поменяв только синтаксис, не потеряв возможность компиляции, или совместимость с существующими модулями.
(для этого в языке есть концепция $mode и вспомогательный $modeswitch)
ну и IDE под этот новый режим языка можно допилить, благо всё open-сорец.
А т.к. стандарт языка паскаль были принят ровно в 1970м году, и с тех пор не перебуликовывался, то новый режим будет иметь место быть! о как.
ЗЗЫ:
procedure generate(k : integer, A : array of any):
специализация функций уже есть в trunk-е FPC. по-моему, официально не выпущен, но я не слежу за релизами.
for i := 0; i < k; i += 1 do
СИ-шный синтаксис "+=" в FPC есть 1000 лет, я хз есть ли он в Делфи.
тут нужно ещё помнить, что Си-шный и паскальный for отличаются. Т.к. количество интераций в Паскале вычисляется предварительно, а в Си-выполняется постоянно.
По сути Си-шный фор, это while в паскале.
Как приведёт в примере в паскале врят ли заведётся. т.к. ";" это конец оператора. потребуется какой-то другой синтаксис.
k is even
"is" оператор не перегружаемый. зато In перегружаемый
почему нет :)
skalogryz
> в примере синтаксис же условный. язык, который там "используется" не
> существует.
Мне понравилось несколько вещей:
- отсутствие begin уже обсудили
- ; в конце строки не обязательна
- сишный стиль for
В результате, имхо, очень легко читается и при этом чувствуется гибкость даже в сравнении с паскалем, хотя паскаль - суть прямое переложение обучающего алгоритмического языка на компилятор.
=A=L=X=
> паскаль - суть прямое переложение обучающего алгоритмического языка на компилятор
и именно по-этому
паскаль "позволяет максимально сосредоточиться на задаче не отвлекаясь на грамматику законы капризы и глюки ЯП" :)
skalogryz
> влом писать, но в доках есть примеры.
dict := Rndict.Create;
Ясно, значит без явного создания оно работать не будет.
skalogryz
> можно сделать строки длинее 255 символов
А что по поводу 65536? Раньше помирало от нехватки памяти.
samrrr
> А что по поводу 65536? Раньше помирало от нехватки памяти.
раньше - это когда? в 1970-м?
skalogryz
> раньше - это когда? в 1970-м?
Когда у меня был турбо паскаль.
Тема в архиве.