MSElang : обсуждение фишек

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Re: MSElang : обсуждение фишек

Сообщение alexey38 » 17.11.2013 09:08:45

debi12345 писал(а):В С++ эти операторы переопредляются под конкрентный тип, если надо.

Расстрел на месте (увольнение).
debi12345 писал(а):Тем что инлайновая и встраивается как L-value в выражения.

Виселица и расстрел (увольнение без выплаты выходного пособия, как за хулиганство, т.е. по статье).
debi12345 писал(а):Могло бы быть злом если безальтернативно принуждалось к использованию. А так имеем фишки для ценителей

Кому надо, те пусть пишут на С++. Не нудно из Паскаля (и его продолжений) делать какие-то извращения. Для извращений и извращенцев есть С++ (ассемблер более лаконичен, чем С++).
debi12345 писал(а):Типичный современный xUSSR-программер знает глубоко и/или необходимый минимум как правило С, С++, Assembler, Pascal, PHP/Java, TCL или Python (Lisp-подобные).

Каждый в той или иной мере знает добро и зло. Если Вы знаете рецепт яда, то это не повод его изготовить и выпить. Знание на то и даются, чтобы уметь осознанно выбирать лучшее. Для любителей особо тонкого извращения есть С++.

Лет 20 назад с друзьями прикалывались (нас было 5 или 6 человек), устраивали конкурсы между собой, кто напишет более непонятный код. По-моему размер исходника ограничивали 1 кб (или немногим более). И нужно было написать так, чтобы другие за 1 час не поняли, как это работает. В этом конкурсе все естественно писали на С/С++, Паскаль и даже ассемблер никто не выбрал. Прикол в том, что ни одну работу не удалось разгадать за 1 час. Самую сложную разгадывали по-моему более суток.

Добавлено спустя 4 минуты 17 секунд:
debi12345 писал(а):Можно для их отрисовки использовать специальной очень жирный или масштабированный (в ширину) шрифт

debi12345 писал(а): В MSEide-то этого (автонаписание, выделение цветом) нет, и BEGIN+END реально замусоривают (делают плохочитаемым) код.

Вы предлагаете взаимоисключающие предложения. Хотя есть компромисс, сделайте шрифт, в котором символ "{" будет иметь изображение слова "begin", а символ "}" изображение слова "end". Но по-моему это извращение. Подсветка синтаксиса сейчас есть даже в штатной комплектации FARа. Если его еще нет в некой среде, то это нужно взять и сделать, а не язык морочить кракозябрами.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 17.11.2013 11:03:14

Можно для их отрисовки использовать специальной очень жирный или масштабированный (в ширину) шрифт

Единственный минус круглых скобок - меньшая заметность при цветовой подсветке, все остальное - плюсы. Спецшрифт (в MSEide,..) поможет пофиксить этот единственный минус - останутся одни плюсы :)

Лет 20 назад с друзьями прикалывались (нас было 5 или 6 человек), устраивали конкурсы между собой, кто напишет более непонятный код.

"C" не вынуждает писАть непонятный код с L-value-инкрементами. Вот кто пишет непонятно - того увольнять. Кто не злоупотребляет - зачем махать шашкой ? Лично у меня ("С" был моим первым серьезно изученным языком) даже идей не было по поводу непонятности :)

Не нудно из Паскаля (и его продолжений) делать какие-то извращения.

Лично для меня (наполовину С-ника) в Паскале не хватает некоторых "вкусностей" и удобств из С :) Вот и предлагаю их инкорпорировать в НОВЫЙ язык - который кстати сразу пошел отклоняться от Паскаля.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение alexey38 » 17.11.2013 11:40:09

debi12345 писал(а):Единственный минус круглых скобок - меньшая заметность при цветовой подсветке, все остальное - плюсы.

Скобки - это кракозябры. Плюсов от скобок нет ни каких, кроме как в математических формулах.
debi12345 писал(а):"C" не вынуждает писАть непонятный код с L-value-инкрементами. Вот кто пишет непонятно - того увольнять. Кто не злоупотребляет - зачем махать шашкой ? Лично у меня ("С" был моим первым серьезно изученным языком) даже идей не было по поводу непонятности

Любой код с таким инкрементом, кроме сишного цикла for (который сам по своей философии - это корявый оператор) является непонятным, т.к. меняется значения переменных в разных частях оператора. Никакой нужды его использовать в реальных прогах нет. Поэтому за любое использование, кроме цикла - расстрел.
debi12345 писал(а):Лично для меня (наполовину С-ника) в Паскале не хватает некоторых "вкусностей" и удобств из С Вот и предлагаю их инкорпорировать в НОВЫЙ язык - который кстати сразу пошел отклоняться от Паскаля.

Если язык создается для монолога, т.е. один проект - один автор, то без разницы какие возможности языка. Если проект нормальный, 2 и более разработчиков, и срок поддержки 10-20 лет, то язык со вкусностями - это проект на помойку, он никому не будет нужен. Зачем создавать извращенные вкусности, если за них (при первом же их использовании) Вас уволят или лишат премии? У нас практически все сишники добровольно перешли на паскаль, т.к. С++ со своими извращениями так и подталкивает разработчика их применить.

Хороший код - это когда в коде минимум комментариев (очень и очень редко) и нет доки (кроме инструкции юзера), но через 10 лет после его написания любые изменения делаются сходу, причем как автором, так и любым другим программером. В хорошем коде не место вкусностям, как бы они не были привлекательны.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 17.11.2013 11:56:39

С++ со своими извращениями так и подталкивает разработчика их применить

Зря так говорите. Посмотрите красивейший и строгий С++ код BLENDER-а :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mirage » 17.11.2013 12:58:14

debi12345 писал(а):Почему ? Типичный современный xUSSR-программер знает глубоко и/или необходимый минимум как правило С, С++, Assembler, Pascal, PHP/Java, TCL или Python (Lisp-подобные). Многие имели дело с AutoLISP-ом в Автокаде. То есть мы, здесь сидящие - уже немало проанализировавшие что работает, что используется, а что почти нет :)


Ну, во-первых, это "знает" часто на уровне "слышал звон". Например, какое отношение Питон имеет к Лиспу?;)
Во-вторых, знание и анализ разные вещи. Обычно анализируется для чего-то. Вот Вирт проанализировал и Паскаль создал.
Анализ это серьезная работа, которую в рамках уютненькой форумной дискуссии проводить никто не будет.
Это даже заметно по уровню проблем, здесь обсуждаемых.

А что касается обсуждаемого языка, то получится еще один ни с чем не совместимый и потому практически никем не используемый диалект Паскаля.
С отличиями от более распространенных диалектов, нравящимися автору по какой-то причине.
Печально, что огромное количество времени и таланта планируется угробить на это заведомо провальное предприятие.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 17.11.2013 13:36:25

Mirage писал(а):
debi12345 писал(а):Почему ? Типичный современный xUSSR-программер знает глубоко и/или необходимый минимум как правило С, С++, Assembler, Pascal, PHP/Java, TCL или Python (Lisp-подобные). Многие имели дело с AutoLISP-ом в Автокаде. То есть мы, здесь сидящие - уже немало проанализировавшие что работает, что используется, а что почти нет :)


Ну, во-первых, это "знает" часто на уровне "слышал звон". Например, какое отношение Питон имеет к Лиспу?;)
Во-вторых, знание и анализ разные вещи. Обычно анализируется для чего-то. Вот Вирт проанализировал и Паскаль создал.
Анализ это серьезная работа, которую в рамках уютненькой форумной дискуссии проводить никто не будет.
Это даже заметно по уровню проблем, здесь обсуждаемых.

А что касается обсуждаемого языка, то получится еще один ни с чем не совместимый и потому практически никем не используемый диалект Паскаля.
С отличиями от более распространенных диалектов, нравящимися автору по какой-то причине.
Печально, что огромное количество времени и таланта планируется угробить на это заведомо провальное предприятие.


Увы, вынужден согласиться с Вами, верное замечание. :(
Я уже многократно здесь говорил об этом, если делать новый язык, то лучше взять один из Паскалей и вдумчиво доработать его.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение mse » 17.11.2013 14:36:12

That is exactly what I am doing. First make an interpreter/compiler for the syntax currently used by the MSEide+MSEgui project (a subset of Delphi 7/ FPC 2.6.2).
Later changes of the syntax are possible based on the 30 years of programming experience.
I do not trust in Free Pascal anymore because Free Pascal closely follows Delphi and the Delphi development direction makes it less optimal for my projects. I set up the Wiki and started the discussion on mseide-msegui-talk in order to test the future syntax in public and in order to develop the Delphi 7- like compiler already with the requirements of the new syntax in mind. Here again the current design goals of MSElang:
1. Simple.
Reduce the language concepts one has to learn to the minimum, make them as orthogonal as possible.
2. Readable.
MSElang programs should read like a letter.
3. Easy to learn.
Because of 1. and 2. it should be suitable for pupils as first programming language.
4. Powerful
Allow to go down to the bare metal, it has pointers and pointer arithmetic. ;–)
Object orientated high level programming.
5. Fast running
State of the art optimizations.
6. Fast compiling
While defining the language keep in mind how it can be implemented efficiently.

And no, neither Modula2,3,objective... nor Oberon,2,7,component,active... are ideal in my opinion, Delphi 7 is the nearest.

Martin
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 18.11.2013 18:25:57

Народ, спасайте ! Марин не хочет вернуть в Pascal добавлять очень удобную (для меня - даже нерво-сберегающую) фишку "EL[SE]IF", вот горячие дебаты :
if var1 <> 2 then
result:= true;
var1:= 3;
else
result:= false;
var1:= 5;
end;
=========================
Much better :) Even better than "if .. {} else {}".
How about combined "elif/elseif" ? Me think it's highly demanded.

<mse00000@gmail.com> 17 ноября 2013 г., 22:46
Do you have a real example where "elseif" is much better than nested "if"s
or "case"?

Martin
------------------------------------------------------------------------------
Marcos Douglas
<md@delfire.net> 17 ноября 2013 г., 23:17
IMHO I think you didn't understand what Martin want to do in MSE. He
wants a language more orthogonal.
"
So, if you can use if-else-if construction, why he will implement a
if-eleif construction that do the same? :-)

Martin, do you know Lua language? For me it is the simpler language
that exists... of course is a interpreted language, but you can catch
some ideas for MSElang. ;-)
Ivanko B
<ivankob4mse2@gmail.com> 17 ноября 2013 г., 23:37
Nested "else if" starts another hierarchy level. Very inconvineient & messy.
"Case" is for integer switches currently.

Ivanko B
<ivankob4mse2@gmail.com> 17 ноября 2013 г., 23:44
So, if you can use if-else-if construction, why he will implement a
if-eleif construction that do the same?
========================
Personanly me often get messed with "else-if" :)

Martin Schreiber
<mse00000@gmail.com> 18 ноября 2013 г., 0:01
> Nested "else if" starts another hierarchy level. Very inconvineient &
> messy. "Case" is for integer switches currently.
>
Can you show real code?
Martin Schreiber
<mse00000@gmail.com> 18 ноября 2013 г., 0:10

> Martin, do you know Lua language? For me it is the simpler language
> that exists... of course is a interpreted language, but you can catch
> some ideas for MSElang. ;-)
>
Yes, there are some similarities. :-)

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 0:47
Can you show real code?
=================
if a = 0 then
writeln ('a=0');
else
if a = 1 then
writeln ('a=1');
end
else
if a = 2 then
writeln ('a=2');
end
else
writeln ('a=else');
end;
end;

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 0:48
With "elif":
==================
if a = 0 then
writeln ('a=0');
elif a = 1 then
writeln ('a=1');
elif a = 2 then
writeln ('a=2');

Martin Schreiber
That is from a project of you? I mean't code from Podpiska project for
example. I would write above code as:
"
if a = 0 then
writeln ('a=0');
else
if a = 1 then
writeln ('a=1');
else
if a = 2 then
writeln ('a=2');
else
writeln ('a=else');
end;
end;
end;
"
I don't think
"
if a = 0 then
writeln ('a=0');
elseif a = 1 then
writeln ('a=1');
elseif a = 2 then
writeln ('a=2');
else
writeln ('a=else');
end;
"
is much better. In my opinion it is worse because there is no indention
between "if" and "end;" and it hides nesting levels.

Martin

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 12:36
Here "a=else" & "a = 2" depend on the decision for "a=1" which in turn
depends on the one for "a=0". So we have 3 hirerarchy levels. To see
the effect better me add some more padding:
------------------------------
if a = 0 then
writeln ('a=0');
else
if a = 1 then
writeln ('a=1');
else
if a = 2 then
writeln ('a=2');
else
writeln ('a=else');
end;
end;
end;
--------------------------
but really they're LOGICALLY on same hierarcy as "a=0".

PS: Martin, this code is atrociuos ! And with the new (BEGINless)
syntax it can't be simplified even for single command per-branch.
Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 12:43
http://www.cise.ufl.edu/~mssz/Pascal-CG ... loops.html
-------------------------------------------------
4.2. PASCAL Selection Structures.

The PASCAL language provides IF or BLOCK-IF constructs, where the
latter is a variation of the IF statement, as discussed in Section
3.1. We define these statements as follows:
IF..THEN..ELSE statement:
IF..THEN..ELSEIF..THEN..ELSE (Block-IF) statement:

Purpose: The Block-IF statement provides a mechanism for decision
based on multiple logical predicates. This can be useful for grouping
data items into prespecified categories.

Syntax: IF predicate1 THEN actions-if-predicate1-is-true

ELSEIF predicate2 THEN
actions-if-predicate2-is-true
:
ELSEIF predicateN THEN
actions-if-predicateN-is-true
ELSE actions-if-predicates-are-false ; , where
actions-if-predicate-is-true are one or more PASCAL statements
actions-if-predicate-is-false are one or more PASCAL statements

PASCAL also supports nested decision structures, in which an IF
statement contains other IF statements in its list of executable
statements. This allows the programmer to specify decisions based on
concepts or criteria that are hierarchically structured.

Martin Schreiber
<mse00000@gmail.com> 18 ноября 2013 г., 13:06
> Here "a=else" & "a = 2" depend on the decision for "a=1" which in turn
> depends on the one for "a=0". So we have 3 hirerarchy levels. To see
> the effect better me add some more padding:
> ------------------------------
> if a = 0 then
> writeln ('a=0');
> else
> if a = 1 then
> writeln ('a=1');
> else
> if a = 2 then
> writeln ('a=2');
> else
> writeln ('a=else');
> end;
> end;
> end;
> --------------------------
> but really they're LOGICALLY on same hierarcy as "a=0".
>
Then use case:
"
case a of
0:
writeln ('a=0');
1:
writeln ('a=1');
2:
writeln ('a=2');
else
writeln ('a=else');
end;
"
> PS: Martin, this code is atrociuos ! And with the new (BEGINless)
> syntax it can't be simplified even for single command per-branch.
>
I suggest to use a single space for indention only then you get a "end
diagonal" at end, please see the screenshot in previous mail. What about my
objection:
"
In my opinion it is worse because there is no indention
between "if" and "end;" and it hides nesting levels.
"?

Martin

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 13:22
Then use case:
=================
It's INTEGER switch only, AFAIK. And compare expressions may
differentiate - the "case" can't provide that

and it hides nesting levels.
==================
In the example no levels but the top one are expected.

Martin Schreiber
<mse00000@gmail.com> 18 ноября 2013 г., 13:51
> Then use case:
> =================
> It's INTEGER switch only, AFAIK. And compare expressions may
> differentiate - the "case" can't provide that
>
In FPC and possibly in MSElang strings work too.

> and it hides nesting levels.
> ==================
> In the example no levels but the top one are expected.
>
But the levels *are* nested so one should see that they are nested.
"
if a > 3 then
writeln('a>3');
elseif a > 5 then
writeln('a>5');
elseif a >10 then
writeln('a>10');
end;
"
mostlikely does not what the inventor intended. ;-)

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 14:27
strings
==================
Not strings but chars (convertable to integer). And "case" doesn't
allow changing/extending comprare expressions for conditions.

mostlikely does not what the inventor intended. ;-)
==============
First matched branch will be executed :) The same as "if else" but
with much shorted and more readable syntax.
"if else" is designed for cases where structure hierarchy is important.
So we have two approached each for different purpose - for advanced
"case" and structured hierarchy.

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 14:28
*are* nested
=======================
They're nested not more than branches of CASE are nested :)

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 15:17
Since CASE is a partial case (a convinience syntax entention) of ELIF
then rather CASE should be removed than ELIF :)

Michael Schnell
<mschnell@lumino.de> 18 ноября 2013 г., 15:58
> Do you have a real example where "elseif" is much better than nested "if"s

I use such indentation:

if a=b then begin
..x := y;
.end else if c = d then begin
..z := w;
.end else if f = g then begin
..s := t;
end;

with that "an "elseif keyword is not necessary at all and it corresponds
nicely to "case:

case a of
.1:
..x := y;
.2:
..z := w;
.3:
..s := t;
end;

In C I do this with braces instead of begin/end and adding the braces in
the "case" (here "switch") block for each alternative, as C has "fall
through" switch cases.

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 16:01
think this is a very clear and handsome syntax.
===============
as long as FPC has ":=" which definetely misses its brothers :)

case of string.
===============
And no CASE for (strangely discriminated) float/numeric types :) And
"FOR .. BY <step>" for them as well.

Ivanko B
<ivankob4mse2@gmail.com> 18 ноября 2013 г., 16:10
I use such indentation:
=======================
Only the cunny indentation allows to have the code be readable. It's
an workaround :)

as C has "fall through" switch cases.
=======================
Not so bad, BTW.


Как его убедить ? Лично меня ненужная иерахрия "ELSE IF" заставляет лишний (и ненужный!) раз думать и поэтому дико бесит. И так работа = сплоншые головоломки - так еще в мелочах там где недо подкидывают :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 18.11.2013 20:15:54

debi12345 писал(а):Как его убедить ? Лично меня ненужная иерахрия "ELSE IF" заставляет лишний (и ненужный!) раз думать и поэтому дико бесит. И так работа = сплоншые головоломки - так еще в мелочах там где недо подкидывают :)

Не совсем понимаю чем он это аргументирует.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 18.11.2013 20:37:38

Не совсем понимаю чем он это аргументирует.

Тем, что более громоздкая и создающая ненужную (нелогичную) иерархию конструкция "ELSE IF" (а в некоторых случая - "CASE OF" ) может сделать то же самое.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 18.11.2013 20:51:36

Он не прав. Это более логичная конструкция. Если что-то хочется выбросить, то пусть это будет CASE хотя, ИМХО, не нужно этого делать.

Вот такие конструкции его не смущают?
Код: Выделить всё
if expression then
  if expression then
   else
else operator;


Кроме того, if then else это просто ветвление, а if then elsif... это оператор множественного выбора, частным случаем которого является оператор ветвления и оператор обхода. case - тоже частный случай.

А что с остальными конструкциями? Мартин удалит составной оператор или нет?
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 18.11.2013 21:13:06

то пусть это будет CASE хотя,

Плюс CASE - однократное вычисление одной из сторон сравнений.

Мартин удалит составной оператор или нет?

Это который оператор ? "+=" и компания ? Он про что они реализованы в ФПЦ - кажется даже не догадывался :) И я тоже :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 18.11.2013 21:22:38

debi12345 писал(а):Плюс CASE - однократное вычисление одной из сторон сравнений.


Это зависит от оптимизатора и набора ключей. Может быть один переход, а может и несколько. Выполнение оператора if тоже можно оптимизировать сходным образом.

debi12345 писал(а):Это который оператор ? "+=" и компания ? Он про что они реализованы в ФПЦ - кажется даже не догадывался :) И я тоже :)

Это оператор begin end. он используется в конструкциях if, for, while, with, case.

О существовании операторов вида += и о возможности их перегрузки я знаю. Если они кому то нужны то пусть используют C или C++.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: MSElang : обсуждение фишек

Сообщение debi12345 » 19.11.2013 00:34:14

Это оператор begin end

BEGIN вроде будет прихлопнут где только можно - туда ему и дорога. Также будет убрана неоднозанчость по поводу "ставить ';' здесь или нет". Будет "ставить всегда" и все инструкции будут как под многострочные блоки - а значит не нужно ключевое слово выделения блоков (BEGIN). Хотя как будет в функциях ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: MSElang : обсуждение фишек

Сообщение Mikhail » 19.11.2013 01:08:12

debi12345 писал(а):все инструкции будут как под многострочные блоки - а значит не нужно ключевое слово выделения блоков

:?:
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Пред.След.

Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru