LINUX.ORG.RU

Как выучить C# за 21 день имея только опыт Common Lisp? Надо всего лишь...

 , , , ,


1

8

Вобщем, я тут в своей библиотеке для интероперабельности Common Lisp и .NET - запилил мега-фичу - прокси-классы.

Это такие классы, лисповые, которые с помощью магии метаобъектного протокола CLOS и немного System.Reflection.Emit - прикидываются .NET классами, а их объекты, соответственно - .NET объектами.

Это позволяет бесшовно интегрироваться с .NET кодом, например реализовывать .NET интерфейсы или вон, идиоматически писать на WPF, с MVVM, биндингами, командами и всем прочим.

Вон пример приложения, это браузер пакетов(лисповых неймспейсов) CL: https://files.catbox.moe/77wdbn.png

https://github.com/Lovesan/bike/blob/master/examples/wpf.lisp (потом как-нибудь еще добавлю пример с Avalonia, чтобы было кроссплатформенно вообще).

Вот соответствующий XAML. Как видно, вьюха напрямую биндится к свойствам вью-моделей, как будто у нее под капотом C#. https://github.com/Lovesan/bike/blob/master/examples/WpfUserControl.xaml

Код в принципе там понятен, особенно тем кто имел дело с WPF/Avalonia. Но документацию надо бы написать, да, работаю над этим. Докстринги это хорошо но мало.

★★

Биндинги ненужно к ненужно. Молодец, ты потратил своё время впустую.

Я раньше топил за C#, но тут недавно выяснил, что на нём нельзя эффективно реализовать хипстерские зелёные потоки. C# упал в моих глазах.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Вообще C# как язык, говно конечно. Конечно, не такое говно как Go, С++/Rust или, упаси господи, JS/TS и пыхоплеяда(PHP, Python, Ruby, Perl), но вообще говоря, говно.

Даже несмотря на последние нововведения в язык со всем этим ФП, выводом nullable и синтаксическим сахаром.

Но, дотнет как платформа - очень хорош. Особенно в плане количества и качества библиотек, стабильности и обратной совместимости, и переносимости.

lovesan ★★
() автор топика

Осталось понять нафига биндить один хороший полумертвый ЯП в другой ЯП который живой но полное гавно.

Конечно всякое бывает нужно, но люди которым такое нужно вызывают глубокое сочувствие… :-)

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от AntonI

Ты как-то узко мыслишь. Во-первых, биндинги происходят не между языками, а между CL и платформой .NET

Во-первых, CL это как и .NET не язык, а метаязыковая виртуальная машина.

Во-вторых, CL вполне себе жив и здравствует.

В третьих, платформа .NET - пожалуй лучшая среди мейнстримных.

В отличие от той же JVM, она подходит для огромного количества языков, в том числе как высокоуровневых функциональных(там есть tailcall, глобальные функции в модулях вне классов, и прочее), так и низкоуровневых(там есть и Value типы, и указатели и т.д.).

В отличие от LLVM, код на ней, несмотря на высокую производительность из-за JIT(вернее runtime AOT, т.к. дотнет вообще никогда не интерпретирует байткод), переносим в бинарном виде. Опять же, ее байткод несравненно проще LLVM, и предоставляет GC из коробки. Качество реализации GC при этом на высоте.

Потом, под .NET существует огромное количество библиотек на любой вкус и цвет, от драйверов БД до GUI фреймворков. Многие вещи официально поддерживаются Microsoft, а не умственно отсталыми калеками-аутистами как в случае какого-нибудь JS.

Опять же, качество библиотек и фреймворков у .NET на порядок, если не на пару порядков, выше чем у пыхоплеяды(Perl, PHP, Python, Ruby), помойки вроде JS/TS, инструментов для умственно отсталых типа Go, и игрушек для шизофреников вроде C++/Rust.

Местами качество даже выше чем в JVM экосистеме (.NET разработчики не так склонны к AbstractProxySingletonFactoryStrategy-дерьму).

lovesan ★★
() автор топика

Сишарп ненужен вместе со своей сраной виндой, надеюсь известные события со временем сократят их присутствие на 1/8 части суши в пользу здоровой гетеросексуальной связки linux и c++

alex1101
()
Последнее исправление: alex1101 (всего исправлений: 1)
Ответ на: комментарий от alex1101

У платформы .NET - MIT лицензия, и более того, она кроссплатформенная.

Уровень осведомленности о .NET у тебя - как у красноглазого недоучки, который только-только слез со ZverCD.

lovesan ★★
() автор топика
Ответ на: комментарий от lovesan

MIT лицензия, и более того, она кроссплатформенная

Лапша на уши для малахольных лопухов, которые считают что декларируемое = реальное. В реале там хозяин Микрософт.

alex1101
()
Последнее исправление: alex1101 (всего исправлений: 1)
Ответ на: комментарий от Neuromagus

Если говорить о C#, то на нем невозможно писать без инструментов JetBrains, поэтому варианта только два - либо Rider либо VS + ReSharper, но Rider мне не зашел, и эргономика продуктов JB мне на самом деле не нравится, и к VS я как-то привык.

Для правки каких-то простеньких вещей или для экспериментов, иногда использую че первое придет в голову - тут и VSCode, и Vim и Emacs.

lovesan ★★
() автор топика
Ответ на: комментарий от qulinxao3

Ничего, конечно.

Несмотря на его возраст(первое упоминание начало-середина 80х, ANSI стандарт 1994 года), ничего лучше еще не придумали.

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

lovesan ★★
() автор топика
Ответ на: комментарий от alex1101

На C# хотя бы вообще возможно писать.

На помойках типа C++/Rust, JS/TS, Go, Python и прочего что я упомянул - писать невозможно в принципе, даже с инструментами от JB.

lovesan ★★
() автор топика
Ответ на: комментарий от alex1101

Python любят люди, либо не соображающие в программировании и CS вообще, для которых это побочная деятельность(ученые, менеджеры, итд), либо идиоты, которые в программировании мыслят категориями синтаксиса и не осилили скобки.

Для первых - Python это такой новый Visual Basic for Applications, каким Python вобщем-то изначально и задумывался и каким и является.

lovesan ★★
() автор топика
Ответ на: комментарий от lovesan

многие лисперы сомневаются что Clojure это лисп

Однако больше похоже на лисп, чем C#. Если это не так, можете бросить в меня камень. Матёрая платформа прилагается, и там не обязательно быть опущенным шиндузятником даже. Внезапно!

bread
()
Ответ на: комментарий от bread

Похоже это в каком смысле? Скобки круглые есть? Ну так и в Си есть.

Лисп это не про скобки и префиксную нотацию. Более того, все диалекты лиспа, вобщем-то и имеют слово «лисп» в названии.

Был кстати такой язык Dylan, который несмотря на си-подобный синтаксис, был куда больший лисп чем Clojure.

lovesan ★★
() автор топика
Ответ на: комментарий от Nervous

Всмысле прямо говорят, что Clojure это не лисп, т.к. у этого языка отсутствуют фундаментальные характеристики лиспа.

Это и Столлман кстати говорит, среди прочих.

lovesan ★★
() автор топика
Ответ на: комментарий от lovesan

Особенно в плане количества и качества библиотек, стабильности и обратной совместимости, и переносимости.

I want to believe. Постоянные танцы МС с переделыванием всего и вся, которые начались с введением .NET Core, платформе не пошли на пользу. Не пойми меня неправильно, выкидывание на помойку .NET Framework и замена его на Core это одна из лучших вещей, которая произошла с платформой. Просто все ожидали, что после изначального бардака с миграцией, который продлится лет 3-5, всё нормализуется, отвалившиеся тулы/библиотеки будут портированы на Core и можно будет спокойно пилить дальше.

Вместо этого разрабы .NET решили адаптировать подход аля Ноде.ЖС, с выбрасыванием на помойку ключевых компонентов .NET Framework, выкатыванием полусырых библиотек (STJ без поддержки нормального полиморфизма, ЛОЛ), зоопарком из кофликтующих между собой NuGet пакетов и их версий, цирк с netstandard и бесконечным переделыванием Host/Startup, помойкой из переименованных пакетов, хипстерами/смузи и прочими прелестями Ноды. Зачем? Видимо пытаются заманивать молодое поколение разработчиков, я хз.

Качество более-менее присутствует лишь в основных частях .NET. Чем дальше от ядра, тем кривее руки. Даже такие библиотеки, как Azure SDK (напомню, Azure - один из крупнейших источников доходов МС), писались вообще левой пяткой и объявляются deprecated каждую неделю.

Откуда ты взял количество, непонятно. Тот же .NET Foundation содержит лишу пару сотен проектов, смехотворное количество для платформы со стажем в 20+ лет. При этом примерно треть из этих проектов - часть .NET или проекты работников МС. Действительно годного и независимого от финансирования МС там лишь пара десятков.

За пределами Foundation’a можно встретить лишь порты крупных жабовских библиотек, либо библиотеки-клиенты к продуктам других крупных контор. Что-то более интересное типа упомянутой выше Avalonia - редкость. Всё остальное - ноде.жс/нпм, только в десять раз меньше и хуже по качеству, и это при том, что нпм не славится качеством in the first place. Найти что-то даже относительно узкоспециализированное - почти невозможно.

В отличие от той же JVM, она подходит для огромного количества языков

В теории - да, но на практике из живых .NET языков только C#. VB.NET сдох (часть интерфейсов того-же STJ уже не совместима с VB, что как-бы намекает). F# заканчивает примерно также, как в своё время закончил Erlang - C# просто стал лучше имитировать F#, чем F# имитирует C#. IronPython/IronRuby сдохли. Для всяких Clojure/Scala поддержка .НЕТ второстепенна и навсегда такой останется. Всё остальное либо узкоспециализированно, либо toy project. Парадоксально, но в случае JVM выбор из живых языков у тебя больше.

Во-вторых, CL вполне себе жив и здравствует.

В наших сердцах.

runtime ★★★★
()
Ответ на: комментарий от lovesan

хм

а есть вариант лиспа но не с cons-ячейкой (т.е точечной парой) - а типо 2-3 ячейка ( т.е точечкая тройка)

имхо подобно 2-3 деревьям vs биндиревья а так же что тройка ближе к е чем 2ка поэтому многие пути короче

т.е язык подобный лиспу но где в качестве фундаментальной структуры агрегат из тройки а не пары частей ?

qulinxao3
()

Вон пример приложения ( < url follows > )

на более всратом image-хосте нельзя было разместить ? или говнее не нашлось :-)

оно не работает..и не кажет

или фаны lisp спецом такое подбирают. Наверное у них есть приватная рассылка «вот самый говянный ресурс на сегодня». Или чёрт его дери даже свой потаённый gopher: //

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 2)
Ответ на: комментарий от lovesan

начиная с cons-ячеек

Фух. Думал, щас как скажет — ридер не приводит символы к верхнему регистру! и всё, крыть мне нечем.

А clojure.lang.Cons в кложе есть, и даже функция cons имеется, хотя и устроено всё это дело не так, как в традиционных лиспах. Я бы сказал, более практично.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Rossiks

если бы ты на вскидку вспомнил ещё ЯП.

Тяжело быть Паскалем — тебя уже даже в срачах не упоминают, выпал из жизни окончательно. Даже перл и руби вспоминают, а паскаль… эх.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

ридера в Clojure тоже нет, и то как разрешаются неймспейсы символов не соответствует лиспу, и куча еще всего

А clojure.lang.Cons в кложе есть, и даже функция cons имеется, хотя и устроено всё это дело не так, как в традиционных лиспах. Я бы сказал, более практично.

А в C# есть Tuple<object, object>, ага.

Нет, нету в Clojure лисповых cons-ячеек.

lovesan ★★
() автор топика

Небольшой оффтоп)

идиоматически писать на WPF

Идиоматически - это не писать на WPF. ИМХО, MVVM сильно переусложняет код. Писали небольшой проект на WPF + MVVM два года, добрались руки до него - переписал на ASP.Net + Vue3. Кода стало в 2 раза меньше и он стал сильно прозрачнее и читабельнее. А если надо десктоп апу - завернул браузер в окошко (в WPF есть готовый) и радуешься жизни

Norgat ★★★★★
()
Ответ на: комментарий от lovesan

тебе не нужны там никакие зеленые потоки, потому что все их юзкейсы покрываются тасками + async/await

Это тебе дядя из Microsoft так сказал? А серьёзные пацаны которые на JVM сегодня сидят, получают пятизначные зарплактки, а не в .NET ложками с кари ковыряются – вот прям сегодня впиливают аналоги зелёных потоков в JVM – лучшую платформу, в сравнении с которой .NET сосёт «в плане количества и качества библиотек, стабильности и обратной совместимости, и переносимости».

И да, кстати, для JVM есть даже Clojure – высокооплачиваемый и не мёртвый Lisp. А что есть для .NET?

EXL ★★★★★
()
Ответ на: комментарий от EXL

А серьёзные пацаны которые на JVM сегодня сидят, получают пятизначные зарплактки

Это не ты. Ты на лоре сидишь на жопе.

П.С. что ты клоун я уже знаю :)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от EXL

Ну что еще можно ожидать от жабофанатика(непонятно правда, как можно быть жабафанатиком в 2023 но ладно).

Clojure, как я выше сказал, это не то чтобы лисп.

Качество проектов под JVM точно не лучше .NET. Их больше? Наверное. Но больше - именно васянских поделок. И с не совсем васянскими все тоже не очень хорошо. Например практически все, что делает Apache Foundation это абсолютно всратое говно.

JVM как виртуальная машина же это трешак и срань по сравнению и с .NET и с какими-нибудь продвинутыми реализациями CL.

lovesan ★★
() автор топика
Ответ на: комментарий от lovesan

ридера в Clojure тоже нет

Да что же это такое — чего ни хватишься, ничего у вас нет! %)

А clojure.core/read на самом деле не читает формы из потока символов, а жарит шаверму на сливочном масле, понемаю. А назвали её так, чтобы никто не догадался.

как разрешаются неймспейсы символов не соответствует лиспу

Не соответствует стандарту коммон лиспа — это чистая правда. Но разве допотопные лиспы, которые тоже не соответствуют стандарту, теперь не лиспы? Elisp тот же?

А в C# есть Tuple<object, object>, ага.

То есть ячейки есть, и cons написать нетрудно, но лиспом сишарп от этого не станет, согласись.

Может, и не в ячейках дело? Гомоиконность, может? S-выражения? Средства синтаксической абстракции? Обширная стандартная библиотека функций, построенная вокруг нескольких базовых типов данных (или ещё лучше, нескольких базовых абстракций с приличными реализациями из коробки)?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 3)
Ответ на: комментарий от lovesan

Если говорить о C#, то на нем невозможно писать без инструментов JetBrains

А как так получилось, что на лучшем языке для .NET платформы оказалось невозможно писать без Java-поделок JetBrains?

Где инструменты?

EXL ★★★★★
()
Ответ на: комментарий от EXL

А как так получилось, что на лучшем языке для .NET платформы оказалось невозможно писать без Java-поделок JetBrains?

Во-первых, сишарповых же и поделок(ReSharper), во-вторых, на Java писать невозможно даже с ихними жабаподелками - блевать тянет.

lovesan ★★
() автор топика
Ответ на: комментарий от Norgat

Вся сложность которая там есть - на самом деле нужна. Но это начинаешь понимать когда пишешь что-то действительно крупное.

Ну и от поделок на том же JS обычно впечатление обратное - в них не разобраться, и часто там насрано.

lovesan ★★
() автор топика
Ответ на: комментарий от runtime

За пределами Foundation’a можно встретить лишь порты крупных жабовских библиотек

Это какой-то мир нулевых. Верните мне мой 2007й. Нет, это, конечно, не так.

Всё остальное - ноде.жс/нпм, только в десять раз меньше и хуже по качеству

Тоже нет. Параша из npm это вообще ни с чем не сравнимое нечто. В случае жабы ситуация кстати не сильно отличается от .NET - мавен забит васянским говном. Есть Apache Foundation, но и в нем большинство вещей - срань господня.

VB.NET сдох

Не уверен что он сдох, но если сдох - так и что? Он был нужен только для одной вещи - перетащить разработчиков с VB на C#. В начале нулевых.

IronPython/IronRuby сдохли.

Как и Jython. И хорошо бы и оригинальные поделия бы тоже сдохли, на самом деле.

закончил Erlang

Никуда он не закончил.

Для всяких Clojure/Scala поддержка .НЕТ второстепенна и навсегда такой останется.

А вот эти языки, которые выехали в свое время чисто на хайпе, по моим наблюдениям, пик хайпа пережили и медленно загибаются.

Парадоксально, но в случае JVM выбор из живых языков у тебя больше.

На JVM только два реально живых языка, это Java и Kotlin.

В наших сердцах.

Он используется в хвост и в гриву, и немало, в том числе в крупных банках в РФ. Про него уже почти 40 лет говорят что он помер, а никак не помрет. Пережил причем огромное количество моднявых хайповых язычков. Реализации CL постоянно развиваются(вон в SBCL недавно добавили parallel mark region GC), библиотеки поддерживаются, появляются новые.

lovesan ★★
() автор топика
Ответ на: комментарий от EXL

А как так получилось, что на лучшем языке для .NET платформы оказалось невозможно писать без Java-поделок JetBrains?

Это ты и с пятизначной зарплаткой не смог бы :) А серьезно никто не мешает писать на шарпе без раздутой блоатвари мозговжухов и без их костылей для слабых мозгом, которые уже не могут без подсказок ходить и дышать, а в качестве обоснуя для слоптимизаций не могут придумать ничего лучше «IDE выдало придуприждалку!» или «так советует надмозг!» :)

slackwarrior ★★★★★
()