Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2011, 17:14   #171
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я против шаблонов по типу С++.
лучше уж генерики.

вообще насчет бумаги все верно, там то красиво, а на практике оптимизаций нужно будет до*** проводить.(хоть не грозит проблема асм->bin)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 00:53   #172
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в общем небольшой итог синтаксиса(и его вкусностей):

что уже решено:
1)синтаксис сишного стиля.
2)препроцессор отсутствует.
3)классы: один родитель, множество реализаций интерфейса.
4)перегрузка операторов, ужесточена немного по сравнению с С++.
например насчет операторов смещения(обязательны оба), и насчет операторов сравнения.
запрещена одновременная реализация присвающего оператора(+=) и не присвающего(+).
так же думаю вводить ограничение по правилу "от перемены мест слагаем/множителей сумма/произведение не меняется".
для некоторых интерфейсов так же будет введено дополнительное ограничение.
5)шаблонов не будут, будут генерики.(правда это больше разница для компиляции)
6)возможность ограничения параметров генериков:
Код:
class A<IAriphmetic t>
{
    public A(t d);
};
в отличие от указания интерфейса в качестве параметра, здесь будет передан объект реализующий интерфейс, а не реализация интерфейса, что даст возможность изменять обьект(например копировать, или RTTI).
7)автовывод типов(в том числе для параметров функции, для него идет прогон по коду в цели анализа кода функции(может там есть зацепка) или же по вызову функции).
если нет возможности понять то ошибка.
8)тип по типу аналогично decltype из C++11.
9)делегатам быть)
причем два принципа.
delegate==указатель на одну функцию.
event==список вызова.*
10)type&==ссылка.
type*==итератор этого типа.
11)foreach нужен.
12)лямбды нужны.
13)компилятор будет анализировать функции на побочность.
если функция не имеет побочного эффекта, то она может быть отложена до необходимости*.
все это будет помечаться в итоговом файле если библиотека.
14)нет указателям.
15)
Цитата:
класс по умолчанию(по аналогии с пространством имен по умолчанию) что позволит писать просто функции.
16)class-helper'ы думаю полезны и нужны.
17)ведение документации прямо в коде, причем для библиотек последняя включается в саму библиотеку.
18)компилятор изолирован от других dll(не наших), доступ к ним только через механизм наподобие маршалинга.
19)поддержка более удобного синтаксиса для RAII.
что-то вроде:
Код:
using(auto f=new File("1.txt"))
{
    //code
}
в using шапке можно лишь обьявлять переменные(через запятую) создавая/инициализируя их, если все созданы нормально, то блок перейдет внутрь, а если нет...
хм, думаю полезно может оказаться чтото вроде else для using(эта часть обсуждаема)

сборщик тут не нужен(но компилятор проследить за уходом переменных наружу)
что в обдумавании(или требует изменений):
1)
Цитата:
Сообщение от Сtrl Посмотреть сообщение
Вот такой можно еще синтаксический сахар:
Код:
while (...)
{ ... }
else
{ ... }
Ветвь else выполняется, если цикл не выполнился ни разу.
требует изменений, так как невозможно будет понять к чему относится else, к if или к for/while(для циклов с предусловием думаю такой синтаксис полезен)
2)
Цитата:
Согласитесь, это похоже не решение многих реальных задач? Было бы удобно, если бы язык давал возможность безболезненно писать подобные вещи. Например, так:
Код:
foo(x, y, z) = a * b * c // Разбиваем задачу на подзадачи
    where
        a = very_long_calculation(x, y) // Решаем каждую
        b = very_long_calculation(z, y) // подзадачу отдельно
        c = very_long_calculation(x, z)
синтаксис удобен, но это еще нужно обдумать.
3)см принятые решения п 18.
поскольку в else ветке может быть нужно узнать причину невозможности получения ресурсов, то все исключения будут доступны(или через map(точнее аналог), или если одно исключение через lastError, в зависимости от п4).
и насчет else таже проблемка что и в мыслях п1.
4)так же, насчет RAII using.
нужно ли пытаться получить все ресурсы(чтоб сразу узнать обо всех проблемах с ресурсами?

*возможна параллельность, но она не основа, но мысли насчет нее есть.

в общем пока так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 17:05   #173
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)синтаксис сишного стиля.
Фигурные скобки в том числе? А как насчёт отступов? Чтобы отступы обозначали блоки кода? Причём можно дать возможность писать и так, и так, как это сделано в Haskell и, вроде, в Nemerle. Основным способом я бы считал отступы, а фигурные скобки только для того, чтобы выделить большой блок без необходимости выставлять отступы у сотен строк кода (уже после того, как блок написан)

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
8)тип по типу аналогично decltype из C++11.
Что это?

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
10)type&==ссылка.
Я долго думал о том, нужно ли выделять отдельный тип-ссылку и давать синтаксис для конструирования этого типа. Я пришёл к выводу, что компилятор вполне может сам определить, где использовать значения, а где ссылки.

Или вы про передачу параметров функции? Я бы запретил изменять параметры в функции. Пусть лучше функции могут возвращать несколько значений (кортежем, массивом и т.д.)

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
type*==итератор этого типа.
А это зачем?

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
11)foreach нужен.
Я бы назвал его просто for, а обычный for убрал бы - слишком опасен и нечитабелен.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
17)ведение документации прямо в коде, причем для библиотек последняя включается в саму библиотеку.
Это, я считаю, может разрабатываться отдельно уже после создания языка.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
19)поддержка более удобного синтаксиса для RAII.
что-то вроде:
Код:
using(auto f=new File("1.txt"))
{
    //code
}
в using шапке можно лишь обьявлять переменные(через запятую) создавая/инициализируя их
Во-первых, зачем auto? Тип ведь всегда можно будет вывести по конструктору.
Во-вторых, я за такой синтаксис, он красивей:

Код:
let
    fin = File("input.txt");
    fout = File("output.txt")
in
{
    // code
}
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Ветвь else выполняется, если цикл не выполнился ни разу.
Может лучше если цикл вышел не по break'у?

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
foo(x, y, z) = a * b * c // Разбиваем задачу на подзадачи
    where
        a = very_long_calculation(x, y) // Решаем каждую
        b = very_long_calculation(z, y) // подзадачу отдельно
        c = very_long_calculation(x, z)
2)синтаксис удобен, но это еще нужно обдумать.
Обдумать, как будет выглядеть? Т.к. я думаю наличие обдумывать нет смысла - такая конструкция слишком полезна, чтобы её не включать.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
через lastError
Нет, нечитабельный же вариант. Лучше структурированно, как и в случае исключений:

Код:
using (f = File("ololo.txt")
{
}
except (e: FileError)
{
    println("Error! Cann't open file \"" + e.file_name + '"');
}
Или вообще не исключения ловить, а ресурс, при создании которого произошла ошибка (тот же иденти):

Код:
using (f = File("ololo.txt")
{
}
except (f -> e: FileError)
{
    println("Error! Cann't open file \"" + e.file_name + '"');
}
anyx вне форума Ответить с цитированием
Старый 18.12.2011, 17:41   #174
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Чтобы отступы обозначали блоки кода?
фигурные скобки определяют блок.
Цитата:
Что это?
Код:
int t;
decltype(t) d;//d будет такого же типа как и t
больше всего это полезно при использовании вывода типов.
Цитата:
Или вы про передачу параметров функции? Я бы запретил изменять параметры в функции. Пусть лучше функции могут возвращать несколько значений (кортежем, массивом и т.д.)
основное назначение это именно изменение параметров функции.
а при желании возвращать вы всегда сможете структуркой.
Цитата:
Во-первых, зачем auto? Тип ведь всегда можно будет вывести по конструктору.
ну тут не придеться писать тип самому, да и пример не очень.
в более сложных конструкциях может быть полезно.
Цитата:
Может лучше если цикл вышел не по break'у?
я процитировал предложение по этой части.
в принципе и то(если не вошло в цикл) и то(в зависимости от типа выхода) полезно.
но как то нужно это аккуратно внести в синтаксис.
Цитата:
А это зачем?
просто удобный синтаксис для обьявления потокового типа(итератор и поток похожи)
Цитата:
Я бы назвал его просто for, а обычный for убрал бы - слишком опасен и нечитабелен.
я думаю пусть останется.
но будет foreach и repeat циклы, которые куда проще и удобны.

Код:
repeat([identificator],start,end,step)
{

}
identificator это имя для переменной с номером/значением итерации.
тип выводиться автоматически.
[start,end] - промежуток выполнения.(если для шага это возможно то end войдет)
step - шаг выполнения.
цикл так же может идти в обратную сторону, если переменные выпали так.(шаг будет изменен автоматически на отрицательный)
Цитата:
Это, я считаю, может разрабатываться отдельно уже после создания языка.
но хвосты к этому нужны сразу.
Цитата:
Обдумать, как будет выглядеть? Т.к. я думаю наличие обдумывать нет смысла - такая конструкция слишком полезна, чтобы её не включать.
Код:
<func_decl>=<params> 
    where
        <param>=<lambda|func_call>
        ...
так выходит оно?
Цитата:
Или вообще не исключения ловить, а ресурс, при создании которого произошла ошибка (тот же иденти):
значит тот же идентификатор, хорошо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 17:55   #175
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
2)препроцессор отсутствует.
-1
Цитата:
3)классы: один родитель, множество реализаций интерфейса.
-1(по типу шарпа делали?)
Цитата:
5)шаблонов не будут, будут генерики.(правда это больше разница для компиляции)
6)возможность ограничения параметров генериков:
-2
Цитата:
8)тип по типу аналогично decltype из C++11.
decltype появился в С++ 09.
Цитата:
9)делегатам быть)
+1
Цитата:
11)foreach нужен.
+- 0. С одной стороны - полезен, с другой стороны - и без него можно обойтись.
Цитата:
14)нет указателям.
-10000000000000000000
После того как перешёл с Delphi на С++, вапше не понимаю как можно жить без указателей.
Цитата:
19)поддержка более удобного синтаксиса для RAII.
Ну, такое в шарпе тоже есть.

Всё остальное(синт.сахар и прочее) - мне кажется, лишнее.

Но это всего лишь моё ИМХО.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.12.2011, 18:16   #176
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

про препроцессор, можно хоть один аргумент его необходимости?
я и в С++ его не применяю.
Цитата:
-1(по типу шарпа делали?)
Delphi\Java\C#\etc, ибо не вижу в этом смысла.
плодить кучу VMT, и тп и тп.

шаблоны ужастно тормозят компиляцию, а так же не дают возможности скрывать сорцы.
зачем мне их тянуть если могу обеспечить подобный механизм без этого?
Цитата:
decltype появился в С++ 09.
С++09=>C++0x=>C++11.
Цитата:
С одной стороны - полезен, с другой стороны - и без него можно обойтись.
код гораздо читабельнее становится.
Цитата:
После того как перешёл с Delphi на С++, вапше не понимаю как можно жить без указателей.
пишу на плюсах, отлично живу без них.(иногда лишь как замена ссылке, ибо в С++ ссылка обязана указывать на объект, нет понятия null ссылка)
зато вижу массу ошибок с указателями у других людей.
Цитата:
Ну, такое в шарпе тоже есть.
у меня то не шарп, потому я должен был перечислить это как часть синтаксиса.
Цитата:
Всё остальное(синт.сахар и прочее) - мне кажется, лишнее.
удобство написания и красивость кода не считаю сильно лишним.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 19:26   #177
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
С++09=>C++0x=>C++11.
C++ 09 != C++0x
Цитата:
можно хоть один аргумент его необходимости?
Ну... а #include куда? #ifndef? #pragma once? Ну, скажем так: мне с ним удобно.
Цитата:
код гораздо читабельнее становится.
А мне кажется, наоборот. Нечитабельней.
Цитата:
пишу на плюсах, отлично живу без них.(иногда лишь как замена ссылке, ибо в С++ ссылка обязана указывать на объект, нет понятия null ссылка)
зато вижу массу ошибок с указателями у других людей.
А я вот не могу Мне просто необходима возможность самому полностью контролировать память.

P.S. Понимаю, что не смогу повлиять на то, что вы будете реализовывать в своём языке, поэтому скажу так: хозяин - барин.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.12.2011, 19:48   #178
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Ну... а #include куда? #ifndef? #pragma once? Ну, скажем так: мне с ним удобно.
к черту инклюды, модульность должна быть нормальной.
Цитата:
А мне кажется, наоборот. Нечитабельней.
то есть по вашему
Код:
for(vector<int>::iterator  it=myvector.begin();it<myvector.end();it++ )
    cout << " " << *it;
это очень читабельно?
Код:
foreach(int i in myvector)
    cout<<" "<<i;
куда читабельнее.
Цитата:
А я вот не могу Мне просто необходима возможность самому полностью контролировать память.
по вашим темам пока все что я видел это потерю указателя
тем более через new вы не сильно то её контролируете.
благо язык имеет четкие правила сборки мусора и возможность освободить переменную раньше конца блока.
Цитата:
P.S. Понимаю, что не смогу повлиять на то, что вы будете реализовывать в своём языке, поэтому скажу так: хозяин - барин.
просто нужны аргументы к этому, насчет, например, указателей не одна страница осмыслялась, вердикт был принят.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 20:51   #179
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Пепел Феникса, всем все равно не угодишь .

Цитата:
Мне просто необходима возможность самому полностью контролировать память.
Это мания. Лечить ее нужно. Таких задач, требующих явного контроля - раз и обчелся.
Цитата:
вапше не понимаю как можно жить без указателей.
Раньше как-то обходились же. Также как и сейчас многие обходятся. Это при том, что в Дельфи указатели тоже есть.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 18.12.2011 в 20:55.
Utkin вне форума Ответить с цитированием
Старый 18.12.2011, 21:00   #180
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

2Пепел Феникса, А как Вы собираетесь реализовать автовывод типов и перегрузку функций вместе? Как генерическую функцию? Тогда что с примитивными типами, вроде int? Будут генерироваться специализированные ф-ции для примитивов, или параметры будут упаковываться? В любом случае, я против автовывода, так как это, как правило, сильно замедляет компиляцию.

И ещё кое что. Уверены ли Вы по поводу отсутствия уборщика мусора? Мне кажется, ссылочная семантика и отсутствие уборщика мусора плохо скажутся на простоте контроля над памятью.

И есть ли реальная необходимость в decltype, если нет шаблонов?

Насчёт foreach, отсутствия препроцессора, анонимных функций и анализа на побочность функций - это я за, также хочу проголосовать за callbyname функции, и возможность определения неизменяемых переменных, а также за кортежи.

Не вижу смысла в п. 14, п. 18 и Обдумывание.п.2.

2_-Re@l-_, C++09 не существует. decltype официально принят в C++11. И да, препроцессор не нужен, можно покрыть весь его функционал модулями и чем-нибудь вроде D-го version или static if
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли подобный текст перевести на человеческий язык? alexxx777 Помощь студентам 0 24.05.2010 19:56
Как создать вид подобный SolidWorks. KemanSR Общие вопросы C/C++ 6 04.05.2010 21:30
Добавить модуль в phpnuke-подобный движок Able2Know Фриланс 3 23.04.2010 16:29
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55