ya_lang (ya_lang) wrote,
ya_lang
ya_lang

список задач с временами и порядком действий

Часть 1 - база чтобы перейти самому на Ya и начать рекламу и переписку с чужаками (35.75 - к серед декабря, начал от 34, потом добавлял)
+ узнать как писать unicode 2 и 4 байта (0, т.к. переписка и чуть пробовать)
+ запуск компилятора (MSVC6) для компиляции # надо делать сразу - завтра. (2 - реально где-то 1.5 час и еще была проба на час = 2.5ч)
+ операция ',' применима по разному: 1,,,2; ,,,2; 2,,,; ,,,,; (1 - начал 11.14 вечером - кончил 11.15 к вечеру, т.е. за .75)
- контроль типов в выраж сделан криво, надо вернуть YOp (.5)
. заведение новых операторов - пока без возможности вариации типа [else statement els] (11.05: еще 3 дня - реально кончил 11.06 вечером т.е. 2 дня но не доделал)
+ лексер под иденты, знаки и заново определяемые константы - после этого возможность по дополнению синтаксиса и лексики готова (лексер 3, константы еще 2 ->5 - лексер знаков .5дня, иденты допустимы но пока не исп, заново определяемые константы не поддержаны -> реально лексер только знаков 1 день)
. + комментарии /*...*/ можно поддержать вложенные - пока не предпол делать -> реально 2 часа
+ определение и использование новых операций, которых не было, т.е. с заведением новых лексем. (11.07 середина дня: 2 дня на простые операции -> реально уже 4 - доделал 11.14 из них 1 день на другое, т.е. всего 6.5дн вместо 2 - пока правило в 3 раза держится)
- в LL1 недоработка - в YLexema должно быть 3 Priority для pre in post (.5 - т.к. переделывать YExpr чтоб пользовался)
. двойная компиляция в полном обьеме - чтобы любые вычисления compile time стали возможны и # мог генерировать любой новый код. (типа 6 - начал 11.15 .75)
. - приведение в порядок различий между runtime и compiletime (3)
. - вызов компилятора в процессе (2)
. - формирование .prj файла (1)
- многострочные строковые константы разрешить без \n\. Кроме того, быть с пробелами в строке как в Ceylon - лишние пробелы на след. строках удалять (1)
- основы - классы и их использование, функции и контроль типов, преобр типов в выраж (6)
. - классы и их использование (3)
. - функции и их вызов (1)
. - и контроль типов для функций (1)
. - операция преобразования типа теперь пишется: тип выражение - никаких скобок, запрещены вокруг типа. Выраж может быть в скобках без проблем. (1)
- модули и убрать файл проектов (6)
. - module name; переход на модули (1)
. - using module, module... и где модули - module Syntax "Ya/Syntax.Ya"; (2)
. - убрать файл проекта и местополож файлов по исходнику. И генерация .Prj файла (3)
- unicode 1,2,4 байта (3)
. - понять как писать unicode тексты 2 и 4 байта (0, это переписка и чуть проб: надо сразу узнать как писать unicode, т.е. завтра)
. - понять как это читать и обрабатывать (1)
. - делать как придумаю (1)
. - теоретически надо сразу сделать иденты разные, но тут не знаю куда копать. Скорее больше спрашивать других чем делать (1)
К этому моменту синтаксис, лексика, unicode готовы - фактически вся основа языка. Оценка времени - наверху в скобках - а всего 36 дней, а начало работ ~10.11.12, т.е. конец части 1 16.11.12

Часть 2 - перейти самому на Ya и начать рекламу и переписку с чужаками (6)
- ЖЖ (4)
. - опубликовать в ЖЖ переписку со своими (1)
. - реклама в ЖЖ - по мелочам (1)
. - реклама по новым другим языкам, а также по фанатам C++ C# Java Pascal Delphi, не знаю, реально знаю - надо сделать но не рассчитывать что толк будет (2)
- перевод меня на Ya. Правда из С++ в Ya придется руками переделывать, но начать надо с этого (2)

Часть 3 (6-7)
- ! - assert внутри выраж - expr! значит выражение вычисляется как обычно и после этого на результат выраж делается assert (1.2)
. - postfix op expr! с реализацией для bool и * (0.2)
. - для указателей щитать что false не только 0 но и любой указ по которому залезть в память нельзя - тут надо узнать простое правило опр по значению адреса что хорошо и что подозр. Вероятно 1.меньше некой const плохо, 2.0xC... 0xD... - тоже плохо (1)
- внутри модуля разрешить пользоваться короткими идентами, а когда пользуются извне - к идентам автоматом добавляется имя модуля, а когда из другой подсистемы (не знаю как правильно назвать Gen, Ya, Kle...) - то еще и букву-имя подистемы. Это моя замена namespaces. Впрочем имя модуля-подсистемы разрешить давать с '.', напр 'Gen.' или 'Act.' (2-3)
- разрешить в идентах знакосимволы. Знаки которые нельзя - '(' ')' - иначе пробл с вызовом функций. Лексинг - YSigner. Но начало обязат от стд идент (1)
- функции без скобок: YLexa next { return *++Lexes; } Собсна проблема тут только в том что по использованию нельзя понять чем пользуешся - перем или функц (2)


Часть 4 (3+1+2+1+1+3+3+1+1 =16)
- switch (3)
. - вместо case писать ? - это гораздо лучше чем ничего не писать - и коротко и ясно что case (0)
. - в switch после ? может быть несколько вариантов через запятую. И с диапазонами 10..20. '..' это лексема, не 2 точки (2)
. - в switch else: = default: (0)
. - в switch каждый case автоматически заканчивается break кроме случая написания continue для продолжения в след case - тут непроста реализация (1)
- break for...; continue for; (1)
- значения параметров по умолчанию, типа void hello(String name="World") - надо разрешить все параметры делать с умолчанием (т.е. можно с умолчанием а после без) - этим польуются так: при вызове если хочеш умолчательное знач ничего не пиши на месте параметра, типа f(,,5) (2)
- ** - возведение в степень, должно работать для целых и double степеней (брать корень) (1)
- str+str+str : рядом написанные выраж типа строка через + конкатенируются, в том числе с не строками. Пример: char[] name, hello = "Hello, " + name; (2)
. - Но: тип преобразования не укажеш %d %4d %.*s. Кажется вот как интересно сделать: "Hello %s!" + name; - форматирование пишется для 1 аргумента. Не уверен что пойдет, надо пробовать
- else как инфикс операция: в выражениях у которого первый арг оценивается как bool и пропускается если true а иначе после else. Пример: char[] hello = "Hello, " + (name else "world"); (1)
- Внутри тела # функции по код умолчанию идет на выход как препроцессированный. А вот что начинается с #, например #{...} или #if()...else...; - это исполняется compile time. Т.е. грубо - # это compile time, а просто - run time. Теоретически в обычном коде можно написать #if() - но оно должно пользоваться только compile time вещами, т.е. типами и кодом и константностью но не run time, например не аргументами (3)
- нужны массивы (ну типа массивы) с другим индексом. По сути хеши. Это ... а надо ли это делать частью языка? Игорь говорит что в Java-C# это часть языка, а нафига? Если можно сделать как либу - так лучше. (3)
- опции компилятора разрешить задавать в исходнике. Синтаксис - типа pragma. По сути обычное дело для # (1)

Часть 5 (7)
- желательно сделать программу которая переделывает С++ в Ya, раз уж Ya не принимает чистый C++. Причин много - преобр типа пишется type expr а не (type)expr или type(expr). - switch ?: - i else "World" - char|*? st; (7 - но реально это делается впараллель с другими работами)
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments