Programlama dilinde “bir özellik için yerel destek” ile kastedilen nedir?


15

Biraz "PHP Unicode için yerel destek yok" gibi bir çizgi geçti. Ayrıca Python'un Unicode için yerel desteği olduğunu okudum. Artık utf8_encode()bir dizeyi Unicode'a kodlamak için PHP'deki bir işlevi çağırabilir ve unicode()bir dizeyi unicode'a dönüştürmek için Python'daki bir işlevi kullanabilirsiniz . Peki Unicode'u yerel olarak desteklemek ne anlama geliyor? Ayrıca bazı diller yerel destek için yerel desteğe sahipken, bazılarında yerel destek yoktur. Peki ne demek istiyorsun

X dili yerel olarak Y özelliğini destekler


Aslında, Python 3 unicode'u yerel olarak destekliyor. 2.7 gibi.
nmichaels

Yanıtlar:


16

Bu, belirli bir özelliği desteklemek için geliştiricinin, bir uzantı veya üçüncü taraf ürünü gibi dilin içine gömülmemiş bir bileşeni kullanması gerekmediği anlamına gelir.

Örneğin, PHP'nin unicode için yerel bir desteği yoktur, çünkü PHP'deki dizelerle ilgilenen her işlev unicode'u desteklemez. Örneğin, bir alt dize almak için kullanamazsınız substr, ancak mb_substrMultibyte String uzantısını kullanmanız gereken kullanmanız gerekir.

Belirli bir özellik için yerel bir desteğe sahip olmak için, yalnızca kaynak kod bagajına bir uzantı eklemek yeterli değildir. Bunun yerine, unicode C # veya Java gibi varsayılan kodlama ise PHP'nin unicode için yerel desteği olacaktır.


1
Yani bu sadece bileşenin dilin bir parçası olup olmadığı hakkında mı? Yani mb_stringPHP'nin işlevselliğini kaynağına dahil etmeleri yerel olur mu?
lovesh

1
@lovesh: bu kadar kolay değil. Uzantıyı PHP bagajına dahil ederse, ancak unicode'u varsayılan kodlama yapmadan , yerel olarak kabul edilip edilmeyeceğinden emin değilim. Bunun yerine, unicode C # 'da olduğu gibi varsayılan kodlama haline gelirse, evet, bu yerel bir destek olacaktır.
Arseni Mourzenko

Ya da yerel olarak desteklendiğini, ancak yaygın olmadığını / varsayılan olmadığını söyleyebilirsiniz. Sadece anlambilim.
BlueRaja - Danny Pflughoeft

2
Bir dilin yerel olarak bir tür dizeyi desteklemesi için, en azından bu tür dize için dizgi değişmezleri için bir sözdizimine sahip olmasını isterim. Örneğin, böyle bir şey s = "Müsliriegel"mb;yerine böyle bir şey olurdu s = toMb("Müsliriegel");(bu, elbette,
UTF8'i

11

"X dili yerel olarak Y özelliğini desteklemektedir", Y özelliğini herhangi bir uzantı ya da başka çaba harcamadan kullanabileceğiniz anlamına gelir. Doğrudan dilin kendisinden kullanılabilir.

Örneğin şunu söyleyebilirsiniz,

"C ++ dili yerel olarak aşırı yüklenmeyi destekler."

"Java dili yerel olarak otomatik çöp toplamayı destekler", çünkü otomatik çöp toplama yapan başka bir kitaplık veya araç kullanmanıza gerek yoktur. Dilin (ve platformun) kendisi ile birlikte gelir.


9

Ben okurdum yerli olarak belirttiğimiz bağlamlarda yerleşik . Bir dil bazı özellikler için yerel destek sağlamazsa, dili kendiniz uygulamanız veya bunu sağlayan bir kütüphane veya modül bulmanız gerekir.

Yerli çok şey görebileceğiniz başka bir bağlam , bazı platform veya diğer uygulamalarla ilgilidir. Bu durumlarda, bir şekilde yorumlanmasının veya tercüme edilmesinin aksine platform için derlenmiş anlamına gelir . Bir yerli iOS uygulaması Objective-C gibi bir dilde yazılmış ve koda derlenmiş biri olduğunu işlemcilerin ARM ailesi doğrudan çalışır (iOS cihazlarda bulmak ne olduğunu).


5

Ben bu terimin yanlış kullanımı olduğunu düşünürdüm. Bir şeyin bir dile "yerli" olması için bunun için tesisler inşa edilmesi gerekir. Unicode gibi bir şey için yerel destek, bir şekilde unicode uygulayan dilde ham türlere sahip olacaktır . Genellikle bu dilin bir parçası değil, bir kütüphanenin bir parçası olsa da.

IMHO, dilin varsayılan kitaplığında görünen veya olmayan bir şeyi çağırmak, yerel bir şey yapmaz veya yapmaz.

Bazı örnekler:

C ++, sınıflar için yerel desteğe sahiptir. C değil. Sınıfların yazılmasını ve kullanılmasını sağlayan dil anahtar sözcükleri veya yazım olanakları yoktur, bunları elle kodlamanız gerekir.

C ++ artık C daha yerel bir dize türü var olsa söyleyebilirim. Standart kitaplıkta bir basic_string şablonu var, ancak bu bir dil olanağı değil.

C ++ 11, Unicode değerleriyle çalışmayı kolaylaştırmak için dilin kendisine yeni anahtar kelimeler ve ham türler eklendiğinden, aslında Unicode desteği eklenmiş gibi görünüyor.

Umarım gördüğüm farkı açıklığa kavuşturur.


"Ham türler" kelimelerini kullanımınız beni şaşırtıyor. Açıklığa kavuşturabilir misiniz?
Jeremy Heiler

Python 3'te, tüm dizeler unicode (ayrı bir bytestür var), bu yüzden Python'un unicode'u yerel olarak desteklediğini söylemek adil olur.
Brendan Uzun

Python 2, unicodePython 3'ten daha acı verici olsa da, bir türe sahip olması bakımından da iyidir. C ++, normalde bir dilin parçası olan şeylerin çoğunun kütüphanelerde olması tuhaf bir canavardır.
Robotu Gort

@JeremyHeiler: "Ham türlerin" temel, kompozit olmayan, kütüphane olmayan türler olduğu anlaşılıyor. Örneğin, C does bir dize türü (varsa char[]) ve hatta dize hazır. Tüm "ham türlerin" eşleşen değişmezleri olması gerekmez, örneğin C'deki işaretçiler gerekmez. ( NULLSadece edilebilir dönüştürülmüş için int*)
MSalters

-1

En azından yorumlanmış veya JIT-derlenmiş dillerde "yerel destek", temel olarak, yorumlayıcının altında yer alan önceden derlenmiş işlevselliğe bir bağlantı olan kod anlamına gelir.

Örneğin, JavaScript'te, Firefox'ta window.open öğesini uyarırsanız, büyük olasılıkla innardları "[yerel kod]" gibi bir şey söyleyen bir işlev görürsünüz. Tüm referanslar tercümana beslenirken, bağlam ve kapsam oluşturmak için adımlar atılmak gerekirken, iç kısımlar temel olarak önbelleğe alınır ve kullanıma hazır hale gelir. window.open, muhtemelen bir tarayıcının çalışma zamanı ortamından bir şey çağırır.

Bu, sizin veya başka birinin yazdığı yerel olmayan nesnelerden ve yöntemlerden farklıdır, çünkü bu durumlarda tüm ifadelerinizin yorumlanması / değerlendirilmesi gerekir.

Birisi terimi önceden derleyen bir dile referans olarak kullanıyor olsaydı, sadece derleyicinin aslında tokenleştirdiği ve makine koduna dönüştürdüğü ve kendiniz tanımladığınız şeylerin temel dili olan şeyleri ifade ettiğini varsayarım. hepsini birbirine bağlamak için kullanılan yapılar ve referanslar.


1
Bu, dilde yerel destek değildir; kütüphanedeki yerel destek.
SLaks

Hangi noktaya katılmıyorsunuz? Ya beni yanlış okuyorsun ya da bazı temel kavramları anlamıyorum ama bu biraz belirsiz.
Erik Reppen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.