Здравствуйте, eugene0, Вы писали:
PE>>Нет языка Курсик — язык управления курсором для ЭВМ Микроша
E>Как счастливый владелец ЭВМ Микроша (в прошлом), должен сказать, что такого языка там не припомню
Хм. Может и не Микроша. Вообще это шутка была. Но язык такой был указан в одном из старых номеров Юный Техник
Здравствуйте, neiroman, Вы писали:
N>1. ABC ALGOL — An extension of ALGOL 60 with arbitrary data structures and N>2189. Zuse — (named for Konrad Zuse, the designer of the first modern programming
Маньяк!!!
Да ещё и обкусал хвосты строчек.
Нет ни мейнстрёмных языков, ни экзотики. Вот J есть, а K нет. CaML есть, а OCaML и F# нет, не говоря уж про MoscowML (хотя SML.net есть).
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, VladD2, Вы писали:
VD>>А расширять семантику можно и в C#. Там же операторы можно определить для типа?
V>Можно, только очень осторожно. Например, операторы сравнения могут возвращать только булевское значение.
Неправда. Вот этот код отлично компилируется:
using System;
using System.Collections.Generic;
using System.Text;
namespace OperatorsTest
{
class TestClass
{
static void Main(string[] args)
{
TestClass a = new TestClass("test1");
TestClass b = new TestClass("test2");
Console.WriteLine(a == b);
Console.ReadLine();
}
public TestClass(string str)
{
_str = str;
}
private string _str;
public string Str
{
get { return _str; }
}
public static TestClass operator ==(TestClass a, TestClass b)
{
return new TestClass(a.Str + b.Str);
}
public static TestClass operator !=(TestClass a, TestClass b)
{
return new TestClass(a.Str + b.Str);
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public override string ToString()
{
return Str;
}
}
}
V>Нехватает что-то вроде наличия перегружаемого оператора -> как в С++. Из-за этого сложновато писать обертки и прокси. (про рантайм прокси и CBO обсуждать неохота)
Ошибся, сорри. Для того, чтобы вспомнить, что именно не получалось при перезагрузке операторов пришлось откопать давнишний проект.
Попробуй откомпилить следующее:
public class MyStream
{
public static MyStream operator<<(MyStream stream, object arg) {
Console.Write(arg);
return stream;
}
}
(Наверно когда писал вспомнилось, что были проблемы с перегрузкой операторов, где участвуют символы "больше"/"меньше")
Еще домашнее задание: попробуй сделать генерик-вариант какого-нибудь оператора.
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, anton_t, Вы писали:
V>Ошибся, сорри. Для того, чтобы вспомнить, что именно не получалось при перезагрузке операторов пришлось откопать давнишний проект. V>Попробуй откомпилить следующее:
V>
V>
V>(Наверно когда писал вспомнилось, что были проблемы с перегрузкой операторов, где участвуют символы "больше"/"меньше")
V>Еще домашнее задание: попробуй сделать генерик-вариант какого-нибудь оператора.
Ну с оператором сдвига согласен, излишне они перестраховались. А с генериками:
public class MyStream<T>
{
public static MyStream<T> operator<<(MyStream<T> stream, int arg) {
Console.Write(arg);
return stream;
}
}