И тут не все так просто. Вы же не будете утверждать, что удобные и приятные вещи, имеющиеся в других языках, на самом деле ненужные? Но суть в том, что нельзя и бессмысленно пытаться сделать из языка самый лучший путем составления сборной солянки отовсюду понемногу. У PascalABC.NЕТ есть определенные векторы развития языка, и все, что на них не ложится, в язык тянуть нельзя.
Вы правы. Нет, не буду. Иначе бы их не было.
PascalABC.Net - смесь нескольких языков, на мой взгляд, которая весьма неплохо получилась. Хотя, опять же, если смешивать языки бездумно, то да, ничего хорошего не выйдет.
Да, именно так. У Фортрана корявый синтаксис и убогая реализация ООП, но зато он умеет работать даже с n-мерными непрямоугольными массивами, как с простыми переменными, делая их объектами первого класса. У языка PL/1 были исключительно удобные средства для описания сложной иерархии данных, которые в Паскале и С# описываются с большой натугой а уж чтобы с ними было работать удобно - это вообще мечты. A PL/1 с такими структурами работал “на раз-два”, тоже зачастую, как с простыми переменными. А как PL/1 работал с файлами! Но PL/1 умер из-за других недостатков. В Алгол-60 был экзотический, но временами позволяющий красиво и наглядно записывать формулы - и это без каких-либо ухищрений - способ передачи параметров по наименованию, больше напоминающий макроподстановку. Но Алгол-60 тоже умер, оказавшись несовременным спустя какой-то период времени. И так далее. Но я же не прошу вставлять в Паскаль все эти вкусности лишь потому, что они есть (или были) в других языках и их использование позволило бы писать программы красивее, удобнее и быстрее.
Вставлять в язык что-либо просто так, потому что есть в другом языке, конечно, не очень хорошо. Намного лучше - привести аргументы за/против и вынести вердикт на их основе.
Еще лучше - попытаться понять дух и букву языка, а также причины, побудившие разработчиков сделать язык именно таким. Возможно, тогда некоторые предложения отпадут сами собой и не придется ежедневно вести дискуссии по поводу “что бы еще такое в язык включить?”.
“Дух языка” не может быть объективным понятием. Оно у каждого своё, субьективное.
Это, конечно, поможет отбросить какие то предложения, но на него одного нельзя полагаться.
Не пользуйтесь. Используйте остальные два понятия.
И после этого Вы доказываете, что не хамите никому? Я уже сто раз мог бы ответить Вам на призывы писать на Фортране тем же, чем и Вы сейчас ответили мне. Такое чувство, что Вы не переносите даже названия языков, отличных от PascalABC.NET и Фортран. Но сами при этом не раз говорили, что “хороший программист должен знать несколько языков”.
В самих дискуссиях нет ничего плохого. Но, только с учётом того, что это конструктивные дискуссии и ведутся с применением аргументации.
Дух языка - это менее весомый аргумент в дискуссии, чем, например, пример кода или ссылка на авторитетный источник. Хотел бы услышать что конкретно Вы подразумевайте под этим понятием.
Когда я попросил жить дружно и в согласии, я вовсе не шутил. Не очень хорошо это у нас получается.
Попадался рабочий пример нечёткой логики (fuzzy logic), а может есть на PABC?
Да, было бы занятно взглянуть. Пока из четко работающего я встречал только интервальную арифметику, да и то не паскалевские процедуры. а на Algol-60. Конечно, они в Паскаль переводятся очень легко, но все же не хочется время тратить, чтобы просто полюбопытствовать. И потом, это все же не fuzzy logic, так, кусок для ее основ.
Алекс, как считаете, это вызвано скорее незнанием, непопулярностью или просто не имением особо средств/преимуществ в .NET?
И к чему примечание об Algol-60, чище код алгоритма Мамдани по сравнению с тем же си?
Есть модуль для MatLab и других расчётных систем, насколько реально подключить?
Согласен, нельзя всё охватить, да и не нужно: хотя НЛ = логика Лукасевича + Гёделя + вероятностная логика, достаточно самого каркаса – сути решения задачи, а примеров именно на Pascal.почему-то не особо…
Немного порывшись нашёл немецкий пример от 91 года -FUZZY.PAS (14,3 КБ) fuzzy_demo.pas (8,8 КБ)
Я не занимаюсь работами в области fuzzi logic, мне просто любопытно. Интервальную арифметику применял давно, рассчитывали размерные цепи и допуски-посадки. Тогда иного источника, кроме публикации на Алгол не было, вот и вспомнил этот агеевский сборник. Как подключать Матлаб - понятия не имею, не доводилось озабочиваться.
заменил на
Graph3D.OnMouseUP += procedure (x, y, mb) -> begin
объект3Д := FindNearestObject(x, y);
if объект3Д = шарик then ....
и значительно уменьшил заходы в этот опрос , 4 раза в сек, стало сносно. по-видимому если сделать сработку не по отжатию, а по нажатию кнопки, то оно очень часто запускает опрос местоположения объектов, это очень томозит программу.
Подскажите пожалуйста, как в 3д сделать такое: есть массив например а[1…до_много] как отрисовать вариабельное количество шариков, но дать им свое имя? чтоб срабатывал опрос по нажатию?
Т.е. например у меня в массиве 3 входа, в 3д я их должен изобразить шариками и при клике на эти шарики должно появиться на экране значение в массиве а[куда_кликнули]
Хотя описание мутноватое, используя хэши можно задать уникальное значение (название) хоть по (x+y+z), а количество – через стек или список. Или вы про “глубину”, как кликать в 3D?
А я пока снова задумался насчёт защиты от ArtMoney и CheatEngine: обычно просто множат на выбранную дробную константу, ксорят значения [вроде Z:=x xor (key1 xor key2)] или гоняют по адресам через указатели, а есть ли более универсальное решение, чтобы все важные значения криптовались с переменным/плавающим ключом?
Также хотел загнать популярные API в удобную псевдо-библиотечку, насколько полезно хотя бы для начинающих? Win32API.txt (686,8 КБ)
А она правда удобная? Я этого что-то не заметил. И потом? VB не все знают, наверно? А кто вообще что-то пишет в Паскале с упором налегая на API ?
Если коротко - я вполне могу сойти в 3D за начинающего. Не понял в этом огромном файле нечегошеньки)))
Вот псевдокод:
type
ШарикСИменемИЗначением = class
СамШарик: ТипШарика;
Имя, значение: string;
constructor;
begin
//ToDo инициализировать СамШарик
Сцена.КогдаКликнули += (x, y, mb)->
if Кликнули_на_этот_шарик then
begin
writeln(self.Имя, ' : ', self.значение);
end;
end;
end;
Можете от него отталкиваться. Основной смысл в том - что каждый объект шарика должен сам следить когда на него кликнули. Чтоб не вызывать FindNearestObject
для каждого шарика - можно вызывать его перед всеми остальными обработками клика и присваивать глобальной переменной. А в if Кликнули_на_этот_шарик then
проверять на равенство ту глобальную переменную и себя.