Вы не поняли. Это не функция, возвращающая функцию, а функция типа «функция», который может быть наследован от типа «целое» или «строка» или любого другого. Я просто привёл пример, для демонстрации возможности системы без парсера. Естественно, пытаясь скомпилировать такой код на, компилятор сойдёт с ума :)
У меня не будет языка как такового. Всё программирование будет вестись только в среде, так что в блокноте не попишешь(это минус конечно). И я хочу в ней собрать всё то что мне нравится в других языках(св-ва и события от Delphi, шаблоны и макросы от C, динамическая типизация от Java). Мне нравятся разные штуки из разных языков, а в одном месте я их не встречал. Увы.
Истину глаголите. Я устал писать тексты, для этого есть писатели. Кстати про формулы я забыл упомянуть. Формулы в коде выглядят совсем не так, как в алгоритме, а хочется видеть все эти приятные логарифмы, интегралы, корни, степени да в конце концов простых дробей иногда не хватает.
метод нужен для того, чтобы не писать так:
readOnly =! readOnly;
Снижает кол-во использований переменной в тексте — снижает вероятность ошибки и повышает читабельность.
>Это переменная «Возраст ученика» типа «целый» или переменная «ученика» типа «целый Возраст»?
Подскажет подсветка текста в IDE.
>На основании чего первый раз «Имя» это часть строки, а второй раз — переменная, которая должна быть заменена своим значением?
На основании скрытого текста перед вторым Возрастом, который скажет IDE, что это переменная. Не хочу использовать $ как PHP, это ухудшает читабельность.
>На самом деле неоднозначность можно решить, если обязать начинать все идентификаторы с большой буквы. А без такого правила в большинстве случаев может возникать неоднозначность.
Это вопрос стиля, который решает каждый програмист сам. Все эти штуки(классы с заглавной — Java, типы с большой T — Delphi, локальные с прописной, приставки sz, n, psz) были сделаны не от хорошей жизни. Не было и наверное ещё нет хороших инструментов.
>По поводу вашего примера. Если ввести оператор is для определения перменных, то необходимо запретить идентификаторам содержать подстроку «is». Иначе полчим, что Connection is ready is Boolean — весьма неоднозначная конструкция.
>Да, ключевые слова должны быть запрещены, это уж как водится ;)
Это тоже не от хорошей жизни. В моей среде не будет таких ограничений, будет полная свобода, вплоть до абсурда:
функция функция(параметр параметр, параметр параметр);
т.е. функция типа функция с двумя параметрами типа параметр, причём типы параметров разные. Например один наследник строки, а другой числа. Но это будет говнокодом и плохим стилем :)
К каким это изменениям может привести переменование? Имени функции в готовой программе нет. Код буду использовать только я. А если код будет использовать кто-то другой(фантастика), то он просто увидит переименованный вариант, как только обновит код. И в выражениях я имел ввиду не изменение, а просто перенос на другую строку части выражения.
А если я завтра переименую Длину в Расстояние, мне менять написание типа? Я не стремлюсь получить пятёрку за грамматику и синтаксис у русички :) Но вид int Длина меня огорчает. Первоначальная задумка была именовать названия переменных, типов(своих) на русском, потому что со временем понимаешь что вот эту процедуру назвал неправильно(тогда не знал, что так не говорят) или просто не знал как назвать на английском от недостатка знаний, а транслит не писал, ибо не перевариваю. Но посмотрев на текст, написанный смешанным языком, захотелось однообразия.
Среда должна сообщать какое действие было сделано, а комментарий должен сообщать зачем это было сделано. Контроль версий текста избыточен. Например, я переименую переменную или тип, класс или я добавлю пробелов для читаемости или разобью длинное выражение на несколько строк, то все эти действия не требуют перекомпиляции, а значит и версия не изменилась. Переименования тоже можно не коммитить, но страшно.
Создавать окна среда будет и будет создавать структуру классов. Но это многие среды умеют. Хочется более простого кодирования взаимодействия между окнами. Я пока не могу сформулировать как именно они должны взаимодействовать, но часто приходится писать код, который чувствуется, что среда может взять на себя.
И ещё хочу отделить интерфейсный код от логики программы. В этом плане тоже недостаточно продумано, т.к. часто интерфейс и логика пересекаются.
>Загрязнять глобальный неймспейс?
Вспомогательные функции(надеюсь я понял правильно, что это функции, находящиеся вне классов) будут принадлежать проекту и будут глобальными. Каждой функции или классу можно сделать права доступа(например: функцию не видит никто, кроме класса A; функция друг класса B — т.е. имеет неограниченный доступ к личным полям класса и т.д.). И скорость компиляции не будет зависеть от кол-ва функций в пространстве имён.
inline будет. Более того, если я обычную функцию помечу как встроенную, то все места, где используется данная функция будут перекомпилированы автоматически.
Т.к. файлов не будет, не будет и заголовков, а значит нет проблемы многократного включения.
>Или это к пункту 3 или я не понял суть вопроса
Автоподстановка слов как в поиске google. Т.е. если я объявляю переменную: «Количество целей», то я хочу видеть слово «количество» в выпадающем списке после набора, скажем первых трёх букв.
>А сейчас разве нет? Ставим breakpoint в функции и отлаживаем её
Точка останова хороша, но иногда до выполнения функции может пройти много времени.
IDE будет показывать закладку между a(); и c();. При наведении курсора на неё, IDE будет отображать скрытый текст. И естественно каждый макрос такого типа можно будет настроить так, что среда будет отображать текст внутри макроса даже если макрос в проекте не объявлен.
readOnly =! readOnly;
Снижает кол-во использований переменной в тексте — снижает вероятность ошибки и повышает читабельность.
Подскажет подсветка текста в IDE.
>На основании чего первый раз «Имя» это часть строки, а второй раз — переменная, которая должна быть заменена своим значением?
На основании скрытого текста перед вторым Возрастом, который скажет IDE, что это переменная. Не хочу использовать $ как PHP, это ухудшает читабельность.
>На самом деле неоднозначность можно решить, если обязать начинать все идентификаторы с большой буквы. А без такого правила в большинстве случаев может возникать неоднозначность.
Это вопрос стиля, который решает каждый програмист сам. Все эти штуки(классы с заглавной — Java, типы с большой T — Delphi, локальные с прописной, приставки sz, n, psz) были сделаны не от хорошей жизни. Не было и наверное ещё нет хороших инструментов.
>По поводу вашего примера. Если ввести оператор is для определения перменных, то необходимо запретить идентификаторам содержать подстроку «is». Иначе полчим, что Connection is ready is Boolean — весьма неоднозначная конструкция.
>Да, ключевые слова должны быть запрещены, это уж как водится ;)
Это тоже не от хорошей жизни. В моей среде не будет таких ограничений, будет полная свобода, вплоть до абсурда:
функция функция(параметр параметр, параметр параметр);
т.е. функция типа функция с двумя параметрами типа параметр, причём типы параметров разные. Например один наследник строки, а другой числа. Но это будет говнокодом и плохим стилем :)
да
>commit messages?
Среда должна сообщать какое действие было сделано, а комментарий должен сообщать зачем это было сделано. Контроль версий текста избыточен. Например, я переименую переменную или тип, класс или я добавлю пробелов для читаемости или разобью длинное выражение на несколько строк, то все эти действия не требуют перекомпиляции, а значит и версия не изменилась. Переименования тоже можно не коммитить, но страшно.
И ещё хочу отделить интерфейсный код от логики программы. В этом плане тоже недостаточно продумано, т.к. часто интерфейс и логика пересекаются.
Вспомогательные функции(надеюсь я понял правильно, что это функции, находящиеся вне классов) будут принадлежать проекту и будут глобальными. Каждой функции или классу можно сделать права доступа(например: функцию не видит никто, кроме класса A; функция друг класса B — т.е. имеет неограниченный доступ к личным полям класса и т.д.). И скорость компиляции не будет зависеть от кол-ва функций в пространстве имён.
inline будет. Более того, если я обычную функцию помечу как встроенную, то все места, где используется данная функция будут перекомпилированы автоматически.
Т.к. файлов не будет, не будет и заголовков, а значит нет проблемы многократного включения.
>Или это к пункту 3 или я не понял суть вопроса
Автоподстановка слов как в поиске google. Т.е. если я объявляю переменную: «Количество целей», то я хочу видеть слово «количество» в выпадающем списке после набора, скажем первых трёх букв.
>А сейчас разве нет? Ставим breakpoint в функции и отлаживаем её
Точка останова хороша, но иногда до выполнения функции может пройти много времени.